англійськафранцузькаіспанська

Ad


Значок OnWorks

mips64-linux-gnuabi64-gcc - Інтернет у хмарі

Запустіть mips64-linux-gnuabi64-gcc у постачальнику безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда mips64-linux-gnuabi64-gcc, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

ПРОГРАМА:

ІМ'Я


gcc - компілятор проекту GNU C і C++

СИНТАКСИС


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

Тут наведено лише найбільш корисні параметри; решту дивіться нижче. г ++ приймає
переважно такі ж варіанти, як ПКУ.

ОПИС


Коли ви викликаєте GCC, він зазвичай виконує попередню обробку, компіляцію, збирання та компонування.
«Загальні параметри» дозволяють зупинити цей процес на проміжній стадії. Для
Наприклад, -c опція каже не запускати компонувальник. Тоді вихід складається з object
файли, виведені асемблером.

Інші варіанти передаються на один етап обробки. Деякі параметри контролюють
препроцесор та інші сам компілятор. Ще інші параметри керують асемблером і
лінкер; більшість із них тут не задокументовано, оскільки вам рідко потрібно використовувати будь-який з них.

Більшість параметрів командного рядка, які можна використовувати з GCC, корисні для програм на C; коли
параметр корисний лише з іншою мовою (зазвичай C++), так сказано в поясненні
явно. Якщо в описі певного варіанта не згадується джерело
мову, ви можете використовувати цю опцію з усіма підтримуваними мовами.

Команда ПКУ програма приймає параметри та імена файлів як операнди. Багато варіантів мають багато-
літерні назви; тому можливі кілька варіантів з однієї літери НЕ бути згрупованим: -дв дуже
відрізняється від -d -v.

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

Багато варіантів мають довгі назви, які починаються з -f або -W---наприклад,
-fmove-loop-інваріанти, - W формат і так далі. Більшість із них мають як позитивні, так і негативні
форми; негативна форма -ффу is -fno-foo. У цьому посібнику описано лише одне з них
дві форми, яка не є за замовчуванням.

ВАРІАНТИ


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

Загальний Опції
-c -S -E -o файл -без канонічних префіксів -трубка -пропускні коди виходу -x мова -v
-### --допомога[=клас[, ...]] -- target-help -- версія -обгортка @файл -fplugin=файл
-fplugin-arg-ім'я=аргумент -fdump-ada-spec[-струнка] -fada-spec-parent=блок
-fdump-go-spec=файл

C Language Опції
-ансі -std =standard -fgnu89-inline -допоміжна інформація ім'я файлу
-безпараметрічні-змінні-функції -fno-asm -fno-вбудований -fno-вбудований-функція
-fhosted -автономний -фопенакк -fopenmp -fopenmp-simd -fms-розширення
-fplan9-розширення -триграфи - традиційний -традиційний-cpp -паровий одинарної точності
-fcond-невідповідність -льон-вектор-перетворення -fsigned-bitfields -fsigned-char
-бітові поля funsigned -funsigned-char

C + + Language Опції
-fabi-версія=n -fno-контроль доступу -fcheck-новий -fconstexpr-depth=n
-френд-ін'єкція -fno-elide-конструктори -fno-enforce-eh-specs -for-scope
-fno-for-scope -fno-gnu-ключові слова -fno-імпліцитні-шаблони
-fno-implicit-inline-templates -fno-implement-inlines -fms-розширення
-fno-nonansi-builtins -fnothrow-opt -fno-операторів-імена -fno-optional-diags
-дозвільна -fno-pretty-templates -фрепо -fno-rtti -fsized-deallocation -fstats
-ftemplate-backtrace-limit=n -ftemplate-depth=n -fno-threadsafe-statics
-запобіжник-cxa-atexit -fno-слабий -nostdinc++ -fvisibility-inlines-hidden
-fvtable-verify=[std|преініт|ніхто] -fvtv-розраховує -fvtv-debug -fvisibility-ms-compat
-fext-числові-літерали -Вабі=n -Вабі-тег -Wconversion-null -Wctor-dtor-privacy
-Wdelete-non-virtual-dtor -Wliteral-суфікс -Звуження - Ні, крім -Wnon-virtual-dtor
- Замовлення -Weffc++ -Wstrict-null-sentinel -Wno-non-template-friend -Лиття в стилі «Wold».
-Перевантажений-віртуальний -Wno-pmf-перетворення -Wsign-промо

Мета-С та Objective-C ++ Language Опції
-fconstant-string-class=ім'я класу -fgnu-час виконання -fnext-виконання -fno-nil-приймачі
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-пряма-відправка -fobjc-виключення
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-local-ivars
-fivar-visibility=[громадськість|захищений|приватний|пакет] -freplace-objc-класи
-fzero-посилання -gen-decl -Wassign-перехоплення -Протокол Wno -Селектор
-Підборник-матч -Wunddeclared-селектор

Language Незалежний Опції
-fmessage-length=n -fdiagnostics-show-location=[один раз|кожен рядок]
-fdiagnostics-color=[автоматичний|ніколи|завжди] -fno-diagnostics-show-option
-fno-diagnostics-show-caret

попередження Опції
-fsyntax-only -fmax-errors=n -Педантичний -педантичні помилки -w -Векстра -Стінка
-Водреса -Waggregate-повернення - Оптимізація Waggressive-loop -Межі війни
-Warray-bounds=n -Wbool-порівняти -Wno-атрибути -Wno-вбудований-макро-перевизначення
-Wc90-c99-сумісний -Wc99-c11-сумісний -Wc++-сумісний -Wc++11-compat -Wc++14-compat
-Wcast-align -Wcast-як -Wchar-індекси -Взабитий -Коментар
-Wумовно-підтримувані -Wперетворення -Wcoverage-невідповідність -Дата-час
-Wdelete-незавершене -Wno-cpp -Wno-застарілий -Wno-deprecated-declarations
-Wno-designated-init -Wdisabled-optimization -Wno-відкинуті-кваліфікатори
-Кваліфікатори Wno-відкинутих-масивів -Wno-div-by-zero -Двійне просування - Пусте тіло
-Венум-порівняй -Wno-endif-мітки - Помилка -Помилка=* -Wфатальні помилки -Wfloat-рівний
- W формат -Wформат=2 -Wno-format-contains-nul -Wno-format-extra-args
-Wformat-нелітеральний -Wformat-безпека -Wformat-signness -Wformat-y2k
-Wframe-більший-ніж=довжина -Wno-free-nonheap-object -Wjump-misses-init
-Проігноровані-кваліфікатори -Wincompatible-pointer-types - Прихований
-Оголошення функції Wimplicit -Невідомий-інт -Winit-self - Winline
-Wno-int-перетворення -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch
-Більше ніж=довжина -Wunsafe-loop-optimizations -Wlogical-op -Логічні-не-дужки
-Довго-довго -Wmain -Wmoybe-неініціалізований -Wmemset-transposed-args -Брекети
-Wmissing-field-ініціалізатори -Wmissing-include-dirs -Wno-мультисимвольний -Ненульовий
-Ненормалізовано=[ніхто|id|nfc|nfkc]
-Водр -Без переповнення -Wopenmp-simd - Струни неперевершеної довжини -Упаковано
-Wpacked-bitfield-compat -Wpadded -Дужки -Wpedantic-ms-формат
-Wno-pedantic-ms-format -Wpointer-ариф -Wno-pointer-to-int-cast -Недостатньо-деклс
-Wno-return-local-addr -Повернення -Wsequence-point - Тінь -Вно-тінь-івар
-Wshift-count-негативне -Wshift-count-overflow -Wsign-порівняти -Wsign-перетворення
-Wfloat-перетворення -Wsizeof-pointer-memaccess -Wsizeof-array-argument
-Wstack-протектор -Wstack-usage=довжина -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-переповнення -Wstrict-overflow=n -Wsuggest-attribute=[чистий|сопзЬ|noreturn|формат]
-Wзапропонуйте остаточні типи -Запропонуйте остаточні методи -Wпропонувати-замінити
-Wmissing-format-attribute -Вимикач -Wswitch-за замовчуванням -Wwwitch-enum -Wswitch-bool
-Wsync-nand -Wsystem-headers - Батути -Втриграфи -межі типів -Вундеф
-Wuninitialized -Wunknown-pragmas -Вно-прагми -Wunsuffixed-float-константи
-Невикористаний -Wunused-функція -Wunused-мітка -Wunused-local-typedefs -Wunused-параметр
-Wno-unused-result -Wunused-value -Wunused-змінна -Wunused- but-set-parameter
-Wunused-але-встановлена ​​змінна -Безвісний кидок -Wvariadic-макроси
-Wvector-operation-performance -Ввла -Wvolatile-register-var - Write-strings
-Wzero-as-null-pointer-constant

C та Об’єктивно-C-лише попередження Опції
-Wbad-function-cast -Wmissing-декларації -Wmissing-parameter-type
-Wmissing-прототипи -Wnested-екстерни -Декларація по-світу -Визначення світового стилю
-Wstrict-прототипи -Традиційний -Wtraditional-перетворення
-Wdeclaration-after-statement -Wpointer-знак

Налагодження Опції
-dлітери - dumpspecs - смітник - dumpversion -fsanitize=стиль -fsanitize-відновити
-fsanitize-recover=стиль -fasan-shadow-offset=номер
-fsanitize-undefined-trap-on-error -fcheck-pointer-bounds -fchkp-check-incomplete-type
-fchkp-перше-поле-має-власні-межі -fchkp-вузькі межі
-fchkp-від вузького до самого внутрішнього масиву -fchkp-оптимізувати -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-functions -fchkp-використання статичних меж
-fchkp-use-static-const-bounds -fchkp-treat-zero-dynamic-size-as-infinite
-fchkp-check-read -fchkp-check-read -fchkp-перевірка-запис -fchkp-store-bounds
-fchkp-instrument-calls -fchkp-instrument-marked-only -fchkp-використання обгорток
-fdbg-cnt-список -fdbg-cnt=список зустрічних значень -fdisable-ipa-pass_name
-fdisable-rtl-pass_name -fdisable-rtl-пропускне ім'я=діапазон-список -fdisable-tree-pass_name
-fdisable-tree-пропускне ім'я=діапазон-список -fdump-noaddr -fdump-ненумерований
-fdump-ненумеровані-посилання -fdump-блок перекладу[-n] -fdump-ієрархія класів[-n]
-fdump-ipa-все -fdump-ipa-cgraph -fdump-ipa-inline -fdump-pass -fdump-статистика
-fdump-дерево-все -fdump-дерево-оригінал[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg
-fdump-дерево-псевдонім -fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n]
-fdump-tree-ccp[-n] -fdump-tree-dce[-n] -fdump-tree-gimple[-сирий] -fdump-tree-dom[-n]
-fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-fre[-n]
-fdump-tree-vtable-verify -fdump-tree-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns=файл -fcompare-debug[=вибирає] -fcompare-debug-second
-feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
-feliminate-unused-debug-symbols -femit-class-debug-always -придатний-вид-проходити
-придатний-вид-проходити=діапазон-список -fdebug-types-section -fmem-звіт-wpa -fmem-звіт
-fpre-ipa-mem-звіт -fpost-ipa-mem-report -fprofile-arcs -fopt-info
-fopt-info-опції[=файл] -frandom-seed=номер -fsched-verbose=n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-usage -ftest-покриття
-ftime-звіт -fvar-відстеження -fvar-tracking-assignments
-fvar-tracking-assignments-toggle -g -gрівень -gtoggle -gcoff -гном-версія -ggdb
-grecord-gcc-перемикачі -gno-record-gcc-перемикачі -gstabs -gstabs+ -гстрик-карлик
-гно-строгий-карлик -gvms -gxcoff -gxcoff+ -gz[=тип] -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map=старий=new -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detailed[=спец-список] -p -стор
-print-file-name=бібліотека -print-libgcc-ім'я файлу -print-multi-каталог
-print-multi-lib -print-multi-os-каталог -print-prog-name=програма
-print-search-dirs -Q -print-sysroot -print-sysroot-headers-suffix -зберігати темп
-save-temps=cwd -save-temps=obj -час[=файл]

Оптимізація Опції
-faggressive-loop-optimizations -falign-functions[=n] -falign-jumps[=n]
-falign-labels[=n] -falign-loops[=n] -фасоціативно-мат -fauto-профіль
-fauto-profile[=шлях] -fauto-inc-dec -fгілля-ймовірності
-fbranch-target-load-optimize -fbranch-target-load-optimize2 -fbtr-bb-ексклюзивний
-fcaller-зберігає -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
-fcompare-elim -fcprop-реєстри -фкросстрибки -fcse-folow-jumps -fcse-skip-blocks
-fcx-fortran-правила -fcx-обмежений-діапазон -fdata-розділи -fdce -fзатримка-гілка
-fdelete-null-pointer-checks -fдевіртуалізувати -fdevirtualize-спекулятивно
-fdevirtualize-at-ltrans -fdse -страшно-вставляючи -фіпа-шра -дорогі оптимізації
-ffat-lto-об'єкти -швидка математика -фінітна-математична -флоат-магазин
-fexcess-precision=стиль -поширювати вперед -ffp-контракт=стиль -ffunction-секції
-fgcse -fgcse-після перезавантаження -fgcse-las -fgcse-lm -fgraphite-ідентичність -fgcse-sm
-fhoist-суміжні-вантажі -fif-перетворення -fif-перетворення2 -findirect-inlining
-finline-функції -finline-функції-викликані-один раз -finline-limit=n
-finline-small-functions -fipa-cp -fipa-cp-клон -fipa-cp-вирівнювання -фіпа-пта
-фіпа-профіль -fipa-чистий-конст -фіпа-довідка -fipa-icf -fira-algorithm=алгоритм
-фіра-регіон=регіон -fira-таль-напір -фіра-петля-тиск -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose=n -fisolate-erroeous-paths-dereference
-fisolate-помилкові-шляхи-атрибут -півопти -fkeep-inline-functions
-fkeep-static-conts -five-range-shrinkage -флоп-блок -шлюз-розв'язка
-floop-strip-mine -floop-unroll-and-jam -floop-nest-optimize -floop-parallize-all
-flra-remat -flto -flto-рівень стиснення -flto-розділ=ALG -flto-звіт
-flto-report-wpa -fmerge-all-constants -fmerge-константи -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-інваріанти -fno-branch-count-reg
-fno-defer-pop -fno-функція-cse -fno-guess-гілки-ймовірність -fno-вбудований
-fno-math-errno -fno-глазок -fno-глазок2 -fno-sched-interblock -fno-sched-spec
-fno-signed-zerers -fno-toplevel-reorder -fno-trapping-math
-fno-zero-initialized-in-bss -fomit-кадр-покажчик -foptimize-sibling-calls
-fчасткове вбудовування -fpeel-loops -fpredictive-commoning -fprefetch-loop-масиви
-fprofile-звіт -fprofile-correction -fprofile-dir=шлях -fprofile-generate
-fprofile-generate=шлях -fprofile-використання -fprofile-use=шлях -fprofile-values
-fprofile-reorder-functions -частотно-мат -вільно -реєстри імен
-freorder-блоки -freorder-blocks-and-partition -freorder-функції
-frerun-cse-після-циклу -freschedule-modulo-scheduled-loops -округлення-мат
-fsched2-використання суперблоків -fsched-тиск -fsched-spec-load
-fsched-spec-load-dangerous -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n]
-fsched-group-euristic -fsched-critical-path-euristic -fsched-spec-insn-евристичний
-fsched-rank-euristic -fsched-last-insn-евристичний -fsched-dep-count-euristic
-fschedule-fusion -fschedule-insns -fschedule-insns2 -fsection-анкери
-вибіркове планування -fselective-scheduling2 -fsel-sched-pipelining
-fsel-sched-pipelining-outer-loops -fsemantic-interposition -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -fssa-phiopt -fstack-протектор -fstack-protector-all
-fstack-protector-strong -fstack-protector-explicit -fstdarg-opt -fstrict-aliasing
-fstrict-переповнення -fthread-стрибки -ftracer -ftree-bit-ccp -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
-безкоштовно-безкоштовно -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -ftree-loop-розподіл -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-loop-vectorize
-ftree-parallelize-loops=n -Free-pre -ftree-partial-pre -ftree-pta -ftree-reassoc
-Free-раковина -ftree-slsr -ftree-sra -перетворення з трьома перемикачами -ftree-tail-merge
-ftree-ter -ftree-векторизувати -ftree-vrp - за раз -закрутити всі петлі
-закрутки-петлі -funsafe-loop-optimizations -funsafe-math-optimizations
-перемикачі-петлі -фіпа-ра -fvariable-expansion-in-unroller -fvect-кошт-модель -fvpt
-fweb -f ціла програма -fwpa -плагін-запобіжник --парам ім'я=значення -O -О0 -О1 -О2
-О3 -Ос -Швидко -Ог

Препроцесор Опції
-Aпитання=відповідь -А-питання[=відповідь] -C -dD -dI -дМ -dN -Dмакрос[=деф] -E -H
-ідірафтер реж -включати файл -макроси файл -іпрефікс файл -iз префіксом реж
-iз префіксомперед реж -ісистема реж -мультиліб реж -isysroot реж -M -ММ -MF -МГ
- депутат -MQ -MT -ностдинк -P -fdebug-cpp -ftrack-макророзширення -fworking-каталог
- переназначити -триграфи -undef -Uмакрос -Wp,варіант -Xпрепроцесор варіант -no-integrated-cpp

Асемблер варіант
- Ва,варіант -Xassembler варіант

Linker Опції
ім'я файлу-об'єкта -fuse-ld=Компонувальник -lбібліотека -nostartfiles -нові за замовчуванням -nostdlib
- пиріг -rдинамічний -s -статичний -static-libgcc -static-libstdc++ -статичний-лібазан
-статичний-лібцан -static-liblsan -статичний-лібубсан -static-libmpx -static-libmpxwrappers
- поділилися -shared-libgcc - символічний -T сценарій -Wl,варіант -Xlinker варіант -u символ -z
ключове слово

каталог Опції
-Bпрефікс -Iреж -iplugindir=реж - цитатареж -Lреж -специфікації=файл -Я- --sysroot=реж
--no-sysroot-суфікс

машина Залежний Опції
AAArch64 Опції -mabi=ім'я -big-endian -mlittle-endian -mgeneral-regs-only
-mcmodel = крихітний -mcmodel=мала -mcmodel=великий -mstrict-align -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mtls-dialect=дес -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-short-insn-regs -mbranch-cost=Num
-mcmove -mnops=Num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-змінити
-mstack-offset=Num -mround-найближчий -mlong-дзвінки -mкороткі дзвінки -msmall16 -mfp-mode=режим
-mvect-подвійний -max-vect-align=Num -msplit-vecmove-early -m1reg-Реджо

ARC Опції -ствол-перемикач -mcpu=центральний процесор -мА6 -mARC600 -мА7 -mARC700 -mdpfp
-mdpfp-компактний -mdpfp-швидкий -mno-dpfp-lrsr -мея -мно-мпи - mmul32x16 -mmul64 -мнорм
-mspfp -mspfp-compact -mspfp-швидкий -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswape -мтелефонія -mxy - неправильний розмір -mannotate-align
- marclinux -marclinux_prof -мепілог-cfi -mlong-дзвінки -mmedium-дзвінки -msdata
-mucb-mcount -mvolatile-cache -злоякісний виклик -mauto-modify-reg -mbbit-глазок -mno-brcc
-mcase-вектор-pcrel -mcompact-casesi -mno-cond-exec - борошнистий-cbranchsi -mexpand-adddi
-індексовані навантаження -млра -mlra-пріоритет-немає -mlra-priority-compact млра-пріоритет-
некомпактний -mno-мілікод -mmixed-code -mq-клас -mRcq -mRcw -msize-level=рівень
-mtune=центральний процесор -mmultcost=Num -munalign-prob-threshold=ймовірність

ARM Опції -mapcs-фрейм -mno-apcs-frame -mabi=ім'я -mapcs-stack-check
-mno-apcs-перевірка стеку -mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-пролог -mno-sched-prolog -mlittle-endian -big-endian
-mfloat-abi=ім'я -mfp16-format=ім'я -mthumb-interwork -mno-thumb-interwork -mcpu=ім'я
-березень=ім'я -mfpu=ім'я -mtune=ім'я -mprint-tune-info -mstructure-size-boundary=n
-mabort-on-noreturn -mlong-дзвінки -mno-long-cales -msingle-pic-base
-mno-single-pic-base -mpic-register=Реджо -mnop-fun-dllimport -mpoke-назва-функції
-mthumb -марм -mtpcs-фрейм -mtpcs-leaf-frame -mcaller-super-interworking
-mcallee-супер-взаємодія -mtp=ім'я -mtls-dialect=діалект -mword-переміщення
-mfix-cortex-m3-ldrd -муніципальний доступ -mneon-for-64bits -mslow-flash-data
-masm-syntax-unified -mrestrict-it

AVR Опції -mmcu=mcu -accumulate-args -mbranch-cost=коштувати -mcall-прологи -м'ята8
-mn_flash=розмір -mno-переривання - розслабитися -mrmw -mstrict-X -mtiny-стек -nodevicelib
-Waddr-space-convert

Чорношкірий Опції -mcpu=центральний процесор[-огляд] -msim -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mspecld-аномалія -mno-specld-аномалія -mcsync-аномалія
-mno-csync-аномалія -mlow-64k -mno-low64k -mstack-check-l1 - середня спільна бібліотека
-mno-id-shared-library -mshared-library-id=n -mleaf-id-shared-library
-mno-leaf-id-shared-library -msep-дані -mno-sep-data -mlong-дзвінки -mno-long-cales
-mfast-fp -minline-plt - багатоядерний -mcorea -mcoreb -msdram -micplb

C6X Опції -big-endian -mlittle-endian -березень=центральний процесор -msim -msdata=sda-type

КРІС Опції -mcpu=центральний процесор -березень=центральний процесор -mtune=центральний процесор -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -мно-побічні ефекти
-mstack-align -mdata-align -mconst-align -m32-біт -m16-біт -m8-біт
-мно-пролог-епілог -mno-gotplt -melf -маут -мелінукс -mlinux -сим -sim2
-mmul-bug-обхідний шлях -mno-mul-bug-обхідний шлях

CR16 Опції -ммак -mcr16cplus -mcr16c -msim -м'ята32 -mbit-ops -mdata-model=модель

Дарвін Опції -всі_завантаження -дозволений_клієнт -арх -arch_errors_fatal -лише_арх
-bind_at_load - пучок -bundle_loader -ім'я_клієнта -сумісність_версія
-Поточна версія -мертва_смуга -файл залежностей -dylib_файл -dylinker_install_name
-динамічний -динамічна бібліотека -список_експортованих_символів - список файлів -flat_простір імен
-force_cpusubtype_ALL -force_flat_простір імен -headerpad_max_install_names -iframework
-база_зображення -у цьому -ім'я_інсталяції -keep_private_externs -багатомодульний
-множення_визначено -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -нопребінд
-noseglinkedit -pagezero_size -передв'язка -prebind_all_twolevel_modules -private_bundle
-relocs_лише_читання -сектальний -сектооб'єкти символи - навіщо навантажувати -seg1addr -сектотворити
-сектооб'єкти символи -секторний -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_name_file -seglinkedit -сегпрот -segs_read_only_addr
-segs_read_write_addr -одномодульний -статичний -під_бібліотека -суб_парасолька
-дворівневий простір імен -парасолька -невизначений -список_неекспортованих_символів
-weak_reference_misparches -що завантажено -F – здогадався -gfull -mmacosx-версія-мін=версія
-mkernel -mone-byte-bool

Грудень Альфа Опції -mno-fp-regs -msoft-float -миее -міее-з-неточним
-mieee-відповідний -mfp-trap-mode=режим -mfp-rounding-mode=режим -mtrap-precision=режим
-mbuild-константи -mcpu=тип процесора -mtune=тип процесора -mbwx -ммакс -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data -mlarge-data -msmall-text
-великий текст -memory-latency=час

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

LIF Опції -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -мно-слово -mподвійний -мно-подвійний -ммедіа -мно-медіа
-ммуладд -мно-муладд -mfdpic -minline-plt -mgprel-ro -multilib-library-pic
-mlinked-fp -mlong-дзвінки - злоякісні мітки -mlibrary-pic -macc-4 -macc-8 -mpack
-мно-пакет -мно-прапори -mcond-хід -mno-cond-ход -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-філія
-mno-vliw-філія -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-статистика -mTLS -mtls -mcpu=центральний процесор

GNU / Linux Опції -mglibc -muclibc -мбіонічний -мандоїд -tno-android-cc -tno-android-ld

H8 / 300 Опції - розслабитися -мх -РС -мн -mexr -mno-exr -м'ята32 -злоякісний-300

HPPA Опції -березень=архітектурного типу -mdisable-fpregs -mdisable-indexing
-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld -mfixed-range=реєстр-діапазон
-mjump-in-delay -mlinker-opt -mlong-дзвінки -mlong-load-store -mno-disable-fpregs
-mno-disable-indexing -mno-швидкі-непрямі-дзвінки -мно-газ -мно-затримка
-mno-long-load-store -mno-portable-runtime -mno-soft-float -mno-space-regs
-msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime
-mschedule=тип процесора -mspace-regs -msio -mwsio -munix=unix-std -nolibdld -статичний
-нитки

IA-64 Опції -big-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-Name -msdata -mno-sdata -mconstant-gp -mauto-pic
-змішаний-божевільний -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latency
-minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm - борошнисті стоп-біти
-mfixed-range=реєстр-діапазон -mtls-size=tls-розмір -mtune=тип процесора -milp32 -mlp64
-msched-br-спец.даних -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-after-every-cycle
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memory-insns=max-insns

LM32 Опції -barrel-shift-enabled -mdivid-увімкнено -mmultiply-увімкнено
-msign-extend-enabled -з підтримкою muser

M32R/D Опції -m32r2 -m32rx -m32r -mdebug -злоякісні петлі -mno-align-loops
-missue-rate=номер -mbranch-cost=номер -mmodel=код-розмір-тип-модель -msdata=sdata-
тип -mno-flush-func -mflush-func=ім'я -mno-flush-trap -mflush-trap=номер -G Num

M32C Опції -mcpu=центральний процесор -msim -memregs=номер

M680x0 Опції -березень=арка -mcpu=центральний процесор -mtune=мелодія -м68000 -м68020 -m68020-40
-m68020-60 -м68030 -м68040 -м68060 -mcpu32 -м5200 -m5206e -m528x -м5307 -м5407
-mcfv4e -мбітфілд -mno-бітове поле -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -мно-див -mкороткий -мно-короткі -mhard-float -м68881 -msoft-float -mpcrel
-malign-int -mstrict-align -msep-дані -mno-sep-data -mshared-library-id=n
- середня спільна бібліотека -mno-id-shared-library -mxgot -mno-xgot

MCore Опції -mhardlit -мно-жорсткий -mdiv -мно-див -mrelax-миттєво
-mno-relax-миттєво -mwide-bitfields -mno-wide-bitfields -m4byte-функції
-mno-4byte-функції -mcallgraph-дані -mno-callgraph-data -mslow-байтів
-mno-slow-bytes -мно-лсім -mlittle-endian -big-endian -м210 -м340
-mstack-increment

MeP Опції -mabsdiff -mall-opts - середній -based=n -бітопс -mc=n -mclip
-mconfig=ім'я -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -меб -мел -міо-леткі -мл
-млеадз -мм -ммінмакс -Мульт -mno-opts - повторити -РС -мсатур -msdram -msim -мсімновець
-mtf -mtiny=n

MicroBlaze Опції -msoft-float -mhard-float -msmall-ділить -mcpu=центральний процесор -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-шаблон-порівняти -mxl-перевірка стеку
-mxl-gp-opt -mno-clearbss -mxl-множення-високий -mxl-float-convert -mxl-float-sqrt
-big-endian -mlittle-endian -mxl-змінити порядок -mxl-mode-додаток-модель

MIPS Опції -ТО -EB -березень=арка -mtune=арка -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-стиснутий
-mno-interlink-compressed -minterlink-mips16 -mno-interlink-mips16 -mabi=ABI
-mabicalls -мно-абікали -mshared -мно-спільний -mplt -мно-плт -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-float
-msingle-float -mdouble-float -modd-spreg -мно-непарний-спрег -mabs=режим -mnan=кодування
-mdsp -мно-дсп -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -мева -мно-ева -mvirt -мно-вірт
-mxpa -mno-xpa -mmicromips -mno-micromips -mfpu=типу fpu -msmartmips -mno-smartmips
-неповноцінний-неодружений -мнопарно-одинарні -mdmx -mno-mdmx -mips3d -mno-mips3d - ммт
-мно-мт -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -GNum
-mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -мно-гопт
-вбудовані дані -mno-вбудованих-даних -muninit-const-in-rodata
-mno-uninit-const-in-rodata -mcode-readable=установка -msplit-адреси
-mno-split-адреси -mexplicit-relocs -mno-explicit-relocs -mcheck-zero-division
-мно-перевірка-нуль-ділення -mрозділяти-пастки -mdivide-breaks -mmemcpy -mno-memcpy
-mlong-дзвінки -mno-long-cales -ммад -мно-божевільний - mimadd -mno-imadd -змішаний-божевільний
-мно-злитий-мадд -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=функц -mno-flush-func -mbranch-cost=Num - імовірно, що гілка
-мно-гілка-ймовірно -mfp-виключення -mno-fp-винятки -mvr4130-вирівняти -mno-vr4130-вирівняти
-msynci -мно-син -mrelax-pic-дзвінки -mno-relax-pic-дзвінки -mmcount-ra-адреса

MMIX Опції -mlibfuncs -mno-libfuncs -мепсилон -мно-епсилон -mabi=gnu
-mabi=mmixware -mzero-розширити -mknuthdiv -mtolevel-symbols -melf -mbranch-передбачити
-мно-гілка-передбачити -бази-адреси -mno-base-адреси -msingle-exit
-мно-одновихідні

MN10300 Опції -mmult-помилка -mno-mult-bug -mno-am33 -мама33 -мам33-2 -мама34 -mtune=ЦП-
тип -mreturn-pointer-on-d0 -mno-crt0 - розслабитися -mliw -msetlb

Moxie Опції -меб -мел -mmul.x -mno-crt0

MSP430 Опції -msim -masm-hex -mmcu= -mcpu= -великий -msmall - розслабитися -mhwmult= - minrt

NDS32 Опції -big-endian -mlittle-endian -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16 біт -mno-16bit -misr-vector-size=Num
-mcache-block-size=Num -березень=арка -mcmodel=код-модель -mctor-dtor - розслабитися

Ніос II Опції -G Num -mgpopt=варіант -mgpopt -mno-gpopt -мел -меб -mno-bypass-cache
-mbypass-кеш -mno-cache-volatile -mcache-volatile -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -mcustom-insn=N
-mno-custom-insn -mcustom-fpu-cfg=ім'я -mhal -msmallc -msys-crt0=ім'я -msys-lib=ім'я

Nvidia PTX Опції -м32 -м64 -mmainkernel

ПДП-11 Опції -mfpu -msoft-float -mac0 -mno-ac0 -м40 -м45 -м10 -mbcopy
-mbcopy-builtin -м'ята32 -mno-int16 -м'ята16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -мабші -мно-абши -мфілія-дорого -mbranch-дешево
-munix-asm -mdec-asm

пікочіп Опції -mae=ae_type -mvliw-lookahead=N -msymbol-as-address
-мно-неефективні-попередження

PowerPC Опції Див. Параметри RS/6000 і PowerPC.

RL78 Опції -msim -mmul=немає -mmul=g13 -mmul=rl78 -m64bit-подвійники -m32bit-подвійники

RS / 6000 та PowerPC Опції -mcpu=тип процесора -mtune=тип процесора -mcmodel=код-модель
-mpowerpc64 -мальтівець -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-hard-dfp -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc
-м64 -м32 -mxl-compat -mno-xl-compat -mpe - злоякісна сила -злоякісний-природний
-msoft-float -mhard-float - множинні -мно-множинний -msingle-float -mdouble-float
-msimple-fpu -mstring -мно-рядок -оновити -mno-оновлення -mavoid-indexed-addresses
-mno-уникати-індексованих-адрес -змішаний-божевільний -мно-злитий-мадд -mbit-align
-mno-bit-align -mstrict-align -mno-strict-align -mrelocable -мнопереміщаються
-mrelocatable-lib -mno-relocable-lib -mtoc -мно-ток -маленький -mlittle-endian
-великий -big-endian -mdynamic-no-pic -мальтівець -mswdiv -msingle-pic-base
-mpriritize-restricted-insns=пріоритет -msched-costly-dep=тип_залежності
-minsert-sched-nops=схема -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi=abi-тип -msecure-plt -mbss-plt
-mblock-move-inline-limit=Num -мисель -мно-ісел -misel=так -misel=ні -mspe -мно-спе
-mspe=так -mspe=ні - утруднений -mgen-cell-microcode -mwarn-cell-microcode -mvrsave
-мно-врсаве -mmulhw -mno-mulhw -mdlmzb -мно-длмзб -mfloat-gprs=так -mfloat-gprs=ні
-mfloat-gprs=один -mfloat-gprs=подвійний -мпрототип -мно-прототип -msim -mmvme
- шалено - жовтий ніж -член -msdata -msdata=вибирати -mvxworks -G Num -нитка -mrecip
-mrecip=вибирати -мно-рецепт -mrecip-точність -мно-рецепт-точність -mveclibabi=тип -мфриз
-мно-фриз -mpointers-to-nested-functions -mno-вказівники-вкладені-функції
-msave-toc-indirect -mno-save-toc-indirect -mpower8-fusion -mno-mpower8-fusion
-mpower8-вектор -mno-power8-вектор -mcrypto -мно-крипто -mпрямий-хід -мно-прямий-хід
-mquad-пам'ять -mno-quad-пам'ять -mquad-memory-atomic -mno-quad-memory-atomic
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf - mupper-regs -mno-upper-regs

RX Опції -m64bit-подвійники -m32bit-подвійники -fpu -nofpu -mcpu= -big-endian-data
-mlittle-endian-data -msmall-data -msim -мно-сім -mas100-синтаксис -mno-as100-синтаксис
- розслабитися -mmax-constant-size= -mint-register= -мпід -mno-warn-multiple-fast-interrupts
-msave-acc-in-interrupts

S / 390 та zSeries Опції -mtune=тип процесора -березень=тип процесора -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -млонг-подвійний-64 -млонг-подвійний-128 -mbackchain
-мно-бекчейн -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -м64 -м31 -mdebug -mno-налагодження -меса -мзарх -mtpf-trace
-mno-tpf-trace -змішаний-божевільний -мно-злитий-мадд -mwarn-розмір кадру -mwarn-динамічний стек
-mstack-size -mstack-guard -mhotpatch=напівслова,напівслова

Рахунок Опції -меб -мел -mnhwloop -мулс -ммак -mscore5 -mscore5u -mscore7 -mscore7d

SH Опції -м1 -м2 -m2e -m2a-nofpu -m2a-лише одиночний -m2a-один -m2a -м3 -m3e
-m4-nofpu -m4-лише одиночний -m4-один -м4 -m4a-nofpu -m4a-лише одиночний -m4a-один
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-компактний
-m5-compact-nofpu -мб -мл -mdalign - розслабитися - велика таблиця -mfmovd -мхітачі -мренеси
-мно-ренеси -mnomacsave -миее -мно-іее -бітопс - неправильний розмір -minline-ic_invalidate
-mpadstruct -mspace -мпрефергот - режим користувача -multcost=номер -mdiv=стратегія
-mdivsi3_libfunc=ім'я -mfixed-range=реєстр-діапазон -індексована адресація
-mgettrcost=номер -mpt-виправлено -accumulate-outgoing-args -minvalid-символи
-matomic-model=атомна модель -mbranch-cost=Num -mzdcгілка -mno-zdcgranch
-mcbranch-force-dey-slot -змішаний-божевільний -мно-злитий-мадд -mfsca -mno-fsca -мфсрра
-мно-фсрра -mpend-cmove -mtas

Solaris 2 Опції -mclear-hwcap -mno-clear-hwcap -нечистий текст -мно-нечистий-текст
-pthreads -нитка

SPARC Опції -mcpu=тип процесора -mtune=тип процесора -mcmodel=код-модель -модель пам'яті=мем-
модель -м32 -м64 -mapp-regs -mno-app-regs -mfaster-structs -mno-faster-structs
-mflat -мно-плоска -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stack-bias -мунілінізовані-двійники
-mno-невирівняні-подвійники - режим користувача -mno-режим користувача -mv8plus -mno-v8plus -mvis
-мно-віс -mvis2 -мно-вис2 -mvis3 -мно-вис3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -мно-попк -mfix-at697f -mfix-ut699

СПУ Опції -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma -mbranch-підказки
-msmall-mem -mlarge-mem -mstdmain -mfixed-range=реєстр-діапазон -mea32 -mea64
-madress-space-conversion -mno-адресний простір-перетворення -mcache-size=розмір кешу
-matomic-оновлення -mno-atomic-updates

SYSTEM V Опції - Qy -Qn -YP,стежки -Там,реж

ПЛИТКА-Gx Опції -mcpu=ЦП -м32 -м64 -big-endian -mlittle-endian -mcmodel=код-модель

TILEPro Опції -mcpu=центральний процесор -м32

V850 Опції -mlong-дзвінки -mno-long-cales -меп -мно-еп -мпролог-функція
-мно-пролог-функція -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-call -mno-disable-call -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -млю - розслабитися - довгі стрибки -msoft-float -mhard-float -mgcc-abi
-mrh850-abi - великий перемикач

VAX Опції -мг -мгну -мунікс

Visium Опції -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=тип процесора
-mtune=тип процесора -msv-режим - режим користувача

VMS Опції -mvms-коди повернення -mdebug-main=префікс -mmalloc64 -mpointer-size=розмір

VxWorks Опції -mrtp -нестатичні -Бстатичний -Бдинамічний -Xbind-ледачий -Xbind-зараз

x86 Опції -mtune=тип процесора -березень=тип процесора -mtune-ctrl=список функцій
-mdump-tune-features -mno-за замовчуванням -mfpmath=блок -masm=діалект -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -mno-широко-розмножувати -mrtd -злоякісний-подвійний
-mpreferred-stack-boundary=Num -mincoming-stack-boundary=Num -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mrecip -mrecip=вибирати -mvzeroupper -mprefer-avx128 -мммх -мссе -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -мша -маес -mpclmul -mfsgsbase -мрдрнд -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -msse4a -m3dnow -mpopcnt -мабм -mbmi -мтбм -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
-mno-align-stringops -minline-all-stringops -minline-stringops-динамічно
-mstringop-strategy=ALG -mmemcpy-стратегія=стратегія -mmemset-strategy=стратегія
-mpush-args -accumulate-outgoing-args -m128bit-long-double -m96bit-long-double
-млонг-подвійний-64 -млонг-подвійний-80 -млонг-подвійний-128 -mregparm=Num -msseregparm
-mveclibabi=тип -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -мно-червона-зона -mno-tls-direct-seg-refs -mcmodel=код-модель
-mabi=ім'я -maddress-mode=режим -м32 -м64 -mx32 -м16 -mlarge-data-threshold=Num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data=тип
-mstack-protector-guard=охорона

x86 Windows Опції -mconsole -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
- municode -mwin32 -mwindows -fno-set-stack-executable

Xstormy16 Опції -msim

Xtensa Опції -mconst16 -mno-const16 -змішаний-божевільний -мно-злитий-мадд -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -mtext-section-literals
-mno-text-section-literals -mtarget-align -mno-target-align -довгі дзвінки
-мно-довгі дзвінки

zSeries Опції Див. Параметри S/390 і zSeries.

код Покоління Опції
-fcall-saved-Реджо -fcall-used-Реджо -фіксований-Реджо -фекційні виключення -fnon-call-exceptions
-fdelete-dead-exceptions -забавні столики -fasynchronous-wind-tables -fno-gnu-унікальний
-finhibit-size-директива -функції інструменту
-instrument-functions-exclude-function-list=sym,sym, ...
-finstrument-functions-exclude-file-list=файл,файл, ... -fno-загальний -fno-ідентифікатор
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tables -frecord-gcc-перемикачі
-freg-struct-return -fshort-перерахування -fshort-подвійний -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-check -fstack-limit-register=Реджо -fstack-limit-symbol =sym
-fno-stack-limit -fsplit-stack -випливає-підкреслення -ftls-модель=модель
-fstack-reuse=reuse_level -ftrapv -fwrapv -fbounds-перевірка
-fvisibility=[дефолт|внутрішній|прихований|захищений] -fstrict-volatile-bitfields
-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 відноситься до буквальної великої букви М.

файл.mii
Вихідний код Objective-C++, який не слід попередньо обробляти.

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

файл. CC
файл.cp
файл.cxx
файл.cpp
файл.CPP
файл.c++
файл.C
Вихідний код C++, який необхідно попередньо обробити. Зверніть увагу, що в .cxx, останні дві літери
обидва повинні бути буквально x. Так само, .C відноситься до буквальної великої С.

файл.mm
файл.M
Вихідний код Objective-C++, який необхідно попередньо обробити.

файл.mii
Вихідний код Objective-C++, який не слід попередньо обробляти.

файл.hh
файл.H
файл.hp
файл.hxx
файл.hpp
файл.ГЕС
файл.h++
файл.tcc
Заголовковий файл C++, який потрібно перетворити на попередньо скомпільований заголовок або специфікацію Ada.

файл.f
файл.для
файл.ftn
Виправлена ​​форма вихідного коду Fortran, який не слід попередньо обробляти.

файл.F
файл.ЗА
файл.fpp
файл.FPP
файл.FTN
Виправлена ​​форма вихідного коду Fortran, який необхідно попередньо обробити (за допомогою традиційного
препроцесор).

файл.f90
файл.f95
файл.f03
файл.f08
Вихідний код Fortran вільної форми, який не слід попередньо обробляти.

файл.F90
файл.F95
файл.F03
файл.F08
Вихідний код Fortran вільної форми, який необхідно попередньо обробити (за допомогою традиційних
препроцесор).

файл.іди
Перейдіть до вихідного коду.

файл.ади
Файл вихідного коду Ada, який містить оголошення бібліотечного блоку (оголошення a
пакет, підпрограма або загальний, або загальний екземпляр), або бібліотечний блок
оголошення перейменування (оголошення перейменування пакета, загальних даних або підпрограм). Такий
файли також називаються дані.

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

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

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

інший
Об’єктний файл, який буде подано безпосередньо у зв’язування. Будь-яке ім’я файлу, яке не розпізнається
суфікс трактується таким чином.

Ви можете вказати мову введення явно за допомогою -x опції:

-x мова
Вкажіть явно мова для наступних вхідних файлів (замість того, щоб дозволити
компілятор вибирає значення за замовчуванням на основі суфікса імені файлу). Цей варіант стосується всіх
наступні вхідні файли до наступних -x варіант. Можливі значення для мова є:

c-заголовок cpp-виведення
c++ c++-заголовок c++-cpp-output
target-c target-c-header target-c-cpp-output
target-c++ target-c++-header target-c++-cpp-output
асемблер асемблер-з-cpp
Ада
f77 f77-cpp-вхід f95 f95-cpp-вхід
go
Ява

-x ніхто
Вимкніть будь-яку специфікацію мови, щоб обробляти наступні файли
відповідно до їх суфіксів назв файлів (як вони якщо -x взагалі не використовувався).

-пропускні коди виходу
Зазвичай ПКУ програма завершує роботу з кодом 1, якщо повертається будь-яка фаза компілятора
код повернення без успіху. Якщо ви вкажете -пропускні коди виходу, ПКУ програма замість цього
повертає з найбільшою чисельною помилкою, створеною будь-якою фазою, яка повертає помилку
індикація. Інтерфейс C, C++ і Fortran повертає 4, якщо внутрішня помилка компілятора
зустрічається.

Якщо вам потрібні лише деякі етапи компіляції, ви можете використовувати -x (або суфікси назв файлів)
розповісти ПКУ з чого почати, і один з варіантів -c, -Sабо -E сказати де ПКУ є
Стоп. Зверніть увагу, що деякі комбінації (наприклад, -x cpp-вихід -E) інструктувати ПКУ робити
нічого взагалі.

-c Компілюйте або зберіть вихідні файли, але не створюйте посилання. Етап з’єднання просто є
не зроблено. Кінцевий вихід у вигляді об’єктного файлу для кожного вихідного файлу.

За замовчуванням ім'я об'єктного файлу для вихідного файлу створюється шляхом заміни суфікса .c,
.i, .s, тощо, с .o.

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

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

За замовчуванням ім'я файлу ассемблера для вихідного файлу створюється шляхом заміни суфікса
.c, .i, тощо, с .s.

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

-E Зупинити після етапу попередньої обробки; не запускайте компілятор належним чином. Вихід входить
форму попередньо обробленого вихідного коду, який відправляється на стандартний вихід.

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

-o файл
Помістіть вихід у файл файл. Це стосується будь-якого виду продукції, що виробляється,
будь то виконуваний файл, об’єктний файл, файл асемблера або попередньо оброблений C
Код.

If -o не вказано, за замовчуванням вставляється виконуваний файл а, об'єкт
файл для джерело.суфікс in джерело.о, його файл асемблера джерело.с, попередньо скомпільований
заголовний файл у джерело.суфікс.gch, і всі попередньо оброблені джерела C на стандартному виводі.

-v Надрукуйте (на виводі стандартної помилки) команди, які виконуються для виконання етапів
компіляція. Також надрукуйте номер версії програми драйвера компілятора та файлу
препроцесор і власне компілятор.

-###
Люблю -v за винятком, що команди не виконуються, а аргументи в лапках, якщо вони
містять лише буквено-цифрові символи або "./-_". Це корисно для сценаріїв оболонки
захопити створені драйвером командні рядки.

-трубка
Використовуйте канали, а не тимчасові файли для зв’язку між різними етапами
компіляція. Це не працює в деяких системах, де асемблер не може читати
з труби; але асемблер GNU не має проблем.

--допомога
Надрукуйте (на стандартному виводі) опис параметрів командного рядка, зрозумілих для
ПКУ, Якщо -v опція також вказується тоді --допомога також передається різним
процеси, викликані ПКУ, щоб вони могли відображати параметри командного рядка
прийняти. Якщо -Векстра також вказана опція (до --допомога варіант),
тоді також параметри командного рядка, які не мають пов’язаної з ними документації
відображається.

-- target-help
Надрукуйте (на стандартному виводі) опис параметрів командного рядка, що стосуються цілі
для кожного інструменту. Для деяких цілей також може бути додаткова інформація про ціль
надруковані.

--help={клас|[^]кваліфікувати}[, ...]
Надрукуйте (на стандартному виводі) опис параметрів командного рядка, зрозумілих для
компілятор, який вписується в усі вказані класи та кваліфікатори. Це такі
підтримувані класи:

оптимізатори
Відобразити всі параметри оптимізації, які підтримує компілятор.

попередження
Відобразити всі параметри керування попереджувальними повідомленнями, створеними компілятором.

мета
Відображення параметрів, що стосуються цілі. На відміну від -- target-help варіант, однак, цільовий-
окремі параметри компонувальника та асемблера не відображаються. Це відбувається тому
ці інструменти наразі не підтримують розширений --допомога= синтаксис

Титули
Відобразити значення, розпізнані --парам варіант.

мова
Відобразити параметри, які підтримуються мова, Де мова це ім'я одного з
мови, які підтримуються в цій версії GCC.

загальний
Відобразити параметри, спільні для всіх мов.

Ось підтримувані кваліфікатори:

недокументований
Відображати лише ті параметри, які не задокументовані.

приєднався
Відображати параметри, які беруть аргумент, який з’являється після знака рівності в цьому самому
безперервний фрагмент тексту, наприклад: --допомога=ціль.

окремий
Параметри відображення, беручи аргумент, який з’являється у вигляді окремого слова після
оригінальний варіант, наприклад: -o вихідний файл.

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

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

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

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

Аргумент --допомога= не повинен складатися лише з перевернутих кваліфікаційних.

Можливе поєднання кількох класів, хоча це зазвичай обмежує вихід
багато чого показати. Однак один випадок, коли це працює, - це коли
один із класів мета. Наприклад, щоб відобразити всі цілі
параметри оптимізації, використовуйте:

--help=ціль, оптимізатори

Команда --допомога= опцію можна повторити в командному рядку. Відображається кожне наступне використання
його запитаний клас опцій, пропускаючи ті, які вже були відображені.

Якщо -Q Параметр з’являється в командному рядку перед --допомога= варіант, потім
описовий текст, який відображається --допомога= змінюється. Замість опису відображеного
параметри, вказується, чи ввімкнено, вимкнено чи встановлено параметр
до певного значення (припускаючи, що компілятор знає це в точці, де
--допомога= використовується варіант).

Ось скорочений приклад з порту ARM ПКУ:

% gcc -Q -mabi=2 --help=target -c
Наступні параметри залежать від цілі:
-mabi= 2
-mabort-on-noreturn [вимкнено]
-mapcs [вимкнено]

Вихід чутливий до впливу попередніх параметрів командного рядка, тому для
На прикладі можна дізнатися, які оптимізації включені -О2 з допомогою:

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

Крім того, ви можете дізнатися, які двійкові оптимізації включені -О3 з допомогою:

gcc -c -Q -O3 --help=optimisers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimisers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep увімкнено

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

-- версія
Відобразити номер версії та авторські права викликаного GCC.

-обгортка
Викликати всі підкоманди під програмою-обгорткою. Ім'я програми-обгортки і
його параметри передаються у вигляді списку, розділеного комами.

gcc -c tc -обгортка gdb,--args

Це викликає всі підпрограми ПКУ при gdb --args, таким чином виклик Cc1 is
gdb --args Cc1 ....

-fplugin=ім'я.тому
Завантажте код плагіна у файл ім'я.so, припускається, що це спільний об'єкт, яким потрібно відкрити
компілятор. Базове ім’я спільного об’єктного файлу використовується для ідентифікації плагіна
для цілей розбору аргументів (Див -fplugin-arg-ім'я-ключ=значення нижче). Кожен
плагін повинен визначати функції зворотного виклику, зазначені в API плагінів.

-fplugin-arg-ім'я-ключ=значення
Визначте аргумент, який називається ключ зі значенням значення для викликаного плагіна ім'я.

-fdump-ada-spec[-струнка]
Для C і C++ вихідних файлів і файлів включення створіть відповідні специфікації Ada.

-fada-spec-parent=блок
В поєднанні з -fdump-ada-spec[-струнка] вище, створіть специфікації Ada як дочірні одиниці
батько блок.

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

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

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

Компіляція C + + програми
Вихідні файли C++ зазвичай використовують один із суфіксів .C, . CC, .cpp, .CPP, .c++, .cpабо
.cxx; Часто використовуються заголовні файли C++ .hh, .hpp, .H, або (для спільного коду шаблону) .tccІ
попередньо оброблені файли C++ використовують суфікс .ii. GCC розпізнає файли з такими іменами і
компілює їх як програми на C++, навіть якщо ви викликаєте компілятор так само, як і для компіляції
Програми на C (зазвичай з іменем ПКУ).

Однак використання ПКУ не додає бібліотеку C++. г ++ це програма, яка викликає GCC і
автоматично визначає зв'язування з бібліотекою C++. Це лікує .c, .h та .i файли як
Вихідні файли C++ замість вихідних файлів C, якщо -x використовується. Ця програма також корисна
під час попередньої компіляції заголовного файлу C з a .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 gnu ++ 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. Цей стандарт практично повністю підтримується за модулем помилок і
проблеми з плаваючою комою (в основному, але не повністю, пов’язані з додатковими функціями C99
з додатків F і G). Побачитиhttp://gcc.gnu.org/c99status.html> більше
інформації. Імена c9x та iso9899:199x є застарілими.

c11
c1x
ISO9899:2011
ISO C11, редакція стандарту ISO C 2011 року. Цей стандарт істотно
повністю підтримується, помилки за модулем, проблеми з плаваючою комою (в основному, але не повністю
пов’язані з додатковими функціями C11 з додатків F і G) і необов’язковими додатками K
(Інтерфейси перевірки меж) і L (Analyzability). Ім'я c1x застаріло.

gnu90
gnu89
Діалект GNU ISO C90 (включаючи деякі функції C99).

gnu99
gnu9x
Діалект GNU ISO C99. Ім'я gnu9x застаріло.

gnu11
gnu1x
Діалект GNU ISO C11. Це значення за замовчуванням для коду C. Ім'я gnu1x is
застарів.

c ++ 98
c ++ 03
Стандарт ISO C++ 1998 року плюс технічні виправлення 2003 року та деякі додаткові
звіти про дефекти. Такий же, як -ансі для коду C++.

gnu ++ 98
gnu ++ 03
GNU діалект о -std=c++98. Це значення за замовчуванням для коду C++.

c ++ 11
c ++ 0x
Стандарт ISO C++ 2011 року з поправками. Ім'я c ++ 0x застаріло.

gnu ++ 11
gnu++0x
GNU діалект о -std=c++11, Ім'я gnu++0x застаріло.

c ++ 14
c++1y
Стандарт ISO C++ 2014 року з поправками. Ім'я c++1y застаріло.

gnu ++ 14
gnu++1y
GNU діалект о -std=c++14, Ім'я gnu++1y застаріло.

C ++ 1Z
Наступна редакція стандарту ISO C++, орієнтовно запланована на 2017 р. Підтримка
є дуже експериментальним і майже напевно зміниться несумісними способами
майбутні випуски.

gnu++1z
GNU діалект о -std=c++1z. Підтримка дуже експериментальна, і майже буде
безумовно, змінюватимуться несумісними способами в майбутніх випусках.

-fgnu89-inline
Опція -fgnu89-inline наказує GCC використовувати традиційну семантику GNU для "inline"
функціонує в режимі C99.

Використання цієї опції приблизно еквівалентно доданню атрибута функції "gnu_inline".
до всіх вбудованих функцій.

Опція -fno-gnu89-inline явно вказує GCC використовувати семантику C99 для
"inline" у режимі C99 або gnu99 (тобто він визначає поведінку за замовчуванням). Це
параметр не підтримується в -std=c90 or -std=gnu90 Режим.

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

-допоміжна інформація ім'я файлу
Вивести прототип прототипу наданого імені файлу для всіх оголошених функцій та/або
визначені в одиниці перекладу, у тому числі в заголовних файлах. Цей варіант є
мовчки ігнорується будь-якою мовою, крім C.

Окрім декларацій, у файлі в коментарях вказується походження кожної декларації
(вихідний файл і рядок), чи була декларація неявною, прототипною чи
непрототипований (I, N для нових або O для старого, відповідно, у першому символі після
номер рядка та двокрапку), а також те, чи походить це з оголошення чи визначення
(C or F, відповідно, наступним символом). У випадку функції
визначення, список аргументів у стилі K&R, за яким слідують їхні оголошення
надано, внутрішні коментарі, після оголошення.

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

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

-fno-asm
Не розпізнайте "asm", "inline" або "typeof" як ключове слово, щоб код міг використовувати їх
слова як ідентифікатори. Ви можете використовувати ключові слова "__asm__", "__inline__" і
Натомість "__typeof__". -ансі мається на увазі -fno-asm.

У C++ цей перемикач впливає лише на ключове слово "typeof", оскільки "asm" і "inline" є
стандартні ключові слова. Ви можете скористатися -fno-gnu-ключові слова замість прапора, який має
той самий ефект. У режимі C99 (-std=c99 or -std=gnu99), цей перемикач впливає лише на
ключові слова "asm" і "typeof", оскільки "inline" є стандартним ключовим словом в ISO C99.

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

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

З -fno-вбудований-функція опція лише вбудована функція функція вимкнено
функція не слід починати з __вбудований_. Якщо функція названа, яка не є вбудованою
у цій версії GCC цей параметр ігнорується. Немає відповідного
-вбудований-функція варіант; якщо ви бажаєте увімкнути вбудовані функції вибірково, коли
використання -fno-вбудований or -автономний, ви можете визначити такі макроси, як:

#define abs(n) __builtin_abs ((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))

-fhosted
Підтвердьте, що компіляція націлена на розміщене середовище. Це означає -fбуд.
розміщене середовище – це середовище, в якому доступна вся стандартна бібліотека, і в
який "main" має тип повернення "int". Прикладами є майже все, крім a
ядро. Це еквівалентно -fno-окремий.

-автономний
Стверджують, що компіляція орієнтована на автономне середовище. Це означає
-fno-вбудований. Окреме середовище – це середовище, в якому стандартна бібліотека не може бути використана
існують, і запуск програми не обов'язково може бути в "main". Найбільш очевидний приклад
є ядром ОС. Це еквівалентно -fno-хостинг.

-фопенакк
Увімкнути обробку директив OpenACC "#pragma acc" у C/C++ та "!$acc" у Fortran.
Коли -фопенакк вказано, компілятор генерує прискорений код відповідно до
Інтерфейс програмного забезпечення OpenACC версії 2.0http://www.openacc.org/>. Цей варіант
мається на увазі -нитка, і, таким чином, підтримується лише на цілях, які мають підтримку
-нитка.

Зауважте, що це експериментальна функція, неповна й може бути змінена в майбутньому
версії GCC. Побачитиhttps://gcc.gnu.org/wiki/OpenACC> для отримання додаткової інформації.

-fopenmp
Увімкнути обробку директив OpenMP «#pragma omp» у C/C++ та «!$omp» у Fortran.
Коли -fopenmp вказано, компілятор генерує паралельний код відповідно до
Інтерфейс програми OpenMP версії 4.0http://www.openmp.org/>. Цей варіант
мається на увазі -нитка, і, таким чином, підтримується лише на цілях, які мають підтримку
-нитка. -fopenmp мається на увазі -fopenmp-simd.

-fopenmp-simd
Увімкнути обробку директив SIMD OpenMP за допомогою «#pragma omp» у C/C++ та «!$omp» у
Fortran. Інші директиви OpenMP ігноруються.

-fcilkplus
Увімкнути використання функцій розширення мови Cilk Plus для C/C++. Коли варіант
-fcilkplus вказано, увімкніть використання функцій розширення Cilk Plus Language
для C/C++. Нинішня реалізація відповідає версії ABI 1.2. Це
експериментальна функція, яка лише частково завершена, інтерфейс якої може змінюватися
у майбутніх версіях GCC у міру зміни офіційної специфікації. Наразі всі
функції, але реалізовано "_Cilk_for".

-fgnu-tm
Коли варіант -fgnu-tm якщо вказано, компілятор генерує код для Linux
варіант поточного документа специфікації ABI транзакційної пам'яті Intel (Revision
1.1, 6 травня 2009 року). Це експериментальна функція, інтерфейс якої може змінитися
майбутні версії GCC, оскільки офіційна специфікація змінюється. Зверніть увагу, що ні
для цієї функції підтримуються всі архітектури.

Для отримання додаткової інформації про підтримку транзакційної пам’яті GCC,

Зауважте, що функція транзакційної пам’яті не підтримується за винятками, які не є викликами
(-fnon-call-exceptions).

-fms-розширення
Прийміть деякі нестандартні конструкції, які використовуються у файлах заголовків Microsoft.

У коді C++ це дозволяє імена членів у структурах бути подібними до попередніх типів
декларації.

typedef int UOW;
структура ABC {
UOW UOW;
};

Деякі випадки безіменних полів у структурах і спілках приймаються лише з цим
варіант.

Зауважте, що цей параметр вимкнено для всіх цілей, окрім цілей x86, які використовують ms-abi.

-fplan9-розширення
Прийміть деякі нестандартні конструкції, які використовуються в коді Плану 9.

Це дозволяє -fms-розширення, дозволяє передавати покажчики на структури з анонімними
поля до функцій, які очікують покажчиків на елементи типу поля, і
дозволи, які посилаються на анонімні поля, оголошені за допомогою typedef. Це тільки
підтримується для C, а не для C++.

-триграфи
Підтримка триграфів ISO C. The -ансі варіант (і -стандартний опції для суворого ISO C
відповідність) передбачає -триграфи.

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

-fcond-невідповідність
Дозволити умовні вирази з невідповідними типами в другому та третьому аргументах.
Значення такого виразу є недійсним. Цей параметр не підтримується для C++.

-льон-вектор-перетворення
Дозволити неявні перетворення між векторами з різною кількістю елементів та/або
несумісні типи елементів. Цей параметр не слід використовувати для нового коду.

-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-unsigned-char, що є негативною формою
-funsigned-char. Так само і варіант -fno-signed-char еквівалентна
-funsigned-char.

-fsigned-bitfields
-бітові поля funsigned
-fno-signed-bitfields
-fno-unsigned-bitfields
Ці параметри визначають, чи є бітове поле підписаним чи непідписаним під час оголошення
не використовує ні «підписаний», ні «непідписаний». За замовчуванням таке бітове поле підписане,
оскільки це узгоджено: основні цілі типи, такі як "int", є типами зі знаком.

Опції Управління C + + Діалект
У цьому розділі описано параметри командного рядка, які мають значення лише для програм C++.
Ви також можете використовувати більшість параметрів компілятора GNU незалежно від мови вашої програми
є in. Наприклад, ви можете скомпілювати файл перший клас.C подобається це:

g++ -g -frepo -O -c першого класу.C

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

Ось список варіантів, які є тільки для компіляції програм C++:

-fabi-версія=n
Використовуйте версію n C++ ABI. За замовчуванням встановлена ​​версія 0.

Версія 0 відноситься до версії, що найбільше відповідає специфікації C++ ABI.
Тому ABI, отриманий за допомогою версії 0, буде змінюватися в різних версіях G++
оскільки виправлено помилки ABI.

Версія 1 - це версія C++ ABI, яка вперше з'явилася в G++ 3.2.

Версія 2 – це версія C++ ABI, яка вперше з’явилася в G++ 3.4 і була
за замовчуванням через G++ 4.9.

Версія 3 виправляє помилку під час зміни постійної адреси як аргументу шаблону.

Версія 4, яка вперше з’явилася в G++ 4.5, реалізує стандартне змінення для вектора
типи.

Версія 5, яка вперше з’явилася в G++ 4.6, виправляє помилку атрибута
const/volatile для типів покажчиків функцій, decltype звичайного decl та використання a
параметр функції в оголошенні іншого параметра.

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

Версія 7, яка вперше з’явилася в G++ 4.8, розглядає nullptr_t як вбудований тип
і виправляє помилку лямбда в області аргументу за замовчуванням.

Версія 8, яка вперше з’явилася в G++ 4.9, виправляє поведінку підстановки
типи функцій з кваліфікаторами function-cv.

Дивіться також -Вабі.

-fabi-compat-version=n
На цілях, які підтримують сильні псевдоніми, G++ обходить зміни змін шляхом створення
псевдонім із правильним зіпсованим ім’ям під час визначення символу з неправильним
спотворене ім'я. Цей перемикач визначає, яку версію ABI використовувати для псевдоніма.

з -fabi-версія=0 (за замовчуванням), це значення за замовчуванням дорівнює 2. Якщо є інша версія ABI
явно вибрано, це значення за замовчуванням дорівнює 0.

Версія сумісності також встановлюється -Вабі=n.

-fno-контроль доступу
Вимкніть всю перевірку доступу. Цей перемикач в основному корисний для усунення помилок
код контролю доступу.

-fcheck-новий
Перш ніж спробувати, переконайтеся, що покажчик, повернутий оператором new, не є нульовим
змінити виділене сховище. Ця перевірка зазвичай не потрібна, оскільки C++
стандарт визначає, що "оператор new" повертає лише 0, якщо він оголошений "throw()", у
у цьому випадку компілятор завжди перевіряє повернуте значення навіть без цієї опції. в
всі інші випадки, коли "оператор new" має непусту специфікацію винятку, пам'ять
виснаження сигналізується викидом "std::bad_alloc". Дивись також new (не кидати).

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

-fdeduce-init-list
Увімкнути виведення параметра типу шаблону як "std::initializer_list" з фігурної дужки-
закритий список ініціализаторів, тобто

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

недійсний f()
{
вперед ({1,2}); // переадресація виклику >
}

Цей вирахування було реалізовано як можливе розширення до спочатку запропонованого
семантика стандарту C++11, але не була частиною остаточного стандарту, тому є
за замовчуванням вимкнено. Ця опція застаріла і може бути вилучена в майбутньому
версія G++.

-френд-ін'єкція
Введіть функції друзів у простір імен, що охоплює, щоб вони були видимі зовні
область дії класу, в якому вони оголошені. Функції друзів були задокументовані
щоб працювати таким чином у старому анотованому довідковому посібнику C++. Проте в ISO C++ a
Функцію friend, яка не оголошена в охоплюючій області, можна знайти лише за допомогою
аргумент залежний пошук. GCC за замовчуванням використовує стандартну поведінку.

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

-fno-elide-конструктори
Стандарт C++ дозволяє реалізації пропускати створення лише тимчасового
використовується для ініціалізації іншого об’єкта того ж типу. Визначення цієї опції вимикає
ця оптимізація, і змушує G++ у всіх випадках викликати конструктор копіювання.

-fno-enforce-eh-specs
Не створюйте код для перевірки на порушення специфікацій винятків під час виконання.
Цей параметр порушує стандарт C++, але може бути корисним для зменшення розміру коду
виробничі збірки, схожі на визначення "NDEBUG". Це не дає код користувача
дозвіл викидати винятки з порушенням специфікацій винятків; в
компілятор все ще оптимізує на основі специфікацій, тому кидає несподіваний
виняток призводить до невизначеної поведінки під час виконання.

-fextern-tls-init
-fno-extern-tls-init
Стандарти C++11 і OpenMP дозволяють змінні "thread_local" і "threadprivate"
мають динамічну (виконання) ініціалізацію. Щоб підтримати це, будь-яке використання такої змінної
проходить через функцію обгортки, яка виконує будь-яку необхідну ініціалізацію. Коли
використання та визначення змінної знаходяться в одній одиниці перекладу, ці накладні витрати можуть
бути оптимізовано, але коли воно використовується в іншій одиниці перекладу
значні накладні витрати, навіть якщо змінна насправді не потребує динаміки
ініціалізація. Якщо програміст може бути впевнений, що змінна не використовується в не-
визначення TU повинно ініціювати динамічну ініціалізацію (або тому, що змінна є
статично ініціалізовано, або буде виконано використання змінної у визначенні TU
перед будь-яким використанням в іншому TU), вони можуть уникнути цих накладних витрат за допомогою
-fno-extern-tls-init варіант.

Для цілей, які підтримують псевдоніми символів, за замовчуванням є -fextern-tls-init. На цілі
які не підтримують псевдоніми символів, за замовчуванням -fno-extern-tls-init.

-for-scope
-fno-for-scope
If -for-scope вказано, область дії змінних, оголошених в a for-init-оператор
обмежується самим циклом "for", як зазначено у стандарті C++. Якщо
-fno-for-scope вказано, область дії змінних, оголошених в a for-init-оператор
поширюється до кінця охоплюючої області, як це було у старих версіях G++, і
інші (традиційні) реалізації C++.

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

-fno-gnu-ключові слова
Не розпізнайте "typeof" як ключове слово, щоб код міг використовувати це слово як ключове слово
ідентифікатор. Натомість можна використовувати ключове слово "__typeof__". -ансі мається на увазі
-fno-gnu-ключові слова.

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

-fno-implicit-inline-templates
Також не випускайте код для неявних екземплярів вбудованих шаблонів. За замовчуванням
полягає в тому, щоб обробляти вбудовані по-різному, щоб компілювати з потребою оптимізації та без неї
той самий набір явних екземплярів.

-fno-implement-inlines
Щоб заощадити місце, не випускайте позалінійні копії вбудованих функцій, якими керує
«Реалізація #прагми». Це спричиняє помилки компонувальника, якщо ці функції відсутні
вбудовані всюди, де вони називаються.

-fms-розширення
Вимкніть попередження Wpedantic щодо конструкцій, які використовуються в MFC, як-от implicit int і
отримання вказівника на функцію-член за допомогою нестандартного синтаксису.

-fno-nonansi-builtins
Вимкніть вбудовані оголошення функцій, які не передбачені ANSI/ISO C. Це
включають "ffs", "alloca", "_exit", "index", "bzero", "conjf" та інші пов'язані
функції.

-fnothrow-opt
Розглядайте специфікацію винятку "throw()" так, ніби це специфікація "noexcept".
зменшити або виключити накладні витрати розміру тексту щодо функції без винятку
специфікація. Якщо функція має локальні змінні типів з нетривіальними
деструктори, специфікація винятків насправді зменшує функцію, оскільки
очищення EH для цих змінних можна оптимізувати. Семантичний ефект є
що виняток викидається з функції з такою специфікацією винятку
призводить до заклику «завершити», а не «несподівано».

-fno-операторів-імена
Не розглядайте ключові слова імені оператора "і", "bitand", "bitor", "compl", "not", "або"
і "xor" як синоніми як ключові слова.

-fno-optional-diags
Вимкніть діагностику, про яку за стандартом сказано, що компілятор не повинен видавати.
Наразі єдина така діагностика, яку видає G++, — це діагностика для імені
кілька значень у класі.

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

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

-фрепо
Увімкнути автоматичне створення екземпляра шаблону під час посилання. Цей варіант також має на увазі
-fno-імпліцитні-шаблони.

-fno-rtti
Вимкнути генерацію інформації про кожен клас із віртуальними функціями для використання
функції ідентифікації типу під час виконання C++ ("dynamic_cast" і "typeid"). Якщо ви
не використовуйте ці частини мови, ви можете заощадити місце за допомогою цього прапорця.
Зауважте, що обробка винятків використовує ту саму інформацію, але G++ генерує її як
необхідний. Оператор "dynamic_cast" все ще може використовуватися для приведення, яке не вимагає
інформація про тип під час виконання, тобто приведення до "void *" або до однозначних базових класів.

-fsized-deallocation
Увімкніть вбудовані глобальні оголошення

void оператор delete (void *, std::size_t) noexcept;
Оператор void delete[] (void *, std::size_t) noexcept;

як представлено в C++14. Це корисно для визначеного користувачем звільнення заміни
функції, які, наприклад, використовують розмір об’єкта, щоб пришвидшити звільнення.
Увімкнено за замовчуванням під -std=c++14 і вище. Прапор -Wsized-deallocation попереджає
про місця, до яких можна додати визначення.

-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-statics
Не випускайте додатковий код, щоб використовувати підпрограми, зазначені в C++ ABI для потоків
безпечна ініціалізація локальної статики. Ви можете використовувати цю опцію, щоб зменшити розмір коду
трохи в коді, який не повинен бути потокобезпечним.

-запобіжник-cxa-atexit
Зареєструйте деструктори для об'єктів зі статичною тривалістю зберігання за допомогою "__cxa_atexit"
функція, а не функція "atexit". Цей параметр необхідний для повного
Обробка статичних деструкторів відповідає стандартам, але працює лише за наявності бібліотеки C
підтримує "__cxa_atexit".

-fno-use-cxa-get-exception-ptr
Не використовуйте підпрограму під час виконання "__cxa_get_exception_ptr". Це викликає
"std::uncaught_exception" є неправильним, але необхідний, якщо підпрограма виконання
недоступний.

-fvisibility-inlines-hidden
Цей перемикач оголошує, що користувач не намагається порівняти покажчики з вбудованими
функції або методи, де адреси двох функцій беруться різними
спільні об'єкти.

Результатом цього є те, що GCC може ефективно позначати вбудовані методи
"__attribute__ ((видимість ("прихований")))", щоб вони не з'являлися в експорті
таблицю DSO і не вимагають непрямого PLT при використанні в DSO.
Увімкнення цієї опції може істотно вплинути на навантаження та час з’єднання DSO
значно зменшує розмір таблиці динамічного експорту, коли бібліотека робить важку
використання шаблонів.

Поведінка цього перемикача не зовсім так само, як позначення методів як прихованих
безпосередньо, оскільки це не впливає на статичні змінні, локальні для функції чи причини
компілятор, щоб зробити висновок, що функція визначена лише в одному спільному об’єкті.

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

Явно створені вбудовані методи не впливають на цей параметр як на їх зв’язок
інакше можуть перетнути межі спільної бібліотеки.

-fvisibility-ms-compat
Цей прапор намагається використати параметри видимості для створення моделі зв’язку GCC C++
сумісний з Microsoft Visual Studio.

Прапор вносить такі зміни до моделі зв’язку GCC:

1. Він встановлює видимість за замовчуванням на "прихований", як -fvisibility=приховано.

2. Типи, але не їхні члени, не приховані за замовчуванням.

3. Правило єдиного визначення послаблено для типів без явної видимості
специфікації, які визначені в більш ніж одному спільному об'єкті: ці оголошення
дозволені, якщо вони дозволені, коли ця опція не використовується.

У новому коді краще використовувати -fvisibility=приховано і експортувати ті класи, які є
призначені для видимості ззовні. На жаль, код може покладатися,
можливо, випадково, щодо поведінки Visual Studio.

Серед наслідків цих змін є статичні члени даних одного типу
з однаковими іменами, але визначеними в різних спільних об'єктах, відрізняються, тому змінюються
одне не змінює іншого; і що вказує на члени функції, визначені в
різні спільні об'єкти можуть не порівнюватися однаковими. Коли дається цей прапор, це a
порушення ODR для різного визначення типів з однаковою назвою.

-fvtable-verify=[std|преініт|ніхто]
Увімкніть (або вимкніть, якщо використовується -fvtable-verify=немає) функція безпеки, яка перевіряє на
час виконання для кожного віртуального виклику вказівник vtable, через який здійснюється виклик
made є дійсним для типу об'єкта і не був пошкоджений або перезаписаний.
Якщо під час виконання виявлено недійсний покажчик vtable, повідомляється про помилку та
виконання програми негайно припиняється.

Цей параметр змушує створювати структури даних під час запуску програми, які є
використовується для перевірки покажчиків vtable. Варіанти std та преініт контролювати
терміни створення цих структур даних. В обох випадках структури даних є
побудований до того, як виконання досягне "основного". Використання -fvtable-verify = std викликає дані
структури, які будуть створені після завантаження та ініціалізації спільних бібліотек.
-fvtable-verify=preinit змушує їх створювати до того, як були створені спільні бібліотеки
завантажено та ініціалізовано.

Якщо цей параметр з’являється кілька разів у командному рядку з різними значеннями
зазначено, ніхто має найвищий пріоритет над обома std та преініт; преініт приймає
пріоритет над std.

-fvtv-debug
При використанні разом з -fvtable-verify = std or -fvtable-verify=preinit, причини
налагоджувати версії функцій середовища виконання для функції перевірки vtable
дзвонив. Цей прапор також змушує компілятор реєструвати інформацію про те, яка vtable
покажчики, які він знаходить для кожного класу. Ця інформація записується у файл з іменем
vtv_set_ptr_data.log у каталозі, названому змінною середовища VTV_LOGS_DIR
якщо це визначено, або поточний робочий каталог інакше.

Примітка. Ця функція додає даних у файл журналу. Якщо ви хочете отримати свіжий файл журналу, будьте
обов’язково видаліть усі наявні.

-fvtv-розраховує
Це прапор налагодження. При використанні разом з -fvtable-verify = std or
-fvtable-verify=preinit, це змушує компілятор відстежувати загальну кількість
віртуальні виклики, з якими він зустрічається, і кількість перевірок, які він вставляє. Це також
підраховує кількість викликів певних функцій бібліотеки часу виконання, які він вставляє та
реєструє цю інформацію для кожної одиниці компіляції. Компілятор записує цю інформацію
до файлу з іменем vtv_count_data.log у каталозі, названому змінною середовища
VTV_LOGS_DIR якщо це визначено, або поточний робочий каталог інакше. Це також
підраховує розмір наборів покажчиків vtable для кожного класу та записує цю інформацію
до vtv_class_set_sizes.log В тій же директорії.

Примітка. Ця функція додає дані до файлів журналу. Щоб отримати нові файли журналу, обов’язково
видалити всі існуючі.

-fno-слабий
Не використовуйте слабку підтримку символів, навіть якщо вона надається компонувальником. За замовчуванням G++
використовує слабкі символи, якщо вони доступні. Ця опція існує лише для тестування і
не повинні використовуватися кінцевими користувачами; це призводить до неповноцінного коду і не має переваг.
Цю опцію може бути вилучено в майбутньому випуску G++.

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

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

-Вабі (лише C, Objective-C, C++ та Objective-C++)
При явному -fabi-версія=n використовується параметр, змушує G++ попереджати, коли він генерує
код, який, ймовірно, несумісний з нейтральним для виробника C++ ABI. З G++ зараз
за замовчуванням -fabi-версія=0, -Вабі не впливає, якщо не старіша версія ABI
обраний (з -fabi-версія=n) або вибрано старішу версію для сумісності (з
-Вабі=n or -fabi-compat-version=n).

Хоча намагалися попередити про всі такі випадки, ймовірно, є
випадки, про які не попереджається, навіть якщо G++ генерує несумісний код.
Також можуть бути випадки, коли попередження видаються, навіть якщо код є
згенерований є сумісним.

Вам слід переписати свій код, щоб уникнути цих попереджень, якщо вас турбує
той факт, що код, створений за допомогою G++, може бути несумісним у двійковому коді з кодом, згенерованим за допомогою
інші компілятори.

-Вабі також можна використовувати з явним номером версії для попередження про сумісність
з особливим -фабі-версія рівень, напр -Вабі=2 попереджати про зміни щодо
-fabi-версія=2. Зазначення номера версії також встановлюється -fabi-compat-version=n.

Відомі несумісності в -fabi-версія=2 (що було за замовчуванням з GCC 3.4 до
4.9) включають:

* Шаблон з параметром нетипового шаблону опорного типу було пошкоджено
неправильно:

зовнішній int N;
шаблон структура S {};
порожнеча п (С ) {2}

Це було виправлено в -fabi-версія=3.

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

Поколювання було змінено в -fabi-версія=4.

* "__attribute ((const))" і "noreturn" були зіпсовані як кваліфікатори типу, і
"decltype" простої декларації було згорнуто.

Ці проблеми з пошкодженням були виправлені -fabi-версія=5.

* Перераховувачі з областю дії, передані як аргументи до змінної функції, просуваються як
перерахувачі без обмежень, через що "va_arg" скаржиться. Для більшості цілей цього немає
фактично впливають на передачу параметра ABI, оскільки немає способу передати аргумент
менше, ніж "int".

Крім того, ABI змінив переробку пакетів аргументів шаблону, "const_cast",
"static_cast", префікс інкременту/зменшення та функція області видимості класу, яка використовується як a
аргумент шаблону.

Ці проблеми були виправлені в -fabi-версія=6.

* Лямбда в області аргументу за замовчуванням було змінено неправильно, а ABI змінено
пошкодження "nullptr_t".

Ці проблеми були виправлені в -fabi-версія=7.

* При зміні типу функції за допомогою кваліфікаторів function-cv, некваліфіковані
тип функції неправильно розглядався як кандидат на заміну.

Це було виправлено в -fabi-версія=8.

Він також попереджає про зміни, пов’язані з psABI. Відомий psABI змінюється на цьому етапі
включати:

* Для SysV/x86-64 об'єднання з членами "long double" передаються в пам'ять як
зазначено в psABI. Наприклад:

об'єднання U {
довгий подвійний ld;
int i;
};

"об'єднання U" завжди передається в пам'ять.

-Вабі-тег (лише C++ та Objective-C++)
Попереджати, коли тип з тегом ABI використовується в контексті, який не має цього тегу ABI.
Читати C + + Attributes для отримання додаткової інформації про теги ABI.

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

-Wdelete-non-virtual-dtor (лише C++ та Objective-C++)
Попереджати, коли "delete" використовується для знищення екземпляра класу, який має віртуальний
функції та невіртуальний деструктор. Видалити екземпляр похідного небезпечно
класу через покажчик на базовий клас, якщо базовий клас не має віртуального
деструктор. Це попередження вмикається за допомогою -Стінка.

-Wliteral-суфікс (лише 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 }; // помилка: звуження від подвійного до int

Цей прапор входить до -Стінка та -Wc++11-compat.

з -std=c++11, -Без звуження пригнічує діагностику, яку вимагає стандарт.
Зауважте, що це не впливає на значення правильно сформованого коду; звуження конверсій
досі вважаються погано сформованими в контексті SFINAE.

- Ні, крім (лише C++ та Objective-C++)
Попереджати, коли вираз noexcept стає хибним через виклик функції
який не має специфікації винятків, що не генерують (тобто "throw()" або
"noexcept"), але компілятор знає, що він ніколи не створює виняток.

-Wnon-virtual-dtor (лише C++ та Objective-C++)
Попереджати, коли клас має віртуальні функції та доступний невіртуальний деструктор
сам по собі або в доступному поліморфному базовому класі, у цьому випадку можливо але
небезпечно видалити екземпляр похідного класу за допомогою покажчика на сам клас
або базовий клас. Це попередження автоматично вмикається, якщо -Weffc++ вказано.

- Замовлення (лише C++ та Objective-C++)
Попереджати, коли порядок ініціалізації членів, наведений у коді, не відповідає порядку
в якому вони повинні бути виконані. Наприклад:

структура A {
int i;
int j;
A(): j (0), i (1) { }
};

Компілятор змінює порядок ініціалізації членів для "i" і "j", щоб відповідати
декларації наказу членів з попередженням про це. Це попередження
включена за -Стінка.

-fext-числові-літерали (лише C++ та Objective-C++)
Приймайте суфікси уявних, фіксованих чи машинно визначених літеральних чисел як GNU
розширення. Коли цей параметр вимкнено, ці суфікси розглядаються як C++11 user-
визначені літерні числові суфікси. Це ввімкнено за замовчуванням для всіх діалектів до C++11
і всі діалекти GNU: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14, це
параметр вимкнено за замовчуванням для ISO C++11 і далі (-std=c++11, ...).

Наступні -В... на опції не впливає -Стінка.

-Weffc++ (лише C++ та Objective-C++)
Попереджати про порушення наведених нижче вказівок щодо стилю від Скотта Мейерса Ефективний
C + + серія книг:

* Визначте конструктор копіювання та оператор присвоєння для класів з динамічно-
виділена пам'ять.

* Віддавайте перевагу ініціалізації перед призначенням у конструкторах.

* Нехай "operator=" повертає посилання на *this.

* Не намагайтеся повернути посилання, коли потрібно повернути об'єкт.

* Розрізняють префіксальну та постфіксальну форми операторів приросту та декременту.

* Ніколи не перевантажуйте "&&", "||" або ",".

Ця опція також вмикає -Wnon-virtual-dtor, який також є одним із ефективних C++
рекомендації. Однак перевірка продовжена, щоб попередити про відсутність віртуальних
деструктор у доступних неполіморфних базових класах також.

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

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

-Wno-non-template-friend (лише C++ та Objective-C++)
Вимкніть попередження, коли в шаблоні оголошуються нешаблонні функції друзів.
З моменту появи явної підтримки специфікації шаблонів у G++, якщо ім’я файлу
друг є некваліфікованим ідентифікатором (тобто, друг foo(int)), специфікація мови C++
вимагає, щоб друг оголосив або визначив звичайну, нешаблонну функцію. (Розділ
14.5.3). До того, як G++ реалізував явну специфікацію, некваліфіковані ідентифікатори могли бути
інтерпретується як особлива спеціалізація шаблонної функції. Тому що це
невідповідна поведінка більше не є поведінкою за замовчуванням для G++,
-Не шаблонний друг дозволяє компілятору перевірити існуючий код на наявність потенційних проблем
плями й увімкнено за замовчуванням. Цю нову поведінку компілятора можна вимкнути за допомогою
-Wno-non-template-friend, який зберігає відповідний код компілятора, але вимикає
корисне попередження.

-Лиття в стилі «Wold». (лише C++ та Objective-C++)
Попереджати, якщо в програмі на C++ використовується приведення до непустотного типу старого стилю (Стиль).
Приведення нового стилю ("dynamic_cast", "static_cast", "reinterpret_cast" і
"const_cast") менш уразливі до небажаних ефектів і їх набагато легше шукати.

-Перевантажений-віртуальний (лише C++ та Objective-C++)
Попереджати, коли оголошення функції приховує віртуальні функції базового класу. Для
наприклад, у:

структура A {
віртуальна порожнеча f();
};

структура B: публічна A {
void f(int);
};

версія "f" класу "A" прихована в "B", а такий код:

B* b;
b->f();

не вдається зібрати.

-Wno-pmf-перетворення (лише C++ та Objective-C++)
Вимкнути діагностику для перетворення зв’язаного покажчика на функцію-член у звичайну
вказівник.

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

Опції Управління Мета-С та Objective-C ++ Діалекти
(ПРИМІТКА. Цей посібник не описує мови Objective-C і Objective-C++
самі

У цьому розділі описано параметри командного рядка, які мають значення лише для Objective-C
та програми Objective-C++. Ви також можете використовувати більшість мов-незалежних GNU
параметри компілятора. Наприклад, ви можете скомпілювати файл якийсь_клас.м подобається це:

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

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

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

Ось список варіантів, які є тільки для компіляції Objective-C і Objective-C++
програми:

-fconstant-string-class=ім'я класу
Скористайтесь ім'я класу як ім'я класу для створення екземпляра для кожного рядка літералу
задано з синтаксисом "@"...". Ім'я класу за замовчуванням - "NXConstantString", якщо
використовується середовище виконання GNU і "NSConstantString", якщо використовується середовище виконання NeXT
використаний (див. нижче). The -fconstant-cfstrings параметр, якщо він також присутній, замінює параметр
-fconstant-string-class встановити та зробити так, щоб літерали "@"..." були викладені як постійні
рядки CoreFoundation.

-fgnu-час виконання
Створення об’єктного коду, сумісного зі стандартним середовищем виконання GNU Objective-C. Це
за замовчуванням для більшості типів систем.

-fnext-виконання
Створення вихідних даних, сумісних із середовищем виконання NeXT. Це значення за замовчуванням для NeXT
системи, включаючи Darwin і Mac OS X. Макрос "__NEXT_RUNTIME__" попередньо визначено, якщо
(і тільки якщо) використовується ця опція.

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

-fobjc-abi-version=n
Використовуйте версію n Objective-C ABI для вибраного середовища виконання. Цей варіант є
наразі підтримується лише для середовища виконання 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
викликати всі такі методи в ієрархії успадкування об’єкта. "- (ідентифікатор)
Методи .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. Методи класу та супервиклики ніколи не перевіряються
для нуля таким чином, незалежно від того, на що встановлено цей прапор. Наразі цей прапор діє
нічого, якщо використовується середовище виконання GNU або старіша версія NeXT ABI.

-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) щоб завантажити його під час виконання. Це використовується в
у поєднанні з режимом налагодження «Виправити та продовжити», де входить об’єктний файл
питання можна перекомпілювати та динамічно перезавантажувати в ході програми
виконання, без необхідності перезапускати саму програму. Наразі виправити-і-
Функція Continue доступна лише в поєднанні з середовищем виконання NeXT на Mac
OS X 10.3 і новіших версій.

-fzero-посилання
Під час компіляції для середовища виконання NeXT компілятор зазвичай замінює виклики до
"objc_getClass("...")" (коли ім'я класу відоме під час компіляції) з
статичні посилання на класи, які ініціалізуються під час завантаження, що покращує час виконання
продуктивність. Вказавши -fzero-посилання flag пригнічує цю поведінку та викликає
викликає "objc_getClass("...)", щоб зберегти. Це корисно в Zero-Link
режим налагодження, оскільки він дозволяє змінювати окремі реалізації класу
під час виконання програми. Середовище виконання GNU наразі завжди зберігає виклики до
"objc_get_class("...")" незалежно від параметрів командного рядка.

-fno-local-ivars
За замовчуванням до змінних екземпляра в Objective-C можна отримати доступ як до локальних
змінні з методів класу, в якому вони оголошені. Це може призвести до
перекриття між змінними екземпляра та іншими змінними, оголошеними локально
всередині методу класу або глобально з такою ж назвою. Вказавши -fno-local-ivars
flag вимикає цю поведінку, таким чином уникаючи проблем із затіненням змінних.

-fivar-visibility=[громадськість|захищений|приватний|пакет]
Встановіть для видимості змінної екземпляра за замовчуванням вказаний параметр, щоб цей екземпляр
змінні, оголошені поза межами будь-яких директив модифікаторів доступу, за замовчуванням мають значення
визначена видимість.

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

-Wassign-перехоплення (лише Objective-C і Objective-C++)
Попереджати кожного разу, коли збірник сміття перехоплює призначення Objective-C.

-Протокол Wno (лише Objective-C і Objective-C++)
Якщо клас оголошується для реалізації протоколу, для кожного методу видається попередження
в протоколі, який не реалізований класом. Поведінка за замовчуванням – це
видавати попередження для кожного методу, явно не реалізованого в класі, навіть якщо a
Реалізація методу успадкована від суперкласу. Якщо ви використовуєте -Протокол Wno
варіант, тоді методи, успадковані від суперкласу, вважаються реалізованими,
і попередження за них не виноситься.

-Селектор (лише Objective-C і Objective-C++)
Попереджати, якщо під час знайдено кілька методів різних типів для одного селектора
компіляція. Перевірка проводиться за списком методів на завершальному етапі
компіляція. Крім того, перевірка виконується для кожного селектора, що з’являється в a
Вираз "@selector(...)" і відповідний метод для цього селектора
знайдені під час компіляції. Оскільки ці перевірки сканують таблицю методів лише в кінці
компіляції, ці попередження не виробляються, якщо є останній етап компіляції
не досягнуто, наприклад, через те, що під час компіляції виявлено помилку, або через те, що
-fsyntax-only використовується варіант.

-Підборник-матч (лише Objective-C і Objective-C++)
Попереджати, якщо для a знайдено кілька методів з різними аргументами та/або типами повернення
даний селектор під час спроби надіслати повідомлення за допомогою цього селектора одержувачу
введіть "id" або "Class". Коли цей прапор вимкнено (що є поведінкою за замовчуванням),
компілятор пропускає такі попередження, якщо знайдені відмінності обмежуються типами, які спільні
однаковий розмір і вирівнювання.

-Wunddeclared-селектор (лише Objective-C і Objective-C++)
Попереджає, якщо знайдено вираз "@selector(...)", який посилається на неоголошений селектор. А
селектор вважається неоголошеним, якщо раніше не було оголошено жодного методу з такою назвою
вираз "@selector(...)" явно в @interface або @protocol
декларації або неявно в розділі @implementation. Цей варіант працює завжди
його перевіряє, як тільки знайдено вираз "@selector(...)", while -Селектор тільки
виконує свої перевірки на завершальному етапі складання. Це також посилює кодування
Угода про стиль, згідно з якою методи та селектори повинні бути оголошені перед використанням.

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

Опції до Контроль Діагностичний повідомлення форматування
Традиційно діагностичні повідомлення форматуються незалежно від пристрою виведення
аспект (наприклад, його ширина, ...). Ви можете використовувати описані нижче параметри для керування
алгоритм форматування для діагностичних повідомлень, наприклад, скільки символів у рядку, як часто
слід повідомити інформацію про місцезнаходження джерела. Зауважте, що деякі мовні інтерфейси можуть
не врахувати ці варіанти.

-fmessage-length=n
Спробуйте відформатувати повідомлення про помилки так, щоб вони містилися в рядках приблизно n символів. Якщо n is
нуль, тоді перенесення рядків не виконується; кожне повідомлення про помилку відображається в одному рядку.
Це значення за замовчуванням для всіх інтерфейсів.

-fdiagnostics-show-location=один раз
Має значення лише в режимі перенесення рядків. Доручає репортеру діагностичних повідомлень
видавати інформацію про місце розташування джерела один раз; тобто на випадок, якщо повідомлення занадто довге, щоб вмістити
на одній фізичній лінії і має бути загорнуто, вихідне розташування не буде випромінюватися
(як префікс) знову і знову, в наступних рядках продовження. Це
поведінка за замовчуванням.

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

-fdiagnostics-color[=КОЛИ]
-fno-diagnostics-color
Використовуйте колір в діагностиці. КОЛИ is ніколи, завждиабо автоматичний. Значення за замовчуванням залежить від того, як
компілятор налаштовано, він може бути будь-яким із перерахованих вище КОЛИ варіанти або також
ніколи if GCC_COLORS Змінна середовища відсутня в середовищі, і автоматичний
інакше. автоматичний означає використовувати колір лише тоді, коли стандартною помилкою є термінал. The
форми -fdiagnostics-колір та -fno-diagnostics-color є псевдонімами для
-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 для фону за замовчуванням
color, 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 яскраво червоний, 01; 35 жирний пурпурний, 01; 36 жирний блакитний, 01; 32 є сміливим
зелений і 01 є сміливим. Налаштування GCC_COLORS до порожнього рядка вимикає кольори.
Підтримувані можливості такі.

"помилка="
Підрядок SGR для помилки: маркери.

"попередження="
Підрядок SGR для попередження: маркери.

"примітка="
Підрядок SGR для примітки: маркери.

"caret="
Підрядок SGR для рядка каретки.

"locus="
Підрядок SGR для інформації про місцезнаходження, файл: рядок or файл:рядок:стовпчик і т.п.

"цитата="
Підрядок SGR для інформації, надрукованої в лапках.

-fno-diagnostics-show-option
За замовчуванням кожна діагностика містить текст, що вказує параметр командного рядка
який безпосередньо контролює діагностику (якщо така опція відома діагностиці
техніка). Вказавши -fno-diagnostics-show-option прапор пригнічує це
поведінка.

-fno-diagnostics-show-caret
За замовчуванням кожна діагностика включає вихідний рядок і символ '^'
із зазначенням стовпчика. Ця опція приховує цю інформацію. Вихідна лінія є
скорочено до n символів, якщо -fmessage-length=n надається варіант. Коли вихід
виконується до терміналу, ширина обмежена шириною, заданою параметром КОЛОНИ
змінної середовища або, якщо не встановлено, на ширину термінала.

Опції до Запит or Придушити Попередження
Попередження – це діагностичні повідомлення, які повідомляють про конструкції, які не є властивими
помилкові, але це ризиковано або свідчить про те, що, можливо, сталася помилка.

Наступні незалежні від мови параметри не вмикають конкретні попередження, але контролюють їх
види діагностики, вироблені GCC.

-fsyntax-only
Перевірте код на наявність синтаксичних помилок, але не робіть нічого крім цього.

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

-w Блокувати всі попереджувальні повідомлення.

- Помилка
Зробіть усі попередження помилками.

-Помилка=
Зробіть вказане попередження помилкою. Специфікатор для попередження додається;
наприклад -Помилка = перемикач повертає попередження, керовані -Вимикач в помилки.
Цей перемикач приймає негативну форму, щоб використовувати її для заперечення - Помилка для конкретних попереджень;
наприклад -Wno-error=перемикач робить -Вимикач попередження не є помилками, навіть коли - Помилка
діє.

Попередження для кожного контрольованого попередження містить параметр, який контролює
попередження. Потім цю опцію можна використовувати з -Помилка= та -Без помилки= як описано
вище. (Друк параметра в попередженні можна вимкнути за допомогою
-fno-diagnostics-show-option прапор.)

Зверніть увагу, що вказуючи -Помилка=Foo автоматично передбачає -WFoo. Однак -Без помилки=Foo
нічого не означає.

-Wфатальні помилки
Ця опція змушує компілятор переривати компіляцію при першій помилці
замість того, щоб намагатися продовжувати і друкувати нові повідомлення про помилки.

Ви можете запросити багато конкретних попереджень з параметрами, які починаються з -WНаприклад
- Прихований запитувати попередження щодо неявних декларацій. Кожне з цих конкретних попереджень
options також має негативну форму початку -Ні- вимкнути попередження; наприклад,
-Без-неявно. У цьому посібнику перераховано лише одну з двох форм, залежно від того, яка з них не є стандартною.
Додаткові параметри для певної мови також див C + + Діалект Опції та Мета-С
та Objective-C ++ Діалект Опції.

Деякі варіанти, наприклад -Стінка та -Векстра, увімкніть інші параметри, наприклад -Невикористаний, Яка
може вмикати інші параметри, наприклад -Wunused-value. Комбінований ефект позитивного і
негативна форма полягає в тому, що більш конкретні варіанти мають пріоритет над менш конкретними,
незалежно від їхнього положення в командному рядку. Для варіантів такої ж специфічності,
останній вступає в силу. Параметри, увімкнені або вимкнені за допомогою прагм, діють так, ніби вони
з'являється в кінці командного рядка.

Коли запитується нерозпізнаний варіант попередження (наприклад, -Невідомо-попередження), GCC випромінює a
діагностика, яка свідчить, що параметр не розпізнається. Однак, якщо -Ні- використовується форма,
поведінка дещо інша: діагностика не проводиться -Невідомо-попередження
якщо не проводиться інша діагностика. Це дозволяє використовувати нові -Ні- опції
зі старими компіляторами, але якщо щось піде не так, компілятор попереджає, що нерозпізнаний
варіант присутній.

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

Дійсні програми ISO C і ISO C++ повинні правильно компілюватися з цією опцією або без неї
(хоча рідко хто потребує -ансі або -стандартний параметр, що вказує необхідну версію
ISO C). Однак без цієї опції деякі розширення GNU і традиційні C і
Функції C++ також підтримуються. При цьому варіанті вони відхиляються.

-Педантичний не викликає попереджень щодо використання альтернативних ключових слів who
імена починаються і закінчуються на __. Педантичні попередження також відключені у виразі
що слідує за "__extension__". Однак лише системні файли заголовків повинні використовувати їх
шляхи евакуації; прикладні програми повинні уникати їх.

Деякі користувачі намагаються використовувати -Педантичний щоб перевірити програми на сувору відповідність стандарту ISO C. Вони
незабаром виявляють, що він робить не зовсім те, що вони хочуть: він знаходить деякі практики, які не відповідають ISO,
але не всі ---тільки ті, для яких ISO C Вимагається діагностика та деякі інші для
яку діагностику додано.

Функція повідомлення про будь-яку невідповідність ISO C може бути корисною в деяких випадках,
але вимагатиме значної додаткової роботи і буде зовсім відрізнятися від
-Педантичний. Ми не плануємо підтримувати таку функцію найближчим часом.

Де стандарт, зазначений с -стандартний представляє розширений діалект C GNU, наприклад
gnu90 or gnu99, є відповідне база standard, версія ISO C на якій
заснований розширений діалект GNU. Попередження від -Педантичний даються там, де вони є
вимагається базовим стандартом. (Не має сенсу робити такі попередження
тільки для функцій, які не належать до вказаного діалекту GNU C, оскільки за визначенням GNU
діалекти Сі включають всі функції, які компілятор підтримує за допомогою даної опції, і
нема про що попереджати.)

-педантичні помилки
Повідомляти помилку, коли база standard (Див. -Педантичний) потребує діагностики, в
деякі випадки, коли є невизначена поведінка під час компіляції, а в деяких інших випадках
які не перешкоджають компіляції програм, дійсних відповідно до стандарту.
Це не еквівалентно -Помилка = педантична, оскільки через це ввімкнено помилки
і не вмикається останнім і навпаки.

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

-Стінка вмикає такі попереджувальні прапорці:

-Водреса -Warray-bounds=1 (тільки з -О2) -Wc++11-compat -Wc++14-compat
-Wchar-індекси -Венум-порівняй (у C/ObjC; це ввімкнено за замовчуванням у C++)
-Невідомий-інт (лише C і Objective-C) -Оголошення функції Wimplicit (С і
Тільки Objective-C) -Коментар - W формат -Wmain (тільки для C/ObjC і якщо
-автономний) -Wmoybe-неініціалізований -Брекети (тільки для C/ObjC) -Ненульовий
-Wopenmp-simd -Дужки -Wpointer-знак - Замовлення -Повернення -Wsequence-point
-Wsign-порівняти (тільки на C++) -Wstrict-aliasing -Wstrict-overflow=1 -Вимикач
-Втриграфи -Wuninitialized -Wunknown-pragmas -Wunused-функція -Wunused-мітка
-Wunused-value -Wunused-змінна -Wvolatile-register-var

Зауважте, що деякі позначки попереджень не мають на увазі -Стінка. Деякі з них попереджають про
конструкції, які користувачі зазвичай не вважають сумнівними, але які
іноді ви можете перевірити; інші попереджають про конструкції, які є
в деяких випадках необхідно або важко уникнути, і немає простого способу змінити
код для придушення попередження. Деякі з них увімкнено -Векстра але багато з них
необхідно ввімкнути окремо.

-Векстра
Це вмикає деякі додаткові позначки попереджень, які не ввімкнені -Стінка. (Використовується цей варіант
Бути покликаним -W. Старіша назва все ще підтримується, але новіша назва більше
описовий.)

-Взабитий - Пусте тіло -Проігноровані-кваліфікатори -Wmissing-field-ініціалізатори
-Wmissing-parameter-type (лише C) -Декларація по-світу (лише C) -Woverride-init
-Wsign-порівняти -межі типів -Wuninitialized -Wunused-параметр (тільки з -Невикористаний or
-Стінка) -Wunused- but-set-parameter (тільки з -Невикористаний or -Стінка)

Опція -Векстра також друкує попереджувальні повідомлення для таких випадків:

* Покажчик порівнюється з цілим нулем за допомогою "<", "<=", ">" або ">=".

* (Тільки C++) І перераховувач, і неперелічувач з'являються в умовному вигляді
вираз.

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

* (Тільки C++) Підписка масиву, оголошеного як "реєстр".

* (Тільки C++) Взяття адреси змінної, яка була оголошена як "реєстр".

* (Тільки C++) Базовий клас не ініціалізується в конструкторі копіювання похідного класу.

-Wchar-індекси
Попереджати, якщо індекс масиву має тип "char". Це поширена причина помилок, як
програмісти часто забувають, що цей тип підписується на деяких машинах. Це попередження
включена за -Стінка.

-Коментар
Попереджати щоразу, коли послідовність коментарів-початків /* з'являється в а /* коментар або будь-коли a
Зворотна коса риса-новий рядок з’являється в a // коментар. Це попередження вмикається за допомогою -Стінка.

-Wno-покриття-невідповідність
Попереджати, якщо профілі зворотного зв’язку не збігаються під час використання -fprofile-використання варіант. Якщо
вихідний файл змінюється між компіляцією з -fprofile-gen і з -fprofile-використання,
файли зі зворотним зв'язком профілю можуть не відповідати вихідному файлу, а GCC не може
використовуйте інформацію про зворотній зв'язок профілю. За замовчуванням це попередження ввімкнено і є
розглядається як помилка. -Wno-покриття-невідповідність можна використовувати для вимкнення попередження або
-Wno-error=невідповідність покриття можна використовувати для вимкнення помилки. Вимкнення помилки
оскільки це попередження може призвести до погано оптимізованого коду і корисно лише у випадку
дуже незначні зміни, такі як виправлення помилок у існуючій базі коду. Повне відключення
попередження не рекомендується.

-Wno-cpp
(лише C, Objective-C, C++, Objective-C++ і Fortran)

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

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

Легко випадково виконати обчислення за допомогою «подвійного», оскільки з плаваючою комою
Літерали неявно мають тип "подвійний". Наприклад, у:

площа плавання (радіус плавання)
{
return 3.14159 * радіус * радіус;
}

компілятор виконує всі обчислення з "подвійним", оскільки плаваюча кома
literal є «подвійним».

- W формат
-Wформат=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).

-Wформат=1
- W формат
варіант - W формат еквівалентна -Wформат=1 та -Wno-формат еквівалентна
-Wформат=0, так як - W формат також перевіряє аргументи нульового формату для кількох
функції, - W формат також передбачає -Ненульовий. Деякі аспекти цього рівня формату
перевірку можна вимкнути за допомогою параметрів: -Wno-format-contains-nul,
-Wno-format-extra-args та -Wno-format-nul-length. - W формат увімкнено за допомогою
-Стінка.

-Wno-format-contains-nul
If - W формат вказано, не попереджати про форматні рядки, які містять NUL-байти.

-Wno-format-extra-args
If - W формат вказано, не попереджати про зайві аргументи до "printf" або
функція форматування "scanf". Стандарт C визначає, що такі аргументи є
ігнорується.

Де невикористані аргументи лежать між використаними аргументами, які вказані with $
специфікації номера операнда, зазвичай попередження все ще надаються, оскільки
реалізація не могла знати, який тип передати до "va_arg", щоб пропустити невикористане
аргументи. Однак у випадку форматів "scanf" цей параметр пригнічує
попередження, якщо всі невикористані аргументи є покажчиками, починаючи з Single Unix
У специфікації сказано, що такі невикористані аргументи дозволені.

-Wno-format-nul-length
If - W формат вказано, не попереджати про формати нульової довжини. Стандарт C
вказує, що дозволені формати нульової довжини.

-Wформат=2
включити - W формат плюс додаткові перевірки формату. На даний момент еквівалентний - W формат
-Wformat-нелітеральний -Wformat-безпека -Wformat-y2k.

-Wformat-нелітеральний
If - W формат вказано, також попереджає, якщо рядок формату не є рядковим літералом
і тому не можна перевірити, якщо функція format не приймає свої аргументи формату як
a "va_list".

-Wformat-безпека
If - W формат вказано, також попереджає про використання функцій форматування, які представляють
можливі проблеми з безпекою. Наразі це попереджає про виклики «printf» і
Функції "scanf", де форматний рядок не є рядковим літералом і немає
аргументи формату, як у "printf (foo);". Це може бути дірою в безпеці, якщо
рядок формату отримано з ненадійного введення та містить %n. (Наразі це а
підмножина чого -Wformat-нелітеральний попереджає про, але в майбутньому можуть бути попередження
доданий в -Wformat-безпека які не входять до -Wformat-нелітеральний.)

-Wformat-signness
If - W формат вказано, також попереджає, якщо рядок форматування вимагає непідписаного
аргумент і аргумент підписується, і навпаки.

ПРИМІТКА. В Ubuntu 8.10 і пізніших версіях цей параметр увімкнено за замовчуванням для C,
C++, ObjC, ObjC++. Щоб вимкнути, використовуйте -Wno-format-security, або вимкнути всі формати
попередження з -Wформат=0. Щоб зробити попередження безпеки форматування фатальними, вкажіть
-Помилка = формат-безпека.

-Wformat-y2k
If - W формат вказано, також попереджає про формати "strftime", які можуть дати лише a
двозначний рік.

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

-Ненульовий включено до -Стінка та - W формат. Його можна відключити за допомогою -Wno-ненульовий
варіант.

-Winit-self (лише C, C++, Objective-C і Objective-C++)
Попереджати про неініціалізовані змінні, які ініціалізовані самі собою. Зверніть увагу на це
Опцію можна використовувати лише з -Wuninitialized варіант.

Наприклад, GCC попереджає про те, що "i" не ініціалізовано лише в наступному фрагменті
коли -Winit-self було зазначено:

int f()
{
int i = i;
return i;
}

Це попередження вмикається -Стінка в C ++.

-Невідомий-інт (лише C і Objective-C)
Попереджати, коли в декларації не вказано тип. Це попередження вмикається за допомогою -Стінка.

-Оголошення функції Wimplicit (лише C і Objective-C)
Видавати попередження щоразу, коли функція використовується перед її оголошенням. У режимі C99
(-std=c99 or -std=gnu99), це попередження ввімкнено за замовчуванням і перетворюється на файл
помилка через -педантичні помилки. Це попередження також увімкнено за допомогою -Стінка.

- Прихований (лише C і Objective-C)
Такий же, як -Невідомий-інт та -Оголошення функції Wimplicit. Це попередження ввімкнено
by -Стінка.

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

Це попередження також увімкнено за допомогою -Векстра.

-Wmain
Попереджайте, якщо тип «основний» є підозрілим. "main" має бути функцією з зовнішнім
зв'язування, повертаючи int, беручи або нуль аргументів, два або три аргументи
відповідні види. Це попередження ввімкнено за замовчуванням у C++ і вмикається будь-яким
-Стінка or -Педантичний.

-Брекети
Попереджати, якщо ініціализатор агрегату або об’єднання не повністю закріплений у дужках. У наступному
наприклад, ініціализатор для "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++)
Попереджати, якщо наданий користувачем каталог включення не існує.

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

Також попереджати, якщо з’являється порівняння типу "x<=y<=z"; це еквівалентно "(x<=y ? 1 :
0) <= z", що відрізняється від інтерпретації звичайної математики
позначення.

Також попереджаємо про конструкції, у яких може виникнути плутанина, щодо якого оператора "if" an
"інша" гілка належить. Ось приклад такого випадку:

{
якщо)
якщо (b)
foo ();
ще
бар ();
}

У C/C++ кожна гілка "else" належить до внутрішнього можливого оператора "if", який
у цьому прикладі «якщо (b)». Це часто не те, чого очікував програміст, як
проілюстрований у наведеному вище прикладі відступом, який вибрав програміст. Коли є
Можливість цієї плутанини, GCC видає попередження, коли вказано цей прапор.
Щоб усунути попередження, додайте явні дужки навколо внутрішнього оператора «if».
немає жодного способу, щоб «інший» належав до охоплюючого «if». Отриманий код виглядає
подобається це:

{
якщо)
{
якщо (b)
foo ();
ще
бар ();
}
}

Також попереджати про небезпечне використання розширення GNU до "?:" з пропущеним середнім операндом.
Якщо умова в операторі "?": є булевим виразом, пропущене значення є
завжди 1. Часто програмісти очікують, що це значення, обчислене всередині умовного
вираз замість цього.

Це попередження вмикається -Стінка.

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

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

Не вказано, коли між послідовністю точки змінюються значення
об'єкти вступають в дію. Програми, поведінка яких залежить від цього, мають невизначену поведінку;
стандарти C і C++ визначають, що «Між попередньою та наступною точкою послідовності an
Збережене значення об’єкта має змінюватися щонайбільше один раз за допомогою оцінки an
вираз. Крім того, попереднє значення має зчитуватися лише для визначення значення до
бути збережено.". Якщо програма порушує ці правила, результати на будь-якому конкретному
реалізація абсолютно непередбачувана.

Прикладами коду з невизначеною поведінкою є "a = a++;", "a[n] = b[n++]" і "a[i++] =
i;". Деякі більш складні випадки не діагностуються за допомогою цієї опції, і це може дати
випадковий хибнопозитивний результат, але в цілому він був визнаний досить ефективним при
виявлення таких проблем у програмах.

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

Це попередження вмикається -Стінка для C і C++.

-Wno-return-local-addr
Не попереджайте про повернення вказівника (або в C++ посилання) на змінну, яка йде
поза межами області дії після повернення функції.

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

Для C++ функція без типу повернення завжди видає навіть діагностичне повідомлення
коли -Wno-return-type вказано. Виняток становлять лише «основні» та функції
визначені в системних заголовках.

Це попередження вмикається -Стінка.

-Wshift-count-негативне
Попереджати, якщо кількість змін від’ємна. Це попередження ввімкнено за замовчуванням.

-Wshift-count-overflow
Попереджати, якщо кількість зсувів >= ширина типу. Це попередження ввімкнено за замовчуванням.

-Вимикач
Попереджати кожного разу, коли оператор "switch" має індекс перерахованого типу і не містить "case"
для одного або кількох іменованих кодів цього перерахування. (Наявність "за замовчуванням"
label запобігає цьому попередженню.) Мітки "case" також знаходяться за межами діапазону перерахування
викликати попередження, коли використовується ця опція (навіть якщо є позначка «за замовчуванням»). Це
попередження увімкнено за допомогою -Стінка.

-Wswitch-за замовчуванням
Попереджати, коли оператор "перемикання" не має регістру "за замовчуванням".

-Wwwitch-enum
Попереджати кожного разу, коли оператор "switch" має індекс перерахованого типу і не містить "case"
для одного або кількох іменованих кодів цього перерахування. мітки "кейс" за межами
діапазон перерахування також викликає попередження, коли використовується ця опція. Єдина різниця
між -Вимикач і ця опція полягає в тому, що ця опція дає попередження про пропущене
код перерахування, навіть якщо є мітка "за замовчуванням".

-Wswitch-bool
Попереджати, коли оператор "перемикання" має індекс логічного типу. Це можливо
придушити це попередження шляхом приведення керуючого виразу до іншого типу, ніж
"буль". Наприклад:

перемикач ((int) (a == 4))
{
...
}

Це попередження ввімкнено за замовчуванням для програм C і C++.

-Wsync-nand (лише C і C++)
Попереджати, коли вбудовані функції "__sync_fetch_and_nand" і "__sync_nand_and_fetch"
використаний. Ці функції змінили семантику в GCC 4.4.

-Втриграфи
Попереджати, якщо зустрічаються триграфи, які можуть змінити значення програми
(триграфи в коментарях не попереджуються). Це попередження вмикається за допомогою -Стінка.

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

Щоб придушити це попередження, використовуйте атрибут "unused".

Це попередження також увімкнено за допомогою -Невикористаний Разом з -Векстра.

-Wunused-але-встановлена ​​змінна
Попереджати кожного разу, коли локальна змінна призначена, але в іншому випадку не використовується (окрім її
декларація). Це попередження вмикається за допомогою -Стінка.

Щоб придушити це попередження, використовуйте атрибут "unused".

Це попередження також увімкнено за допомогою -Невикористаний, який увімкнено за допомогою -Стінка.

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

-Wunused-мітка
Попереджати, коли мітка оголошується, але не використовується. Це попередження вмикається за допомогою -Стінка.

Щоб придушити це попередження, використовуйте атрибут "unused".

-Wunused-local-typedefs (лише C, Objective-C, C++ та Objective-C++)
Попереджати, коли параметр typedef, визначений локально у функції, не використовується. Це попередження
включена за -Стінка.

-Wunused-параметр
Попереджати, коли параметр функції не використовується, окрім його оголошення.

Щоб придушити це попередження, використовуйте атрибут "unused".

-Wno-unused-result
Не попереджати, якщо викликає функцію, позначену атрибутом "warn_unused_result".
не використовувати його повернуте значення. За замовчуванням є -Wunused-результат.

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

Щоб придушити це попередження, використовуйте атрибут "unused".

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

Це попередження вмикається -Стінка.

-Невикористаний
Все вищесказане -Невикористаний комбіновані варіанти.

Щоб отримати попередження про невикористаний параметр функції, потрібно або вказати
-Векстра -Невикористаний (зауважте, що -Стінка мається на увазі -Невикористаний), або вкажіть окремо
-Wunused-параметр.

-Wuninitialized
Попереджати, якщо використовується автоматична змінна без попередньої ініціалізації або якщо змінна
може бути заблоковано викликом "setjmp". У C++ попереджати про нестатичні посилання чи не-
статичний член "const" з'являється в класі без конструкторів.

Якщо ви хочете попередити про код, який використовує неініціалізоване значення змінної in
власний ініціализатор, використовуйте -Winit-self варіант.

Ці попередження виникають для окремих неініціалізованих або пошкоджених елементів конструкції,
об’єднання змінних або змінних масиву, а також для змінних, які не є ініціалізованими або заблокованими
в цілому. Вони не зустрічаються для змінних або елементів, оголошених "нестабільними". Тому що
ці попередження залежать від оптимізації, точні змінні чи елементи для яких існують
Ці попередження залежать від точних параметрів оптимізації та версії використовуваної GCC.

Зауважте, що може не бути попередження про змінну, яка використовується лише для обчислення a
значення, яке саме по собі ніколи не використовується, оскільки такі обчислення можуть бути видалені потоком даних
аналіз перед друком попереджень.

-Wmoybe-неініціалізований
Для автоматичної змінної, якщо існує шлях від запису функції до використання
змінна, яка ініціалізована, але існують деякі інші шляхи, для яких
Змінна не ініціалізована, компілятор видає попередження, якщо не може довести
неініціалізовані шляхи не виконуються під час виконання. Ці попередження робляться необов’язковими
оскільки GCC недостатньо розумний, щоб побачити всі причини, чому код може бути правильним
незважаючи на те, що здається помилка. Ось один приклад того, як це може статися:

{
int x;
перемикач (y)
{
випадок 1: x = 1;
break;
випадок 2: x = 4;
break;
випадок 3: x = 5;
}
foo (x);
}

Якщо значення "y" завжди дорівнює 1, 2 або 3, то "x" завжди ініціалізовано, але GCC
не знає цього. Щоб придушити попередження, потрібно вказати регістр за замовчуванням
стверджувати(0) або подібний код.

Цей параметр також попереджає, коли енергонезалежна автоматична змінна може бути змінена за допомогою a
виклик "longjmp". Ці попередження також можливі лише при оптимізації
складання.

Компілятор бачить лише виклики "setjmp". Він не може знати, де буде "longjmp".
викликаний; фактично, обробник сигналу може викликати його в будь-який момент коду. Як
в результаті ви можете отримати попередження, навіть якщо насправді проблем немає, оскільки "longjmp"
насправді не можна викликати в місце, яке може викликати проблему.

Деяких помилкових попереджень можна уникнути, якщо оголосити всі функції, які ви використовуєте
ніколи не повертатися як "noreturn".

Це попередження вмикається -Стінка or -Векстра.

-Wunknown-pragmas
Попереджати, коли зустрічається директива "#pragma", яка не зрозуміла GCC. Якщо це
використовується параметр командного рядка, навіть видаються попередження про невідомі прагми в системі
заголовні файли. Це не так, якщо попередження вмикаються лише за допомогою -Стінка
параметр командного рядка.

-Вно-прагми
Не попереджайте про неправильне використання прагм, таких як неправильні параметри, недійсний синтаксис або
конфлікти між прагмами. Дивись також -Wunknown-pragmas.

-Wstrict-aliasing
Ця опція активна лише тоді, коли -fstrict-aliasing є активним. Він попереджає про код, що
може порушити строгі правила псевдонімів, які компілятор використовує для оптимізації.
Попередження не охоплює всі випадки, але намагається вловити більш поширені
підводних каменів. Він входить в -Стінка. Це еквівалентно -Wstrict-aliasing=3

-Wstrict-aliasing=n
Ця опція активна лише тоді, коли -fstrict-aliasing є активним. Він попереджає про код, що
може порушити строгі правила псевдонімів, які компілятор використовує для оптимізації.
Більш високі рівні відповідають вищій точності (менше помилкових спрацьовувань). Вищі рівні
також відповідають додатковим зусиллям, подібним до способу -O працює. -Wstrict-aliasing is
еквівалентно -Wstrict-aliasing=3.

Рівень 1: найбільш агресивний, швидкий, найменш точний. Можливо, корисно, коли вищий рівень
не попереджати, але -fstrict-aliasing все одно порушує код, оскільки в ньому дуже мало помилок
негативи. Однак він має багато помилкових спрацьовувань. Попереджає про всі перетворення покажчика
між можливо несумісними типами, навіть якщо вони ніколи не розіменовуються. Бігає спереду
тільки кінець.

Рівень 2: Агресивний, швидкий, не дуже точний. Може все ще мати багато помилкових спрацьовувань (ні
хоча б рівень 1), і мало помилкових негативних результатів (але, можливо, більше, ніж рівень 1).
На відміну від рівня 1, він попереджає лише тоді, коли адреса отримана. Попереджає про неповні типи.
Працює тільки в передній частині.

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

-Wstrict-переповнення
-Wstrict-overflow=n
Ця опція активна лише тоді, коли -fstrict-переповнення є активним. Попереджає про випадки
де компілятор оптимізує, виходячи з припущення, що підписане переповнення ні
відбуваються. Зауважте, що він не попереджає про всі випадки, коли код може переповнюватися: it
попереджає лише про випадки, коли компілятор реалізує певну оптимізацію. Таким чином, це
попередження залежить від рівня оптимізації.

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

-Wstrict-overflow=1
Попереджайте про випадки, які є сумнівними та яких легко уникнути. Наприклад, с
-fstrict-переповнення, компілятор спрощує "x + 1 > x" до 1. Цей рівень
-Wstrict-переповнення увімкнено за допомогою -Стінка; вищі рівні не є і повинні бути
прямо прохано.

-Wstrict-overflow=2
Також попереджаємо про інші випадки, коли порівняння спрощено до константи. Для
приклад: "абс (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=[чистий|сопзЬ|noreturn|формат]
Попереджати про випадки, коли додавання атрибута може бути корисним. Атрибути на даний момент
підтримувані, наведені нижче.

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

-Wsuggest-attribute=format
-Wmissing-format-attribute
Попереджати про покажчики функцій, які можуть бути кандидатами на атрибути «формат».
Зауважте, що це лише можливі кандидати, а не абсолютні. GCC здогадується про це
покажчики функцій з атрибутами "format", які використовуються при присвоєнні,
оператори ініціалізації, передачі параметрів або повернення повинні мати відповідні
атрибут "format" в отриманому типі. Тобто ліва сторона
присвоєння або ініціалізація, тип змінної параметра або повернення
тип функції, що містить, відповідно, також повинен мати атрибут "format".
щоб уникнути попередження.

GCC також попереджає про визначення функцій, які можуть бути кандидатами на «формат»
атрибути. Знову ж таки, це лише можливі кандидати. GCC здогадується, що "формат"
атрибути можуть бути доречними для будь-якої функції, яка викликає функцію типу
"vprintf" або "vscanf", але це може бути не завжди так, і деякі функції
для яких атрибути "format" підходять, можуть не виявлятися.

-Wзапропонуйте остаточні типи
Попереджати про типи з віртуальними методами, де якість коду покращиться, якщо тип
були оголошені за допомогою специфікатора C++11 "final" або, якщо можливо, оголошені в
анонімний простір імен. Це дозволяє GCC більш агресивно девіртуалізувати поліморфний
дзвінки. Це попередження є більш ефективним при оптимізації часу посилання, де
інформація про графік ієрархії класів є більш повною.

-Запропонуйте остаточні методи
Попереджати про віртуальні методи, де якість коду була б покращена, якби цей метод був
оголошений специфікатором "final" C++11 або, якщо можливо, його тип оголошено в
анонімний простір імен або зі специфікатором "final". Це попередження є більш ефективним
з оптимізацією часу зв'язку, де міститься інформація про графік ієрархії класів
більш повним. Рекомендується спочатку розглянути пропозиції
-Wзапропонуйте остаточні типи а потім перебудувати з новими анотаціями.

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

-Межі війни
-Warray-bounds=n
Ця опція активна лише тоді, коли -ftree-vrp активний (за замовчуванням для -О2 і вище). Це
попереджає про індекси до масивів, які завжди виходять за межі. Це попередження
включена за -Стінка.

-Warray-bounds=1
Це рівень попередження -Межі війни і увімкнено за допомогою -Стінка; вищі рівні
не є і має бути чітко запитано.

-Warray-bounds=2
Цей рівень попередження також попереджає про вихід за межі доступу до масивів у кінці
структуру та для масивів, доступ до яких здійснюється за допомогою покажчиків. Цей рівень попередження може давати a
більша кількість помилкових спрацьовувань і вимкнено за замовчуванням.

-Wbool-порівняти
Попереджати про логічний вираз у порівнянні з цілим значенням, відмінним від
"правда"/"неправда". Наприклад, таке порівняння завжди хибне:

int n = 5;
...
якщо ((n > 1) == 2) { ... }

Це попередження вмикається -Стінка.

-Wno-відкинуті-кваліфікатори (лише C і Objective-C)
Не попереджати, якщо кваліфікатори типу в покажчиках відкидаються. Як правило,
компілятор попереджає, якщо змінна "const char *" передається функції, яка приймає "char
*" параметр. Цю опцію можна використовувати для придушення такого попередження.

-Кваліфікатори Wno-відкинутих-масивів (лише C і Objective-C)
Не попереджати, якщо використовуються кваліфікатори типу в масивах, які є цільовими вказівниками
відкинуто. Зазвичай компілятор попереджає, якщо змінна "const int (*)[]" передається до
функція, яка приймає параметр "int (*)[]". Цей параметр можна використовувати для придушення
таке попередження.

-Wno-incompatible-pointer-types (лише C і Objective-C)
Не попереджати, коли відбувається перетворення між покажчиками, які мають несумісні типи.
Це попередження стосується випадків, на які не поширюється дія -Wno-вказівник-знак, який попереджає про вказівник
передача аргументу або присвоєння з різним знаком.

-Wno-int-перетворення (лише C і Objective-C)
Не попереджати про несумісні перетворення цілого в покажчик і покажчика в ціле.
Це попередження стосується неявних перетворень; для явних перетворень попередження
-Wno-int-to-pointer-cast та -Wno-pointer-to-int-cast може використовуватися.

-Wno-div-by-zero
Не попереджати про ціле ділення на нуль під час компіляції. Ділення з плаваючою комою на
про нуль не попереджається, оскільки це може бути законним способом отримання нескінченності та
NaNs.

-Wsystem-headers
Друк попереджень для конструкцій, знайдених у файлах заголовків системи. Попередження від
системні заголовки, як правило, приховуються, припускаючи, що зазвичай ні
вказують на реальні проблеми і лише ускладнюють читання результатів компілятора. Використання
цей параметр командного рядка повідомляє GCC видавати попередження із заголовків системи, як ніби вони
відбулося в коді користувача. Однак зверніть увагу, що використання -Стінка у поєднанні з цим варіантом
робить НЕ попереджати про невідомі прагми в системних заголовках --- для цього -Wunknown-pragmas
також необхідно використовувати.

- Батути
Попереджати про трампліни, створені для вказівників на вкладені функції. Батут - це а
невеликий фрагмент даних або код, який створюється під час виконання в стеку, коли адреса
береться вкладена функція і використовується для непрямого виклику вкладеної функції.
Для деяких цілей він складається лише з даних і, таким чином, не потребує спеціальної обробки.
Але для більшості цілей він складається з коду і, таким чином, вимагає створення стека
виконуваний, щоб програма працювала належним чином.

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

Ідея полягає в тому, що іноді це зручно (для програміста).
розглядати значення з плаваючою комою як наближення до нескінченно точних дійсних чисел.
Якщо ви робите це, то вам потрібно обчислити (проаналізувавши код або в якомусь
іншим способом) максимальна або ймовірна максимальна помилка, яку вносить обчислення, і
допускайте це під час виконання порівнянь (і під час виробництва результату, але це a
інша проблема). Зокрема, замість перевірки на рівність слід перевірити
щоб побачити, чи два значення мають діапазони, які перекриваються; і це робиться за допомогою
оператори відношень, тому порівняння рівності, ймовірно, помилкові.

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

* Параметри макросу, які відображаються в рядкових литералах у тілі макросу. в
традиційна заміна макросу C відбувається всередині рядкових літералів, але в ISO C
це не.

* У традиційному C деякі директиви препроцесора не існували. традиційний
препроцесори лише розглядали рядок як директиву, якщо # з'явився в колонці
1 на лінії. Тому -Традиційний попереджає про директиви, які традиційні C
розуміє, але ігнорує, тому що # не відображається як перший символ на
лінія. Це також пропонує вам приховати директиви, як-от "#pragma", які не зрозумілі
традиційний C, зробивши відступ. Деякі традиційні реалізації цього не роблять
розпізнати "#elif", тому цей параметр пропонує уникати його взагалі.

* Функціональний макрос, який відображається без аргументів.

* Унарний плюс оператор.

* U цілочисельний константний суфікс або F or L постійні суфікси з плаваючою комою.
(Традиційний C підтримує L суфікс до цілочисельних констант.) Зверніть увагу, ці
суфікси з'являються в макросах, визначених у системних заголовках більшості сучасних систем,
напр _ХВ/_МАКС макроси в " ". Використання цих макросів у коді користувача може
зазвичай призводять до помилкових попереджень, однак інтегрований препроцесор GCC має
достатньо контексту, щоб уникнути попередження в цих випадках.

* Функція, оголошена зовнішньою в одному блоці, а потім використана після закінчення
блок

* Оператор "switch" має операнд типу "long".

* Оголошення не "статичної" функції слід за "статичним". Ця конструкція не є
прийнято деякими традиційними компіляторами C.

* Тип ISO цілочисельної константи має різну ширину або знак
традиційний тип. Це попередження видається лише в тому випадку, якщо основа константи дорівнює десяти.
Тобто шістнадцяткові чи вісімкові значення, які зазвичай представляють бітові шаблони, не є такими
попереджали про.

* Виявлено використання конкатенації рядків ISO.

* Ініціалізація автоматичних агрегатів.

* Ідентифікатор конфліктує з мітками. У традиційному C відсутній окремий простір імен для
етикетки.

* Ініціалізація спілок. Якщо ініціализатор дорівнює нулю, попередження пропущено.
Це робиться в припущенні, що в коді користувача з’являється нульовий ініціализатор
обумовлено, наприклад, "__STDC__", щоб уникнути пропуску попереджень ініціализатора та покладається на
ініціалізація за замовчуванням на нуль у традиційному випадку C.

* Перетворення за прототипами між значеннями фіксованої/з плаваючою комою і навпаки. The
Відсутність цих прототипів при компіляції з традиційним C викликає серйозні проблеми
проблеми. Це підмножина можливих попереджень про перетворення; за повний комплект
використання -Wtraditional-перетворення.

* Використання визначень функцій стилю ISO C. Це попередження навмисне НЕ випущений
для декларацій прототипів або змінних функцій, оскільки ці функції ISO C
з'являються у вашому коді під час використання традиційних макросів сумісності libiberty з C,
«PARAMS» і «VPARAMS». Це попередження також обходиться для вкладених функцій
оскільки ця функція вже є розширенням GCC і, таким чином, не має відношення до
традиційна сумісність із C.

-Wtraditional-перетворення (лише C і Objective-C)
Попереджати, якщо прототип викликає перетворення типу, яке відрізняється від того, що могло б статися
на той самий аргумент за відсутності прототипу. Це включає перетворення
фіксована точка на плаваючу і навпаки, а перетворення змінюють ширину або
знакові аргументи з фіксованою точкою, за винятком випадків, коли це те саме, що й підвищення за замовчуванням.

-Wdeclaration-after-statement (лише C і Objective-C)
Попереджати, коли оголошення знайдено після оператора в блоці. Ця конструкція відома
із C++, був представлений разом із ISO C99 і за замовчуванням дозволений в GCC. Це не
підтримується ISO C90.

-Вундеф
Попереджати, якщо невизначений ідентифікатор оцінюється в директиві "#if".

-Wno-endif-мітки
Не попереджайте, коли після "#else" або "#endif" йде текст.

- Тінь
Попереджати щоразу, коли оголошення локальної змінної або типу затінює іншу змінну,
параметр, тип, член класу (у C++) або змінна екземпляра (в Objective-C) або
щоразу, коли вбудована функція затінена. Зауважте, що в C++ компілятор попереджає, якщо a
локальна змінна затіняє явний typedef, але не якщо вона затіняє структуру/клас/перелік.

-Вно-тінь-івар (лише Objective-C)
Не попереджати, коли локальна змінна затінює змінну екземпляра в Objective-C
метод.

-Більше ніж=довжина
Попереджати, коли об’єкт розміром більше ніж довжина байт визначено.

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

-Wno-free-nonheap-object
Не попереджати при спробі звільнити об’єкт, який не був розміщений у купі.

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

Повідомлення відповідає результату -fstack-usage.

* Якщо використання стека повністю статичне, але перевищує вказану кількість, це:

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

* Якщо використання стека (частково) динамічне, але обмежене, це:

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

* Якщо використання стека (частково) динамічне і не обмежене, це:

попередження: використання стека може бути необмеженим

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

-Wno-pedantic-ms-format (Лише цілі MinGW)
При використанні в поєднанні з - W формат та - педантичний без розширень GNU, це
Параметр вимикає попередження про не-ISO специфікатори ширини формату "printf" / "scanf".
"I32", "I64" і "I" використовуються для цільових пристроїв Windows, які залежать від середовища виконання MS.

-Wpointer-ариф
Попереджати про все, що залежить від «розміру» типу функції або «void». GNU C
призначає цим типам розмір 1, для зручності в обчисленнях з "void *"
покажчики та покажчики на функції. У C++ попереджати також, коли виконується арифметична операція
включає "NULL". Це попередження також увімкнено за допомогою -Педантичний.

-межі типів
Попереджати, якщо порівняння завжди істинне чи завжди хибне через обмежений діапазон
тип даних, але не попереджати про константні вирази. Наприклад, попередити, якщо непідписаний
змінна порівнюється з нулем за допомогою "<" або ">=". Це попередження також увімкнено за допомогою
-Векстра.

-Wbad-function-cast (лише C і Objective-C)
Попереджати, коли виклик функції приводиться до невідповідного типу. Наприклад, попередити, якщо дзвінок
функція, яка повертає цілочисельний тип, приводиться до типу покажчика.

-Wc90-c99-сумісний (лише C і Objective-C)
Попереджати про функції, яких немає в ISO C90, але присутні в ISO C99. Наприклад,
попереджати про використання масивів змінної довжини, типу «long long», типу «bool», складеного
літерали, призначені ініціализатори тощо. Цей варіант не залежить від
стандартний режим. Попередження вимкнено у виразі після "__extension__".

-Wc99-c11-сумісний (лише C і Objective-C)
Попереджати про функції, яких немає в ISO C99, але присутні в ISO C11. Наприклад,
попереджати про використання анонімних структур і об'єднань, кваліфікатор типу "_Atomic",
Специфікатор класу зберігання "_Thread_local", специфікатор "_Alignas", оператор "Alignof",
Ключове слово "_Generic" тощо. Цей параметр не залежить від стандартного режиму.
Попередження вимкнено у виразі після "__extension__".

-Wc++-сумісний (лише C і Objective-C)
Попереджати про конструкції ISO C, які не входять до загальної підмножини ISO C та ISO
C++, наприклад, запит на неявне перетворення з "void *" на вказівник на non-"void"
тип

-Wc++11-compat (лише C++ та Objective-C++)
Попереджайте про конструкції C++, значення яких відрізняється між ISO C++ 1998 і ISO C++ 2011,
наприклад, ідентифікатори в ISO C++ 1998, які є ключовими словами в ISO C++ 2011. Це попередження
включається -Звуження і увімкнено за допомогою -Стінка.

-Wc++14-compat (лише C++ та Objective-C++)
Попереджайте про конструкції C++, значення яких відрізняється між ISO C++ 2011 і ISO C++ 2014.
Це попередження вмикається -Стінка.

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

Також попереджайте, коли виконуєте переведення, яке вводить кваліфікатор типу небезпечним способом. Для
наприклад, переведення "char **" до "const char **" небезпечно, як у цьому прикладі:

/* p — значення char **. */
const char **q = (const char **) p;
/* Призначення рядка тільки для читання const char * є нормальним. */
*q = "рядок";
/* Тепер покажчик char** вказує на пам'ять лише для читання. */
**p = 'b';

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

- Write-strings
Під час компіляції C надайте рядковим константам тип "const char[довжина]" так що копіювання
адреса одиниці в не-"const" "char *" покажчик видає попередження. Ці
попередження допомагають знайти під час компіляції код часу, який можна спробувати записати в рядок
константа, але тільки якщо ви дуже обережно використовували "const" в оголошеннях
і прототипи. Інакше це просто неприємність. Ось чому ми не зробили -Стінка
вимагати цих попереджень.

Під час компіляції C++ попереджайте про застаріле перетворення рядкових літералів у "char
*". Це попередження ввімкнено за замовчуванням для програм C++.

-Взабитий
Попереджати про змінні, які можуть бути змінені "longjmp" або "vfork". Це попередження
також увімкнено за допомогою -Векстра.

-Wумовно-підтримувані (лише C++ та Objective-C++)
Попереджати щодо умовно підтримуваних (C++11 [intro.defs]) конструкцій.

-Wперетворення
Попереджати про неявні конверсії, які можуть змінити значення. Це включає конверсії
між дійсним і цілим числом, наприклад "abs (x)", коли "x" є "подвійним"; конверсії між
зі знаком і без знаку, наприклад "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-null is
увімкнено за замовчуванням.

-Wzero-as-null-pointer-constant (лише C++ та Objective-C++)
Попереджати, коли литерал '0' використовується як константа нульового покажчика. Це може бути корисно для
полегшити перетворення в "nullptr" у C++11.

-Дата-час
Попереджати, коли макроси "__TIME__", "__DATE__" або "__TIMESTAMP__" зустрічаються, коли вони
може запобігти побітно ідентичним відтворюваним компіляціям.

-Wdelete-незавершене (лише C++ та Objective-C++)
Попереджати під час видалення вказівника на неповний тип, що може спричинити невизначену поведінку в
час виконання. Це попередження ввімкнено за замовчуванням.

-Безвісний кидок (лише C++ та Objective-C++)
Попереджати, коли вираз приводиться до власного типу.

- Пусте тіло
Попереджати, якщо в операторі "if", "else" або "do while" зустрічається порожнє тіло. Це попередження
також увімкнено за допомогою -Векстра.

-Венум-порівняй
Попереджати про порівняння значень різних перерахованих типів. У C++ перерахування
невідповідності в умовних виразах також діагностуються, і попередження вмикається
за замовчуванням. У C це попередження вмикається за допомогою -Стінка.

-Wjump-misses-init (C, тільки Objective-C)
Попереджати, якщо оператор "goto" або оператор "switch" перейде вперед
ініціалізація змінної, або перехід назад до мітки після того, як змінна була
ініціалізовано. Це лише попереджає про змінні, які ініціалізуються, коли вони є
оголосив. Це попередження підтримується лише для C і Objective-C; в C++ такого роду
гілка в будь-якому випадку є помилкою.

-Wjump-misses-init включено до -Wc++-сумісний. Його можна відключити за допомогою
-Wno-jump-misses-init варіант.

-Wsign-порівняти
Попереджати, коли порівняння значень зі знаком і без знака може привести до неправильного результату
результат, коли значення зі знаком перетворюється на беззнакове. Це попередження також увімкнено
by -Векстра; щоб отримати інші попередження -Векстра без цього попередження використовуйте -Векстра
-Wno-знак-порівняйте.

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

-Wfloat-перетворення
Попереджати про неявні перетворення, які знижують точність реального значення. Це
включає перетворення з дійсного в ціле число, а також від реального більш високої точності до нижчого
точні реальні значення. Цей параметр також увімкнено за допомогою -Wперетворення.

-Wsized-deallocation (лише C++ та Objective-C++)
Попереджати про визначення функції звільнення без розміру

void оператор delete (void *) noexcept;
void оператор delete[] (void *) noexcept;

без визначення функції звільнення відповідного розміру

void оператор delete (void *, std::size_t) noexcept;
Оператор void delete[] (void *, std::size_t) noexcept;

або навпаки. Увімкнено -Векстра разом з -fsized-deallocation.

-Wsizeof-pointer-memaccess
Попереджати про підозрілі параметри довжини певних рядків і вбудованих функцій пам’яті
якщо аргумент використовує "sizeof". Це попередження попереджає, наприклад, про "memset (ptr, 0, sizeof
(ptr));", якщо "ptr" не є масивом, а вказівником і пропонує можливе виправлення, або
про "memcpy (&foo, ptr, sizeof (&foo));". Це попередження вмикається за допомогою -Стінка.

-Wsizeof-array-argument
Попереджати, коли оператор "sizeof" застосовується до параметра, оголошеного як масив
у визначенні функції. Це попередження ввімкнено за замовчуванням для програм C і C++.

-Wmemset-transposed-args
Попереджати про підозрілі виклики вбудованої функції "memset", якщо другий аргумент є
не дорівнює нулю, а третій аргумент дорівнює нулю. Це попереджає, наприклад @ про "memset (buf, sizeof
buf, 0)", де, швидше за все, мав на увазі "memset (buf, 0, sizeof buf)".
Діагностика видається, лише якщо третій аргумент дорівнює нулю. Якщо це якесь
вираз, який згортається до нуля, приведення нуля до якогось типу тощо, це набагато менше
імовірно, що користувач помилково обмінявся аргументами, і попередження не видається.
Це попередження вмикається -Стінка.

-Водреса
Попереджати про підозріле використання адрес пам’яті. До них відноситься використання адреси a
функція в умовному виразі, наприклад "void func(void); if (func)", і
порівняння з адресою пам'яті рядкового літералу, наприклад "if (x == "abc")".
Таке використання зазвичай вказує на помилку програміста: адреса функції завжди
оцінюється як істина, тому їх використання в умовному вигляді зазвичай вказує на те, що програміст
забули дужки під час виклику функції; і порівняння з рядковими літералами
призводять до невизначеної поведінки і не переносяться в C, тому зазвичай вказують
що програміст мав намір використовувати "strcmp". Це попередження вмикається за допомогою -Стінка.

-Wlogical-op
Попереджати про підозріле використання логічних операторів у виразах. Це включає використання
логічні оператори в контекстах, де, ймовірно, очікується побітовий оператор.

-Логічні-не-дужки
Попереджати про логічний, який не використовується в лівому операнді порівняння. Це
Опція не попереджає, якщо операнд RHS має логічний тип. Його мета полягає в тому, щоб
виявити підозрілий код, наприклад:

int a;
...
якщо (!a > 1) { ... }

Можна придушити попередження, загорнувши LHS в дужки:

якщо ((!a) > 1) { ... }

Це попередження вмикається -Стінка.

-Waggregate-повернення
Попереджати, якщо визначено чи викликано якісь функції, які повертають структури чи об’єднання. (В
мовами, де ви можете повернути масив, це також викликає попередження.)

-Wno-aggressive-loop-optimizations
Попереджати, якщо в циклі з постійною кількістю ітерацій компілятор виявить невизначене
поведінка в деякому операторі під час однієї або кількох ітерацій.

-Wno-атрибути
Не попереджати, якщо використовується неочікуваний "__attribute__", наприклад, нерозпізнані атрибути,
атрибути функції, застосовані до змінних тощо. Це не зупиняє помилки для
неправильне використання підтримуваних атрибутів.

-Wno-вбудований-макро-перевизначення
Не попереджати, якщо певні вбудовані макроси перевизначено. Це пригнічує попередження для
перевизначення "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__" і
"__BASE_FILE__".

-Wstrict-прототипи (лише C і Objective-C)
Попереджає, якщо функція оголошена або визначена без вказівки типів аргументів. (Ан
Визначення функції старого стилю дозволяється без попередження, якщо передує a
декларація, яка визначає типи аргументів.)

-Декларація по-світу (лише C і Objective-C)
Попереджати про застаріле використання, відповідно до стандарту C, в декларації. Для
Наприклад, попереджати, якщо специфікатори класу зберігання, як-от "static", не є першими речами в a
декларація. Це попередження також увімкнено за допомогою -Векстра.

-Визначення світового стилю (лише C і Objective-C)
Попереджати, якщо використовується визначення функції старого стилю. Попередження надається, навіть якщо воно є
попередній прототип.

-Wmissing-parameter-type (лише C і Objective-C)
Параметр функції оголошується без специфікатора типу у функціях у стилі K&R:

void foo (bar) {}

Це попередження також увімкнено за допомогою -Векстра.

-Wmissing-прототипи (лише C і Objective-C)
Попереджати, якщо глобальна функція визначена без попереднього оголошення прототипу. Це
попередження видається, навіть якщо саме визначення містить прототип. Використовуйте цю опцію
щоб виявити глобальні функції, які не мають відповідного оголошення прототипу в a
заголовний файл. Цей параметр не дійсний для C++, оскільки всі оголошення функцій
надайте прототипи, а оголошення про невідповідність оголошує перевантаження, а не
конфлікт з попередньою заявою. Використовуйте -Wmissing-декларації для виявлення зниклих безвісти
оголошення на C++.

-Wmissing-декларації
Попереджати, якщо глобальна функція визначена без попереднього оголошення. Зробіть це, навіть якщо
саме визначення дає прототип. Використовуйте цю опцію для визначення глобального
функції, які не оголошені в заголовних файлах. У C не видаються попередження
функції з попередніми оголошеннями без прототипів; використовувати -Wmissing-прототипи для виявлення
відсутні прототипи. У C++ попередження не видаються для шаблонів функцій або для
вбудовані функції або для функцій в анонімних просторах імен.

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

struct s { int f, g, h; };
struct sx = { 3, 4 };

Цей параметр не попереджає про призначені ініціализатори, тому наступна модифікація
не викликає попередження:

struct s { int f, g, h; };
struct sx = { .f = 3, .g = 4 };

У C++ цей параметр також не попереджає про порожній ініціализатор { }, наприклад:

struct s { int f, g, h; };
sx = {};

Це попередження входить до -Векстра. Щоб отримати інше -Векстра попередження без цього,
використання -Векстра -Без ініціализаторів відсутнього поля.

-Wno-мультисимвольний
Не попереджати, якщо багатосимвольна константа ('FOOF') використовується. Зазвичай вони вказують на a
помилка в коді користувача, оскільки вони мають значення, визначені реалізацією, і їх бути не повинно
використовується в переносному коді.

- Ненормалізована[=<ніхто|id|nfc|nfkc>]
У 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.
-Ненормалізовано=ідентифікатор пригнічує попередження для цих символів. Сподіваюся, що майбутнє
версії відповідних стандартів виправляють це, тому цього варіанта немає
за замовчуванням.

Ви можете вимкнути попередження для всіх символів, написавши -Ненормалізовано=немає or
-Wno-нормований. Ви повинні робити це, лише якщо ви використовуєте іншу нормалізацію
схеми (наприклад, "D"), тому що в іншому випадку ви можете легко створювати помилки, які буквально
неможливо побачити.

Деякі символи в ISO 10646 мають різні значення, але виглядають ідентичними в деяких шрифтах
або методології відображення, особливо після застосування форматування. Наприклад
"\u207F", "НАДСКРИПТ ЛАТИНСЬКА МАЛНА БУКВА N", відображається як звичайне "n", що
було поміщено у верхній індекс. ISO 10646 визначає NFKC схема нормалізації до
конвертуйте все це у стандартну форму, і GCC попереджає, якщо ваш код відсутній
NFKC, якщо ви використовуєте -Wnormalized=nfkc. Це попередження можна порівняти з попередженням про кожний
ідентифікатор, який містить літеру O, оскільки його можна сплутати з цифрою 0,
і тому не є стандартним, але може бути корисним як локальна умова кодування, якщо
Середовище програмування не може бути встановлене для чіткого відображення цих символів.

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

-Wno-deprecated-declarations
Не попереджати про використання функцій, змінних і типів, позначені як застарілі
використовуючи атрибут "застарілий".

-Без переповнення
Не попереджати про переповнення часу компіляції в постійних виразах.

-Wno-Odr
Попереджати про порушення Правил одного визначення під час оптимізації часу підключення. Вимагає
-flto-odr-type-merging бути увімкненим. Увімкнено за замовчуванням.

-Wopenmp-simd
Попереджати, якщо модель вартості векторизатора перекриває OpenMP або директиву simd Cilk Plus
встановлений користувачем. The -fsimd-cost-model=необмежено Опція може бути використана для зниження вартості
модель.

-Woverride-init (лише C і Objective-C)
Попереджати, якщо ініціалізоване поле без побічних ефектів замінено під час використання призначеного
ініціалізатори.

Це попередження входить до -Векстра. Щоб отримати інше -Векстра попередження без цього,
використання -Векстра -Wno-override-init.

-Упаковано
Попереджати, якщо структурі надано атрибут packed, але атрибут packed не має
вплив на планування або розмір конструкції. Такі конструкції можуть бути неправильно вирівняними
мало користі. Наприклад, у цьому коді змінна "fx" у "структурному рядку" є
неправильно вирівняний, навіть якщо "структурний рядок" сам по собі не має атрибута packed:

struct foo {
int x;
символ a, b, c, d;
} __attribute __ ((упакований));
панель структури {
char z;
struct foo f;
};

-Wpacked-bitfield-compat
Серії GCC 4.1, 4.2 і 4.3 ігнорують атрибут "packed" у бітових полях типу
"char". Це було виправлено в GCC 4.4, але ця зміна може призвести до відмінностей у
макет структури. GCC інформує вас, коли зміщення такого поля змінилося в GCC
4.4. Наприклад, тут більше немає 4-бітового заповнення між полями "a" і "b".
структура:

struct foo
{
char a:4;
char b:8;
} __атрибут__ ((упаковано));

Це попередження ввімкнено за замовчуванням. Використовуйте -Wno-Bit-Bit-Compat щоб вимкнути це
увага.

-Wpadded
Попереджати, якщо заповнення включено в структуру, щоб вирівняти елемент
структуру або вирівняти всю конструкцію. Іноді, коли це відбувається, це можливо
переставити поля структури, щоб зменшити заповнення і таким чином зробити
структура менша.

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

-Wnested-екстерни (лише C і Objective-C)
Попереджати, якщо у функції зустрічається "зовнішня" декларація.

-Wno-успадкований-змінний-ктор
Придушити попередження про використання конструкторів, що успадковують C++11, коли базовий клас
успадкований від має змінний конструктор C; попередження ввімкнено за замовчуванням, оскільки
крапка не передається у спадок.

- Winline
Попереджати, якщо функція, яка оголошена як вбудована, не може бути вбудована. Навіть з цим
Опція, компілятор не попереджає про збої у вбудованих функціях, оголошених в
системні заголовки.

Компілятор використовує різноманітні евристики, щоб визначити, вставляти чи ні
функція. Наприклад, компілятор враховує розмір функції
inlined і кількість вбудовування, яке вже було зроблено в поточній функції.
Тому незначні, здавалося б, зміни у вихідній програмі можуть викликати
попередження, вироблені - Winline з'являтися або зникати.

-Wno-invalid-offsetof (лише C++ та Objective-C++)
Придушити попередження від застосування макросу "offsetof" до типу не-POD. Згідно з
стандарт ISO C++ 2014 року, застосування "offsetof" до типу нестандартного макета
невизначений. Однак у існуючих реалізаціях C++ "offsetof" зазвичай дає
значущі результати. Цей прапор призначений для користувачів, які знають, що вони пишуть
nonportable код і які свідомо вирішили ігнорувати попередження про це.

Обмеження на "offsetof" можуть бути послаблені в майбутній версії стандарту C++.

-Wno-int-to-pointer-cast
Придушити попередження від приведення до типу вказівника цілого числа іншого розміру. в
C++, приведення до типу покажчика меншого розміру є помилкою. Wint-to-pointer-cast is
увімкнено за замовчуванням.

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

-Winvalid-pch
Попереджати, якщо в шляху пошуку знайдено попередньо скомпільований заголовок, але його неможливо використати.

-Довго-довго
Попереджати, якщо використовується тип "довгий довгий". Це ввімкнено або -Педантичний or
-Традиційний в режимах ISO C90 і C++98. Щоб заблокувати попереджувальні повідомлення, використовуйте
-Ні-довго-довго.

-Wvariadic-макроси
Попереджати, якщо мінливі макроси використовуються в режимі ISO C90, або якщо альтернативний синтаксис GNU
використовується в режимі ISO C99. Це ввімкнено або -Педантичний or -Традиційний, до
заблокувати попереджувальні повідомлення, використати -Wno-variadic-макроси.

-Wvarargs
Попереджати про сумнівне використання макросів, які використовуються для обробки змінних аргументів, наприклад
"va_start". Це за замовчуванням. Щоб заблокувати попереджувальні повідомлення, використовуйте -Wno-varargs.

-Wvector-operation-performance
Попереджати, якщо векторна операція не реалізована через можливості SIMD архітектури.
В основному корисний для налаштування продуктивності. Може бути реалізована векторна операція
«шматково», що означає, що скалярна операція виконується над кожним вектором
елемент; «паралельно», що означає, що векторна операція реалізується за допомогою
скаляри більш широкого типу, які зазвичай є більш ефективними; і «як одиночний
скаляр», що означає, що вектор вписується в скалярний тип.

-Wno-virtual-move-assign
Придушіть попередження про успадкування від віртуальної бази за допомогою нетривіального переміщення C++11
оператор присвоєння. Це небезпечно, оскільки віртуальна база доступна
більше ніж на один шлях, він переміщується кілька разів, що може означати, що обидва об’єкти потрапляють усередину
виведений із стану. Якщо оператор присвоєння переміщення записується так, щоб уникнути переміщення з
переміщеного з об’єкта, це попередження можна вимкнути.

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

-Wvolatile-register-var
Попереджати, якщо змінна регістра оголошена непостійною. Модифікатор volatile ні
заборонити всі оптимізації, які можуть виключити читання та/або запис в реєстр
змінні. Це попередження вмикається за допомогою -Стінка.

-Wdisabled-optimization
Попереджати, якщо запит на оптимізацію вимкнено. Це попередження, як правило, не діє
вкажіть, що з вашим кодом щось не так; це лише вказує, що GCC
оптимізатори не можуть ефективно обробляти код. Часто проблема в тому, що ваша
код занадто великий або занадто складний; GCC відмовляється від оптимізації програм при оптимізації
сама по собі, ймовірно, займе надто багато часу.

-Wpointer-знак (лише C і Objective-C)
Попереджати про передачу аргументу вказівника або присвоєння з іншим знаком. Це
параметр підтримується лише для C і Objective-C. Це мається на увазі -Стінка і
-Педантичний, який можна вимкнути за допомогою -Wno-вказівник-знак.

-Wstack-протектор
Ця опція активна лише тоді, коли -fstack-протектор є активним. Він попереджає про функції
які не захищені від розбиття стека.

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

Обмеження діє після конкатенація рядків і не враховує завершення
NUL. У C90 обмеження становило 509 символів; у C99 його було піднято до 4095. C++98 так
не вказує нормативний мінімальний максимум, тому ми не діагностуємо рядки з надмірною довжиною
C ++.

Цей варіант мається на увазі -Педантичний, і його можна вимкнути за допомогою
-Wno-наддовжина-струни.

-Wunsuffixed-float-константи (лише C і Objective-C)
Видати попередження для будь-якої плаваючої константи, яка не має суфікса. При використанні
Разом з -Wsystem-headers він попереджає про такі константи в системних заголовних файлах.
Це може бути корисно під час підготовки коду для використання з прагмою "FLOAT_CONST_DECIMAL64"
від десяткового розширення з плаваючою комою до C99.

-Wno-designated-init (лише C і Objective-C)
Придушити попередження, коли для ініціалізації структури використовується позиційний ініціализатор
було позначено атрибутом "designated_init".

Опції та цінності Налагодження вашу програма or GCC
GCC має різні спеціальні параметри, які використовуються для налагодження вашої програми або GCC:

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

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

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

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

Наступні параметри корисні, коли GCC генерується з можливістю додаткового
ніж один формат налагодження.

-gsplit-dwarf
Відокремте якомога більше інформації про налагодження карликів в окремий вихідний файл
з розширенням .dwo. Цей параметр дозволяє системі збірки уникати зв’язування файлів
з інформацією про налагодження. Щоб ця опція була корисною, потрібен налагоджувач
читання файлів .dwo.

-ggdb
Надайте налагоджуючу інформацію для використання GDB. Це означає використовувати найбільш виразні
доступний формат (DWARF 2, stabs або рідний формат, якщо жодного з них немає
підтримується), включаючи розширення GDB, якщо це взагалі можливо.

-gpubnames
Створення карликових розділів .debug_pubnames і .debug_pubtypes.

-ggnu-публічні імена
Згенеруйте розділи .debug_pubnames і .debug_pubtypes у форматі, придатному для
перетворення в індекс GDB. Ця опція корисна лише з компонувальником, який може
створити індекс GDB версії 7.

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

-feliminate-unused-debug-symbols
Надайте налагоджуючу інформацію у форматі stabs (якщо він підтримується) лише для символів
які фактично використовуються.

-femit-class-debug-always
Замість того, щоб видавати інформацію про налагодження для класу C++ лише в одному об’єктному файлі,
видавати його у всі об’єктні файли за допомогою класу. Цей параметр слід використовувати тільки з
налагоджувачі, які не можуть працювати так, як GCC зазвичай видає налагоджуючу інформацію
для класів, оскільки використання цієї опції збільшує розмір налагоджувальної інформації на
аж у два рази.

-fdebug-types-section
При використанні 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 4.

-gxcoff
Надайте інформацію про налагодження у форматі XCOFF (якщо це підтримується). Це
формат, який використовується налагоджувачем DBX в системах IBM RS/6000.

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

-гном-версія
Надайте налагоджувальну інформацію у форматі DWARF (якщо він підтримується). Значення
версія може бути 2, 3, 4 або 5; версія за замовчуванням для більшості цілей 4. DWARF
Версія 5 є лише експериментальною.

Зауважте, що з DWARF версії 2 деякі порти вимагають і завжди використовують деякі неконфліктні
DWARF 3 розширення в столах розкручування.

Для версії 4 може знадобитися GDB 7.0 і -fvar-tracking-assignments для максимальної вигоди.

-grecord-gcc-перемикачі
Цей перемикач викликає параметри командного рядка, які використовуються для виклику компілятора, який може
впливають на генерацію коду, який додається до атрибута DW_AT_producer у DWARF
інформація про налагодження. Параметри об’єднані пробілами, що відокремлюють їх
один одного та з версії компілятора. Дивись також -frecord-gcc-перемикачі для іншого
спосіб зберігання параметрів компілятора в об'єктному файлі. Це значення за замовчуванням.

-gno-record-gcc-перемикачі
Заборонити додавання параметрів командного рядка до атрибута DW_AT_producer у DWARF
інформація про налагодження.

-гстрик-карлик
Заборонити використання розширень пізнішої стандартної версії DWARF, ніж вибрана
-гном-версія. Для більшості цілей використовуються неконфліктні розширення DWARF від пізнішої версії
допускаються стандартні версії.

-гно-строгий-карлик
Дозволити використання розширень пізнішої стандартної версії DWARF, ніж вибрана
-гном-версія.

-gz[=тип]
Створіть стислі розділи налагодження у форматі DWARF, якщо це підтримується. Якщо тип is
не вказано, тип за замовчуванням залежить від можливостей асемблера та компоновщика
використаний тип може бути одним із ніхто (не стискати розділи налагодження), zlib (використовуйте zlib
стиснення у форматі ELF gABI), або зліб-гну (використовуйте стиснення zlib у традиційному GNU
формат). Якщо компонувальник не підтримує запис стиснених розділів налагодження, параметр
відхиляється. В іншому випадку, якщо асемблер їх не підтримує, -gz мовчки
ігнорується під час створення об’єктних файлів.

-gvms
Надайте інформацію про налагодження у форматі налагодження Alpha/VMS (якщо це підтримується). Це
це формат, який використовується DEBUG в системах Alpha/VMS.

-gрівень
-ggdbрівень
-gstabsрівень
-gcoffрівень
-gxcoffрівень
-gvmsрівень
Запит інформації про налагодження, а також використання рівень щоб вказати, скільки інформації. The
рівень за замовчуванням 2.

Рівень 0 взагалі не дає налагоджувальної інформації. таким чином, -g0 заперечує -g.

Рівень 1 дає мінімум інформації, достатньої для створення зворотних трас у частинах
програму, яку ви не плануєте налагоджувати. Це включає описи функцій і
зовнішні змінні та таблиці номерів рядків, але немає інформації про локальні змінні.

Рівень 3 містить додаткову інформацію, таку як усі макровизначення, присутні в файлі
програма. Деякі налагоджувачі підтримують розширення макросів під час використання -g3.

-gdwarf-2 не приймає з'єднаний рівень налагодження, оскільки GCC підтримував файл
варіант -гномик що означало створення налагоджувальної інформації у версії 1 DWARF
формат (який сильно відрізняється від версії 2), і це було б занадто заплутаним.
Цей формат налагодження давно застарів, але параметр зараз не можна змінити. Замість цього використовуйте
додатковий -gрівень можливість змінити рівень налагодження для DWARF.

-gtoggle
Вимкніть генерацію налагоджувальної інформації, якщо вимкнення цієї опції генерує її, або вимкніть її
в іншому випадку на рівні 2. Позиція цього аргументу в командному рядку не відповідає
матерія; він набирає чинності після обробки всіх інших параметрів, і тільки це діє
один раз, скільки б разів його не давали. Це в основному призначене для використання з
-fcompare-debug.

-fsanitize=адреса
Увімкніть AddressSanitizer, швидкий детектор помилок пам’яті. Інструкції доступу до пам'яті є
оснащені інструментами для виявлення помилок за межами та використання після вільних. Побачити
<https://github.com/google/sanitizers/wiki/AddressSanitizer> для більш детальної інформації. The
На поведінку під час виконання можна вплинути за допомогою ASAN_OPTIONS змінна середовища. Коли
якщо встановлено значення "help=1", доступні параметри відображаються під час запуску інструменту
програма. Побачити
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> для а
список підтримуваних опцій.

-fsanitize=адреса ядра
Увімкнути AddressSanitizer для ядра Linux. Побачитиhttps://github.com/google/kasan/wiki>
для більш докладної інформації.

-fsanitize=потік
Увімкніть ThreadSanitizer, швидкий детектор перегонів даних. Інструкції доступу до пам'яті є
обладнаний для виявлення помилок у перегонах даних. Побачити
<https://github.com/google/sanitizers/wiki#threadsanitizer> для більш детальної інформації. Біг-
На поведінку часу можна вплинути за допомогою TSAN_OPTIONS змінна середовища; побачити
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> для списку
підтримувані параметри.

-fsanitize=витік
Увімкніть LeakSanitizer, детектор витоку пам’яті. Ця опція має значення лише для зв’язування
виконувані файли, а якщо ні -fsanitize=адреса ні -fsanitize=потік використовується. У цьому
у випадку, якщо виконуваний файл пов'язаний з бібліотекою, яка замінює "malloc" та інші
функції розподілу. Побачити
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> більше
деталі. На поведінку під час виконання можна вплинути за допомогою LSAN_OPTIONS навколишнє середовище
змінна.

-fsanitize=не визначено
Увімкніть UndefinedBehaviorSanitizer, швидкий детектор невизначеної поведінки. Різні
обчислення інструментують для виявлення невизначеної поведінки під час виконання. Поточний
підопції:

-fsanitize=зміна
Цей параметр дозволяє перевірити, чи не є результат операції зміни
невизначений. Зауважте, що те, що саме вважається невизначеним, дещо відрізняється
між C і C++, а також між ISO C90 і C99 тощо.

-fsanitize=ціле-ділення-на нуль
Визначити ціле ділення на нуль, а також поділ «INT_MIN / -1».

-fsanitize=недоступний
За допомогою цієї опції компілятор перетворює виклик "__builtin_unreachable" у a
натомість виклик діагностичного повідомлення. При досягненні виклику "__builtin_unreachable",
поведінка невизначена.

-fsanitize=vla-зв'язаний
Цей параметр наказує компілятору перевірити, чи розмір змінної довжини
масив позитивний.

-fsanitize=нуль
Ця опція вмикає перевірку покажчика. Зокрема, додаток, створений з
ця опція, увімкнена, видаватиме повідомлення про помилку під час спроби розіменування a
NULL вказівник або якщо посилання (можливо, посилання на значення rvalue) прив’язано до NULL
або якщо метод викликається для об’єкта, на який вказує вказівник NULL.

-fsanitize=повернути
Ця опція вмикає перевірку оператора повернення. Програми, створені з цією опцією
Якщо ввімкнено, буде видаватися повідомлення про помилку, коли закінчується функція, яка не є недійсною
досягнуто без фактичного повернення значення. Цей параметр працює лише на C++.

-fsanitize=переповнення цілого числа зі знаком
Цей параметр дозволяє перевіряти переповнення знакового цілого числа. Перевіряємо, що результат
"+", "*", і як унарний, так і двійковий "-" не переповнюються в знаковому
арифметика. Зауважте, що потрібно враховувати цілочисельні правила просування. Тобто,
наступне не є переповненням:

знак зі знаком a = SCHAR_MAX;
a++;

-fsanitize=межі
Цей параметр дозволяє інструментувати межі масиву. Різні поза межами
доступи виявлено. Гнучкі елементи масиву, гнучкі масиви, подібні до членів масиву,
і ініціализатори змінних зі статичним зберіганням не інструментуються.

-fsanitize=вирівнювання
Цей параметр дозволяє перевірити вирівнювання покажчиків, коли вони розіменовані,
або коли посилання прив'язане до недостатньо вирівняної мети, або коли метод або
Конструктор викликається для недостатньо вирівняного об’єкта.

-fsanitize=розмір об'єкта
Цей параметр дозволяє інструментувати посилання на пам’ять за допомогою
Функція "__builtin_object_size". Різні доступи вказівників поза межами
виявлено.

-fsanitize = float-окремий за нуль
Виявити ділення з плаваючою комою на нуль. На відміну від інших подібних варіантів,
-fsanitize = float-окремий за нуль не ввімкнено -fsanitize=не визначено, з
Ділення з плаваючою комою на нуль може бути законним способом отримання нескінченності
і NaNs.

-fsanitize=float-cast-overflow
Цей параметр дозволяє перевіряти перетворення типу з плаваючою комою в ціле число. Перевіряємо
щоб результат перетворення не переповнювався. На відміну від інших подібних
варіантів, -fsanitize=float-cast-overflow не ввімкнено -fsanitize=не визначено.
Цей параметр не працює добре, якщо ввімкнено винятки "FE_INVALID".

-fsanitize=ненульовий атрибут
Цей параметр дозволяє інструментувати виклики, перевіряючи, чи не є значення null
передається до аргументів, позначених як такі, що потребують ненульового значення функцією «ненуль».
атрибут.

-fsanitize=повертає-ненульовий-атрибут
Цей параметр дозволяє інструментувати оператори return у функціях, позначених
Атрибут функції "returns_nonnull", щоб виявити повернення нульових значень з таких
функції.

-fsanitize=bool
Ця опція дозволяє вимірювати навантаження з bool. Якщо значення, відмінне від 0/1
завантажується, виникає помилка під час виконання.

-fsanitize=enum
Цей параметр включає інструментування навантажень із типу enum. Якщо значення
За межами діапазону значень для типу enum завантажується помилка під час виконання
виданий.

-fsanitize=vptr
Цей параметр дозволяє інструментувати виклики функцій-членів C++, доступ до членів
і деякі перетворення між покажчиками на базові та похідні класи, щоб перевірити
об’єкт, на який посилається, має правильний динамічний тип.

У той час як -ftrapv спричиняє випуск пасток для підписаних переповнень, -fsanitize=не визначено
видає діагностичне повідомлення. Наразі це працює лише для сімейства мов C.

-fno-sanitize=все
Цей параметр вимикає всі раніше ввімкнені дезінфікуючі засоби. -fsanitize=все НЕ
дозволено, оскільки деякі дезінфікуючі засоби не можна використовувати разом.

-fasan-shadow-offset=номер
Цей параметр змушує GCC використовувати користувацьке зміщення тіні в перевірках AddressSanitizer. це є
корисно для експериментування з різними макетами тіньової пам'яті в ядрі
Адреса Sanitizer.

-fsanitize-відновити[=вибирає]
-fsanitize-recover= контролює режим відновлення помилок для дезінфікуючих засобів, зазначених у комах
окремий список вибирає. Увімкнення цієї опції для компонента дезінфікуючого засобу призводить до цього
спробуйте продовжити запуск програми, як ніби помилки не сталося. Це означає кілька
Про помилки під час виконання можна повідомити під час одного запуску програми, а код виходу
програма може вказувати на успіх, навіть якщо повідомлялося про помилки. The
-fno-sanitize-recover= Для зміни цієї поведінки можна використовувати параметр: тільки перший
Виявлена ​​помилка повідомляється, і програма виходить із ненульовим кодом виходу.

Наразі ця функція працює лише для -fsanitize=не визначено (і його підопції, крім
та цінності -fsanitize=недоступний та -fsanitize=повернути), -fsanitize=float-cast-overflow,
-fsanitize = float-окремий за нуль та -fsanitize=адреса ядра. Для цих дезінфікуючих засобів
відновлення помилок увімкнено за замовчуванням. -fsanitize-recover=все та
-fno-sanitize-recover=все також прийнято, перший забезпечує відновлення для всіх
дезінфікуючих засобів, які його підтримують, останнє вимикає відновлення для всіх дезінфікуючих засобів
підтримати його.

Синтаксис без явного вибирає параметр не підтримується. Це еквівалентно

-fsanitize-recover=не визначено,float-cast-overflow,float-ділить-на нуль

Аналогічно -fno-sanitize-recover еквівалентна

-fno-sanitize-recover=не визначено,float-cast-overflow,float-ділить-на-нуль

-fsanitize-undefined-trap-on-error
Команда -fsanitize-undefined-trap-on-error Параметр наказує компілятору звітувати
невизначена поведінка, що використовує "__builtin_trap", а не бібліотечну процедуру "libubsan".
Перевага цього полягає в тому, що бібліотека "libubsan" не потрібна і не пов'язана
в, тому це можна використовувати навіть у окремо розташованих середовищах.

-fcheck-pointer-bounds
Увімкнути інструменти перевірки меж покажчика. Кожне посилання на пам'ять інструментується
з перевіркою вказівника, який використовується для доступу до пам'яті, на відповідність межам, пов'язаним з цим
вказівник.

Наразі доступна лише реалізація для Intel MPX, отже, цільова x86 і
-mmpx необхідні для ввімкнення цієї функції. Прилади на основі MPX вимагає a
бібліотека часу виконання, щоб увімкнути MPX в апаратному забезпеченні та обробляти сигнали порушення обмежень. За
за замовчуванням, коли -fcheck-pointer-bounds та -mmpx параметри використовуються для зв’язування програми,
Посилання драйверів GCC проти libmpx бібліотека часу виконання та обгортки libmpx бібліотека. Це
також передає '-z bndplt' компоновщику, якщо він підтримує цю опцію (що встановлено
на конфігурації libmpx). Зауважте, що старі версії компонувальника можуть ігнорувати опцію. Золото
компонувальник не підтримує параметр '-z bndplt'. Без підтримки '-z bndplt' у компоновщику
виклики до динамічних бібліотек втрачають межі, що знижує загальний рівень захисту. Його
настійно рекомендуємо використовувати компонувальник з підтримкою '-z bndplt'. Якщо такого лінкера немає
доступний, рекомендується завжди використовувати -static-libmpxwrappers для кращого захисту
рівень або використання -статичний щоб повністю уникнути зовнішніх викликів до динамічних бібліотек. MPX-
Інструменти на основі можуть використовуватися для налагодження, а також можуть бути включені у виробництво
код для підвищення безпеки програми. Залежно від використання у вас можуть бути різні
вимоги до бібліотеки часу виконання. Поточна версія бібліотеки часу виконання MPX
більш орієнтований на використання як інструмент налагодження. Використання бібліотеки часу виконання MPX має на увазі
-lpthread, Див. Також -static-libmpx. На поведінку бібліотеки під час виконання можна вплинути
використовуючи різні CHKP_RT_* змінні середовища. Побачити
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> більше
подробиці

Створені прилади можуть керуватися різними -fchkp-* варіанти та за
Атрибут поля структури "bnd_variable_size", "bnd_legacy" і "bnd_instrument"
атрибути функції. GCC також надає ряд вбудованих функцій для керування
засіб перевірки меж покажчика.

-fchkp-check-incomplete-type
Створення перевірок меж покажчика для змінних із неповним типом. Увімкнено
за замовчуванням.

-fchkp-вузькі межі
Контролює межі, що використовуються за допомогою Pointer Bounds Checker для вказівників на поля об’єктів. Якщо
увімкнено звуження, тоді використовуються межі поля. В іншому випадку використовуються межі об’єкта.
Дивіться також -fchkp-від вузького до самого внутрішнього масиву та -fchkp-перше-поле-має-власні-межі.
Увімкнено за замовчуванням.

-fchkp-перше-поле-має-власні-межі
Примушує засіб перевірки меж покажчика використовувати звужені межі для адреси першого
поле в структурі. За замовчуванням вказівник на перше поле має ті самі межі
як вказівник на всю структуру.

-fchkp-від вузького до самого внутрішнього масиву
Примушує засіб перевірки меж вказівника використовувати межі внутрішніх масивів у разі вкладених
доступ до статичного масиву. За замовчуванням ця опція вимкнена, а межі крайніх
використовуються масиви.

-fchkp-оптимізувати
Вмикає оптимізацію перевірки меж покажчика. Увімкнено за замовчуванням під час оптимізації
рівні -O, -О2, -О3.

-fchkp-use-fast-string-functions
Дозволяє використовувати версії рядкових функцій *_nobnd (не копіюючи межі) покажчиком
Перевірка меж. Вимкнено за замовчуванням.

-fchkp-use-nochk-string-functions
Дозволяє використовувати версії рядкових функцій *_nochk (без перевірки меж) за допомогою покажчика
Перевірка меж. Вимкнено за замовчуванням.

-fchkp-використання статичних меж
Дозволити засобу перевірки меж покажчика генерувати статичні межі, що містять межі статичних
змінні. Увімкнено за замовчуванням.

-fchkp-use-static-const-bounds
Використовуйте статично ініціалізовані межі для постійних обмежень замість того, щоб генерувати їх кожну
час вони необхідні. За замовчуванням увімкнено, коли -fchkp-використання статичних меж активовано

-fchkp-treat-zero-dynamic-size-as-infinite
За допомогою цього параметра об’єкти з неповним типом, динамічно отриманий розмір яких дорівнює нулю
Обробляються як такі, що мають нескінченний розмір замість цього за допомогою перевірки меж покажчика. Цей варіант
може бути корисним, якщо програма пов’язана з бібліотекою, де для деяких відсутня інформація про розмір
символи. Вимкнено за замовчуванням.

-fchkp-check-read
Доручає засобу перевірки меж вказівника генерувати перевірки для всіх доступів до читання до пам’яті.
Увімкнено за замовчуванням.

-fchkp-перевірка-запис
Доручає засобу перевірки меж вказівника генерувати перевірки для всіх доступів запису до пам’яті.
Увімкнено за замовчуванням.

-fchkp-store-bounds
Доручає Pointer Bounds Checker генерувати сховища меж для запису покажчика.
Увімкнено за замовчуванням.

-fchkp-instrument-calls
Доручає засобу перевірки меж покажчика передавати межі покажчика викликам. Увімкнено за замовчуванням.

-fchkp-instrument-marked-only
Доручає засобу перевірки меж вказівника інструментувати лише функції, позначені символом
атрибут "bnd_instrument". Вимкнено за замовчуванням.

-fchkp-використання обгорток
Дозволяє засобу перевірки меж вказівника замінювати виклики вбудованих функцій викликами до
функції обгортки. Коли -fchkp-використання обгорток використовується для зв'язування програми, драйвер GCC
автоматично посилається проти обгортки libmpx, Див. Також -static-libmpxwrappers. Увімкнено
за замовчуванням

-fdump-final-insns[=файл]
Дамп остаточного внутрішнього представлення (RTL) до файл. Якщо необов’язковий аргумент
пропущено (або якщо файл є "."), ім'я файлу дампа визначається шляхом додавання
".gkd" до назви вихідного файлу компіляції.

-fcompare-debug[=вибирає]
Якщо під час компіляції не виникає жодної помилки, запустіть компілятор вдруге, додавши вибирає та
-fcompare-debug-second до аргументів, переданих до другої компіляції. Киньте
остаточне внутрішнє представлення в обох компіляціях і вивести помилку, якщо вони відрізняються.

Якщо знак рівності опущено, значення за замовчуванням -gtoggle використовується.

Змінна середовища GCC_COMPARE_DEBUG, якщо визначено, не порожнє і відмінне від нуля,
неявно дозволяє -fcompare-debug. Якщо GCC_COMPARE_DEBUG визначається рядком
починаючи з тире, потім використовується для вибирає, інакше значення за замовчуванням -gtoggle is
використаний

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

Щоб перевірити повне покриття під час -fcompare-debug тестування, комплект GCC_COMPARE_DEBUG сказати
-fcompare-debug-not-overridden, який GCC відхиляє як недійсний варіант у будь-якому фактичному
компіляція (а не попередня обробка, збірка або зв'язування). Щоб отримати лише попередження,
установка GCC_COMPARE_DEBUG до -w%n-fcompare-debug НЕ переосмислений зроблю.

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

Коли цей параметр передається драйверу компілятора, він викликає перший компіляція до
бути пропущено, що робить його корисним лише для налагодження власне компілятора.

-feliminate-dwarf2-dups
Стисніть інформацію про налагодження DWARF 2, видаливши дубльовану інформацію про
кожен символ. Цей параметр має сенс лише під час створення налагодження DWARF 2
інформація з -gdwarf-2.

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

Цей параметр істотно зменшує розмір налагоджувальної інформації, але при
значні потенційні втрати інформації про типи для налагоджувача. Побачити
-femit-struct-debug-reduced для менш агресивного варіанту. Побачити
-femit-struct-debug-detailed для більш детального контролю.

Ця опція працює тільки з DWARF 2.

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

Цей параметр значно зменшує розмір налагоджувальної інформації
потенційна втрата інформації про тип для налагоджувача. Побачити -femit-struct-debug-baseonly
для більш агресивного варіанту. Побачити -femit-struct-debug-detailed для більш детальної інформації
контролювати.

Ця опція працює тільки з DWARF 2.

-femit-struct-debug-detailed[=спец-список]
Вкажіть структурно-подібні типи, для яких компілятор генерує налагоджувальну інформацію. The
Мета полягає в тому, щоб зменшити дублювання налагоджувальної інформації структури між різними об’єктними файлами
в рамках тієї ж програми.

Цей варіант є детальною версією -femit-struct-debug-reduced та
-femit-struct-debug-baseonly, який служить для більшості потреб.

Специфікація має синтаксис[реж:|Інд.:][замовити:|жанр:](будь-який|системний|база|ніхто)

Необов’язкове перше слово обмежує специфікацію структурами, які використовуються безпосередньо
(реж:) або використовується опосередковано (Інд.:). Тип структури використовується безпосередньо, коли це тип
змінної, член. Непряме використання виникає через покажчики на структури. Тобто,
коли використання неповної структури допустиме, використання є непрямим. Прикладом є структура
один прямий; структура два * непрямі;.

Додаткове друге слово обмежує специфікацію звичайними структурами (замовити:) Або
загальні структури (жанр:). Загальні структури трохи складно пояснити. Для C++,
це неявні спеціалізації шаблонних класів або нешаблонних класів
в межах вищезазначеного. Інші мови програмування мають загальні ознаки, але
-femit-struct-debug-detailed ще не реалізує їх.

Третє слово вказує вихідні файли для тих структур, для яких компілятор
має видавати налагоджувальну інформацію. Цінності ніхто та будь-який мають нормальне значення. The
значення база означає, що основа імені файлу, в якому оголошено тип
має відповідати основі імені основного файлу компіляції. На практиці,
це означає, що при компіляції foo.c, для типів генерується інформація про налагодження
оголошено в цьому файлі та foo.h, але не інші заголовні файли. Значення системний засоби
ці типи задовольняють база або оголошені в заголовках системи або компілятора.

Можливо, вам доведеться поекспериментувати, щоб визначити найкращі налаштування для вашої програми.

За замовчуванням - -femit-struct-debug-detailed=все.

Ця опція працює тільки з DWARF 2.

-fno-merge-debug-strings
Скеруйте компоновщику не зливати рядки в налагоджувальну інформацію
ідентичні в різних об’єктних файлах. Злиття підтримується не всіма асемблерами або
лінкери. Об’єднання зменшує розмір налагоджувальної інформації у вихідному файлі на
витрати на збільшення часу обробки посилання. Об’єднання ввімкнено за замовчуванням.

-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-report
Змушує компілятор друкувати деяку статистику про постійне виділення пам’яті перед або
після міжпроцедурної оптимізації.

-fprofile-звіт
Змушує компілятор друкувати деяку статистику щодо узгодженості (оцінюваного) профілю
і ефект від окремих пасів.

-fstack-usage
Виводить компілятор інформацію про використання стека для програми для кожної функції
основи. Ім'я файлу для дампу створюється шляхом додавання .su до auxname. auxname is
генерується з імені вихідного файлу, якщо вказано явно і не є файлом
виконуваний файл, інакше це базове ім'я вихідного файлу. Запис складається з
три поля:

* Назва функції.

* Кількість байтів.

* Один або кілька кваліфікуючих: "статичний", "динамічний", "обмежений".

Кваліфікатор «статичний» означає, що функція статично маніпулює стеком: a
фіксована кількість байтів виділяється для кадру при вході функції та вивільняється
вихід із функції; ніякі коригування стека в іншому випадку не виконуються у функції. Другий
поле - це фіксована кількість байтів.

Кваліфікатор "динамічний" означає, що функція динамічно маніпулює стеком: in
на додаток до статичного розподілу, описаного вище, коригування стека вносяться в
тіло функції, наприклад, щоб натиснути/вивести аргументи навколо викликів функції. Якщо
також присутній специфікатор "bounded", сума цих коригувань обмежена
час компіляції, а друге поле є верхньою межею загальної кількості використаного стека
за функцією. Якщо його немає, сума цих коригувань не обмежена
під час компіляції, а друге поле представляє лише обмежену частину.

-fprofile-arcs
Додайте код, щоб програма проходила дуги обладнані інструментами. Під час виконання програми
записує, скільки разів виконується кожне відділення та виклик і скільки разів воно виконується
або повертає. Коли скомпільована програма завершує роботу, вона зберігає ці дані у файлі
auxname.gcda для кожного вихідного файлу. Дані можуть бути використані для профілю
оптимізації (-fгілля-ймовірності), або для аналізу охоплення тестами
(-ftest-покриття). Кожен об’єктний файл auxname створюється з назви
вихідний файл, якщо вказано явно і він не є остаточним виконуваним файлом, інакше це
є базовим ім'ям вихідного файлу. В обох випадках будь-який суфікс видаляється (напр
foo.gcda для вхідного файлу dir/foo.cабо dir/foo.gcda для вихідного файлу, зазначеного як -o
dir/foo.o).

--покриття
Ця опція використовується для компіляції та зв’язування коду, інструментованого для аналізу покриття. The
параметр є синонімом до -fprofile-arcs -ftest-покриття (при складанні) та -lgcov
(при з'єднанні). Додаткову інформацію дивіться в документації щодо цих параметрів.

* Компілюйте вихідні файли з -fprofile-arcs плюс оптимізація та генерація коду
варіанти. Для аналізу покриття тестом використовуйте додатковий -ftest-покриття варіант.
Вам не потрібно профільувати кожен вихідний файл у програмі.

* Зв’яжіть свої об’єктні файли з -lgcov or -fprofile-arcs (останнє має на увазі
колишній).

* Запустіть програму для репрезентативного робочого навантаження, щоб створити профіль дуги
інформації. Це можна повторювати будь-яку кількість разів. Можна запускати одночасно
екземплярів вашої програми та за умови, що файлова система підтримує блокування, файл
файли даних будуть правильно оновлені. Також виявляються "форк" викликів і
правильно оброблено (подвійний підрахунок не відбудеться).

* Для оптимізації, орієнтованої на профіль, скомпілюйте вихідні файли знову з тим самим
Опції оптимізації та генерації коду плюс -fгілля-ймовірності.

* Для аналізу тестового покриття використовуйте gcov створювати інформацію, зрозумілу людині
.gcno та .gcda файлів. Зверніться до gcov документація для подальшого
інформація.

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

-ftest-покриття
Створіть файл нотаток, який gcov Утиліта покриття коду може використовуватися для відображення програми
покриття. Викликається файл нотаток кожного вихідного файлу auxname.gcno. Зверніться до
-fprofile-arcs варіант вище для опису auxname та інструкції, як це зробити
генерувати дані тестового покриття. Дані покриття збігаються з вихідними файлами більш точно, якщо
ви не оптимізуєте.

-fdbg-cnt-список
Надрукуйте назву та верхню межу лічильника для всіх лічильників налагодження.

-fdbg-cnt=список зустрічних значень
Встановіть верхню межу внутрішнього лічильника налагодження. список зустрічних значень відокремлюється комою
список ім'я:значення пари, яка встановлює верхню межу кожного лічильника налагодження ім'я до
значення. Усі лічильники налагодження мають початкову верхню межу "UINT_MAX"; таким чином "dbg_cnt"
завжди повертає true, якщо верхня межа не встановлена ​​цим параметром. Наприклад, с
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" повертає true лише для перших 10
виклики.

-придатний-вид-проходити
-fdisable-вид-проходити=діапазон-список
Це набір параметрів, які використовуються для явного вимкнення/включення оптимізації
проходить. Ці параметри призначені для використання для налагодження GCC. Користувачі компілятора повинні
замість цього використовуйте звичайні параметри для ввімкнення/вимкнення пропусків.

-fdisable-ipa-проходити
Вимкнути пропуск IPA проходити. проходити це ім'я пропуску. Якщо той же прохід статичний
викликається компілятором кілька разів, ім’я проходу має бути доповнене символом a
порядковий номер, починаючи з 1.

-fdisable-rtl-проходити
-fdisable-rtl-проходити=діапазон-список
Вимкнути пропуск RTL проходити. проходити це ім'я пропуску. Якщо той же прохід статичний
викликається компілятором кілька разів, ім’я проходу має бути доповнене символом a
порядковий номер, починаючи з 1. діапазон-список це список, розділений комами
діапазони функцій або імена асемблера. Кожен діапазон — це пара чисел, розділена символом a
товстої кишки. Асортимент включає в себе обидва кінці. Якщо діапазон тривіальний, число
пару можна спростити як одне число. Якщо вузол графіка виклику функції
UID потрапляє в один із зазначених діапазонів, проходити для цього вимкнено
функція. UID показано в заголовку функції файлу дампа, а також пропуск
імена можна скидати за допомогою параметра -fdump-pass.

-fdisable-tree-проходити
-fdisable-tree-проходити=діапазон-список
Вимкнути пропуск дерева проходити, Побачити -fdisable-rtl для опису варіанту
аргументів.

-fenable-ipa-проходити
Увімкнути пропуск IPA проходити. проходити це ім'я пропуску. Якщо той же прохід статичний
викликається компілятором кілька разів, ім’я проходу має бути доповнене символом a
порядковий номер, починаючи з 1.

-fenable-rtl-проходити
-fenable-rtl-проходити=діапазон-список
Увімкнути пропуск RTL проходити, Побачити -fdisable-rtl для опису аргументу опції та
приклади

-фенабельне-дерево-проходити
-фенабельне-дерево-проходити=діапазон-список
Увімкнути пропуск дерева проходити, Побачити -fdisable-rtl для опису аргументів опції.

Ось кілька прикладів, які показують використання цих параметрів.

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

-dлітери
-fdump-rtl-проходити
-fdump-rtl-проходити=ім'я файлу
Каже створювати дампи налагодження під час компіляції в часи, визначені літери, це
використовується для налагодження проходів компілятора на основі RTL. Імена файлів для більшості
дампи створюються шляхом додавання номера проходу та слова до ім'я дампу, А
файли створюються в каталозі вихідного файлу. У випадку =ім'я файлу варіант
дамп виводиться на заданий файл замість пронумерованих файлів дампу. Примітка
що номер пропуску обчислюється статично, коли перепустки реєструються в перепустці
менеджер. При цьому нумерація не пов'язана з динамічним порядком виконання
проходить. Зокрема, пропуск, встановлений плагіном, може мати номер більше 200 навіть
якщо вона виконана досить рано. ім'я дампу генерується з імені вихідного файлу,
якщо вказано явно, і він не є виконуваним файлом, інакше це базове ім'я
вихідний файл. Ці перемикачі можуть мати різний ефект, коли -E використовується для
попередня обробка.

Дампи налагодження можна ввімкнути за допомогою a -fdump-rtl перемикач чи щось інше -d варіант літери. Тут
можливі літери для використання в проходити та літерита їх значення:

-fdump-rtl-alignments
Дамп після обчислення вирівнювань гілок.

-fdump-rtl-asmcons
Дамп після виправлення операторів rtl, які мають незадоволені обмеження входу/виходу.

-fdump-rtl-auto_inc_dec
Дамп після виявлення автоматичного включення. Цей пропуск працює лише на архітектурах, які
мати інструкції автоматичного включення або автоматичного розвантаження.

-fdump-rtl-бар'єри
Викиньте після очищення інструкції з шлагбаума.

-fdump-rtl-bbpart
Скидайте після розділення гарячих і холодних базових блоків.

-fdump-rtl-bbro
Дамп після зміни порядку блоку.

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

-fdump-rtl-bypass
Обхід дампу після переходу та оптимізація потоку керування.

-fdump-rtl-combine
Дамп після проходу комбінації інструкцій RTL.

-fdump-rtl-compgotos
Дамп після дублювання обчислених goto.

-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
Дамп після завершення коду обробки EH.

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

-fdump-rtl-expand
Дамп після генерації 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-initivals
Дамп після обчислення наборів початкових значень.

-fdump-rtl-into_cfglayout
Дамп після перетворення в режим cfglayout.

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

-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-postreload
Дамп після оптимізації після перезавантаження.

-fdump-rtl-pro_and_epilogue
Дамп після створення прологів та епілогів функції.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 та -fdump-rtl-sched2 увімкнути дамп після основного блоку
перепустки розкладу.

-fdump-rtl-ree
Дамп після усунення знаку/нуля розширення.

-fdump-rtl-seqabstr
Дамп після виявлення загальної послідовності.

-fdump-rtl-shorten
Відвалюють після вкорочення гілок.

-fdump-rtl-брат
Дамп після оптимізації дзвінків.

-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-web
Дамп після розділення діапазону в реальному часі.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Ці дампи визначені, але завжди створюють порожні файли.

-in
-fdump-rtl-все
Виготовте всі перераховані вище відвали.

-dA Анотуйте вихідні дані асемблера різною інформацією про налагодження.

-dD Наприкінці попередньої обробки скиньте всі визначення макросу, крім звичайного
вихід.

-dh Створюйте дамп ядра щоразу, коли виникає помилка.

-dp Позначте вихідний результат асемблера коментарем, що вказує, який шаблон і
використовується альтернатива. Довжина кожної інструкції також надрукована.

-dP Скидайте RTL у вивід ассемблера як коментар перед кожною інструкцією. Також
включається -dp анотація

-dx Просто згенеруйте RTL для функції замість її компіляції. Зазвичай використовується з
-fdump-rtl-expand.

-fdump-noaddr
Під час виконання дампів налагодження придушіть вихід адреси. Це робить його більш здійсненним
використовуйте diff для налагоджувальних дампів для викликів компілятора з різними бінарними файлами компілятора
та/або різні місця початку тексту / bss / data / heap / stack / dso.

-report-bug
Збирайте та скидайте інформацію про налагодження в тимчасовий файл, якщо ICE в компіляторі C/C++
трапився.

-fdump-ненумерований
Виконуючи дамп налагодження, придушіть номери інструкцій та виведення адреси. Це
робить більш можливим використання diff у налагоджувальних дампах для викликів компілятора з
різні варіанти, зокрема з і без -g.

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

-fdump-блок перекладу (лише C++)
-fdump-translation-unit-опції (лише C++)
Дамп у файл представлення деревоподібної структури для всієї одиниці перекладу.
Ім'я файлу створюється шляхом додавання .tu до назви вихідного файлу, і файл є
створюється в тому ж каталозі, що й вихідний файл. Якщо -опції використовується форма,
опції контролює деталі дампу, як описано для -fdump-дерево Варіанти.

-fdump-ієрархія класів (лише C++)
-fdump-class-hierarchy-опції (лише C++)
Дамп представлення ієрархії кожного класу та макета таблиці віртуальних функцій у a
файл. Ім'я файлу створюється шляхом додавання .клас до імені вихідного файлу та файлу
створюється в тому ж каталозі, що й вихідний файл. Якщо -опції використовується форма,
опції контролює деталі дампу, як описано для -fdump-дерево Варіанти.

-fdump-ipa-перемикання
Керуйте демпінгом на різних етапах міжпроцедурного аналізу дерева мови до a
файл. Ім’я файлу генерується шляхом додавання суфікса, специфічного для перемикача, до джерела
ім’я файлу, і файл створюється в тому самому каталозі, що й вихідний файл. The
можливі такі відвали:

всі Вмикає всі міжпроцедурні дампи аналізу.

cgraph
Видає інформацію про оптимізацію графіка викликів, видалення невикористаної функції та
вбудовані рішення.

вбудований
Дамп після вбудовування функції.

-fdump-pass
Дамп списку проходів оптимізації, які вмикаються та вимикаються поточним
параметри командного рядка.

-fdump-statistics-варіант
Увімкнути та контролювати скидання статистики проходу в окремий файл. Ім'я файлу
утворюється шляхом додавання суфікса, що закінчується на .статистика до імені вихідного файлу та
файл створюється в тому ж каталозі, що й вихідний файл. Якщо -варіант форма є
б / в, - статистика викликає підсумовування лічильників по всьому блоку компіляції while
- деталі скидає кожну подію, оскільки проходи генерують їх. За замовчуванням без опції
для підсумовування лічильників для кожної скомпільованої функції.

-fdump-tree-перемикання
-fdump-tree-перемикання-опції
-fdump-tree-перемикання-опції=ім'я файлу
Контролювати дампування на різних етапах обробки проміжного дерева мови до
файл. Ім’я файлу генерується шляхом додавання суфікса, специфічного для перемикача, до
ім’я вихідного файлу, і файл створюється в тому самому каталозі, що й вихідний файл. в
case of =ім'я файлу опція, дамп виводиться на заданий файл замість auto
іменовані файли дампу. Якщо -опції використовується форма, опції це список - відокремлений
параметри, які контролюють деталі дампа. Не всі варіанти застосовні до всіх
смітники; ті, які не мають значення, ігноруються. Доступні наступні варіанти

адреса
Надрукуйте адресу кожного вузла. Зазвичай це не має сенсу, оскільки змінюється
відповідно до середовища та вихідного файлу. Його основне використання - для зв'язування a
файл дампа з середовищем налагодження.

ім'я
Якщо "DECL_ASSEMBLER_NAME" встановлено для даного декл, використовуйте це в дампі
замість "DECL_NAME". Його основне використання - це простота використання в зворотному порядку
зіпсовані імена у файлі збірки.

стрункий
Під час дампування інтерфейсних проміжних уявлень заблокуйте дампування членів
область або тіло функції лише тому, що ця область досягнута. Тільки
скидати такі елементи, коли вони безпосередньо доступні іншим шляхом.

Під час скидання дерев із гарними написами ця опція забороняє скидання тіл
контрольні структури.

Під час скидання RTL друкуйте RTL у тонкому (згорнутому) вигляді замість стандартного
LISP-подібне представлення.

сировина Надрукуйте необроблене представлення дерева. За замовчуванням дерева надруковано в красивому вигляді
С-подібне представлення.

деталі
Увімкнути детальніші дампи (не враховується кожним параметром дампу). Також включають
інформація з оптимізації проходить.

статистика
Увімкнути скидання різної статистики про проход (не враховується кожним дампом
варіант).

Блоки
Увімкнути відображення базових меж блоку (вимкнено в необроблених дампах).

графік
Для кожного з інших вказаних файлів дампу (-fdump-rtl-проходити), дамп а
представлення графіка потоку керування, придатного для перегляду за допомогою GraphViz to
file.passid.pass.dot. Кожна функція у файлі добре надрукована як підграф,
щоб GraphViz міг відобразити їх усі в одному сюжеті.

Наразі ця опція працює лише для дампів RTL, а RTL завжди завантажується
струнка форма.

vops
Увімкнути відображення віртуальних операндів для кожного оператора.

lineno
Увімкнути відображення номерів рядків для операторів.

UID Увімкнути показ унікального ідентифікатора ("DECL_UID") для кожної змінної.

докладний
Увімкнути відображення дампу дерева для кожного оператора.

eh Увімкнути показ номера регіону EH, що містить кожну заяву.

scev
Увімкнути показ деталей аналізу скалярної еволюції.

оптимізований
Увімкнути відображення інформації про оптимізацію (доступно лише на певних проходах).

пропущений
Увімкнути відображення пропущеної інформації про оптимізацію (доступно лише під час певних проходів).

увагу
Увімкнути іншу детальну інформацію про оптимізацію (доступно лише на певних проходах).

=ім'я файлу
Замість автоматичного іменованого файлу дампа виведіть у вказане ім’я файлу. Файл
Імена stdout та stderr обробляються спеціально і вважаються вже відкритими
стандартні потоки. Наприклад,

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr file.c

виводить дамп векторизатора foo.dump, тоді як ПРЕДВАРИТЕЛЬНИЙ дамп виводиться на stderr.
Якщо для одного проходу вказано два конфліктуючі імена файлів дампу, то останнє
параметр замінює попередній.

всі Увімкніть усі параметри, крім сировина, стрункий, докладний та lineno.

оптальний
Увімкніть усі параметри оптимізації, тобто оптимізований, пропущений та увагу.

Можливі такі звалища дерев:

оригінал
Дамп перед будь-якою оптимізацією на основі дерева, щоб файл.оригінал.

оптимізований
Дамп все-таки оптимізація на основі дерева, до file.optimized.

Gimple
Дампуйте кожну функцію до та після переходу для полегшення у файл. Файл
назва вноситься шляхом додавання .gimple до імені вихідного файлу.

cfg Дампуйте графік потоку керування для кожної функції у файл. Ім'я файлу створюється
додавання .cfg до імені вихідного файлу.

ch Дамп кожної функції після копіювання заголовків циклу. Ім'я файлу створюється шляхом додавання
.ch до імені вихідного файлу.

сонячна піврічна складова Дамп інформації, пов’язаної з SSA, у файл. Ім'я файлу створюється шляхом додавання .ssa
до імені вихідного файлу.

псевдонім
Дамп інформації про псевдонім для кожної функції. Ім'я файлу створюється шляхом додавання
.псевдонім до імені вихідного файлу.

ccp Дамп кожної функції після CCP. Ім'я файлу створюється шляхом додавання .ccp до
ім'я вихідного файлу.

storeccp
Дамп кожної функції після STORE-CCP. Ім'я файлу створюється шляхом додавання .storeccp
до імені вихідного файлу.

попередньо Висипати дерева після часткового усунення надмірності. Ім'я файлу створюється
додавання .pre до імені вихідного файлу.

частоти Викидайте дерева після повного усунення надмірності. Ім'я файлу створюється шляхом додавання
.фр до імені вихідного файлу.

copyprop
Скидайте дерева після копіювання. Ім'я файлу створюється шляхом додавання .copyprop
до імені вихідного файлу.

store_copyprop
Кидайте дерева після копіювання в магазині. Ім'я файлу створюється шляхом додавання
.store_copyprop до імені вихідного файлу.

dce Дамп кожної функції після видалення мертвого коду. Ім'я файлу створюється за допомогою
додавання .dce до імені вихідного файлу.

Пан / Пані Дамп кожної функції після виконання скалярної заміни агрегатів. Файл
назва вноситься шляхом додавання .sra до імені вихідного файлу.

раковина
Дамп кожної функції після виконання коду. Ім'я файлу створюється за допомогою
додавання .раковина до імені вихідного файлу.

подарунок Дамп кожної функції після застосування оптимізації дерева домінанта. Ім'я файлу
зроблено шляхом додавання .dom до імені вихідного файлу.

дсе Дамп кожної функції після застосування видалення мертвого магазину. Ім'я файлу створено
шляхом додавання .dse до імені вихідного файлу.

фіопт
Дамп кожної функції після оптимізації вузлів PHI у прямолінійний код. Файл
назва вноситься шляхом додавання .phiopt до імені вихідного файлу.

forwprop
Дамп кожної функції після прямого поширення одноразових змінних. Ім'я файлу
здійснюється шляхом додавання .forwprop до імені вихідного файлу.

copyrename
Дамп кожної функції після застосування оптимізації перейменування копії. Ім'я файлу
зроблено шляхом додавання .copyrename до імені вихідного файлу.

nrv Дамп кожної функції після застосування оптимізації названого значення, що повертається до загального
дерева. Ім'я файлу створюється шляхом додавання .nrv до імені вихідного файлу.

vect
Дамп кожної функції після застосування векторизації циклів. Ім'я файлу створено
шляхом додавання .vect до імені вихідного файлу.

слп Дамп кожної функції після застосування векторизації базових блоків. Ім'я файлу
зроблено шляхом додавання .slp до імені вихідного файлу.

в.п Дамп кожної функції після розповсюдження діапазону значень (VRP). Ім'я файлу створюється за допомогою
додавання .vrp до імені вихідного файлу.

всі Увімкніть усі доступні дампи дерев за допомогою прапорців, наданих у цій опції.

-fopt-info
-fopt-info-опції
-fopt-info-опції=ім'я файлу
Керує дампами оптимізації з різних проходів оптимізації. Якщо -опції форма є
б / в, опції це список - розділені ключові слова, щоб вибрати деталі дампу та
оптимізації.

Команда опції можна розділити на дві групи: варіанти, що описують багатослівність
дамп і параметри, що описують, які оптимізації слід включити. Варіанти від
обидві групи можна вільно змішувати, оскільки вони не перекриваються. Однак у разі
будь-які конфлікти, пізніші параметри замінюють попередні параметри в командному рядку.

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

оптимізований
Роздрукуйте інформацію, коли оптимізація успішно застосована. Це до пасу
щоб вирішити, яка інформація є актуальною. Наприклад, векторизатор передає друк
вихідне розташування циклів, які успішно векторизовані.

пропущений
Роздрукуйте інформацію про пропущені оптимізації. Індивідуум проходить контроль, який
інформацію для включення до виходу.

увагу
Надрукуйте детальну інформацію про оптимізації, наприклад певні перетворення,
більш детальні повідомлення про рішення тощо.

всі Роздрукуйте детальну інформацію про оптимізацію. Це включає оптимізований, пропущений та
увагу.

Для опису групи можна використовувати одне або кілька з наступних ключових слів
оптимізації:

ipa Увімкнути дампи з усіх міжпроцедурних оптимізацій.

петля
Увімкнути дамп з усіх оптимізацій циклу.

вбудований
Увімкнути дампи з усіх вбудованих оптимізацій.

vec Увімкнути дампи з усіх оптимізацій векторизації.

оптальний
Увімкнути дампи з усіх оптимізацій. Це наднабір груп оптимізації
перераховані вище.

If опції пропущено, за замовчуванням оптимізовано-оптальний, що означає скинути всю інформацію
про успішні оптимізації з усіх проходів.

Якщо ім'я файлу надається, то дампи з усіх застосовних оптимізацій
об'єднані в ім'я файлу. В іншому випадку дамп виводиться на stderr, Хоча
множинний -fopt-info приймаються варіанти, тільки один з них може включати a ім'я файлу. Якщо
надаються інші імена файлів, тоді всі, крім першого, такі параметри ігноруються.

Зверніть увагу, що вихід ім'я файлу перезаписується у випадку кількох одиниць перекладу. Якщо
бажаний комбінований вихід з кількох одиниць перекладу, stderr слід використовувати
замість цього.

У наступному прикладі інформація про оптимізацію виводиться до stderr:

gcc -O3 -fopt-info

Цей приклад:

gcc -O3 -fopt-info-missed=missed.all

виводить звіт про пропущену оптимізацію з усіх проходів до пропустив.все, а цей:

gcc -O2 -ftree-vectorize -fopt-info-vec-missed

друкує інформацію про втрачені можливості оптимізації з проходів векторизації
on stderr. Зверніть увагу на це -fopt-info-vec-missed еквівалентна -fopt-info-missed-vec.

Як інший приклад,

gcc -O3 -fopt-info-inline-optimized-missed=inline.txt

виводить інформацію про пропущені оптимізації, а також оптимізовані розташування з усіх
підкладка переходить у inline.txt.

Нарешті, розглянемо:

gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

Тут два вихідних назви файлів vec.miss та петля.опт конфліктують, оскільки лише один
вихідний файл дозволений. У цьому випадку діє лише перший варіант і
наступні параметри ігноруються. Тільки таким чином vec.miss виробляється, що містить відвали
з векторізатора про втрачені можливості.

-frandom-seed=номер
Ця опція надає початкове значення, яке GCC використовує замість випадкових чисел при генерації
певні назви символів, які мають відрізнятися в кожному скомпільованому файлі. Це також
використовується для розміщення унікальних штампів у файлах даних покриття та об’єктних файлах, які створюють
їх. Ви можете використовувати -франдом-насіння можливість створити ідентичний об'єкт, що відтворюється
файли.

Команда номер має відрізнятися для кожного файлу, який ви збираєте.

-fsched-verbose=n
Для цілей, які використовують планування інструкцій, цей параметр контролює кількість
виведення налагодження, яке друкує планувальник. Ця інформація записується зі стандартною помилкою,
якщо не -fdump-rtl-sched1 or -fdump-rtl-sched2 вказано, у цьому випадку він виводиться
у звичайний файл списку дампу, .sched1 or .sched2 відповідно. Однак для n
більше дев’яти, вихідні дані завжди друкуються зі стандартною помилкою.

для n більше нуля, -fsched-verbose виводить ту ж інформацію, що і
-fdump-rtl-sched1 та -fdump-rtl-sched2. Форум n більше одиниці, він також виводить базовий
ймовірності блоків, детальна інформація готового списку та інформація про блок/інструкцію. Для n
більше двох, він включає RTL в точці припинення, контрольний потік та інформацію про регіони. І
та цінності n понад чотири, -fsched-verbose також містить інформацію про залежність.

-зберігати темп
-save-temps=cwd
Зберігати звичайні «тимчасові» проміжні файли постійно; помістити їх у струм
каталог і назвіть їх на основі вихідного файлу. Таким чином, компіляція foo.c з -c
-зберігати темп створює файли foo.i та foo.s, А також foo.o. Це створює а
попередньо оброблений foo.i вихідний файл, навіть якщо компілятор тепер зазвичай використовує файл
інтегрований препроцесор.

При використанні в поєднанні з -x параметр командного рядка, -зберігати темп є розумним
достатньо, щоб уникнути перезапису вихідного файлу з тим самим розширенням, що й an
проміжний файл. Відповідний проміжний файл можна отримати шляхом перейменування
вихідний файл перед використанням -зберігати темп.

Якщо ви запускаєте GCC паралельно, компілюючи кілька різних вихідних файлів, які спільно використовують a
спільне базове ім'я в різних підкаталогах або той самий вихідний файл, скомпільований для
кількома адресатами виводу, цілком ймовірно, що різні паралельні компілятори будуть
заважають один одному та перезаписують тимчасові файли. Наприклад:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

може призвести до foo.i та foo.o записується одночасно обома компіляторами.

-save-temps=obj
Зберігайте звичайні «тимчасові» проміжні файли постійно. Якщо -o використовується варіант,
тимчасові файли засновані на об'єктному файлі. Якщо -o опція не використовується,
-save-temps=obj перемикач поводиться як -зберігати темп.

Наприклад:

gcc -save -temps = obj -c foo.c
gcc -save-temps=obj -c bar.c -o dir/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar

створює foo.i, foo.s, 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 куб.см1
0.00 0.01 як

"Час користувача" і "системний час" переміщуються перед назвою програми, а також
відображаються параметри, передані програмі, щоб потім можна було дізнатися, який файл був
компіляції та з якими параметрами.

-fvar-відстеження
Запустіть змінну пропуску відстеження. Він обчислює, де зберігаються змінні в кожній позиції
в коді. Потім генерується краща інформація про налагодження (якщо інформація про налагодження
формат підтримує цю інформацію).

Він включений за замовчуванням під час компіляції з оптимізацією (-Ос, -O, -О2, ...),
інформація про налагодження (-g) і формат інформації про налагодження підтримує це.

-fvar-tracking-assignments
Анотуйте призначення змінним користувача на початку компіляції та спробуйте перенести
анотації на протязі всієї компіляції аж до кінця, у спробі
щоб покращити інформацію про налагодження під час оптимізації. Використання -gdwarf-4 рекомендується разом
з ним.

Його можна ввімкнути, навіть якщо відстеження змінних параметрів вимкнено, і в цьому випадку є анотації
створено та підтримується, але в кінці відкидається. За замовчуванням цей прапор увімкнено
Разом з -fvar-відстеження, за винятком випадків, коли ввімкнено вибіркове планування.

-fvar-tracking-assignments-toggle
Перемикати -fvar-tracking-assignments, так само, як і це -gtoggle перемикачі -g.

-print-file-name=бібліотека
Надрукуйте повну абсолютну назву файлу бібліотеки бібліотека який буде використаний, коли
зв'язування --- і більше нічого не робіть. За допомогою цієї опції GCC не компілює та не посилає
будь-що; він просто друкує ім'я файлу.

-print-multi-каталог
Надрукуйте ім'я каталогу, що відповідає мультибібліотеці, вибраній будь-якими іншими перемикачами
присутні в командному рядку. Цей каталог має існувати в GCC_EXEC_PREFIX.

-print-multi-lib
Надрукуйте зіставлення з імен каталогів multilib до перемикачів компілятора, які їх увімкнули.
Ім'я каталогу відокремлено від перемикачів за допомогою ;, і кожен перемикач починається з символу
@ замість -, без пробілів між кількома перемикачами. Це має бути
полегшити обробку оболонки.

-print-multi-os-каталог
Надрукуйте шлях до бібліотек ОС для вибраної мультибібліотеки відносно деяких либ
підкаталог. Якщо бібліотеки ОС присутні в либ підкаталог і без мультибібліотеки
використовуються, зазвичай це просто ., якщо бібліотеки ОС присутні в libsuffix рідний брат
каталоги, які друкуються, наприклад ../lib64, ../ lib or ../lib32, або якщо бібліотеки ОС є
присутній в lib/підкаталог підкаталоги, які він друкує, наприклад amd64, sparcv9 or ev6.

-друк-мультиарх
Надрукуйте шлях до бібліотек ОС для вибраної мультиархів відносно деяких либ
підкаталог.

-print-prog-name=програма
Люблю -друкувати ім'я-файлу, але шукає програму, наприклад cpp.

-print-libgcc-ім'я файлу
Такий же, як -print-file-name=libgcc.a.

Це корисно, коли ви використовуєте -nostdlib or -нові за замовчуванням але ви хочете зв’язатися з
libgcc.a. Ви можете зробити:

gcc -nostdlib ... `gcc -print-libgcc-ім'я-файлу`

-print-search-dirs
Надрукуйте назву налаштованого каталогу встановлення та список програм і
бібліотечні довідники ПКУ шукає---і більше нічого не робіть.

Це корисно, коли ПКУ друкує повідомлення про помилку установка проблема не може Exec
cpp0: Немає такі файл or каталог. Щоб вирішити це, потрібно або поставити cpp0 і
інші компоненти компілятора де ПКУ очікує знайти їх, або ви можете встановити
змінна оточення GCC_EXEC_PREFIX до каталогу, куди ви їх встановили. Не треба
забудьте про кінець /.

-print-sysroot
Надрукуйте цільовий каталог sysroot, який використовується під час компіляції. Це
цільовий sysroot, зазначений під час налаштування або за допомогою --sysroot варіант
можливо з додатковим суфіксом, який залежить від параметрів компіляції. Якщо немає цілі
sysroot вказано, параметр нічого не друкує.

-print-sysroot-headers-suffix
Надрукуйте суфікс, доданий до цільового sysroot під час пошуку заголовків, або вкажіть
помилка, якщо компілятор не налаштований з таким суфіксом---і нічого не робити
інше.

- смітник
Надрукуйте цільову машину компілятора (наприклад, i686-pc-linux-gnu)---і не робіть
щось ще.

- dumpversion
Роздрукуйте версію компілятора (наприклад, 3.0) --- і більше нічого не робіть.

- dumpspecs
Роздрукуйте вбудовані специфікації компілятора --- і більше нічого не робіть. (Це використовується, коли
Сам GCC будується.)

-fno-eliminate-unused-debug-types
Зазвичай, створюючи вихід DWARF 2, GCC уникає виведення символу налагодження для
типи, які ніде не використовуються у вихідному файлі, що компілюється. Іноді це корисно
щоб GCC видав налагоджуючу інформацію для всіх типів, оголошених у блоці компіляції,
незалежно від того, чи використовуються вони насправді в цьому підрозділі компіляції, для
Наприклад, якщо в налагоджувачі ви хочете привести значення до типу, який насправді не є
використовується у вашій програмі (але оголошується). Однак частіше це призводить до а
значний обсяг втраченого простору.

Опції Що Контроль Оптимізація
Ці параметри керують різними видами оптимізації.

Без будь-якої опції оптимізації мета компілятора - знизити вартість компіляції
і щоб налагодження дало очікувані результати. Твердження незалежні: якщо ви
зупинити програму з точкою зупину між операторами, потім можна призначити нове значення
будь-яку змінну або змінити лічильник програми на будь-який інший оператор у функції та отримати
саме ті результати, які ви очікуєте від вихідного коду.

Увімкнення прапорів оптимізації змушує компілятор намагатися покращити продуктивність та/або
розмір коду за рахунок часу компіляції та, можливо, можливості налагоджувати
програми.

Компілятор виконує оптимізацію на основі знань, які він має про програму.
Компіляція кількох файлів одночасно в режим одного вихідного файлу дозволяє компілятору використовувати
інформацію, отриману з усіх файлів під час компіляції кожного з них.

Не всі оптимізації контролюються безпосередньо за допомогою прапорця. Лише оптимізації, які мають a
прапор перелічено в цьому розділі.

Більшість оптимізацій увімкнено, лише якщо -O рівень встановлюється в командному рядку. Інакше
вони вимкнені, навіть якщо вказано окремі прапорці оптимізації.

Залежно від цілі та того, як GCC був налаштований, дещо інший набір
оптимізацію можна ввімкнути на кожному -O рівня, ніж перераховані тут. Ви можете викликати GCC
з -Q --help=оптимизатори щоб дізнатися точний набір оптимізацій, які ввімкнено на
кожен рівень.

-O
-О1 Оптимізація. Оптимізація компіляції займає трохи більше часу і набагато більше пам’яті
велика функція.

з -O, компілятор намагається зменшити розмір коду та час виконання без виконання
будь-які оптимізації, які займають багато часу на компіляцію.

-O вмикає такі прапорці оптимізації:

-fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments -fcompare-elim
-fcprop-реєстри -fdce -fdefer-поп -fзатримка-гілка -fdse -поширювати вперед
-fguess-гіл-ймовірність -fif-перетворення2 -fif-перетворення
-finline-функції-викликані-один раз -fipa-чистий-конст -фіпа-профіль -фіпа-довідка
-fmerge-константи -fmove-loop-інваріанти -fshrink-wrap -fsplit-wide-types
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftree-ch -ftree-copy-prop -ftree-copyrename
-ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -безкоштовно-безкоштовно -ftree-phiprop
-Free-раковина -ftree-slsr -ftree-sra -ftree-pta -ftree-ter - за раз

-O також включається -fomit-кадр-покажчик на машинах, де це не заважає
з налагодженням.

-О2 Оптимізуйте ще більше. GCC виконує майже всі підтримувані оптимізації, які не виконуються
передбачають компроміс між швидкістю простору. У порівнянні з -O, ця опція збільшує обидва
час компіляції та продуктивність згенерованого коду.

-О2 вмикає всі прапорці оптимізації, зазначені в -O. Він також включає наступне
прапорці оптимізації: -fthread-стрибки -falign-функції -falign-стрибки -Falign-loops
-falign-етикетки -fcaller-зберігає -фкросстрибки -fcse-folow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -fдевіртуалізувати -fdevirtualize-спекулятивно
-дорогі оптимізації -fgcse -fgcse-lm -fhoist-суміжні-вантажі
-finline-small-functions -findirect-inlining -fipa-cp -fipa-cp-вирівнювання -фіпа-шра
-fipa-icf -fisolate-erroeous-paths-dereference -flra-remat -foptimize-sibling-calls
-foptimize-Strlen -fчасткове вбудовування -fpeephole2 -freorder-блоки
-freorder-blocks-and-partition -freorder-функції -frerun-cse-після-циклу
-fsched-міжблок -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing
-fstrict-переповнення -ftree-builtin-call-dce -перетворення з трьома перемикачами -ftree-tail-merge
-Free-pre -ftree-vrp -фіпа-ра

Будь ласка, зверніть увагу на попередження під -fgcse про виклик -О2 на програми, які використовують обчислювальну
gotos.

ПРИМІТКА. В Ubuntu 8.10 і новіших версіях, -D_FORTIFY_SOURCE=2 встановлено за замовчуванням і є
активується, коли -O встановлено на 2 або вище. Це забезпечує додатковий час компіляції та
перевірки під час виконання кількох функцій libc. Щоб вимкнути, вкажіть будь-яке
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-О3 Оптимізуйте ще більше. -О3 вмикає всі оптимізації, зазначені в -О2 і також включається
-finline-функції, -перемикачі-петлі, -fpredictive-commoning, -fgcse-після перезавантаження,
-ftree-loop-vectorize, -ftree-loop-distribute-patterns, -ftree-slp-vectorize,
-fvect-кошт-модель, -ftree-partial-pre та -fipa-cp-клон Варіанти.

-О0 Скоротіть час компіляції та змусьте налагодження дати очікувані результати. Це
за замовчуванням.

-Ос Оптимізувати за розміром. -Ос дозволяє все -О2 оптимізації, які зазвичай не збільшуються
розмір коду. Він також виконує подальшу оптимізацію, призначену для зменшення розміру коду.

-Ос вимикає такі прапорці оптимізації: -falign-функції -falign-стрибки
-Falign-loops -falign-етикетки -freorder-блоки -freorder-blocks-and-partition
-fprefetch-loop-масиви

-Швидко
Нехтуйте суворим дотриманням стандартів. -Швидко дозволяє все -О3 оптимізації. Це також
дозволяє оптимізації, які не дійсні для всіх стандартно-сумісних програм. Це
включається -швидка математика і специфічні для Fortran -фно-захисні парени та -fstack-масиви.

-Ог Оптимізуйте налагодження. -Ог забезпечує оптимізацію, яка не заважає
налагодження. Це має бути рівень оптимізації для вибору стандартного редагування-
цикл компіляції-налагодження, що забезпечує розумний рівень оптимізації при збереженні
швидка компіляція та хороший досвід налагодження.

Якщо ви використовуєте кілька -O варіанти, з номерами рівнів або без них, останній такий варіант
той, який ефективний.

Варіанти форми -fпрапор вкажіть машинно-незалежні прапори. Більшість прапорів мають обидва
позитивні та негативні форми; негативна форма -ффу is -fno-foo. У таблиці нижче,
вказана лише одна з форм --- та, яку ви зазвичай використовуєте. Ви можете зрозуміти інше
форму шляхом видалення ні- або додавши його.

Наведені нижче параметри керують конкретними оптимізаціями. Вони або активуються за допомогою -O
варіанти або пов’язані з такими, які є. Ви можете використовувати наступні прапори в рідкісних
випадки, коли бажана «точна настройка» оптимізації.

-fno-defer-pop
Завжди вводьте аргументи для кожного виклику функції, як тільки ця функція повертається. Для
компілятор зазвичай дозволяє машинам, які повинні виводити аргументи після виклику функції
Аргументи накопичуються в стеку для кількох викликів функцій і виводять їх усі на
один раз

Вимкнено на рівнях -O, -О2, -О3, -Ос.

-поширювати вперед
Виконайте прямий перехід на RTL. Пропуск намагається поєднати дві інструкції
і перевіряє, чи можна спростити результат. Якщо розгортання циклу активне, два проходи
виконуються, а другий планується після розгортання циклу.

Цей параметр увімкнено за замовчуванням на рівнях оптимізації -O, -О2, -О3, -Ос.

-ffp-контракт=стиль
-ffp-contract=вимкнено вимикає скорочення виразу з плаваючою комою. -ffp-contract=швидко
дає можливість скорочення виразу з плаваючою комою, наприклад, формування об’єднаного множення-додавання
операції, якщо ціль має для них вбудовану підтримку. -ffp-contract = on дозволяє
скорочення виразу з плаваючою комою, якщо це дозволено стандартом мови. Це
на даний момент не впроваджено і розглядається як рівний -ffp-contract=вимкнено.

За замовчуванням - -ffp-contract=швидко.

-fomit-кадр-покажчик
Не зберігайте покажчик кадру в регістрі для функцій, яким він не потрібен. Це
уникає інструкцій щодо збереження, налаштування та відновлення покажчиків кадрів; це також робить
Додатковий регістр доступний у багатьох функціях. It Також робить налагодження неможливе on
деякі машини.

На деяких машинах, таких як VAX, цей прапор не діє, оскільки стандартний
послідовність виклику автоматично обробляє покажчик кадру, і нічого не зберігається
роблячи вигляд, що його не існує. Макрос опису машини "FRAME_POINTER_REQUIRED"
контролює, чи підтримує цільова машина цей прапор.

Налаштування за замовчуванням (якщо не оптимізовано за розміром) для 32-розрядних GNU/Linux x86 і 32-розрядних
Цілі Darwin x86 є -fomit-кадр-покажчик. Ви можете налаштувати GCC за допомогою
--enable-frame-pointer налаштувати параметр, щоб змінити значення за замовчуванням.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-foptimize-sibling-calls
Оптимізуйте однотипні та хвостові рекурсивні виклики.

Увімкнено на рівнях -О2, -О3, -Ос.

-foptimize-Strlen
Оптимізуйте різні стандартні рядкові функції C (наприклад, "strlen", "strchr" або "strcpy") і
їхні аналоги "_FORTIFY_SOURCE" у швидші альтернативи.

Увімкнено на рівнях -О2, -О3.

-fno-вбудований
Не розгортайте вбудовані функції, крім тих, які позначені символом "always_inline"
атрибут. Це значення за замовчуванням, якщо не оптимізовано.

Окремі функції можна звільнити від вбудовування, позначивши їх символом "noinline"
атрибут.

-finline-small-functions
Інтегруйте функції в викликані, коли їх тіло менше очікуваного
код виклику функції (тому загальний розмір програми стає меншим). Компілятор
евристично вирішує, які функції досить прості, щоб їх варто інтегрувати
сюди. Це вбудовування застосовується до всіх функцій, навіть тих, які не оголошені вбудованими.

Увімкнено на рівні -О2.

-findirect-inlining
Вбудовані також непрямі виклики, які виявляються відомими під час компіляції завдяки
попередня підкладка. Ця опція має будь-який ефект лише тоді, коли ввімкнено саме вбудовування
по -finline-функції or -finline-small-functions Варіанти.

Увімкнено на рівні -О2.

-finline-функції
Розглянемо всі функції для вбудовування, навіть якщо вони не оголошені вбудованими. The
Компілятор евристично вирішує, які функції варто інтегрувати таким чином.

Якщо всі виклики даної функції інтегровані, і функція оголошується
"статичний", то функція зазвичай не виводиться як код асемблера самостійно.

Увімкнено на рівні -О3.

-finline-функції-викликані-один раз
Розглянемо всі «статичні» функції, викликані один раз для вбудовування в їх виклик, навіть якщо
вони не позначені як «вбудовані». Якщо виклик даної функції інтегрований, то
функція не виводиться як код асемблера самостійно.

Увімкнено на рівнях -О1, -О2, -О3 та -Ос.

-страшно-вставляючи
Вбудовані функції, позначені як "always_inline", і функції, тіло яких здається меншим
накладні витрати на виклик функції перед тим, як це зробити -fprofile-generate приладів та
справжній пас. Це значно дешевше і зазвичай робить профільування
вбудовування швидше в програмах, що мають великі ланцюжки вкладених функцій обгортки.

Увімкнено за замовчуванням.

-фіпа-шра
Виконати міжпроцедурну скалярну заміну агрегатів, видалення невикористаних параметрів
і заміна параметрів, переданих за посиланням, параметрами, переданими за значенням.

Увімкнено на рівнях -О2, -О3 та -Ос.

-finline-limit=n
За замовчуванням GCC обмежує розмір функцій, які можуть бути вбудовані. Цей прапор дозволяє
грубий контроль цієї межі. n це розмір функцій, які можна вбудувати
кількість псевдоінструкцій.

Вбудовування насправді контролюється рядом параметрів, які можна вказати
індивідуально за допомогою --парам ім'я=значення, -finline-limit=n параметр встановлює деякі з
ці параметри наступним чином:

max-inline-insns-single
встановлений в n/ 2.

max-inline-insns-auto
встановлений в n/ 2.

Нижче дивіться документацію щодо окремих параметрів, що керують вбудовуванням і
для значень за замовчуванням цих параметрів.

Примітка: може не мати ніякої цінності -finline-limit що призводить до поведінки за замовчуванням.

Примітка: псевдоінструкція являє собою, в цьому конкретному контексті, абстрактний
вимірювання розміру функції. У жодному разі це не означає кількість зборів
інструкції, і тому його точне значення може змінитися від одного випуску до an
інший.

-fno-keep-inline-dllexport
Це більш дрібнозерниста версія -fkeep-inline-functions, що стосується лише
функції, які оголошуються за допомогою атрибута "dllexport" або declspec

-fkeep-inline-functions
У C випускати "статичні" функції, які оголошені "вбудованими" в об'єктний файл, навіть якщо
функція була вбудована в усі її виклики. Цей перемикач не впливає
функції за допомогою розширення "extern inline" в GNU C90. У C++ випускайте будь-який і все
вбудовані функції в об’єктний файл.

-fkeep-static-conts
Видавати змінні, оголошені як "статичні константи", коли оптимізація не ввімкнена, навіть якщо
змінні не посилаються.

GCC вмикає цю опцію за замовчуванням. Якщо ви хочете змусити компілятор перевірити, чи a
на змінну посилається, незалежно від того, увімкнена чи ні оптимізація, use
-fno-keep-static-conts варіант.

-fmerge-константи
Спроба об’єднати ідентичні константи (рядкові константи та константи з плаваючою комою)
через одиниці компіляції.

Цей параметр є стандартним для оптимізованої компіляції, якщо асемблер і компонувальник
підтримайте це. Використовуйте -fno-merge-constants гальмувати цю поведінку.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fmerge-all-constants
Спробуйте об’єднати ідентичні константи та ідентичні змінні.

Цей варіант має на увазі -fmerge-константи. На додаток до -fmerge-константи це
розглядає, наприклад, навіть постійні ініціалізовані масиви або ініціалізовані постійні змінні з
цілі чи з плаваючою комою. Такі мови, як C або C++, вимагають кожної змінної,
включаючи кілька екземплярів однієї змінної в рекурсивні виклики, щоб мати різні
розташування, тому використання цієї опції призводить до невідповідної поведінки.

-fmodulo-sched
Виконайте планування swing за модулем безпосередньо перед першим проходом планування. Це
pass розглядає внутрішні цикли і змінює порядок їх інструкцій, накладаючи різні
ітерацій.

-fmodulo-sched-allow-regmoves
Виконуйте більш агресивне модульне планування на основі SMS з дозволеними переміщеннями в реєстрі. За
встановлення цього прапора певні краї антизалежностей видаляються, що ініціює
генерування reg-ходів на основі аналізу життєвого діапазону. Цей варіант ефективний
тільки з -fmodulo-sched включений.

-fno-branch-count-reg
Не використовуйте інструкції «зменшення та розгалуження» в регістрі підрахунку, а замість цього
генерувати послідовність інструкцій, які зменшують регістр, порівнюють його з
нуль, потім розгалужується на основі результату. Ця опція має значення лише на
архітектури, які підтримують такі інструкції, до яких належать x86, PowerPC, IA-64 і
S/390.

Увімкнено за замовчуванням о -О1 і вище.

За замовчуванням - -fbranch-count-reg.

-fno-функція-cse
Не розміщуйте адреси функцій в регістрах; зробіть кожну інструкцію, яка викликає a
константна функція містить адресу функції явно.

Цей параметр призводить до менш ефективного коду, але деякі дивні хаки, які змінюють
Вихід асемблера може бути заплутаний оптимізаціями, що виконуються, коли ця опція є
не використовується.

За замовчуванням - -ffunction-cse

-fno-zero-initialized-in-bss
Якщо ціль підтримує розділ BSS, GCC за замовчуванням розміщує змінні, які є
ініціалізується на нуль у BSS. Це може заощадити місце в отриманому коді.

Цей параметр вимикає цю поведінку, оскільки деякі програми явно покладаються на змінні
перейти до розділу даних --- наприклад, щоб отриманий виконуваний файл міг знайти файл
початку цього розділу та/або зробити на основі цього припущення.

За замовчуванням - -fzero-ініціалізовано-в-bss.

-fthread-стрибки
Виконайте оптимізацію, щоб перевірити, чи розгалужується стрибок до місця, де інший
знайдено порівняння, підведене до першого. Якщо так, перша гілка буде перенаправлена ​​на
або пункт призначення другої гілки, або точка, що йде безпосередньо за нею,
залежно від того, чи є умова істинною чи хибною.

Увімкнено на рівнях -О2, -О3, -Ос.

-fsplit-wide-types
При використанні типу, який займає кілька регістрів, наприклад "long long" на 32-бітному
системи, розділити регістри та розподілити їх незалежно. Це нормально
генерує кращий код для цих типів, але може ускладнити налагодження.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fcse-folow-jumps
У загальному виключенні підвиразів (CSE), скануйте інструкції переходу, коли
ціль стрибка не досягається іншим шляхом. Наприклад, коли CSE зустрічається
оператор "if" з реченням "else", CSE слід за переходом, коли умова
перевірено хибне.

Увімкнено на рівнях -О2, -О3, -Ос.

-fcse-skip-blocks
Це схоже на -fcse-folow-jumps, але змушує CSE слідувати цим стрибкам
умовно пропускати блоки. Коли CSE зустрічає простий оператор "if" з номером
інше положення, -fcse-skip-blocks змушує CSE слідувати за стрибком навколо тіла
"якщо".

Увімкнено на рівнях -О2, -О3, -Ос.

-frerun-cse-після-циклу
Повторно запустіть загальне усунення підвиразу після виконання оптимізації циклу.

Увімкнено на рівнях -О2, -О3, -Ос.

-fgcse
Виконайте глобальний загальний прохід видалення підвиразів. Цей пропуск також виконує
глобальна константа і поширення копій.

Примітка: Під час компіляції програми з використанням обчислених gotos, розширення GCC, ви можете отримати
кращу продуктивність під час виконання, якщо вимкнути ліквідацію загального підвиразу
пройти шляхом додавання -fno-gcse до командного рядка.

Увімкнено на рівнях -О2, -О3, -Ос.

-fgcse-lm
Коли -fgcse-lm увімкнено, намагається перемістити глобальні загальні підвирази
вантажі, які лише вбивають магазини в себе. Це дозволяє створити цикл, що містить a
Послідовність завантаження/збереження буде змінена на завантаження поза циклом і копію/збереження всередині
петлі.

Увімкнено за замовчуванням, коли -fgcse активовано

-fgcse-sm
Коли -fgcse-sm увімкнено, після глобального спільного запускається проходження магазину
усунення підвиразів. Цей перехід намагається вивести магазини з циклів. При використанні
в поєднанні з -fgcse-lm, цикли, що містять послідовність завантаження/збереження, можна змінити
до навантаження перед циклом і магазину після циклу.

Не ввімкнено на жодному рівні оптимізації.

-fgcse-las
Коли -fgcse-las увімкнено, глобальне загальне видалення підвиразів проходить
усуває надлишкові навантаження, які надходять після зберігання в одне й те саме місце пам’яті (обидва
часткове та повне звільнення).

Не ввімкнено на жодному рівні оптимізації.

-fgcse-після перезавантаження
Коли -fgcse-після перезавантаження увімкнено, виконується прохід зняття зайвого навантаження
після перезавантаження. Метою цього проходу є очищення зайвих розливів.

-faggressive-loop-optimizations
Цей параметр повідомляє оптимізатору циклу використовувати мовні обмеження для визначення меж
кількість ітерацій циклу. Це передбачає, що код циклу не викликає
невизначена поведінка, наприклад, викликаючи переповнення цілих чисел зі знаком або виходу за межі
доступи до масиву. Для орієнтування використовуються межі кількості ітерацій циклу
Оптимізація розгортання та відлущування циклу та тесту виходу з циклу. Цей параметр увімкнено
за замовчуванням

-funsafe-loop-optimizations
Ця опція повідомляє оптимізатору циклу припустити, що індекси циклу не переповнюються, і
що цикли з нетривіальною умовою виходу не є нескінченними. Це дозволяє ширше
діапазон оптимізації циклу, навіть якщо сам оптимізатор циклу не може довести, що ці
припущення справедливі. Якщо ви використовуєте -Wunsafe-loop-optimizations, попереджає компілятор
якщо він знайде такий цикл.

-фкросстрибки
Виконайте трансформацію у стрибках. Це перетворення уніфікує еквівалентний код і
зберігає розмір коду. Отриманий код може або не працювати краще, ніж без перехресних
стрибки.

Увімкнено на рівнях -О2, -О3, -Ос.

-fauto-inc-dec
Комбінуйте збільшення або зменшення адрес з доступом до пам’яті. Цей пропуск є
завжди пропускав архітектури, які не мають інструкцій для підтримки цього.
Увімкнено за замовчуванням о -O і вище на архітектурах, які це підтримують.

-fdce
Виконайте видалення мертвого коду (DCE) на RTL. Увімкнено за замовчуванням о -O і вище.

-fdse
Виконайте ліквідацію мертвих магазинів (DSE) на RTL. Увімкнено за замовчуванням о -O і вище.

-fif-перетворення
Спроба перетворити умовні стрибки в еквіваленти без гілок. Це включає
використання умовних ходів, мін, максимум, інструкції встановлення прапорців та абс, а також деякі прийоми
можна виконати стандартною арифметикою. Використання умовного виконання на фішках там, де воно є
доступний контролюється -fif-перетворення2.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fif-перетворення2
Використовуйте умовне виконання (якщо доступне) для перетворення умовних переходів
еквіваленти без галузей.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fdeclone-ctor-dtor
C++ ABI вимагає кількох точок входу для конструкторів і деструкторів: одна для a
базовий підоб'єкт, один для повного об'єкта, а один для віртуального деструктора, який викликає
оператор видалити потім. Для ієрархії з віртуальними базами базовий і повний
варіанти є клонами, що означає дві копії функції. За допомогою цього параметра
базовий і повний варіанти змінюються на thunks, які називають загальну реалізацію.

Увімкнено -Ос.

-fdelete-null-pointer-checks
Припустимо, що програми не можуть безпечно розіменовувати нульові покажчики, і що немає коду чи даних
елемент знаходиться там. Це дає змогу прості постійні оптимізації згортання взагалі
рівні оптимізації. Крім того, інші проходи оптимізації в GCC використовують цей прапор
контроль глобального аналізу потоків даних, який усуває марні перевірки на нульові покажчики;
вони припускають, що якщо покажчик перевіряється після того, як він уже розіменований, він
не може бути нульовим.

Однак зауважте, що в деяких середовищах це припущення не відповідає дійсності. Використовуйте
-fno-delete-null-pointer-checks щоб вимкнути цю оптимізацію для програм, які залежать
на таку поведінку.

Деякі цілі, особливо вбудовані, вимикають цю опцію на всіх рівнях. Інакше
він увімкнений на всіх рівнях: -О0, -О1, -О2, -О3, -Ос. Перепустки, які використовують інформацію
включаються незалежно на різних рівнях оптимізації.

-fдевіртуалізувати
Спроба перетворити виклики у віртуальні функції на прямі виклики. Це робиться обидва
всередині процедури та міжпроцедурно як частина непрямого вбудовування
(-findirect-inlining) і міжпроцедурне поширення константи (-fipa-cp). Увімкнено о
рівні -О2, -О3, -Ос.

-fdevirtualize-спекулятивно
Спроба перетворити виклики віртуальних функцій у спекулятивні прямі виклики. На основі
Аналіз графу спадкування типу, визначення для даного виклику множини
ймовірні цілі. Якщо набір невеликий, бажано розміру 1, змініть виклик на a
умовний вибір між прямими і непрямими викликами. Спекулятивні виклики дозволяють
більше оптимізацій, таких як вбудовування. Коли вони здаються марними після подальшого
оптимізації, вони перетворюються назад у вихідний вигляд.

-fdevirtualize-at-ltrans
Потік додаткової інформації, необхідної для агресивної девіртуалізації під час запуску посилання-
оптимізатор часу в режимі локального перетворення. Ця опція дозволяє більше
девіртуалізація, але значно збільшує розмір потокових даних. Для цього
тому, що він вимкнено за замовчуванням.

-дорогі оптимізації
Виконайте ряд незначних оптимізацій, які є відносно дорогими.

Увімкнено на рівнях -О2, -О3, -Ос.

-вільно
Спробуйте видалити зайві інструкції розширення. Це особливо корисно для
архітектура x86-64, яка неявно розширюється до нуля в 64-розрядних регістрах після
запис до їх нижньої 32-розрядної половини.

Увімкнено для Alpha, AArch64 та x86 на рівнях -О2, -О3, -Ос.

-fno-lifetime-dse
У C++ на значення об'єкта впливають лише зміни протягом його життя: when
починається конструктор, об’єкт має невизначене значення та будь-які зміни під час
час життя об'єкта мертвий, коли об'єкт знищений. Зазвичай мертвий магазин
ліквідація скористається цим; якщо ваш код спирається на значення
сховище об’єкта, яке зберігається після терміну життя об’єкта, ви можете використовувати цей прапор для
вимкнути цю оптимізацію.

-five-range-shrinkage
Спробуйте зменшити тиск регістра через скорочення діапазону живого регістра. Це
корисно для швидких процесорів з невеликими або помірними наборами регістрів.

-fira-algorithm=алгоритм
Використовуйте вказаний алгоритм фарбування для інтегрованого розподільника регістрів. The
алгоритм аргумент може бути пріоритет, який визначає пріоритетне забарвлення Чоу, або CB,
який визначає забарвлення Чайтіна-Бріггса. Забарвлення Чайтіна-Бріггса не реалізовано
для всіх архітектур, але для тих цілей, які її підтримують, це значення за замовчуванням
тому що він генерує кращий код.

-фіра-регіон=регіон
Використовуйте вказані регіони для інтегрованого розподільника регістрів. The регіон аргумент
має бути одним із наступних:

всі Використовуйте всі цикли як області розміщення регістрів. Це може дати найкращі результати для
машини з невеликим та/або неправильним набором регістрів.

змішаний
Використовуйте всі цикли, окрім циклів з невеликим тиском у регістрі, як області. Це
value зазвичай дає найкращі результати в більшості випадків і для більшості архітектур, і
увімкнено за замовчуванням під час компіляції з оптимізацією для швидкості (-O, -О2, ...).

один Використовуйте всі функції як єдиний регіон. Зазвичай це призводить до найменшого коду
розмір і ввімкнено за замовчуванням для -Ос or -О0.

-fira-таль-напір
Використовуйте IRA для оцінки тиску в реєстрі в коді підйому пропуску для прийняття рішень про підйом
вирази. Цей параметр зазвичай призводить до меншого розміру коду, але він може сповільнити його
компілятор.

Цей параметр увімкнено на рівні -Ос для всіх цілей.

-фіра-петля-тиск
Використовуйте IRA для оцінки тиску регістра в циклах для прийняття рішень щодо переміщення інваріантів циклу.
Цей параметр зазвичай призводить до генерації швидшого та меншого коду на машинах з
великі файли регістрів (>= 32 регістри), але це може сповільнити роботу компілятора.

Цей параметр увімкнено на рівні -О3 для деяких цілей.

-fno-ira-share-save-slots
Вимкніть спільне використання слотів стека, які використовуються для збереження використаних жорстких регістрів
дзвінок. Кожен жорсткий регістр отримує окремий слот стека, і, як результат, стек функцій
рамки більші.

-fno-ira-share-spill-slots
Вимкнути спільний доступ до слотів стека, виділених для псевдореєстрів. Кожен псевдореєстр
що не отримує жорсткий регістр, отримує окремий слот стека, і як результат функцію
стекові рамки більші.

-fira-verbose=n
Контролюйте детальність файлу дампа для інтегрованого розподільника регістрів. The
значення за замовчуванням дорівнює 5. Якщо значення n більше або дорівнює 10, вихідний дамп надсилається
до stderr, використовуючи той самий формат, що й n мінус 10.

-flra-remat
Увімкнути чутливу до CFG рематеріалізацію в LRA. Замість завантажувальних значень пролито
псевдо, LRA намагається рематеріалізувати (перерахувати) цінності, якщо це вигідно.

Увімкнено на рівнях -О2, -О3, -Ос.

-fзатримка-гілка
Якщо це підтримується для цільової машини, спробуйте змінити порядок інструкцій для використання
Слоти інструкцій доступні після відкладених інструкцій переходу.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fschedule-insns
Якщо це підтримується для цільової машини, спробуйте змінити порядок інструкцій, щоб видалити
виконання зупиняється через недоступність необхідних даних. Це допомагає машинам, що
мати повільні інструкції з плаваючою комою або завантаження пам’яті, дозволяючи іншим інструкціям
видаватися до тих пір, поки не знадобиться результат інструкції навантаження або з плаваючою комою.

Увімкнено на рівнях -О2, -О3.

-fschedule-insns2
Як і в -fschedule-insns, але вимагає додаткового проходження планування інструкцій
після розміщення реєстру. Це особливо корисно на машинах з a
відносно невелика кількість регістрів і де інструкції завантаження пам'яті займають більше ніж
один цикл.

Увімкнено на рівнях -О2, -О3, -Ос.

-fno-sched-interblock
Не плануйте інструкції між основними блоками. Зазвичай це ввімкнено за замовчуванням
при плануванні перед виділенням регістру, тобто з -fschedule-insns або, по крайней -О2 or
вище.

-fno-sched-spec
Не допускайте спекулятивного руху інструкцій без завантаження. Зазвичай це вмикається за допомогою
за замовчуванням при плануванні перед виділенням регістра, тобто з -fschedule-insns або, по крайней
-О2 або вище.

-fsched-тиск
Увімкнути чутливе до тиску регістр планування insn перед виділенням регістра. Це
має сенс лише тоді, коли планування до ввімкнення виділення регістрів, тобто з
-fschedule-insns або, по крайней -О2 або вище. Використання цієї опції може покращити згенерований
коду та зменшити його розмір, запобігаючи збільшення тиску в регістрі понад число
наявних жорстких реєстрів та наступних розливів у розподілі реєстрів.

-fsched-spec-load
Дозволити спекулятивний рух деяких інструкцій завантаження. Це має сенс лише тоді, коли
планування перед виділенням регістру, тобто з -fschedule-insns або, по крайней -О2 або вище.

-fsched-spec-load-dangerous
Дозволити спекулятивний рух більшої кількості інструкцій завантаження. Це має сенс лише тоді, коли
планування перед виділенням регістру, тобто з -fschedule-insns або, по крайней -О2 або вище.

-fsched-stalled-insns
-fsched-stalled-insns=n
Визначте, скільки insns (якщо такі є) можна передчасно перемістити з черги зупинених
insns у готовий список під час другого проходу планування. -fno-sched-stalled-insns
означає, що жодні заклади не переміщуються передчасно, -fsched-stalled-insns=0 значить немає
обмеження кількості закладів у черзі, які можна передчасно перемістити. -fsched-stalled-insns
без значення еквівалентно -fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
Визначте, скільки груп (циклів) insn перевіряється на залежність від зупинки insn
що є кандидатом на передчасне вилучення з черги глухих закладів. Це має
ефект лише під час другого проходу планування, і тільки якщо -fsched-stalled-insns is
використаний -fno-sched-stalled-insns-dep еквівалентна -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep без значення еквівалентно
-fsched-stalled-insns-dep=1.

-fsched2-використання суперблоків
Під час планування після виділення регістрів використовуйте планування суперблоків. Це дозволяє
рух через базові межі блоків, що призводить до пришвидшення графіків. Цей варіант є
експериментальний, оскільки не всі описи машин, використовувані GCC, досить точно моделюють процесор
щоб уникнути недостовірних результатів від алгоритму.

Це має сенс лише при плануванні після виділення регістру, тобто з
-fschedule-insns2 або, по крайней -О2 або вище.

-fsched-group-euristic
Увімкніть групову евристику в планувальнику. Ця евристика сприяє інструкції
що належить до групи розкладу. Це ввімкнено за замовчуванням під час планування
увімкнено, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2 або вище.

-fsched-critical-path-euristic
Увімкніть евристики критичного шляху в планувальнику. Ця евристичність сприяє
інструкції на критичному шляху. Це ввімкнено за замовчуванням під час планування
увімкнено, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2 або вище.

-fsched-spec-insn-евристичний
Увімкніть евристику спекулятивних інструкцій у планувальнику. Ця евристичність сприяє
спекулятивні інструкції з більшою слабкістю залежності. Це ввімкнено за замовчуванням
коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2
або вище.

-fsched-rank-euristic
Увімкніть евристичний рейтинг у планувальнику. Ця евристика сприяє інструкції
належність до базового блоку з більшим розміром або частотою. Це ввімкнено за замовчуванням
коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2
або вище.

-fsched-last-insn-евристичний
Увімкніть евристику останньої інструкції в планувальнику. Ця евристика сприяє
інструкція, яка менш залежить від останнього запланованого інструкції. Це ввімкнено
за замовчуванням, коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2
або, по крайней -О2 або вище.

-fsched-dep-count-euristic
Увімкніть евристику залежного підрахунку в планувальнику. Ця евристика сприяє
інструкція, яка містить більше інструкцій залежно від неї. Це ввімкнено за замовчуванням
коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2
або вище.

-freschedule-modulo-scheduled-loops
Модульне планування виконується перед традиційним плануванням. Якщо цикл за модулем
за розкладом, пізніші проходи за розкладом можуть змінити його розклад. Використовуйте цю опцію, щоб
контролювати таку поведінку.

-вибіркове планування
Плануйте інструкції за допомогою алгоритму вибіркового планування. Вибіркове планування
замість першого проходу планувальника.

-fselective-scheduling2
Плануйте інструкції за допомогою алгоритму вибіркового планування. Вибіркове планування
замість другого проходу планувальника.

-fsel-sched-pipelining
Увімкнути програмну конвеєрію внутрішніх циклів під час вибіркового планування. Це
опція не має ефекту, якщо одна з -вибіркове планування or -fselective-scheduling2
увімкнено.

-fsel-sched-pipelining-outer-loops
Під час вибору конвеєрних циклів під час вибіркового планування також конвейерні зовнішні цикли. Це
варіант не має ефекту, якщо -fsel-sched-pipelining увімкнено.

-fsemantic-interposition
Деякі формати об'єктів, наприклад ELF, дозволяють вставляти символи динамічним компоновщиком.
Це означає, що для символів, експортованих з DSO, компілятор не може виконувати
міжпроцедурне поширення, вбудовування та інші оптимізації в очікуванні того, що
функція або змінна, про яку йдеться, можуть змінитися. Хоча ця функція корисна, для
наприклад, щоб переписати функції виділення пам'яті за допомогою реалізації налагодження, це так
дорого з точки зору якості коду. З -fno-semantic-interposition компілятор
припускає, що якщо для функцій відбудеться інтерпозиція, буде мати функцію перезапису
точно така ж семантика (і побічні ефекти). Аналогічно, якщо трапиться інтерпозиція
для змінних конструктор змінної буде однаковим. Прапор не має
ефект для функцій, явно оголошених inline (де це ніколи не дозволено
інтерпозиція для зміни семантики) і для символів, явно оголошених слабкими.

-fshrink-wrap
Функція Emit виступає лише перед частинами функції, які цього потребують, а не в
верхня частина функції. Цей прапор увімкнено за замовчуванням в -O і вище.

-fcaller-зберігає
Увімкнути виділення значень регістрам, які заблоковані викликами функцій
надсилання додаткових інструкцій для збереження та відновлення реєстрів навколо таких викликів. Такий
розподіл виконується лише тоді, коли здається, що це призводить до кращого коду.

Цей параметр завжди ввімкнено за замовчуванням на певних машинах, як правило, на тих, які мають
замість них немає регістрів, що зберігаються за викликом.

Увімкнено на рівнях -О2, -О3, -Ос.

-fcombine-stack-adjustments
Відстежує коригування стеку (натискання та вибухання) та посилання на пам’ять стека, а потім намагається
знайти способи їх поєднання.

Увімкнено за замовчуванням о -О1 і вище.

-фіпа-ра
Використовуйте регістри збереження абонентів для виділення, якщо ці регістри не використовуються жодним викликаним
функція. У цьому випадку не потрібно зберігати та відновлювати їх навколо дзвінків.
Це можливо лише в тому випадку, якщо викликані функції є частиною того самого блоку компіляції, що й поточні
функції і вони компілюються перед нею.

Увімкнено на рівнях -О2, -О3, -Ос.

-fconserve-stack
Намагайтеся мінімізувати використання стека. Компілятор навіть намагається використовувати менше місця в стеку
якщо це робить програму повільнішою. Цей параметр передбачає налаштування великогабаритний каркас
параметр до 100 і big-stack-frame-growth параметр до 400.

-ftree-reassoc
Виконайте реасоціацію на деревах. Цей прапор увімкнено за замовчуванням в -O і вище.

-Free-pre
Виконайте часткове усунення надмірності (PRE) на деревах. Цей прапор увімкнено за допомогою
за замовчуванням на -О2 та -О3.

-ftree-partial-pre
Зробіть часткове усунення надмірності (PRE) більш агресивним. Цей прапор увімкнено за допомогою
за замовчуванням на -О3.

-ftree-forwprop
Виконайте пряме розмноження на деревах. Цей прапор увімкнено за замовчуванням в -O та
вище.

-безкоштовно-безкоштовно
Виконайте повне усунення надмірності (FRE) на деревах. Різниця між FRE і
PRE полягає в тому, що FRE розглядає лише вирази, які обчислюються на всіх шляхах, що ведуть до
надлишкове обчислення. Цей аналіз швидший, ніж PRE, хоча розкриває менше
скорочення штатів. Цей прапор увімкнено за замовчуванням в -O і вище.

-ftree-phiprop
Виконувати підйом вантажів від умовних покажчиків на деревах. Цей пропуск увімкнено за допомогою
за замовчуванням на -O і вище.

-fhoist-суміжні-вантажі
Спекулятивно підняти вантажі з обох гілок if-then-else, якщо вантажі від
суміжні розташування в одній структурі і цільова архітектура має умовну
інструкція переміщення. Цей прапор увімкнено за замовчуванням в -О2 і вище.

-ftree-copy-prop
Виконайте копіювання на деревах. Цей пропуск усуває непотрібні операції копіювання.
Цей прапор увімкнено за замовчуванням в -O і вище.

-fipa-чистий-конст
Дізнайтеся, які функції є чистими чи постійними. Увімкнено за замовчуванням о -O і вище.

-фіпа-довідка
Дізнайтеся, які статичні змінні не виходять із блоку компіляції. Увімкнено
за замовчуванням на -O і вище.

-фіпа-пта
Виконайте міжпроцедурний аналіз покажчиків та міжпроцедурну модифікацію та
довідковий аналіз. Цей параметр може призвести до надмірного використання пам’яті та часу компіляції
великі одиниці компіляції. Він не включений за замовчуванням на жодному рівні оптимізації.

-фіпа-профіль
Виконайте міжпроцедурне поширення профілю. Функції викликаються тільки з холоду
функції позначені як холодні. Також функції, що виконуються один раз (наприклад, "холодний",
«noreturn», статичні конструктори або деструктори). Холодні функції і
Частини функцій, які виконуються один раз, оптимізуються за розміром. Увімкнено
за замовчуванням на -O і вище.

-fipa-cp
Виконайте міжпроцедурне поширення константи. Ця оптимізація аналізує програму
щоб визначити, коли значення, передані функціям, є константами, а потім оптимізувати
відповідно. Ця оптимізація може істотно підвищити продуктивність, якщо
додаток має константи, передані функціям. Цей прапорець увімкнено за замовчуванням в
-О2, -Ос та -О3.

-fipa-cp-клон
Виконайте клонування функції, щоб посилити поширення міжпроцедурної константи. Коли
увімкнено, міжпроцедурне поширення константи виконує функцію клонування, коли
видиму ззовні функцію можна викликати з постійними аргументами. Тому що це
оптимізація може створити кілька копій функцій, вона може значно збільшитися
розмір коду (див --парам ipcp-unit-growth=значення). Цей прапор увімкнено за замовчуванням в
-О3.

-fipa-cp-вирівнювання
Якщо ввімкнено, ця оптимізація поширює вирівнювання параметрів функції для підтримки
кращі операції векторизації та рядків.

Цей прапор увімкнено за замовчуванням в -О2 та -Ос. Це вимагає цього -fipa-cp активовано

-fipa-icf
Виконайте згортання ідентичного коду для функцій і змінних лише для читання. The
оптимізація зменшує розмір коду і може порушити розмотування стеків шляхом заміни функції
еквівалентним з іншою назвою. Оптимізація працює ефективніше
увімкнено оптимізацію часу зв’язку.

Тим не менш, поведінка схожа на оптимізацію Gold Linker ICF, GCC ICF працює
різні рівні і, отже, оптимізації не однакові - є еквівалентності, що
знайдені тільки GCC, а еквівалентності знайдені тільки Gold.

Цей прапор увімкнено за замовчуванням в -О2 та -Ос.

-fisolate-erroeous-paths-dereference
Виявити шляхи, які викликають помилкову або невизначену поведінку через разыменування нульового
покажчик. Ізолюйте ці шляхи від основного потоку керування та поверніть оператор за допомогою
помилкова або невизначена поведінка в пастку. Цей прапор увімкнено за замовчуванням в -О2
і вище.

-fisolate-помилкові-шляхи-атрибут
Виявлення шляхів, які викликають помилкову або невизначену поведінку через використання нульового значення
способом, забороненим атрибутом "returns_nonnull" або "nonnull". Ізолюйте ці шляхи
з основного потоку керування та перетворити оператор з помилковою або невизначеною поведінкою
в пастку. Наразі це не ввімкнено, але може бути увімкнено за допомогою -О2 в майбутньому.

-Free-раковина
Виконуйте рух вперед по деревах. Цей прапор увімкнено за замовчуванням в -O та
вище.

-ftree-bit-ccp
Виконайте розріджене розповсюдження константи умовного біта на деревах та розповсюджуйте покажчик
інформація про вирівнювання. Цей перехід працює лише з локальними скалярними змінними і є
увімкнено за замовчуванням на -O і вище. Це вимагає цього -ftree-ccp активовано

-ftree-ccp
Виконайте розріджене умовне постійне поширення (CCP) на деревах. Тільки цей пропуск
працює з локальними скалярними змінними і вмикається за замовчуванням на -O і вище.

-fssa-phiopt
Виконайте відповідність шаблону на вузлах SSA PHI, щоб оптимізувати умовний код. Цей пропуск є
увімкнено за замовчуванням на -O і вище.

-перетворення з трьома перемикачами
Виконайте перетворення простих ініціалізацій в комутаторі на ініціалізації з a
скалярний масив. Цей прапор увімкнено за замовчуванням в -О2 і вище.

-ftree-tail-merge
Шукайте ідентичні кодові послідовності. Коли знайдете, замініть один стрибком на інший.
Ця оптимізація відома як злиття хвостів або перехресний стрибок. Цей прапор увімкнено за допомогою
за замовчуванням на -О2 і вище. Час компіляції в цьому проході можна обмежити за допомогою
max-tail-merge-comparations параметр і max-tail-merge-ітерації параметр.

-ftree-dce
Виконайте видалення мертвого коду (DCE) на деревах. Цей прапорець увімкнено за замовчуванням в -O
і вище.

-ftree-builtin-call-dce
Виконайте умовне видалення мертвого коду (DCE) для викликів вбудованих функцій, які
може встановлювати "errno", але в іншому випадку вони не мають побічних ефектів. Цей прапор увімкнено за замовчуванням
at -О2 і вище, якщо -Ос також не вказано.

-ftree-dominator-opts
Виконуйте різноманітні прості скалярні очищення (поширення константи/копіювання, надмірність
усунення, поширення діапазону та спрощення виразу) на основі домінатора
обхід дерева. Це також виконує стрибкові потоки (щоб скоротити стрибки до стрибків). Це
прапор увімкнено за замовчуванням на -O і вище.

-ftree-dse
Виконайте ліквідацію мертвих магазинів (DSE) на деревах. Мертвий магазин - це запас у пам'яті
розташування, яке пізніше перезаписується іншим магазином без будь-яких проміжних завантажень. в
у цьому випадку попередній магазин можна видалити. Цей прапор увімкнено за замовчуванням в -O та
вище.

-ftree-ch
Виконайте копіювання заголовка циклу на деревах. Це корисно, оскільки воно збільшується
ефективність оптимізації руху коду. Це також економить один стрибок. Цей прапор є
увімкнено за замовчуванням на -O і вище. Це не ввімкнено для -Ос, оскільки зазвичай
збільшує розмір коду.

-ftree-loop-optimize
Виконуйте оптимізацію циклу на деревах. Цей прапор увімкнено за замовчуванням в -O та
вище.

-ftree-loop-linear
Виконайте циклові перетворення на дереві. Такий же, як -шлюз-розв'язка. Використовувати
це перетворення коду, GCC має бути налаштований --з-ісл щоб включити
Інфраструктура перетворення графітової петлі.

-шлюз-розв'язка
Виконайте перетворення циклів обміну на циклах. Зміна двох вкладених циклів
перемикає внутрішній і зовнішній цикли. Наприклад, заданий цикл, наприклад:

DO J = 1, М
DO I = 1, N
A(J, I) = A(J, I) * C
ENDDO
ENDDO

обмін циклами перетворює цикл так, ніби він був написаний:

DO I = 1, N
DO J = 1, М
A(J, I) = A(J, I) * C
ENDDO
ENDDO

що може бути корисним, коли "N" більше, ніж кеш, тому що у Fortran,
Елементи масиву зберігаються в пам'яті безперервно за стовпцями та оригіналом
цикл повторює рядки, потенційно створюючи при кожному доступі промах кешу. Це
оптимізація застосовується до всіх мов, які підтримує GCC, і не обмежується ними
Fortran. Щоб використовувати це перетворення коду, потрібно налаштувати GCC --з-ісл до
увімкнути інфраструктуру перетворення циклу Graphite.

-floop-strip-mine
Виконуйте перетворення видобутку циклів на петлях. Видобуток смуги розбиває цикл на
два вкладених цикли. Зовнішня петля має кроки, рівні розміру смужки і внутрішню
петля має кроки вихідної петлі всередині смужки. Довжину смужки можна змінювати
використання loop-block-tile-size параметр. Наприклад, заданий цикл, наприклад:

DO I = 1, N
A(I) = A(I) + C
ENDDO

loop strip mining перетворює цикл так, ніби він був написаний:

DO II = 1, N, 51
DO I = II, хв (II + 50, N)
A(I) = A(I) + C
ENDDO
ENDDO

Ця оптимізація стосується всіх мов, які підтримує GCC, і не обмежується ними
Fortran. Щоб використовувати це перетворення коду, потрібно налаштувати GCC --з-ісл до
увімкнути інфраструктуру перетворення циклу Graphite.

-флоп-блок
Виконайте перетворення блокування циклів у циклах. Блокування смуги мін кожної петлі в
Розташування циклів так, що доступ до пам’яті циклів елемента поміщається в кеші. The
Довжину смуги можна змінити за допомогою loop-block-tile-size параметр. Наприклад,
дано цикл, як:

DO I = 1, N
DO J = 1, М
A(J, I) = B(I) + C(J)
ENDDO
ENDDO

Блокування циклу перетворює цикл так, ніби він був написаний:

DO II = 1, N, 51
DO JJ = 1, M, 51
DO I = II, хв (II + 50, N)
DO J = JJ, хв (JJ + 50, M)
A(J, I) = B(I) + C(J)
ENDDO
ENDDO
ENDDO
ENDDO

що може бути корисно, коли "M" більше, ніж кеш, тому що внутрішній цикл
перебирає меншу кількість даних, які можуть зберігатися в кеші. Це
оптимізація застосовується до всіх мов, які підтримує GCC, і не обмежується ними
Fortran. Щоб використовувати це перетворення коду, потрібно налаштувати GCC --з-ісл до
увімкнути інфраструктуру перетворення циклу Graphite.

-fgraphite-ідентичність
Увімкнути перетворення ідентичності для графіту. Для кожного SCoP ми створюємо
багатогранне представлення та перетворіть його назад у Gimple. Використання -fgraphite-ідентичність
ми можемо перевірити витрати або переваги трансформації GIMPLE -> GRAPHITE -> GIMPLE.
Деякі мінімальні оптимізації також виконуються генератором коду ISL, як індекс
розщеплення та усунення мертвого коду в циклах.

-floop-nest-optimize
Увімкнути оптимізатор гнізд циклів на основі ISL. Це загальний оптимізатор гнізд циклів
на алгоритмах оптимізації Плутона. Він обчислює структуру циклу, оптимізовану для
локальність даних і паралельність. Цей варіант є експериментальним.

-floop-unroll-and-jam
Увімкнути розгортання та застрявання для оптимізатора гнізд циклів на основі ISL. Коефіцієнт розгортання може бути
змінено за допомогою loop-unroll-jam-size параметр. Розгорнутий розмір (підрахунок
від самого внутрішнього) можна змінити за допомогою loop-unroll-jam-depth параметр.
.

-floop-parallize-all
Використовуйте аналіз залежності даних Graphite, щоб визначити цикли, які можна розпаралелювати.
Розпаралелюйте всі цикли, які можна проаналізувати, щоб не містити залежностей, що передаються циклом
не перевіряючи, що вигідно розпаралелювати петлі.

-fcheck-data-deps
Порівняйте результати кількох аналізаторів залежності даних. Цей параметр використовується для
налагодження аналізаторів залежності даних.

-ftree-loop-if-convert
Спробуйте перетворити умовні стрибки у внутрішніх циклах у безвідгалужливі
еквіваленти. Мета полягає в тому, щоб видалити контрольний потік з внутрішніх циклів по порядку
щоб покращити здатність проходу векторизації обробляти ці цикли. Це
увімкнено за замовчуванням, якщо ввімкнено векторизацію.

-ftree-loop-if-convert-stores
Спробуйте також перетворити умовні стрибки, що містять записи в пам'яті. Це
перетворення може бути небезпечним для багатопоточних програм, оскільки воно перетворює умовні
пам'ять записує в безумовні записи в пам'ять. Наприклад,

для (i = 0; i < N; i++)
якщо (умовно)
A[i] = вираз;

трансформується в

для (i = 0; i < N; i++)
A[i] = cond? вираз: A[i];

потенційно створюють гонки даних.

-ftree-loop-розподіл
Виконайте розподіл циклу. Цей прапор може покращити продуктивність кешу на великих тілах циклу
і дозволяє проводити подальші оптимізації циклу, такі як паралелізація або векторізація
місце. Наприклад, петля

DO I = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
ENDDO

трансформується в

DO I = 1, N
A(I) = B(I) + C
ENDDO
DO I = 1, N
D(I) = E(I) * F
ENDDO

-ftree-loop-distribute-patterns
Виконайте цикловий розподіл шаблонів, які можна генерувати за допомогою викликів a
бібліотека. Цей прапор увімкнено за замовчуванням в -О3.

Цей прохід розподіляє цикли ініціалізації та генерує виклик нульового набору мем.
Наприклад, петля

DO I = 1, N
A(I) = 0
B(I) = A(I) + I
ENDDO

трансформується в

DO I = 1, N
A(I) = 0
ENDDO
DO I = 1, N
B(I) = A(I) + I
ENDDO

і цикл ініціалізації перетворюється на виклик нульового мемсету.

-ftree-loop-im
Виконуйте інваріантний рух на деревах. Цей прохід переміщує лише жорсткі інваріанти
для обробки на рівні RTL (виклики функцій, операції, які розширюються до нетривіальних послідовностей
insns). З -перемикачі-петлі він також переміщує операнди умов, які є
інваріант поза циклом, так що ми можемо використовувати лише тривіальний аналіз інваріантності в
відключення циклу. Пропуск також включає рух магазину.

-ftree-loop-ivcanon
Створіть канонічний лічильник кількості ітерацій у циклах, для яких визначається
кількість ітерацій вимагає складного аналізу. Пізніші оптимізації можуть
легко визначити число. Корисно, особливо у зв'язку з розгортанням.

-півопти
Виконайте оптимізацію індукційної змінної (зменшення міцності, змінна індукції
злиття та усунення змінних індукцій) на деревах.

-ftree-parallelize-loops=n
Розпаралелізуйте цикли, тобто розділіть їх простір ітерацій для виконання в n потоках. Це
можливо лише для циклів, ітерації яких є незалежними і можуть бути довільними
перезамовлено. Оптимізація вигідна лише на багатопроцесорних машинах, для циклів
які завантажують процесор, а не обмежені, наприклад, пропускною здатністю пам'яті. Цей варіант
мається на увазі -нитка, і, таким чином, підтримується лише на цілях, які мають підтримку
-нитка.

-ftree-pta
Виконуйте аналіз функцій локальних точок до дерев. Цей прапор увімкнено за замовчуванням
at -O і вище.

-ftree-sra
Виконати скалярну заміну агрегатів. Цей прохід замінює посилання на структуру
зі скалярами, щоб запобігти фіксації структур у пам'ять занадто рано. Цей прапор є
увімкнено за замовчуванням на -O і вище.

-ftree-copyrename
Виконайте копіювання перейменування на деревах. Цей прохід намагається перейменувати тимчасові елементи компілятора в
інші змінні в місцях копіювання, що зазвичай призводить до імен змінних, які більше
дуже схожі на вихідні змінні. Цей прапор увімкнено за замовчуванням в -O та
вище.

-ftree-coalesce inlined-vars
Скажіть пропуску copyrename (див -ftree-copyrename) спробувати об’єднати невеликих користувачів-
визначені змінні також, але тільки якщо вони вбудовані з інших функцій. Це
більш обмежена форма -ftree-coalesce-vars. Це може зашкодити такій налагоджувальної інформації
вбудовані змінні, але він зберігає змінні функції inlined-to окремо від кожної
інші, такі, що вони, швидше за все, містять очікувані значення під час налагодження
сесія

-ftree-coalesce-vars
Скажіть пропуску copyrename (див -ftree-copyrename) спробувати об’єднати невеликих користувачів-
також визначені змінні, а не лише тимчасові елементи компілятора. Це може серйозно обмежити
можливість налагодження оптимізованої програми, скомпільованої з -fno-var-tracking-assignments.
У запереченій формі цей прапор запобігає об’єднанню SSA змінних користувача, у тому числі
вбудовані. Цей параметр увімкнено за замовчуванням.

-ftree-ter
Виконайте тимчасову заміну експресії під час фази SSA->normal. Неодружений
тимчасові елементи use/single def замінюються в місці їх використання на їх визначення
вираз. Це призводить до не-GIMPLE коду, але дає розширювачам набагато більше
складні дерева для роботи, що призведе до кращого генерування RTL. Це увімкнено за допомогою
за замовчуванням на -O і вище.

-ftree-slsr
Виконайте прямолінійне зниження міцності на деревах. Це визнає пов'язані
вирази, що включають множення, і замінює їх менш дорогими обчисленнями
коли це можливо. Це ввімкнено за замовчуванням на -O і вище.

-ftree-векторизувати
Виконайте векторизацію на деревах. Цей прапор дозволяє -ftree-loop-vectorize та
-ftree-slp-vectorize якщо не вказано явно.

-ftree-loop-vectorize
Виконайте векторизацію циклів на деревах. Цей прапорець увімкнено за замовчуванням в -О3 і коли
-ftree-векторизувати активовано

-ftree-slp-vectorize
Виконайте базову блокову векторизацію на деревах. Цей прапор увімкнено за замовчуванням в -О3 та
коли -ftree-векторизувати активовано

-fvect-cost-model=модель
Змінити модель вартості, яка використовується для векторизації. The модель аргумент повинен бути одним з
необмежений, динамічний or дешево, З необмежений змоделюйте векторизований кодовий шлях
вважається прибутковим у той час як з динамічний Модель перевірка часу виконання охороняє
векторизований код-шлях, щоб увімкнути його лише для кількості ітерацій, які, ймовірно, будуть виконуватися
швидше, ніж при виконанні початкового скалярного циклу. The дешево модель відключає
векторизація циклів там, де це було б занадто дорого, наприклад, через
необхідні перевірки під час виконання на залежність або вирівнювання даних, але в іншому випадку дорівнює
динамічний модель. Модель вартості за замовчуванням залежить від інших прапорів оптимізації та є
або динамічний or дешево.

-fsimd-cost-model=модель
Змінити модель вартості, яка використовується для векторизації циклів, позначених OpenMP або Cilk
Плюс директива simd. The модель аргумент повинен бути одним з необмежений, динамічний, дешево.
Усі значення модель мають те саме значення, що описано в -fvect-кошт-модель і
за замовчуванням модель витрат, визначена с -fvect-кошт-модель використовується.

-ftree-vrp
Виконайте поширення діапазону значень на деревах. Це схоже на постійне поширення
pass, але замість значень поширюються діапазони значень. Це дозволяє
оптимізатори для видалення непотрібних перевірок діапазону, таких як перевірки прив’язаності до масиву та нульовий покажчик
чеки. Це ввімкнено за замовчуванням на -О2 і вище. Видалення перевірки нульового покажчика
виконується лише якщо -fdelete-null-pointer-checks активовано

-fsplit-ivs-in-unroller
Дозволяє виразити значення індукційних змінних у наступних ітераціях
розгорнутий цикл із використанням значення на першій ітерації. Це порушує тривалу залежність
ланцюжків, що покращує ефективність планування проходів.

Комбінація з -fweb і CSE часто достатньо для отримання того ж ефекту.
Однак це ненадійно у випадках, коли тіло циклу складніше, ніж a
один базовий блок. Він також взагалі не працює на деяких архітектурах через
обмеження в пропуску CSE.

Ця оптимізація ввімкнена за замовчуванням.

-fvariable-expansion-in-unroller
За допомогою цієї опції компілятор створює кілька копій деяких локальних змінних, коли
розгортання циклу, що може призвести до кращого коду.

-fчасткове вбудовування
Вбудовані частини функцій. Цей параметр має будь-який ефект лише тоді, коли є саме вбудовування
увімкнено -finline-функції or -finline-small-functions Варіанти.

Увімкнено на рівні -О2.

-fpredictive-commoning
Виконайте прогнозну оптимізацію спільного використання, тобто повторне використання обчислень (особливо
завантажує та зберігає пам’ять), виконані в попередніх ітераціях циклів.

Цей параметр увімкнено на рівні -О3.

-fprefetch-loop-масиви
Якщо це підтримується цільовою машиною, згенеруйте інструкції для попереднього отримання пам’яті
покращити продуктивність циклів, які звертаються до великих масивів.

Цей параметр може генерувати кращий або гірший код; результати сильно залежать від
структура циклів у вихідному коді.

Вимкнено на рівні -Ос.

-fno-глазок
-fno-глазок2
Вимкніть будь-яку оптимізацію вічка для конкретної машини. Різниця між
-fno-глазок та -fno-глазок2 полягає в тому, як вони реалізовані в компіляторі; дещо
цілі використовують одне, деякі використовують інше, деякі використовують обидва.

-фглаз увімкнено за замовчуванням. -fpeephole2 увімкнено на рівнях -О2, -О3, -Ос.

-fno-guess-гілки-ймовірність
Не вгадайте ймовірності гілок за допомогою евристики.

GCC використовує евристики для вгадування ймовірностей гілок, якщо вони не надані
зворотний зв'язок щодо профілю (-fprofile-arcs). Ці евристики засновані на потоці керування
графік. Якщо деякі ймовірності розгалужень задані "__builtin_expect", то
евристики використовуються для вгадування ймовірностей гілок для решти потоку керування
графік, беручи до уваги інформацію "__builtin_expect". Взаємодії між
евристики та "__builtin_expect" можуть бути складними, а в деяких випадках вони можуть бути корисними
щоб вимкнути евристику, щоб було легше виконувати ефекти "__builtin_expect".
зрозуміти

За замовчуванням - -fguess-гіл-ймовірність на рівнях -O, -О2, -О3, -Ос.

-freorder-блоки
Змініть порядок основних блоків у скомпільованій функції, щоб зменшити кількість взятих
гілки та покращити локальність коду.

Увімкнено на рівнях -О2, -О3.

-freorder-blocks-and-partition
На додаток до зміни порядку основних блоків у скомпільованій функції, щоб зменшити
кількість взятих гілок, розбиває гарячі та холодні опорні блоки на окремі секції
файлів збірки та файлів .o, щоб покращити роботу сторінок та локальності кешу.

Ця оптимізація автоматично вимикається за наявності обробки винятків,
для розділів linkonce, для функцій із визначеним користувачем атрибутом розділу та на будь-якому
архітектура, яка не підтримує іменовані розділи.

Увімкнено для x86 на рівнях -О2, -О3.

-freorder-функції
Змініть порядок функцій в об’єктному файлі, щоб покращити локальність коду. Це
реалізовано за допомогою спеціальних підрозділів ".text.hot" для найбільш часто виконуваних
функції та ".text.unlikely" для малоймовірно виконаних функцій. Перезамовлення виконується
компонувальник, тому формат об’єктного файлу повинен підтримувати іменовані розділи, а компоновщик має розміщувати
їх розумним чином.

Також має бути доступний зворотній зв’язок профілю, щоб цей параметр був ефективним. Побачити
-fprofile-arcs for details.

Увімкнено на рівнях -О2, -О3, -Ос.

-fstrict-aliasing
Дозвольте компілятору прийняти найсуворіші правила псевдонімів, застосовні до мови
компілюється. Для C (і C++) це активує оптимізацію на основі типу
вирази. Зокрема, передбачається, що об’єкт одного типу ніколи не перебуває в
ту саму адресу, що й об’єкт іншого типу, за винятком випадків, коли типи майже однакові.
Наприклад, "unsigned int" може псевдонім "int", але не "void*" або "double". А
тип символу може бути псевдонімом будь-якого іншого типу.

Зверніть особливу увагу на такий код:

союз a_union {
int i;
подвійний d;
};

int f() {
союз a_union t;
td = 3.0;
повернути ti;
}

Практика читання від іншого члена профспілки, ніж останній
Письмо (так званий "type-punning") є поширеним. Навіть з -fstrict-aliasing, тип-
каламбур дозволяється, якщо доступ до пам'яті здійснюється через тип об'єднання. Отже,
код вище працює, як очікувалося. Однак цей код може не:

int f() {
союз a_union t;
int* ip;
td = 3.0;
ip = &t.i;
повернення *ip;
}

Аналогічно, доступ, взявши адресу, перетворивши результуючий покажчик і
розіменування результату має невизначену поведінку, навіть якщо приведення використовує тип об'єднання,
наприклад:

int f() {
подвійне d = 3.0;
return ((union a_union *) &d)->i;
}

Команда -fstrict-aliasing параметр увімкнено на рівнях -О2, -О3, -Ос.

-fstrict-переповнення
Дозвольте компілятору прийняти строгі правила переповнення зі знаком, залежно від мови
компілюється. Для C (і C++) це означає переповнення при виконанні арифметики з
signed numbers не визначено, а це означає, що компілятор може припустити, що це не так
відбутися. Це дозволяє здійснювати різноманітні оптимізації. Наприклад, компілятор припускає, що
вираз на кшталт "i + 10 > i" завжди істинний для знака "i". Це припущення є
дійсний, лише якщо підписане переповнення не визначено, оскільки вираз хибний, якщо "i + 10"
переповнення при використанні арифметики двоїчного доповнення. Коли ця опція діє будь-який
спробуйте визначити, чи має бути записана операція над переповненнями знакових чисел
обережно, щоб не викликати переповнення.

Ця опція також дозволяє компілятору припустити строгу семантику вказівника: якщо a
вказівник на об’єкт, якщо додавання зміщення до цього вказівника не створює покажчика
до того самого об’єкта додавання не визначено. Це дозволяє компілятору зробити висновок
що "p + u > p" завжди істинно для вказівника "p" і цілого беззнакового числа "u". Це
припущення дійсне лише тому, що обертання покажчика не визначено, як і вираз
false, якщо "p + u" переповнюється за допомогою арифметики двоїчного доповнення.

Див. Також -fwrapv варіант. Використання -fwrapv означає, що ціле переповнення зі знаком є
повністю визначений: він обгортає. Коли -fwrapv використовується, різниці між ними немає
-fstrict-переповнення та -fno-strict-overflow для цілих чисел. З -fwrapv певні види
переповнення дозволено. Наприклад, якщо компілятор отримує переповнення під час виконання
арифметика для констант, переповнене значення все ще можна використовувати з -fwrapv, Але не
інакше.

Команда -fstrict-переповнення параметр увімкнено на рівнях -О2, -О3, -Ос.

-falign-функції
-falign-functions=n
Вирівняйте початок функцій із наступним степенем двох, більшим за n, пропускаючи до n
байтів. Наприклад, -falign-functions=32 вирівнює функції до наступних 32-байт
межа, але -falign-functions=24 вирівнюється до наступної 32-байтової межі, лише якщо це
можна зробити, пропустивши 23 байти або менше.

-fno-align-функції та -falign-functions=1 є еквівалентними і означають, що функції
не вирівняні.

Деякі асемблери підтримують цей прапор лише тоді, коли n є степенем двійки; в такому випадку це так
заокруглений.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням.

Увімкнено на рівнях -О2, -О3.

-falign-етикетки
-falign-labels=n
Вирівняйте всі цілі гілок за межею ступеня двох, пропустивши до n байти, як
-falign-функції. Ця опція може легко зробити код уповільненим, оскільки його потрібно вставити
фіктивні операції, коли ціль розгалуження досягається в звичайному потоці коду.

-fno-align-labels та -falign-labels=1 є еквівалентними і означають, що мітки не є
вирівняні.

If -Falign-loops or -falign-стрибки застосовні й більші за це значення
замість них використовуються їхні значення.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням, що дуже ймовірно
бути 1, що означає відсутність вирівнювання.

Увімкнено на рівнях -О2, -О3.

-Falign-loops
-falign-loops=n
Вирівняйте цикли до межі ступеня двох, пропускаючи до n байти, як -falign-функції.
Якщо цикли виконуються багато разів, це компенсує будь-яке виконання манекена
операції.

-fno-align-loops та -falign-петля = 1 є еквівалентними і означають, що цикли ні
вирівняні.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням.

Увімкнено на рівнях -О2, -О3.

-falign-стрибки
-falign-jumps=n
Вирівняйте цілі розгалужень за межею ступеня двох, для цілей гілок, де цілі
можна досягти, лише стрибнувши, пропустивши до n байти, як -falign-функції, в
у цьому випадку не потрібно виконувати фіктивні операції.

-fno-align-jumps та -falign-jumps=1 є еквівалентними і означають, що цикли ні
вирівняні.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням.

Увімкнено на рівнях -О2, -О3.

- за раз
Цей параметр залишено з міркувань сумісності. - за раз не має ефекту, поки
-fno-одиниця-за-раз мається на увазі -fno-toplevel-reorder та -fno-секція-анкери.

Увімкнено за замовчуванням.

-fno-toplevel-reorder
Не змінюйте порядок функцій верхнього рівня, змінних і операторів "asm". Виведіть їх
у тому самому порядку, у якому вони відображаються у вхідному файлі. Коли використовується ця опція,
статичні змінні без посилання не видаляються. Цей параметр призначений для підтримки
існуючий код, який ґрунтується на певному порядку. Для нового коду краще використовувати
атрибути, коли це можливо.

Увімкнено на рівні -О0. Якщо вимкнено явно, це також означає -fno-секція-анкери,
який інакше увімкнено на -О0 на деяких цілях.

-fweb
Створює мережі, які зазвичай використовуються для цілей розподілу реєстрів, і призначає кожній мережі
індивідуальний псевдореєстр. Це дозволяє працювати з проходом розподілу реєстрів
псевдо безпосередньо, але також посилює кілька інших проходів оптимізації, таких як CSE,
оптимізатор циклу та тривіальний засіб для видалення мертвого коду. Однак він може здійснювати налагодження
неможливо, оскільки змінні більше не залишаються в "домашньому реєстрі".

Увімкнено за замовчуванням за допомогою -закрутки-петлі.

-f ціла програма
Припустимо, що поточний блок компіляції представляє всю компілюючу програму.
Усі загальнодоступні функції та змінні, за винятком "main" та тих, які об'єднані
атрибут "externally_visible" стає статичними функціями і фактично оптимізується
більш агресивно за допомогою міжпроцедурних оптимізаторів.

Цей параметр не слід використовувати в поєднанні з -flto. Замість цього покладайтеся на компонувальник
плагін повинен надавати більш безпечну та точну інформацію.

-flto[=n]
Цей параметр запускає стандартний оптимізатор часу зв’язку. При виклику з вихідним кодом it
генерує GIMPLE (одне з внутрішніх представлень GCC) і записує його до спеціального ELF
розділи в об’єктному файлі. Коли об’єктні файли пов’язані разом, усі
тіла функцій зчитуються з цих розділів ELF і створюються так, ніби вони були
частина тієї ж одиниці перекладу.

Щоб використовувати оптимізатор часу зв’язку, -flto і параметри оптимізації слід вказати на
час компіляції та під час остаточного посилання. Наприклад:

gcc -c -O2 -flto foo.c
gcc -c -o2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

Перші два виклики GCC зберігають представлення байт-коду GIMPLE у спец
Всередині секції ELF foo.o та бар.о. Остаточний виклик читає байт-код GIMPLE
від foo.o та бар.о, об’єднує два файли в єдине внутрішнє зображення та компілює
результат як зазвичай. Оскільки обидва foo.o та бар.о об’єднані в одне зображення, це
змушує всі міжпроцедурні аналізи та оптимізації в GCC працювати по всьому
два файли, як ніби вони є одним. Це означає, наприклад, що inliner є
можливість вбудовувати функції в бар.о в функції в foo.o і навпаки.

Інший (простіший) спосіб увімкнути оптимізацію часу зв’язку:

gcc -o myprog -flto -O2 foo.c bar.c

Вище генерується байт-код для foo.c та бар.ц, об’єднує їх разом в єдине ціле
Представлення GIMPLE та оптимізує їх, як зазвичай, для виробництва myprog.

Єдине важливе, про що слід пам’ятати, – це ввімкнути оптимізацію під час посилань
потрібно використовувати драйвер GCC для виконання кроку підключення. Після цього GCC виконується автоматично
оптимізація часу зв'язку, якщо будь-який із залучених об'єктів був скомпільований з -flto
параметр командного рядка. Як правило, слід вказати параметри оптимізації, які будуть використовуватися
для оптимізації часу зв'язку, хоча GCC намагається вгадати оптимізацію
рівень для використання з параметрів, що використовуються під час компіляції, якщо ви не вкажете один у link-
час. Ви завжди можете скасувати автоматичне рішення про оптимізацію часу зв’язку за адресою
час зв'язку шляхом проходження -fno-lto до команди посилання.

Щоб оптимізація всієї програми була ефективною, необхідно створити певне ціле
програмні припущення. Компілятор повинен знати, якими можуть бути функції та змінні
доступ до бібліотек і середовища виконання за межами блоку, оптимізованого під час підключення. Коли
підтримується компонувальником, плагіном компоновщика (див -плагін-запобіжник) проходить
інформація для компілятора про використані та видимі ззовні символи. Коли
плагін компонування недоступний, -f ціла програма слід використовувати, щоб дозволити компілятору
зробити ці припущення, що призводить до більш агресивних рішень щодо оптимізації.

Коли -плагін-запобіжник не вмикається тоді, коли файл компілюється з -flto,
згенерований об’єктний файл більший за звичайний об’єктний файл, оскільки містить GIMPLE
байт-коди і звичайний кінцевий код (див -ffat-lto-об'єкти. Це означає, що об’єкт
файли з інформацією LTO можуть бути пов'язані як звичайні об'єктні файли; якщо -fno-lto проходить
до компоновщика не застосовуються міжпроцедурні оптимізації. Зверніть увагу, що коли
-fno-fat-lto-Objects увімкнено, етап компіляції швидший, але ви не можете виконати a
звичайне посилання на них без 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

Це створює окремі об’єктні файли з неоптимізованим кодом ассемблера, але
отриманий двійковий файл myprog оптимізовано на -О3. Якщо замість цього кінцевий двійковий файл
створений за допомогою -fno-lto, То myprog не оптимізовано.

Створюючи остаточний двійковий файл, GCC застосовує до них лише оптимізацію часу з’єднання
файли, які містять байт-код. Таким чином, ви можете змішувати та поєднувати об’єктні файли та
бібліотеки з байт-кодами GIMPLE та кінцевим об'єктним кодом. GCC вибирає автоматично
які файли оптимізувати в режимі LTO і які файли зв’язувати без подальшого
обробка

Існують деякі прапори генерації коду, які зберігаються GCC під час генерації байт-кодів, як
їх необхідно використовувати на останньому етапі посилання. Зазвичай параметри вказані на
перевизначення часу зв'язку тих, які вказані під час компіляції.

Якщо ви не вкажете параметр рівня оптимізації -O під час підключення, потім GCC обчислює
один на основі рівнів оптимізації, які використовуються під час компіляції об'єктних файлів. The
тут виграє найвищий рівень оптимізації.

Наразі наступні параметри та їх налаштування беруться з першого об’єктного файлу
який це чітко вказав: -fPIC, -fpic, -fpie, -fзагальний, -фекційні виключення,
-fnon-call-exceptions, -fgnu-tm і все -m цільові прапори.

Певні прапори зміни ABI повинні збігатися в усіх одиницях компіляції та спробах
замінити це під час з’єднання з конфліктуючим значенням ігнорується. Це включає
такі варіанти, як -freg-struct-return та -fpcc-struct-return.

Інші варіанти, такі як -ffp-контракт, -fno-strict-overflow, -fwrapv, -фно-трапв or
-fno-strict-aliasing передаються до стадії зв’язку та консервативно об’єднуються
для конфліктуючих одиниць перекладу. Конкретно -fno-strict-overflow, -fwrapv та
-фно-трапв мати пріоритет і напр -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++ і
-lgfortran додається, щоб отримати бібліотеки часу виконання Fortran. Загалом при змішуванні
мовами в режимі LTO, ви повинні використовувати ті самі параметри команди посилання, що й під час змішування
мови у звичайній (не LTO) компіляції.

Скажімо, якщо об’єктні файли, що містять байт-код GIMPLE, зберігаються в архіві бібліотеки
libfoo.a, їх можна витягти та використати у посиланні LTO, якщо ви використовуєте a
лінкер з підтримкою плагінів. Щоб створити статичні бібліотеки, придатні для LTO, використовуйте gcc-ar
та gcc-ranlib замість ar та ranlib; щоб показати символи об’єктних файлів з
Байт-код GIMPLE, використовуйте gcc-nm. Ці команди цього вимагають ar, ranlib та nm були
зібрано з підтримкою плагінів. Під час посилання використовуйте прапорець -плагін-запобіжник до
переконатися, що бібліотека бере участь у процесі оптимізації LTO:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

Якщо ввімкнено плагін компонувальника, компонувальник витягує необхідні файли GIMPLE
libfoo.a і передає їх до поточного GCC, щоб зробити їх частиною агрегованого
Зображення GIMPLE для оптимізації.

Якщо ви не використовуєте компоновщик з підтримкою плагінів і/або не вмикаєте компонувальник
плагін, потім об’єкти всередині libfoo.a витягуються та зв’язуються, як зазвичай, але вони
не брати участі в процесі оптимізації LTO. Для того, щоб зробити статичну бібліотеку
підходить як для оптимізації LTO, так і для звичайного зв'язування, компілюйте його об'єктні файли з
-flto -ffat-lto-об'єкти.

Оптимізація часу зв'язку не вимагає наявності всієї програми для роботи.
Якщо програма не вимагає експорту символів, можна об’єднати
-flto та -f ціла програма щоб дозволити міжпроцедурним оптимізаторам використовувати більше
агресивні припущення, які можуть призвести до покращення можливостей оптимізації. Використання
-f ціла програма не потрібен, коли плагін компонувальника активний (див -плагін-запобіжник).

Поточна реалізація LTO не робить спроб генерувати байт-код, тобто
перенесення між різними типами хостів. Файли байт-коду мають версії і є
є суворою перевіркою версії, тому файли байт-коду, згенеровані в одній версії GCC, цього не роблять
працювати зі старішою або новішою версією GCC.

Оптимізація часу зв'язку погано працює з генерацією налагоджувальної інформації.
Об'єднання -flto з -g наразі є експериментальним і, як очікується, буде несподіваним
результати.

Якщо вказати необов’язковий n, оптимізація та генерація коду, що виконується під час посилання
виконується паралельно з використанням n паралельні роботи за допомогою встановленого зробити програми.
Змінна середовища ЗРОБІТЬ може використовуватися для заміни використовуваної програми. За замовчуванням
значення для n є 1.

Ви також можете вказати -flto=сервер роботи використовувати для визначення режим сервера завдань GNU make
кількість паралельних робіт. Це корисно, коли Makefile, що викликає GCC, уже є
виконується паралельно. Ви повинні додати а + до командного рецепту в батьківському
Makefile, щоб це працювало. Ця опція, ймовірно, працює лише в тому випадку, якщо ЗРОБІТЬ є виробником GNU.

-flto-розділ=ALG
Вкажіть алгоритм розподілу, який використовується оптимізатором часу зв’язку. Значення є
або 1to1 щоб вказати розділення, що віддзеркалює вихідні файли або збалансований
щоб вказати розділення на однакові за розміром шматки (за можливості) або Макс для створення
новий розділ для кожного символу, де це можливо. Уточнення ніхто як алгоритм
повністю вимикає розділення та потокову передачу. Значенням за замовчуванням є збалансований. У той час як
1to1 можна використовувати як обхідний шлях для різних проблем упорядкування коду, Макс
розділення призначене лише для внутрішнього тестування. Значення один вказує, що
у той час як значення має використовуватися рівно один розділ ніхто обходить розділення і
виконує крок оптимізації часу з’єднання безпосередньо з фази WPA.

-flto-odr-type-merging
Увімкнути потокову передачу назв зіпсованих типів типів C++ та їх об’єднання на
час посилання. Це збільшує розмір об’єктних файлів LTO, але дозволяє діагностувати One
Визначення Порушення правил.

-flto-compression-level=n
Цей параметр визначає рівень стиснення, що використовується для написання мови середнього рівня
до об’єктних файлів LTO і має значення лише в поєднанні з режимом LTO (-flto).
Допустимі значення: від 0 (без стиснення) до 9 (максимальне стиснення). Цінності поза цим
діапазон обмежені до 0 або 9. Якщо параметр не вказано, значення за замовчуванням збалансовано
використовується налаштування стиснення.

-flto-звіт
Друкує звіт із внутрішніми деталями про роботу оптимізатора часу зв’язку. The
зміст цього звіту відрізняється від версії до версії. Це має бути корисним для GCC
розробників під час обробки об’єктних файлів у режимі LTO (через -flto).

Вимкнено за умовчанням.

-flto-report-wpa
Люблю -flto-звіт, але друкуйте лише для фази WPA оптимізації часу зв’язку.

-плагін-запобіжник
Дозволяє використовувати плагін компонувальника під час оптимізації часу з’єднання. Цей варіант залежить
про підтримку плагінів у компонувальнику, який доступний у золотому кольорі або в GNU ld 2.21 або
новіший.

Цей параметр дозволяє витягувати об’єктні файли з байт-кодом GIMPLE з бібліотеки
архіви. Це покращує якість оптимізації, відкриваючи більше коду за посиланням-
оптимізатор часу. Ця інформація визначає, до яких символів можна отримати зовнішній доступ
(за об'єктом, що не є LTO, або під час динамічного зв'язування). Покращення якості коду в результаті
двійкові файли (і спільні бібліотеки, які використовують приховану видимість) подібні до
-f ціла програма, Побачити -flto для опису впливу цього прапора та способів
використай це.

Цей параметр увімкнено за замовчуванням, якщо підтримка LTO в GCC увімкнена і GCC був
налаштований для використання з компонувальником, який підтримує плагіни (GNU ld 2.21 або новішої або золотої).

-ffat-lto-об'єкти
Об’єкти Fat LTO – це об’єктні файли, які містять як проміжну мову, так і мову
об'єктний код. Це робить їх придатними як для зв’язування LTO, так і для звичайного зв’язування. Це
Опція ефективна лише при компіляції з -flto і ігнорується під час посилання.

-fno-fat-lto-Objects покращує час компіляції порівняно зі звичайним LTO, але вимагає
повний набір інструментів, щоб знати про LTO. Для цього потрібен компоновщик з підтримкою плагіна компонувальника
для базової функціональності. Крім того, nm, ar та ranlib необхідно підтримувати компонувальник
плагіни, що дозволяють створювати повнофункціональне середовище збірки (здатне створювати статичні
бібліотеки тощо). GCC надає gcc-ar, gcc-nm, gcc-ranlib обгортки для передачі
правильні варіанти цих інструментів. З нежирним LTO make-файли потрібно змінити для використання
Ними.

За замовчуванням - -fno-fat-lto-Objects на цілях з підтримкою плагіна компонувальника.

-fcompare-elim
Після розподілу регістру та розподілу інструкцій після реєстру ідентифікуйте
арифметичні інструкції, які обчислюють прапори процесора, подібні до операції порівняння
на основі цієї арифметики. Якщо можливо, виключіть операцію явного порівняння.

Цей пропуск застосовується лише до певних цілей, які не можуть явно представляти
операція порівняння до завершення виділення регістру.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fcprop-реєстри
Після розподілу регістрів і розподілу інструкцій після реєстру виконайте
пропуск копіювання, щоб спробувати зменшити залежності планування та іноді
видалити копію.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fprofile-correction
Можуть бути профілі, зібрані за допомогою інструментального двійкового файлу для багатопоточних програм
непостійний через пропущені оновлення лічильника. Якщо вказано цю опцію, GCC використовує
евристики для виправлення або згладжування таких невідповідностей. За замовчуванням GCC видає an
повідомлення про помилку, коли виявлено невідповідний профіль.

-fprofile-dir=шлях
Встановіть каталог для пошуку файлів даних профілю шлях. Цей варіант
впливає лише на дані профілю, створені за допомогою -fprofile-generate, -ftest-покриття,
-fprofile-arcs і використовується -fprofile-використання та -fгілля-ймовірності та пов’язані з цим
варіанти. Можна використовувати як абсолютні, так і відносні шляхи. За замовчуванням GCC використовує
поточний каталог як шлях, таким чином файл даних профілю з’являється в тому ж каталозі, що й
об'єктний файл.

-fprofile-generate
-fprofile-generate=шлях
Увімкнути параметри, які зазвичай використовуються для інструментальних програм, щоб створити корисний профіль
для подальшої перекомпіляції з оптимізацією на основі зворотного зв'язку профілю. Ви повинні використовувати
-fprofile-generate як під час компіляції, так і під час зв'язування вашої програми.

Увімкнено такі параметри: -fprofile-arcs, -fprofile-values, -fvpt.

If шлях вказано, GCC дивиться на шлях щоб знайти файли даних зворотного зв’язку профілю.
Читати -fprofile-dir.

-fprofile-використання
-fprofile-use=шлях
Увімкнути оптимізацію профілю, спрямовану на зворотний зв’язок, а також наступні оптимізації, які
як правило, прибуткові лише за наявності зворотнього зв’язку профілю: -fгілля-ймовірності,
-fvpt, -закрутки-петлі, -fpeel-loops, -ftracer, -ftree-векторизувати та Ftree-loop-
розподілити шаблони.

За замовчуванням GCC видає повідомлення про помилку, якщо профілі зворотного зв’язку не збігаються
вихідний код. Цю помилку можна перетворити на попередження за допомогою -Wcoverage-невідповідність.
Зауважте, що це може призвести до погано оптимізованого коду.

If шлях вказано, GCC дивиться на шлях щоб знайти файли даних зворотного зв’язку профілю.
Читати -fprofile-dir.

-fauto-профіль
-fauto-profile=шлях
Увімкніть оптимізацію на основі зворотного зв’язку на основі вибірки та наступні оптимізації
які, як правило, приносять прибуток лише за наявності зворотнього зв’язку профілю:
-fгілля-ймовірності, -fvpt, -закрутки-петлі, -fpeel-loops, -ftracer,
-ftree-векторизувати, -finline-функції, -fipa-cp, -fipa-cp-клон,
-fpredictive-commoning, -перемикачі-петлі, -fgcse-після перезавантаження та
-ftree-loop-distribute-patterns.

шлях це ім'я файлу, що містить інформацію профілю AutoFDO. Якщо пропущено, це
за замовчуванням fbdata.afdo у поточному каталозі.

Для створення файлу даних профілю AutoFDO потрібно запустити вашу програму з файлом пер
утиліта на підтримуваній цільовій системі GNU/Linux. Додаткову інформацію див
<https://perf.wiki.kernel.org/>.

Напр

perf record -e br_inst_retired:near_taken -b -o perf.data \
-- ваша_програма

Потім використовуйте create_gcov інструмент для перетворення вихідних даних профілю у формат, який може бути
використовується GCC. Ви також повинні надати нерозчісований двійковий файл для вашої програми для цього
інструмент. Побачитиhttps://github.com/google/autofdo>.

Напр

create_gcov --binary=your_program.unstripped --profile=perf.data \
--gcov = профіль.afdo

Наступні параметри керують поведінкою компілятора щодо арифметики з плаваючою комою.
Ці параметри є компромісом між швидкістю та правильністю. Усе має бути спеціально увімкнено.

-флоат-магазин
Не зберігайте змінні з плаваючою комою в регістрах і забороняйте інші параметри
може змінити, чи береться значення з плаваючою комою з регістра чи пам'яті.

Ця опція запобігає небажаній надмірній точності на таких машинах, як 68000 where
плаваючі регістри (68881) зберігають більшу точність, ніж передбачається «подвійний»
мати. Аналогічно для архітектури x86. Для більшості програм надлишкова точність
робить це тільки добре, але деякі програми покладаються на точне визначення IEEE floating
точка. Використовуйте -флоат-магазин для таких програм, після їх модифікації, щоб зберегти всі
відповідні проміжні обчислення на змінні.

-fexcess-precision=стиль
Ця опція дозволяє додатково контролювати надмірну точність на машинах, де плаваюче-
точкові регістри мають більшу точність, ніж типи "float" і "double" IEEE і
процесор не підтримує операції округлення до цих типів. За замовчуванням,
-fexcess-precision=швидко діє; це означає, що операції здійснюються в
точність регістрів і непередбачуваність при округленні до типів
зазначений у вихідному коді має місце. При складанні C, якщо
-fexcess-precision=стандарт вказано, то надлишкова точність відповідає правилам
зазначено в ISO C99; зокрема, як приведення, так і присвоювання викликають значення
округлено до їх семантичних типів (тоді як -флоат-магазин впливає лише на завдання).
Цей параметр увімкнено за замовчуванням для C, якщо параметр суворої відповідності, наприклад
-std=c99 використовується.

-fexcess-precision=стандарт не реалізовано для інших мов, крім C, і не має
ефект, якщо -funsafe-math-optimizations or -швидка математика вказано. На x86 це
також не впливає, якщо -mfpmath=sse or -mfpmath=sse+387 уточнюється; в колишній
семантика IEEE застосовується без надмірної точності, а в останньому — округлення
непередбачуваний.

-швидка математика
Встановлює параметри -fno-math-errno, -funsafe-math-optimizations, -фінітна-математична,
-fno-округлення-мат, -fno-signaling-nans та -fcx-обмежений-діапазон.

Ця опція визначає макрос препроцесора "__FAST_MATH__".

Цю опцію ніхто не вмикає -O варіант крім того -Швидко оскільки це може призвести до
неправильний вихід для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій. Однак це може дати швидший код для
програми, які не вимагають гарантій цих специфікацій.

-fno-math-errno
Не встановлюйте "errno" після виклику математичних функцій, які виконуються за допомогою одного
інструкція, наприклад, "sqrt". Програма, яка використовує винятки IEEE для математичних помилок
Обробка може захотіти використовувати цей прапор для швидкості, зберігаючи арифметику IEEE
Сумісність.

Цю опцію ніхто не вмикає -O варіант, оскільки це може призвести до неправильного виведення
для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій. Однак це може дати швидший код для
програми, які не вимагають гарантій цих специфікацій.

За замовчуванням - -fmath-errno.

У системах Дарвіна математична бібліотека ніколи не встановлює "errno". Тому причин немає
щоб компілятор розглянув можливість того, що це могло б, і -fno-math-errno є
за замовчуванням.

-funsafe-math-optimizations
Дозволити оптимізацію для арифметики з плаваючою комою, яка (a) передбачає наявність аргументів і
результати є дійсними і (b) можуть порушувати стандарти IEEE або ANSI. При використанні під час підключення,
він може включати бібліотеки або файли запуску, які змінюють керуюче слово FPU за замовчуванням або
інші подібні оптимізації.

Цю опцію ніхто не вмикає -O варіант, оскільки це може призвести до неправильного виведення
для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій. Однак це може дати швидший код для
програми, які не вимагають гарантій цих специфікацій. Вмикає
-fno-signed-zerers, -fno-trapping-math, -фасоціативно-мат та -частотно-мат.

За замовчуванням - -fno-unsafe-math-optimizations.

-фасоціативно-мат
Дозволити повторну асоціацію операндів у серії операцій з плаваючою комою. Це
порушує стандарт мови ISO C і C++, можливо, змінюючи результат обчислення.
ПРИМІТКА: переупорядкування може змінити знак нуля, а також ігнорувати NaNs та пригнічувати або
створити underflow або overflow (і, отже, не може використовуватися в коді, який покладається на округлення
поведінка типу "(x + 2**52) - 2**52". Також можна змінити порядок порівнянь із плаваючою комою та
тому не можна використовувати, коли потрібні впорядковані порівняння. Цей варіант вимагає цього
обидва -fno-signed-zerers та -fno-trapping-math бути в силі. Більше того, це не робить
багато сенсу з -округлення-мат. Для Fortran параметр автоматично вмикається, коли
обидва -fno-signed-zerers та -fno-trapping-math діють.

За замовчуванням - -fno-асоціативно-мат.

-частотно-мат
Дозволити використовувати зворотну величину замість того, щоб ділити на значення, якщо це
дозволяє оптимізувати. Наприклад, "x / y" можна замінити на "x * (1/y)", тобто
корисно, якщо "(1/y)" підлягає видаленню загального підвиразу. Зверніть увагу, що це
втрачає точність і збільшує кількість флопсів, що діють на значення.

За замовчуванням - -fno-reciprocal-math.

-фінітна-математична
Дозволити оптимізацію для арифметики з плаваючою комою, яка передбачає, що аргументи і
результати не є NaNs або +-Infs.

Цю опцію ніхто не вмикає -O варіант, оскільки це може призвести до неправильного виведення
для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій. Однак це може дати швидший код для
програми, які не вимагають гарантій цих специфікацій.

За замовчуванням - -fno-finite-math-only.

-fno-signed-zerers
Дозволити оптимізацію для арифметики з плаваючою комою, яка ігнорує знаковий знак нуля.
Арифметика IEEE визначає поведінку різних значень +0.0 і -0.0, які потім
забороняє спрощення таких виразів, як x+0.0 або 0.0*x (навіть з
-фінітна-математична). Цей параметр означає, що знак нуля не є результатом
значний.

За замовчуванням - -fsigned-нулі.

-fno-trapping-math
Скомпілювати код, припускаючи, що операції з плаваючою комою не можуть створювати видимі користувачу
пастки. Ці пастки включають поділ на нуль, переповнення, переповнення, неточний результат і
недійсна операція. Цей варіант вимагає цього -fno-signaling-nans бути в силі.
Встановлення цієї опції може дозволити отримати швидший код, якщо покладатися на "безперервну" арифметику IEEE,
наприклад.

Цю опцію ніколи не слід вмикати -O варіант, оскільки це може призвести до
неправильний вихід для програм, які залежать від точної реалізації IEEE або ISO
правила/специфікації для математичних функцій.

За замовчуванням - -ftrapping-math.

-округлення-мат
Вимкніть перетворення та оптимізації, які передбачають округлення з плаваючою комою за замовчуванням
поведінка. Це округлення до нуля для всіх перетворень з плаваючою комою в цілі, і
округлення до найближчого для всіх інших арифметичних скорочень. Цей варіант має бути
визначено для програм, які динамічно змінюють режим округлення FP, або це може бути
виконується в режимі округлення, відмінному від умовчання. Ця опція відключає постійне згортання
вирази з плаваючою комою під час компіляції (на які може вплинути режим округлення)
і арифметичні перетворення, які є небезпечними за наявності знакозалежних
режими округлення.

За замовчуванням - -fno-округлення-мат.

Цей параметр є експериментальним і наразі не гарантує вимкнення всіх GCC
оптимізації, на які впливає режим округлення. Можливі наступні версії GCC
більш точне керування цим параметром за допомогою прагми C99 "FENV_ACCESS". Цей командний рядок
Опція буде використовуватися для визначення стану за замовчуванням для "FENV_ACCESS".

-fsignaling-nans
Компілюйте код, припускаючи, що NaN сигналізації IEEE можуть генерувати видимі користувачу пастки під час
операції з плаваючою комою. Налаштування цього параметра вимикає оптимізацію, яка може змінитися
кількість винятків, видимих ​​із сигнальними NaN. Цей варіант має на увазі
-ftrapping-math.

Ця опція визначає макрос препроцесора "__SUPPORT_SNAN__".

За замовчуванням - -fno-signaling-nans.

Цей параметр є експериментальним і наразі не гарантує вимкнення всіх GCC
оптимізації, які впливають на поведінку сигналізації NaN.

-fsingle-precision-constant
Розглядайте константи з плаваючою комою як одинарну точність замість неявного перетворення
їх до констант подвійної точності.

-fcx-обмежений-діапазон
Якщо ввімкнено, ця опція вказує, що крок скорочення діапазону не потрібен, коли
виконання складного поділу. Також немає перевірки, чи результат a
складне множення або ділення "NaN + I*NaN", зі спробою врятувати
ситуація в такому випадку. За замовчуванням є -fno-cx-обмежений-діапазон, але увімкнено за допомогою
-швидка математика.

Цей параметр контролює налаштування за замовчуванням прагми ISO C99 "CX_LIMITED_RANGE".
Тим не менш, ця опція стосується всіх мов.

-fcx-fortran-правила
Комплексне множення і ділення відповідають правилам Fortran. Зменшення дальності здійснюється як
частина складного ділення, але немає перевірки, чи є результат комплексним
множення або ділення «NaN + I*NaN», зі спробою врятувати ситуацію
в такому разі.

За замовчуванням - -fno-cx-fortran-rules.

Наступні параметри керують оптимізацією, яка може покращити продуктивність, але ні
увімкнено будь-яким -O варіанти. Цей розділ містить експериментальні варіанти, які можуть виникнути
зламаний код.

-fгілля-ймовірності
Після запуску програми, скомпільованої з -fprofile-arcs, ви можете скомпілювати його вдруге
використання -fгілля-ймовірності, щоб покращити оптимізацію на основі кількості разів
кожну гілку взяли. Коли програма скомпільована з -fprofile-arcs виходить, це рятує
виконання дуги зараховується до файлу, що викликається ім'я джерела.gcda для кожного вихідного файлу. The
інформація в цьому файлі даних дуже залежить від структури згенерованого
код, тому ви повинні використовувати той самий вихідний код і однакові параметри оптимізації для обох
компіляції.

з -fгілля-ймовірності, GCC ставить a REG_BR_PROB примітка на кожному Jump_insn та
CALL_INSN. Їх можна використовувати для покращення оптимізації. На даний момент вони лише використовуються
в одному місці: в reorg.c, замість того, щоб вгадати, по якому шляху гілка найімовірніше
взяти, REG_BR_PROB значення використовуються, щоб точно визначити, який шлях береться більше
часто

-fprofile-values
Якщо поєднується з -fprofile-arcs, він додає код, щоб деякі дані про значення
вирази в програмі збираються.

з -fгілля-ймовірності, він зчитує дані, зібрані зі значень профілювання
вирази для використання в оптимізації.

Увімкнено за допомогою -fprofile-generate та -fprofile-використання.

-fprofile-reorder-functions
Переупорядкування функцій на основі інструментарію профілю збирає перший час виконання
функції та впорядковує ці функції в порядку зростання.

Увімкнено за допомогою -fprofile-використання.

-fvpt
Якщо поєднується з -fprofile-arcs, ця опція вказує компілятору додати код
збирати інформацію про значення виразів.

з -fгілля-ймовірності, він зчитує зібрані дані і фактично виконує
оптимізації на їх основі. Наразі оптимізації включають спеціалізацію
операції ділення з використанням знань про значення знаменника.

-реєстри імен
Спробуйте уникнути хибних залежностей у запланованому коді, використовуючи залишені регістри
закінчено після розміщення реєстру. Ця оптимізація найбільше вигідна для процесорів із великою кількістю
реєстрів. Залежно від формату налагоджувальної інформації, прийнятого цільовою метою,
однак це може зробити налагодження неможливою, оскільки змінні більше не залишаються в "home
зареєструватися".

Увімкнено за замовчуванням за допомогою -закрутки-петлі та -fpeel-loops.

-fschedule-fusion
Виконує залежний від цілі прохід по потоку інструкцій, щоб запланувати інструкції
одного типу разом, тому що цільова машина може виконувати їх більш ефективно, якщо вони
є суміжними один з одним у потоці інструкцій.

Увімкнено на рівнях -О2, -О3, -Ос.

-ftracer
Виконайте дублювання хвоста, щоб збільшити розмір суперблока. Це перетворення спрощує
потік керування функцією, що дозволяє іншим оптимізаціям виконувати кращу роботу.

Увімкнено за допомогою -fprofile-використання.

-закрутки-петлі
Розгортання циклів, кількість ітерацій яких можна визначити під час компіляції або після
вхід до петлі. -закрутки-петлі мається на увазі -frerun-cse-після-циклу, -fweb та
-реєстри імен. Він також включає повний петлевий пілінг (тобто повне видалення
цикли з невеликою постійною кількістю ітерацій). Цей параметр робить код більшим і
може змусити його працювати швидше, а може і ні.

Увімкнено за допомогою -fprofile-використання.

-закрутити всі петлі
Розгортаємо всі цикли, навіть якщо їх кількість ітерацій невизначена, коли цикл є
увійшов. Це зазвичай змушує програми працювати повільніше. -закрутити всі петлі має на увазі
такі ж варіанти, як -закрутки-петлі.

-fpeel-loops
Знімає петлі, для яких достатньо інформації, що вони не дуже скочуються (з
відгук про профіль). Він також включає повний петлевий пілінг (тобто повне видалення
цикли з малою постійною кількістю ітерацій).

Увімкнено за допомогою -fprofile-використання.

-fmove-loop-інваріанти
Вмикає інваріантний цикл руху в оптимізаторі циклу RTL. Увімкнено на рівні
-О1

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

-ffunction-секції
-fdata-розділи
Розмістіть кожну функцію або елемент даних у власний розділ вихідного файлу, якщо це цільовий елемент
підтримує довільні розділи. Ім'я функції або ім'я елемента даних
визначає назву розділу у вихідному файлі.

Використовуйте ці параметри в системах, де компонувальник може виконувати оптимізацію для покращення
місцевість посилання в просторі інструкцій. Більшість систем використовують об'єкт ELF
формат і процесори SPARC під керуванням Solaris 2 мають компонувальники з такими оптимізаціями.
У майбутньому AIX може мати ці оптимізації.

Використовуйте ці параметри лише тоді, коли від цього є значні переваги. Коли ти
вказавши ці параметри, асемблер і компоновщик створюють більший об'єкт і виконуваний файл
файли, а також повільніше. Ви не можете використовувати гпроф на всіх системах, якщо ви вкажете це
і у вас можуть виникнути проблеми з налагодженням, якщо ви вкажете як цей параметр, так і
-g.

-fbranch-target-load-optimize
Виконайте оптимізацію навантаження цільового регістра гілки перед прологом/епілогом.
Використання цільових регістрів зазвичай може бути відкрито лише під час перезавантаження, таким чином, підйому
завантаження з циклів і виконання міжблочного планування потребує окремої оптимізації
прохід.

-fbranch-target-load-optimize2
Виконайте оптимізацію навантаження цільового регістра гілки після прологу/епілогу.

-fbtr-bb-ексклюзивний
Виконуючи оптимізацію завантаження регістра цільового відділення, не використовуйте повторно цільовий регістр
регістри в будь-якому базовому блоці.

-fstack-протектор
Випускайте додатковий код, щоб перевірити переповнення буфера, наприклад, атаки, що руйнують стек. Це
здійснюється шляхом додавання захисної змінної до функцій з уразливими об’єктами. Це
включає функції, які викликають "alloca", і функції з буферами більше 8 байт.
Захисники ініціалізуються, коли вводиться функція, а потім перевіряються, коли
виходить із функції. Якщо захисна перевірка не вдається, друкується повідомлення про помилку та програма
виходи.

-fstack-protector-all
Люблю -fstack-протектор за винятком того, що всі функції захищені.

-fstack-protector-strong
Люблю -fstack-протектор але включає додаткові функції для захисту --- ті
які мають визначення локальних масивів або мають посилання на локальні адреси кадрів.

-fstack-protector-explicit
Люблю -fstack-протектор але захищає лише ті функції, які мають
атрибут "stack_protect".

-fstdarg-opt
Оптимізуйте пролог функцій змінних аргументів щодо їх використання
аргументів.

ПРИМІТКА. В Ubuntu 14.10 і новіших версіях, -fstack-protector-strong увімкнено за допомогою
за замовчуванням для C, C++, ObjC, ObjC++, якщо жодного з -fno-стек-протектор, -nostdlib, ні
-автономний знайдені.

-fsection-анкери
Спробуйте зменшити кількість обчислень символічної адреси, використовуючи спільний "якор"
символи для адреси об'єктів поблизу. Ця трансформація може допомогти зменшити кількість
записів GOT та доступів GOT до деяких цілей.

Наприклад, реалізація наступної функції "foo":

static int a, b, c;
int foo (void) { return a + b + c; }

зазвичай обчислює адреси всіх трьох змінних, але якщо ви компілюєте його з
-fsection-анкери, замість цього він отримує доступ до змінних із загальної точки прив’язки. The
ефект подібний до наступного псевдокоду (який не є дійсним C):

int foo (недійсний)
{
зареєструвати int *xr = &x;
return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Не всі цілі підтримують цю опцію.

--парам ім'я=значення
У деяких місцях GCC використовує різні константи для контролю рівня оптимізації
зроблено. Наприклад, GCC не вбудовує функції, які містять більше певного
кількість інструкцій. Ви можете керувати деякими з цих констант у командному рядку
використання --парам варіант.

Назви конкретних параметрів і значення значень прив'язані до
внутрішні елементи компілятора, і можуть бути змінені без попередження в майбутньому
Релізи

У кожному випадку значення є цілим числом. Допустимі варіанти для ім'я є:

передбачуваний-відгалуження-результат
Коли передбачено, що гілка буде зайнята з імовірністю, нижчою за цей поріг
(у відсотках), то це вважається добре передбачуваним. За замовчуванням – 10.

max-crossjump-края
Максимальна кількість вхідних країв, які потрібно враховувати для перехресного стрибка. Алгоритм
використаний -фкросстрибки дорівнює O(N^2) у кількості ребер, що надходять до кожного блоку.
Збільшення значень означає більш агресивну оптимізацію, що скорочує час компіляції
збільшується з, ймовірно, невеликим покращенням розміру виконуваного файлу.

min-crossjump-insns
Мінімальна кількість інструкцій, яка повинна бути зіставлена ​​в кінці двох блоків
перед виконанням на них крос-стрибків. Це значення ігнорується у випадку
де всі інструкції в блоці, з якого здійснюється перехресний перехід, збігаються. The
значення за замовчуванням 5.

max-grow-copy-bb-insns
Максимальний коефіцієнт розширення розміру коду при копіюванні базових блоків замість
стрибки. Розширення відноситься до інструкції переходу. Значення за замовчуванням
8.

max-goto-duplication-insns
Максимальна кількість інструкцій для дублювання в блок, який переходить до a
обчислений goto. Щоб уникнути поведінки O(N^2) під час кількох проходів, GCC розраховує
обчислював goto на початку процесу компіляції і дефакторизував їх лише пізніше
можливо. Лише обчислені стрибки в кінці основного блоку з не більше ніж максимальним
goto-duplication-insns не розкладаються. Значення за замовчуванням – 8.

max-delay-slot-insn-search
Максимальна кількість інструкцій, які слід враховувати під час пошуку інструкції
заповнити слот затримки. Якщо більше цієї довільної кількості інструкцій
шукали, економія часу від заповнення слоту затримки мінімальна, тому зупиніться
пошук. Збільшення значень означає більш агресивну оптимізацію, що робить
збільшується час компіляції з, ймовірно, невеликим покращенням часу виконання.

max-delay-slot-live-search
Під час спроби заповнити слоти затримки слід враховувати максимальну кількість інструкцій
під час пошуку блоку з дійсною інформацією реального реєстру. Збільшення цього
довільно вибране значення означає більш агресивну оптимізацію, збільшення
час складання. Цей параметр слід видалити, коли є код слота затримки
переписано для підтримки графіка потоку керування.

max-gcse-пам'ять
Приблизний максимальний обсяг пам’яті, який можна виділити для виконання
глобальна оптимізація загальних підвиразів. Якщо пам'яті більше ніж
вказано необхідне, оптимізація не виконана.

max-gcse-insertion-ratio
Якщо відношення вставок виразів до видалень більше, ніж це значення для
будь-який вираз, то RTL PRE вставляє або видаляє вираз і таким чином залишає
частково надлишкові обчислення в потоці інструкцій. Значенням за замовчуванням є
20.

максимальна довжина списку очікування
Максимальна кількість очікуваних залежностей дозволяє планування перед очищенням файлу
поточний стан і початок заново. Великі функції з кількома розгалуженнями або викликами можуть
створювати занадто великі списки, які без потреби споживають пам'ять і ресурси.

max-modulo-backtrack-спроби
Максимальна кількість спроб повернення, яку планувальник повинен зробити за модулем
планування циклу. Більші значення можуть експоненціально збільшити час компіляції.

max-inline-insns-single
Кілька параметрів контролюють вбудоване дерево, яке використовується в GCC. Це число встановлює
максимальна кількість інструкцій (враховується у внутрішньому представленні GCC) в a
єдина функція, яку вбудоване дерево розглядає для вбудовування. Це тільки впливає
функції, оголошені вбудовані, і методи, реалізовані в оголошенні класу (C++).
Значення за замовчуванням - 400.

max-inline-insns-auto
При використанні -finline-функції (входить до -О3), багато функцій, які б
в іншому випадку не розглядаються для вбудовування компілятором, досліджуються. До
ці функції, інші (більш обмежувальні) обмеження порівняно з функціями
оголошені вбудовані можна застосувати. Значення за замовчуванням — 40.

inline-min-speedup
Коли очікуване покращення продуктивності часу виконання абонента + абонента перевищує це
threshold (у прецентах), функція може бути вбудована незалежно від обмеження на
--парам max-inline-insns-single та --парам max-inline-insns-auto.

великі функції-insns
Межа, що визначає дійсно великі функції. Для функцій, що перевищують цю межу
після вбудовування вбудовування обмежується --парам велика функція зростання, це
параметр корисний насамперед, щоб уникнути екстремального часу компіляції, викликаного не-
лінійні алгоритми, які використовуються бек-ендом. Значення за замовчуванням — 2700.

велика функція зростання
Визначає максимальне зростання великої функції, викликане вбудовуванням у відсотках. The
Значення за замовчуванням — 100, що обмежує зростання великої функції в 2.0 рази більше від початкового
розмір.

великий підрозділ-insns
Обмеження, що визначає велику одиницю перекладу. Зростання, викликане вбудовуванням одиниць
більше цієї межі обмежено --парам вбудований зростання. Для невеликих одиниць
це може бути занадто туго. Наприклад, розглянемо одиницю, що складається з функції А
який є вбудованим і B, який просто викликає A тричі. Якщо B мале відносно A,
зростання одиниці становить 300\% і все ж така підкладка дуже розумна. Для дуже великих
одиниці, що складаються з невеликих інлайнових функцій, однак загальний приріст одиниці
обмеження необхідне, щоб уникнути експоненційного вибуху розміру коду. Таким чином, для менших
одиниць, розмір збільшено до --парам великий підрозділ-insns перед застосуванням --парам
вбудований зростання. За замовчуванням – 10000.

вбудований зростання
Вказує максимальне загальне зростання одиниці компіляції, викликане вбудовуванням. The
Значення за замовчуванням — 20, що обмежує зростання одиниці в 1.2 рази від початкового розміру. Холодний
функції (або позначені як холодні за допомогою атрибута, або за допомогою зворотного зв'язку профілю) не є
враховується в розмірі одиниці.

ipcp-unit-growth
Вказує максимальне загальне зростання одиниці компіляції, викликане міжпроцедурними
постійне поширення. Значенням за замовчуванням є 10, що обмежує зростання одиниці до 1.1
разів більше початкового розміру.

великогабаритний каркас
Обмеження, що визначає великі кадри стека. Під час вбудовування алгоритм намагається
щоб не перевищувати цю межу занадто сильно. Значення за замовчуванням — 256 байт.

big-stack-frame-growth
Визначає максимальне зростання кадрів великого стека, викликане вбудовуванням у відсотках.
Значенням за замовчуванням є 1000, що обмежує зростання кадру великого стека в 11 разів
оригінальний розмір.

max-inline-insns-рекурсивний
max-inline-insns-recursive-auto
Вказує максимальну кількість інструкцій для позалінійної копії само-
рекурсивна вбудована функція може перерости в рекурсивне вбудовування.

--парам max-inline-insns-рекурсивний застосовується до функцій, оголошених inline. Для
функції, не оголошені вбудованими, рекурсивне вбудовування відбувається лише тоді, коли
-finline-функції (входить до -О3) увімкнено; --парам max-inline-insns-
рекурсивно-автоматично замість цього застосовується. Значення за замовчуванням — 450.

max-inline-recursive-depth
max-inline-recursive-depth-auto
Вказує максимальну глибину рекурсії, яка використовується для рекурсивного вбудовування.

--парам max-inline-recursive-depth застосовується до функцій, оголошених inline. Для
функції, не оголошені вбудованими, рекурсивне вбудовування відбувається лише тоді, коли
-finline-функції (входить до -О3) увімкнено; --парам max-inline-recursive-
глибина-авто замість цього застосовується. Значення за замовчуванням — 8.

min-inline-recursive-probability
Рекурсивне вбудовування вигідно лише для функції з глибокою рекурсією
середній і може зашкодити функції з невеликою глибиною рекурсії за рахунок збільшення
передайте розмір або складність тіла функції іншим оптимізаторам.

Коли доступний зворотній зв’язок профілю (див -fprofile-generate) фактична рекурсія
глибину можна вгадати з ймовірності того, що функція рекурсує через даний виклик
вираз. Цей параметр обмежує вбудовування лише викликом виразів, чий
ймовірність перевищує заданий поріг (у відсотках). Значення за замовчуванням – 10.

ранній інлайнінг-insns
Укажіть зростання, яке може досягти ранній інлайнер. Фактично це збільшує кількість
вбудовування для коду, що має великий штраф абстракції. Значення за замовчуванням – 14.

максимально-ранні інлінер
Межа ітерацій раннього інлайнера. Це в основному обмежує кількість
вкладені непрямі виклики, які може розв’язувати ранній інлайнер. Ще глибші ланцюги
обробляється пізнім вкладенням.

comdat-sharing-probability
Імовірність (у відсотках), що вбудована функція C++ з видимістю comdat є
спільне для кількох компіляційних одиниць. Значення за замовчуванням – 20.

профіль-функція-внутрішній ідентифікатор
Параметр для контролю, чи використовувати внутрішній ідентифікатор функції в базі даних профілів
пошук. Якщо значення дорівнює 0, компілятор використовує ідентифікатор, заснований на функції
ім'я асемблера та ім'я файлу, що робить старі дані профілю більш толерантними до джерела
зміни, такі як зміна порядку функцій тощо. Значенням за замовчуванням є 0.

min-vect-loop-bound
Мінімальна кількість ітерацій, при яких цикли не векторизуються, коли
-ftree-векторизувати використовується. Необхідна кількість ітерацій після векторизації
бути більшим за значення, зазначене цим параметром, щоб дозволити векторизацію. The
значення за замовчуванням 0.

gcse-cost-distance-rate
Коефіцієнт масштабування для обчислення максимальної відстані, на яку можна перемістити вираз
Оптимізація GCSE. Наразі це підтримується лише в перепустці підйому коду.
Чим більше коефіцієнт, тим агресивнішим є підйом коду з простим
виразів, тобто виразів, вартість яких менше ніж gcse-unlimited-
коштувати. Вказання 0 вимикає підняття простих виразів. Значенням за замовчуванням є
10.

gcse-unlimited-cost
Вартість, приблизно виміряна як вартість однієї типової машинної інструкції, у
які оптимізації GCSE не обмежують відстань, яку може подолати вираз.
Наразі це підтримується лише в перепустці підйому коду. Чим менша вартість,
тим агресивнішим є підйом коду. Зазначення 0 дозволяє всім виразам
подорожувати на необмежені відстані. Значення за замовчуванням – 3.

максимальна глибина підйому
Глибина пошуку в дереві домінатора виразів для підняття. Це використовується
щоб уникнути квадратичної поведінки в алгоритмі підйому. Значення 0 не обмежує
на пошук, але може сповільнити компіляцію величезних функцій. Значення за замовчуванням
є 30.

max-tail-merge-comparations
Максимальна кількість подібних bbs для порівняння bb. Це використовується, щоб уникнути
квадратична поведінка при злитті хвостів дерев. Значення за замовчуванням – 10.

max-tail-merge-ітерації
Максимальна кількість ітерацій проходження функції. Це звикло
обмежити час компіляції під час злиття хвоста дерева. Значення за замовчуванням – 2.

max-unrolled-insns
Максимальна кількість інструкцій, які може знадобитися розгорнути цикл. Якщо петля
розгортається, цей параметр також визначає, скільки разів буде код циклу
розгорнутий.

max-verage-unrolled-insns
Максимальна кількість інструкцій, упереджених ймовірностями їх виконання
можливо, доведеться розгорнути петлю. Якщо цикл розгорнутий, цей параметр також
визначає, скільки разів розгортається код циклу.

максимальний час розгортання
Максимальна кількість розгортань однієї петлі.

max-peeled-insns
Максимальна кількість інструкцій, які може знадобитися вилучити з циклу. Якщо петля
очищається, цей параметр також визначає, скільки разів буде очищено код циклу.

максимальний час очищення
Максимальна кількість пілінгів однієї петлі.

max-peel-гілки
Максимальна кількість гілок на гарячому шляху через очищену послідовність.

max-fully-oled-insns
Максимальна кількість insns повністю відклеєної петлі.

максимальний час повного очищення
Максимальна кількість ітерацій циклу, яка підходить для повного пілінгу.

максимальна глибина гнізда повністю відклеїти петлю
Максимальна глибина петлевого гнізда підходить для повного відшаровування.

max-unswitch-insns
Максимальна кількість insns неперемкненого циклу.

максимальний рівень відключення
Максимальна кількість відгалужень, які не перемикаються в одному циклі.

lim-дорого
Мінімальна вартість дорогого виразу в циклі інваріантного руху.

iv-розглянути-всі-кандидати-пов'язані
Зв’язана з кількістю кандидатів на індукційні змінні, нижче якої всі кандидати
розглядаються для кожного використання в оптимізації індукційної змінної. Якщо є
більше кандидатів, ніж це, лише найрелевантніші вважаються уникними
квадратична часова складність.

iv-max-considered-use
Оптимізація змінної індукції відмовляється від циклів, які містять більше індукції
змінне використання.

iv-always-prune-can-set-bound
Якщо кількість кандидатів у наборі менше цього значення, завжди намагайтеся
видалити непотрібні ivs з набору при додаванні нового.

scev-max-expr-size
Зв’язано з розміром виразів, що використовуються в аналізаторі скалярних еволюцій. Великий
вирази сповільнюють аналізатор.

scev-max-expr-complexity
Зв'язано зі складністю виразів в аналізаторі скалярних еволюцій.
Складні вирази сповільнюють роботу аналізатора.

омега-макс-вари
Максимальна кількість змінних у системі обмежень Omega. Значення за замовчуванням
є 128.

омега-макс-гек
Максимальна кількість нерівностей в системі обмежень Омега. За замовчуванням
значення дорівнює 256.

омега-макс-екв
Максимальна кількість рівностей у системі обмежень Омега. Значення за замовчуванням
є 128.

omega-max-wild-cards
Максимальна кількість змінних підстановки, яку може вставити розв’язувач Omega.
Значення за замовчуванням - 18.

розмір хеш-таблиці омега
Розмір хеш-таблиці в вирішувачі Omega. Значення за замовчуванням — 550.

омега-макс-клавіші
Максимальна кількість ключів, використовуваних вирішувачем Omega. Значення за замовчуванням – 500.

омега-усунення зайвих обмежень
Якщо встановлено значення 1, використовуйте дорогі методи для усунення всіх зайвих обмежень. The
значення за замовчуванням 0.

vect-max-version-for-alignment-checks
Максимальна кількість перевірок під час виконання, які можна виконати під час виконання циклу
версій для вирівнювання у векторізаторі.

vect-max-version-for-alias-checks
Максимальна кількість перевірок під час виконання, які можна виконати під час виконання циклу
керування версіями для псевдоніма у векторізаторі.

vect-max-peeling-for-alignment
Максимальна кількість відколів циклу для покращення вирівнювання доступу для векторизатора. Значення
-1 означає «без обмежень».

максимальна кількість ітерацій для відстеження
Максимальна кількість ітерацій циклу алгоритм грубої сили для аналізу
кількості ітерацій циклу, який намагається оцінити.

hot-bb-count-ws-permille
Основний підрахунок профілю блоку вважається гарячим, якщо він сприяє заданому
пропуск (тобто 0...1000) всього профільованого виконання.

hot-bb-frequency-fraction
Виберіть частку частоти виконання базового блоку введення
Функція даного базового блоку повинна вважатися гарячою.

максимальні передбачувані ітерації
Максимальна кількість ітерацій циклу ми прогнозуємо статично. Це корисно в
випадки, коли функція містить один цикл з відомою межею та інший цикл
з невідомим зв'язком. Відома кількість ітерацій прогнозується правильно, while
невідома кількість ітерацій в середньому становить приблизно 10. Це означає, що цикл
безмежно виявляється штучно холодним відносно іншого.

вбудована очікувана ймовірність
Контролювати ймовірність виразу, що має вказане значення. Це
параметр приймає у відсотках (тобто 0 ... 100) як вхідні дані. Імовірність за замовчуванням
90 отримано емпірично.

вирівняти поріг
Виберіть частку максимальної частоти виконання базового блоку в a
функція для вирівнювання основного блоку.

align-loop-ітерації
Цикл, який, як очікується, виконуватиме принаймні вибрану кількість ітерацій, вирівнюється.

tracer-dynamic-coverage
tracer-dynamic-coverage-feedback
Це значення використовується, щоб обмежити формування суперблоку один раз на заданий відсоток
виконані інструкції покриваються. Це обмежує непотрібне розширення розміру коду.

Команда tracer-dynamic-coverage-feedback Параметр використовується тільки при зворотному зв'язку профілю
доступний. Реальні профілі (на відміну від статично оцінених) є
набагато менш збалансований, завдяки чому порогове значення має більше значення.

tracer-max-code-growth
Припиніть дублювання хвоста, як тільки зростання коду досягне заданого відсотка. Це
скоріше штучна межа, оскільки більшість дублікатів згодом усуваються при схрещуванні
стрибки, тому його можна встановити на набагато вищі значення, ніж бажане зростання коду.

tracer-min-branch-ratio
Зупинити зворотне зростання, коли зворотна ймовірність кращого краю менша за цю
поріг (у відсотках).

tracer-min-branch-ratio
tracer-min-branch-rate-feedback
Зупинити зростання вперед, якщо найкраща межа має ймовірність нижчу за цей поріг.

Аналогічно до tracer-dynamic-coverage присутні два значення, одне для компіляції
для зворотного зв'язку профілю та один для компіляції без. Значення для компіляції
з профілем зворотний зв'язок має бути більш консервативним (вищим), щоб зробити
трасуючий ефект ефективний.

max-cse-path-length
Максимальна кількість базових блоків на шляху, що розглядається CSE. За замовчуванням – 10.

max-cse-insns
Максимальна кількість інструкцій, які CSE обробляє перед очищенням. За замовчуванням є
1000.

ggc-min-expand
GCC використовує збирач сміття для керування власним розподілом пам'яті. Цей параметр
визначає мінімальний відсоток, на який має бути купа збирача сміття
дозволено розширюватися між колекціями. Налаштування цього може покращити швидкість компіляції;
це не впливає на генерацію коду.

За замовчуванням – 30% + 70% * (ОЗУ/1 Гб) з верхньою межею 100%, коли ОЗУ >= 1 Гб.
Якщо «getrlimit» доступний, поняття «RAM» є найменшим із фактичної RAM і
"RLIMIT_DATA" або "RLIMIT_AS". Якщо GCC не може обчислити оперативну пам’ять на певному
платформи, використовується нижня межа 30%. Встановлення цього параметра і ggc-min-
купа до нуля спричиняє повне збирання при кожній нагоді. Це
надзвичайно повільний, але може бути корисним для налагодження.

ggc-min-heapsize
Мінімальний розмір купи збирача сміття, перш ніж він почне збирати
сміття. Перше збирання відбувається після того, як купа розширюється на ggc-min-expand%
За ggc-min-heapsize. Знову ж таки, налаштування може покращити швидкість компіляції та
не впливає на генерацію коду.

За замовчуванням є менший з RAM/8, RLIMIT_RSS або обмеження, яке намагається забезпечити
що RLIMIT_DATA або RLIMIT_AS не перевищено, але з нижньою межею 4096
(чотири мегабайти) і верхня межа 131072 (128 мегабайт). Якщо GCC не в змозі
для обчислення оперативної пам’яті на певній платформі використовується нижня межа. Налаштування цього
параметр дуже великий ефективно відключає збір сміття. Налаштування цього
параметр і ggc-min-expand до нуля спричиняє повне збирання на кожному
можливість.

max-reload-search-insns
Максимальна кількість перезавантажень інструкцій має бути еквівалентною
зареєструвати. Збільшення значень означає більш агресивну оптимізацію, що робить
збільшується час компіляції з, ймовірно, трохи кращою продуктивністю. За замовчуванням
значення дорівнює 100.

max-cselib-memory-locations
Cselib має враховувати максимальну кількість місць пам’яті.
Збільшення значень означає більш агресивну оптимізацію, що скорочує час компіляції
збільшитися з, ймовірно, трохи кращою продуктивністю. Значення за замовчуванням – 500.

reorder-blocks-duplicate
reorder-blocks-duplicate-feedback
Використовується базовим проходом переупорядкування блоків, щоб вирішити, чи використовувати безумовний
розгалужувати або дублювати код на місці призначення. Код дублюється, коли його
передбачуваний розмір менший, ніж це значення, помножене на передбачуваний розмір
безумовний стрибок у гарячі точки програми.

Команда reorder-block-duplicate-feedback Параметр використовується тільки при зворотному зв'язку профілю
доступний. Його можна встановити на вищі значення, ніж reorder-block-duplicate з
інформація про гарячі точки більш точна.

max-sched-ready-insns
Максимальна кількість інструкцій, готових до видачі, має планувальник
розглянути в будь-який момент під час першого проходу планування. Збільшення значень
означають більш ретельний пошук, завдяки чому час компіляції збільшується на ймовірно
мало користі. Значення за замовчуванням – 100.

max-sched-region-blocks
Максимальна кількість блоків у регіоні, які розглядаються для міжблоку
планування. Значення за замовчуванням – 10.

max-pipeline-region-blocks
Максимальна кількість блоків у регіоні, які розглядаються для конвеєрної конвеєрної системи
вибірковий планувальник. Значення за замовчуванням – 15.

max-sched-region-insns
Максимальна кількість insns в регіоні, що розглядається для міжблоку
планування. Значення за замовчуванням – 100.

max-pipeline-region-insns
Максимальна кількість insns в регіоні, що розглядається для конвеєра в
вибірковий планувальник. Значення за замовчуванням – 200.

min-spec-prob
Мінімальна ймовірність (у відсотках) досягнення вихідного блоку для міжблоку
спекулятивне планування. Значення за замовчуванням — 40.

max-sched-extend-regions-iters
Максимальна кількість ітерацій через CFG для розширення регіонів. Значення 0 (
за замовчуванням) вимикає розширення регіону.

max-sched-insn-conflict-delay
Максимальна затримка конфлікту для insn, яка розглядається для спекулятивного руху.
Значення за замовчуванням - 3.

sched-spec-prob-cutoff
Мінімальна ймовірність успіху спекуляцій (у відсотках), тому спекулятивна
insns заплановано. Значення за замовчуванням — 40.

sched-spec-state-edge-prob-cutoff
Мінімальна ймовірність, яку має мати грань, щоб планувальник зберегти свій стан
через нього. Значення за замовчуванням – 10.

sched-mem-true-dep-cost
Мінімальна відстань (у циклах ЦП) між збереженням і завантаженням, націленим на ту саму пам'ять
місця розташування. Значення за замовчуванням – 1.

selsched-max-lookahead
Максимальний розмір вікна попереднього перегляду вибіркового планування. Це глибина
пошуку доступних інструкцій. Значення за замовчуванням – 50.

selsched-max-sched-times
Максимальна кількість разів, коли інструкція планується під час вибіркового
планування. Це обмеження на кількість ітерацій, через які
інструкція може бути конвеєрною. Значення за замовчуванням – 2.

selsched-max-insns-to-rename
Максимальна кількість найкращих інструкцій у готовому списку, які розглядаються
перейменування в селективному планувальнику. Значення за замовчуванням – 2.

sms-min-sc
Мінімальне значення кількості етапів, яке генерує планувальник swing modulo. The
значення за замовчуванням 2.

max-last-value-rtl
Максимальний розмір, що вимірюється як кількість RTL, які можна записати у виразі
в комбінаторі для псевдорегістра як останнього відомого значення цього регістра. The
за замовчуванням - 10000.

max-combine-insns
Максимальна кількість інструкцій, яку RTL-комбінатор намагається об’єднати. За замовчуванням
значення 2 ат -Ог і 4 інакше.

ліміт цілочисельної частки
Малі цілі константи можуть використовувати спільну структуру даних, зменшуючи компілятор
використання пам'яті та збільшення її швидкості. Це встановлює максимальне значення спільного доступу
ціла константа. Значення за замовчуванням – 256.

ssp-буфер-розмір
Мінімальний розмір буферів (тобто масивів), які отримують захист від руйнування стека
коли -fstack-захист використовується.

За замовчуванням до Ubuntu 10.10 було "8". Зараз це "4", щоб збільшити
кількість функцій, захищених захистом стека.

мінімальний розмір для спільного використання стека
Мінімальний розмір змінних, які беруть участь у спільному використанні слотів стека, якщо ні
оптимізація. Значення за замовчуванням — 32.

max-jump-thread-duplication-stmts
Максимальна кількість операторів, дозволених у блоці, яку потрібно продублювати, коли
стрибки нарізки.

max-fields-for-field-sensitive
Максимальна кількість полів у структурі, що обробляється чутливим до поля способом
аналіз покажчиків. За замовчуванням дорівнює нулю для -О0 та -О1, і 100 для -Ос, -О2 та
-О3.

затримка попередньої вибірки
Оцініть середню кількість інструкцій, які виконуються перед попередньою вибіркою
закінчується. Попередня відстань пропорційна цій константі.
Збільшення цієї кількості також може призвести до попередньої завантаження менше потоків (див
одночасні попередні вибірки).

одночасні попередні вибірки
Максимальна кількість попередніх вибірок, які можуть виконуватися одночасно.

l1-кеш-ряд-розмір
Розмір рядка кешу в кеші L1, в байтах.

l1-розмір кешу
Розмір кешу L1, в кілобайтах.

l2-розмір кешу
Розмір кешу L2, в кілобайтах.

відношення min-insn-to-prefetch-rate
Мінімальне співвідношення між кількістю інструкцій і кількістю попередніх вибірок
щоб увімкнути попередню вибірку в циклі.

відношення prefetch-min-insn-to-mem
Мінімальне співвідношення між кількістю інструкцій і кількістю пам'яті
посилання, щоб увімкнути попередню вибірку в циклі.

використання канонічних типів
Чи повинен компілятор використовувати систему "канонічних" типів. За замовчуванням це
завжди має бути 1, що використовує більш ефективний внутрішній механізм для порівняння
типи в C++ і Objective-C++. Однак, якщо в системі канонічних типів є помилки
спричиняючи помилки компіляції, встановіть це значення на 0, щоб вимкнути канонічні типи.

switch-conversion-max-branch-ratio
Перетворення ініціалізації перемикача відмовляється створювати масиви, більші ніж
switch-conversion-max-branch-ratio помножена на кількість гілок в комутаторі.

максимальна часткова-анти-довжина
Максимальна довжина часткового античного набору, обчислена під час часткового дерева
оптимізація усунення надмірності (-Free-pre) при оптимізації на -О3 і вище.
Для деяких видів вихідного коду розширене усунення часткової надмірності
оптимізація може втекти, споживаючи всю доступну пам'ять на хості
машина. Цей параметр встановлює обмеження на довжину обчислюваних наборів,
що запобігає втечі. Встановлення значення 0 для цього параметра
дозволяє встановити необмежену довжину.

sccvn-max-scc-size
Максимальний розмір сильно зв'язаного компонента (SCC) під час обробки SCCVN. Якщо
ця межа досягнута, обробка SCCVN для всієї функції не виконується і
оптимізації залежно від нього вимкнено. Максимальний розмір SCC за замовчуванням становить
10000.

sccvn-max-alias-queries-per-access
Максимальна кількість запитів псевдоніма-оракула, які ми виконуємо під час пошуку надмірностей
для вантажів і магазинів. Якщо це обмеження досягнуто, пошук припиняється, а завантаження або
магазин не вважається зайвим. Кількість запитів визначається алгоритмічно
обмежена кількістю сховищ на всіх шляхах від завантаження до запису функції.
За замовчуванням максимальна кількість запитів становить 1000.

ira-max-loops-num
IRA за замовчуванням використовує розподіл регіональних реєстрів. Якщо функція містить більше
циклів, ніж число, задане цим параметром, лише не більше заданої кількості
найбільш часто виконувані цикли утворюють регіони для розміщення регіональних реєстрів.
Значення параметра за замовчуванням — 100.

ira-max-conflict-table-size
Хоча IRA використовує складний алгоритм для стиснення таблиці конфліктів,
таблиця все ще може вимагати надмірного обсягу пам'яті для величезних функцій. Якщо
Таблиця конфліктів для функції може бути більше розміру в МБ, зазначеного цим
параметр, розподільник регістрів замість цього використовує швидший, простіший і менший
якісний алгоритм, який не вимагає побудови таблиці конфліктів псевдореєстрів.
Значення параметра за замовчуванням — 2000.

ira-loop-reserved-regs
IRA можна використовувати для оцінки більш точного тиску регістра в циклах прийняття рішень
для переміщення інваріантів циклу (див -О3). Зарезервована кількість доступних реєстрів
деякі інші цілі дає цей параметр. Значення за замовчуванням
Параметр дорівнює 2, що є мінімальною кількістю регістрів, необхідних типовому
інструкції. Це значення є найкращим, знайденим у численних експериментах.

lra-спадкування-відливи-імовірність-відсічення
LRA намагається повторно використовувати значення, перезавантажені в регістрах в наступних insns. Це
оптимізація називається успадкуванням. Для цього в якості регіону використовується EBB
оптимізація. Параметр визначає мінімальну ймовірність провалу краю в
відсоток, що використовується для додавання BB до успадкування EBB в LRA. Значення за замовчуванням
параметр 40. Значення було вибрано з численних запусків SPEC2000 на x86-64.

loop-invariant-max-bbs-in-loop
Інваріантний рух циклу може бути дуже дорогим як під час компіляції, так і в
обсяг необхідної пам'яті під час компіляції, з дуже великими циклами. Петлі з більше
базові блоки, ніж цей параметр, не матимуть циклічної інваріантної оптимізації руху
виконано на них. Значення параметра за замовчуванням становить 1000 for -О1 і 10000
та цінності -О2 і вище.

loop-max-datarefs-for-datadeps
Побудова залежностей даних коштує дорого для дуже великих циклів. Цей параметр
обмежує кількість посилань на дані в циклах, які розглядаються для даних
аналіз залежності. Ці великі цикли не обробляються за допомогою оптимізації
циклічні залежності даних. Значення за замовчуванням – 1000.

max-vartrack-size
Встановлює максимальну кількість слотів хеш-таблиці для використання під час потоку даних відстеження змінних
аналіз будь-якої функції. Якщо цей ліміт перевищено зі змінним відстеженням на
призначення увімкнено, аналіз для цієї функції повторюється без нього, після
видалення всіх налагоджувальних insns з функції. Якщо ліміт перевищено навіть без
debug insns, аналіз відстеження змінних параметрів повністю вимкнено для функції.
Установлення параметра на нуль робить його необмеженим.

max-vartrack-expr-depth
Встановлює максимальну кількість рівнів рекурсії під час спроби відобразити імена змінних або
налагоджувати тимчасові значення виразів. Це замінює час компіляції на більше
повна інформація про налагодження. Якщо для цього параметра встановлено занадто низький рівень, значення виразів
доступний і може бути представлений в налагоджувальної інформації, може в кінцевому підсумку не використовуватися;
встановлення цього вище може дозволити компілятору знайти більш складне налагодження
виразів, але час компіляції та використання пам’яті може зрости. За замовчуванням – 12.

min-nondebug-insn-uid
Використовуйте uids, починаючи з цього параметра, для nondebug insns. Діапазон нижче
Параметр зарезервований виключно для налагоджувальних insns, створених
-fvar-tracking-assignments, але debug insns можуть отримати (не перекриваються) uid вище
якщо зарезервований діапазон вичерпано.

ipa-sra-ptr-фактор росту
IPA-SRA замінює покажчик на агрегат лише одним або кількома новими параметрами
коли їх сукупний розмір менший або дорівнює ipa-sra-ptr-фактор росту разів
розмір вихідного параметра покажчика.

sra-max-scalarization-size-Ospeed
sra-max-scalarizy-size-osize
Два проходи скалярного скорочення агрегатів (SRA та IPA-SRA) мають на меті замінити
скалярні частини агрегатів із використанням незалежних скалярних змінних. Ці
параметри контролюють максимальний розмір сукупності в одиницях зберігання
розглядається для заміни при компіляції для швидкості (sra-max-scalarization-size-
Ospeed) або розмір (sra-max-scalarizy-size-osize) відповідно.

tm-max-aggregate-size
Під час створення копій локальних змінних потоку в транзакції цей параметр
визначає розмір у байтах, після якого змінні зберігаються разом із журналом
функції на відміну від збереження/відновлення пар кодової послідовності. Тільки цей варіант
застосовується при використанні -fgnu-tm.

graphite-max-nb-scop-params
Щоб уникнути експоненційних ефектів у перетвореннях циклу Graphite, кількість
параметри статичної контрольної частини (SCoP) обмежені. Значення за замовчуванням – 10
параметри. Змінна, значення якої невідоме під час компіляції та визначене
за межами SCoP є параметром SCoP.

graphite-max-bbs-per-function
Щоб уникнути експоненційних ефектів при виявленні SCoP, розмір функцій
аналізований Графіт обмежений. Значення за замовчуванням — 100 базових блоків.

loop-block-tile-size
Блокування циклів або трансформації видобутку смуги, увімкнені за допомогою -флоп-блок or
-floop-strip-mine, вилучіть кожну петлю в гнізді петлі на задану кількість
ітерації. Довжину смуги можна змінити за допомогою loop-block-tile-size
параметр. Значення за замовчуванням — 51 ітерація.

loop-unroll-jam-size
Вкажіть коефіцієнт розгортання для -floop-unroll-and-jam варіант. Значення за замовчуванням
є 4.

loop-unroll-jam-depth
Укажіть розмір, який потрібно розгорнути (відраховуючи від самого внутрішнього циклу) для
-floop-unroll-and-jam. Значення за замовчуванням – 2.

ipa-cp-value-list-size
IPA-CP намагається відстежити всі можливі значення та типи, передані функції
параметр, щоб поширити їх і виконати девіртуалізацію. ipa-cp-value-
розмір списку – максимальна кількість значень і типів, які він зберігає на один формаль
параметр функції.

ipa-cp-eval-threshold
IPA-CP обчислює власну оцінку евристики прибутковості клонування та виконує
ці можливості клонування з результатами, які перевищують ipa-cp-eval-threshold.

ipa-cp-рекурсія-штраф
Відсоток штрафу, який отримають рекурсивні функції, коли вони будуть оцінені
для клонування.

ipa-cp-single-call-penalty
Функції відсоткового штрафу, що містять один виклик до іншої функції
отримувати, коли їх оцінюють для клонування.

ipa-max-agg-items
IPA-CP також здатний поширювати ряд скалярних значень, переданих в файлі
сукупність. ipa-max-agg-items контролює максимальну кількість таких значень на одне
параметр.

ipa-cp-loop-hint-bonus
Коли IPA-CP визначає, що кандидат на клонування створить кількість
ітерації циклу відомі, це додає бонус ipa-cp-loop-hint-bonus до
бал рентабельності кандидата.

ipa-cp-array-index-hint-bonus
Коли IPA-CP визначає, що кандидат на клонування створить індекс масиву
доступ відомий, це додає бонус ipa-cp-array-index-hint-bonus до
бал рентабельності кандидата.

ipa-max-aa-steps
Під час аналізу функціональних органів IPA-CP використовує аналіз псевдонімів, щоб
відстежувати значення, на які вказують параметри функції. Щоб не витрачати багато часу
аналізуючи величезні функції, він здається і вважає всю пам'ять забитою
вивчення ipa-max-aa-steps висловлювання, що змінюють пам'ять.

lto-перегородки
Вкажіть потрібну кількість розділів, створених під час компіляції WHOPR. The
кількість розділів має перевищувати кількість ЦП, що використовуються для компіляції. The
значення за замовчуванням 32.

lto-min partition
Розмір мінімального розділу для WHOPR (в орієнтовних інструкціях). Це запобігає
витрати на розбиття дуже малих програм на занадто багато розділів.

cxx-max-namespaces-for-diagnostic-help
Максимальна кількість просторів імен, до яких можна отримати пропозиції під час пошуку імен C++
не вдається для ідентифікатора. За замовчуванням – 1000.

частота-порогове значення
Максимальна відносна частота виконання (у відсотках) цільового блоку
відносно вихідного блоку оператора, щоб дозволити поглинання оператора a
заяву. Більші цифри призводять до більш агресивних заяв. The
значення за замовчуванням дорівнює 75. Невелике позитивне коригування застосовується для операторів з
операнди пам'яті, оскільки вони ще більш вигідні, тому зменшуються.

максимум магазинів до раковини
Максимальна кількість умовних пар сховищ, які можна потопити. Встановіть 0 якщо
або векторизація (-ftree-векторизувати) або якщо-перетворення (-ftree-loop-if-convert)
вимкнено. За замовчуванням – 2.

дозволити-зберігати-дані гонки
Дозвольте оптимізаторам запроваджувати нові перегони даних у магазинах. Встановіть 1, щоб дозволити,
інакше до 0. Цей параметр увімкнено за замовчуванням на рівні оптимізації -Швидко.

регістр значень-поріг
Найменша кількість різних значень, для яких найкраще використовувати таблицю переходів
замість дерева умовних гілок. Якщо значення дорівнює 0, використовуйте значення за замовчуванням для
машина. За замовчуванням – 0.

дерево-reassoc-ширина
Встановіть максимальну кількість інструкцій, що виконуються паралельно в повторно асоційованому дереві.
Цей параметр перевизначає залежну від цільової евристики, яка використовується за замовчуванням, якщо не має
нульове значення.

sched-pressure-algorithm
Виберіть між двома доступними реалізаціями -fsched-тиск. Алгоритм 1
є оригінальною реалізацією і, швидше за все, запобігти вказівкам
переупорядковується. Алгоритм 2 був розроблений як компроміс між
відносно консервативний підхід за алгоритмом 1 і досить агресивний
підхід, використаний планувальником за замовчуванням. Він більшою мірою покладається на наявність a
звичайний реєстровий файл і точні класи тиску в регістрі. Побачити haifa-sched.c
у джерелах GCC для більш детальної інформації.

Вибір за замовчуванням залежить від цілі.

max-slsr-can-scan
Встановіть максимальну кількість наявних кандидатів, які розглядаються під час пошуку a
основою для нового кандидата прямолінійного зниження сили.

асан-глобали
Увімкнути виявлення переповнення буфера для глобальних об’єктів. Цей вид захисту є
увімкнено за замовчуванням, якщо ви використовуєте -fsanitize=адреса варіант. Щоб вимкнути глобальний
використання охорони об'єктів --парам asan-globals=0.

асан-стек
Увімкнути виявлення переповнення буфера для об’єктів стека. Цей вид захисту є
увімкнено за замовчуванням під час використання-fsanitize=адреса. Щоб вимкнути захист стека, використовуйте
--парам asan-stack=0 варіант.

асан-інструмент-читання
Увімкнути виявлення переповнення буфера для читання пам’яті. Цей вид захисту є
увімкнено за замовчуванням під час використання -fsanitize=адреса. Щоб вимкнути читання з пам’яті
використання захисту --парам asan-instrument-reads=0.

асан-інструмент-пише
Увімкнути виявлення переповнення буфера для запису в пам’ять. Цей вид захисту є
увімкнено за замовчуванням під час використання -fsanitize=адреса. Щоб вимкнути запис в пам'ять
використання захисту --парам asan-instrument-writes=0 варіант.

асан-мемінтрін
Увімкнути виявлення для вбудованих функцій. Цей вид захисту забезпечується за допомогою
за замовчуванням при використанні -fsanitize=адреса. Щоб вимкнути захист вбудованих функцій
використання --парам асан-мемінтрин=0.

асан-використання-після-повернення
Увімкнути виявлення використання після повернення. Цей вид захисту забезпечується за допомогою
за замовчуванням при використанні -fsanitize=адреса варіант. Щоб вимкнути використання після повернення
використання виявлення --парам asan-use-after-return=0.

asan-instrumentation-with-call-threshold
Якщо кількість звернень до пам’яті у функції, що інструментується, більше або дорівнює
цей номер, використовуйте зворотні виклики замість вбудованих перевірок. Наприклад, щоб вимкнути вбудований код
використання --парам asan-instrumentation-with-call-threshold=0.

chkp-max-ctor-size
Статичні конструктори, створені за допомогою Pointer Bounds Checker, можуть стати дуже великими і
значно збільшити час компіляції на рівні оптимізації -О1 і вище. Це
Параметр – це максимальна кількість операторів в одному створеному конструкторі.
Значення за замовчуванням – 5000.

max-fsm-шлях-потоку-insns
Максимальна кількість інструкцій для копіювання при дублюванні блоків у кінцевому стані
Шлях потоку автоматичного переходу. За замовчуванням – 100.

максимальна-fsm-довжина-потоку
Максимальна кількість базових блоків на шляху потоку переходу кінцевого автомата. The
за замовчуванням - 10.

max-fsm-thread-paths
Максимальна кількість нових шляхів потоку переходу для створення кінцевого автомата.
За замовчуванням 50.

Опції Управління Препроцесор
Ці параметри керують препроцесором C, який запускається на кожному вихідному файлі C перед фактичним
складання.

Якщо ви використовуєте -E опція, нічого не робиться, крім попередньої обробки. Деякі з цих варіантів
мають сенс тільки разом з -E оскільки вони викликають вихід препроцесора
непридатний для фактичного складання.

-Wp,варіант
Ви можете використовувати -Wp,варіант щоб обійти драйвер компілятора і пройти варіант безпосередньо через
до препроцесора. Якщо варіант містить коми, він розділений на кілька варіантів на
коми. Однак багато варіантів змінюються, перекладаються або інтерпретуються
драйвер компілятора перед передачею в препроцесор, і -Wp примусово обходить
цю фазу. Прямий інтерфейс препроцесора недокументований і підлягає
змінювати, тому по можливості уникайте використання -Wp і нехай водій впорається
замість цього.

-Xпрепроцесор варіант
Проходити варіант як опція для препроцесора. Ви можете використовувати це для забезпечення системи-
конкретні параметри препроцесора, які GCC не розпізнає.

Якщо ви хочете передати параметр, який приймає аргумент, ви повинні використовувати -Xпрепроцесор
двічі, один раз для варіанту і один раз для аргументу.

-no-integrated-cpp
Виконайте попередню обробку як окремий прохід перед компіляцією. За замовчуванням виконується GCC
попередня обробка як невід'ємна частина токенізації та синтаксичного аналізу вхідних даних. Якщо цей варіант
надається відповідна мовна передня частина (Cc1, cc1plusабо cc1obj для C, C++,
і Objective-C, відповідно) замість цього викликається двічі, один раз лише для попередньої обробки
і один раз для фактичної компіляції попередньо обробленого введення. Ця опція може бути корисною
в поєднанні з -B or -обгортка параметри для визначення альтернативного препроцесора або
виконати додаткову обробку джерела програми між звичайною попередньою обробкою і
складання.

-D ім'я
Попередньо визначити ім'я як макрос, з визначенням 1.

-D ім'я=визначення
Вміст визначення маркуються та обробляються так, ніби вони з’явилися під час
третій етап перекладу в а #визначити директива. Зокрема, визначення буде
скорочено за допомогою вбудованих символів нового рядка.

Якщо ви викликаєте препроцесор з оболонки або програми, подібної до оболонки, вам може знадобитися
використовувати синтаксис цитування оболонки для захисту таких символів, як пробіли, які мають a
значення в синтаксисі оболонки.

Якщо ви хочете визначити функціональний макрос у командному рядку, напишіть його аргумент
список з оточуючими дужками перед знаком рівності (якщо є). Дужки є
значуще для більшості оболонок, тому вам потрібно буде процитувати параметр. З sh та CSH,
-D'ім'я(аргументи...)=визначення' працює.

-D та -U параметри обробляються в тому порядку, в якому вони вказані в командному рядку. всі
-макроси файл та -включати файл опції все-таки обробляються -D та -U Варіанти.

-U ім'я
Скасуйте будь-яке попереднє визначення ім'я, вбудований або забезпечений a -D варіант.

-undef
Не встановлюйте заздалегідь жодні макроси, специфічні для системи чи GCC. Стандарт наперед визначений
макроси залишаються визначеними.

-I реж
Додайте каталог реж до списку каталогів для пошуку заголовних файлів.
Довідники за ім -I шукаються до того, як стандартна система включає каталоги.
Якщо каталог реж є стандартним системним каталогом включення, параметр ігнорується
переконайтеся, що порядок пошуку за замовчуванням для системних каталогів і спеціальний режим
системних заголовків не переможеться. Якщо реж починається з "=", потім "=" буде
замінено на префікс sysroot; побачити --sysroot та -isysroot.

-o файл
Записати вихід до файл. Це те саме, що вказувати файл як другий не варіант
аргумент до cpp. ПКУ має іншу інтерпретацію другого аргументу без варіантів,
тому ви повинні використовувати -o щоб вказати вихідний файл.

-Стінка
Вмикає всі додаткові попередження, які є бажаними для звичайного коду. На даний момент це
is -Коментар, -Втриграфи, -Wmultichar і попередження про цілочисельне просування, що спричиняє a
зміна знака у виразах "#if". Зауважте, що багато попереджень препроцесора
увімкнені за замовчуванням і не мають можливості керувати ними.

-Коментар
-W коментарі
Попереджати щоразу, коли послідовність коментарів-початків /* з'являється в а /* коментар або будь-коли a
зворотний слеш-новий рядок з’являється в a // коментар. (Обидві форми мають однаковий ефект.)

-Втриграфи
Більшість триграфів у коментарях не можуть вплинути на зміст програми. Однак а
триграф, який утворює екранований новий рядок (??/ в кінці рядка) can, by
зміни місця початку або кінця коментаря. Тому лише триграфи, які б утворювали
екрановані символи нового рядка створюють попередження всередині коментаря.

Цей варіант мається на увазі -Стінка. Якщо -Стінка не надано, ця опція все ще активна
якщо триграфи не включені. Щоб отримати перетворення триграфа без попереджень, але отримати
інші -Стінка попередження, використання -триграфи -Стінка -Wno-триграфи.

-Традиційний
Попереджати про певні конструкції, які поводяться по-різному в традиційних і ISO C. Також
попереджати про конструкції ISO C, які не мають традиційного еквіваленту C, і є проблематичними
конструкції, яких слід уникати.

-Вундеф
Попереджати кожного разу, коли ідентифікатор, який не є макросом, зустрічається в файлі # якщо Директива,
поза певний. Такі ідентифікатори замінюються на нуль.

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

Вбудовані макроси, макроси, визначені в командному рядку, і макроси, визначені в include
файли не попереджуються.

Примітка: Якщо макрос насправді використовується, але використовується лише в пропущених умовних блоках, то
CPP повідомить про це як невикористане. Щоб уникнути попередження в такому випадку, ви можете покращити
область визначення макросу, наприклад, переміщаючи його в перший пропущений
блокувати. Крім того, ви можете надати фіктивне використання щось на кшталт:

#якщо визначено_макро_викликає_попередження
#endif

-Етикетки Wendif
Попереджати, коли an #else або #endif після них текст. Зазвичай це відбувається в
код форми

#якщо FOO
...
#інше FOO
...
#endif FOO

Друге і третє «FOO» мають бути в коментарях, але часто їх немає в старих програмах.
Це попередження ввімкнено за замовчуванням.

- Помилка
Зробіть усі попередження серйозними помилками. Буде вихідний код, який ініціює попередження
відхилено.

-Wsystem-headers
Видавати попередження для коду в системних заголовках. Зазвичай вони не допомагають знайти
помилки у вашому власному коді, тому пригнічені. Якщо ви відповідаєте за систему
бібліотеки, ви можете їх побачити.

-w Вимкнути всі попередження, включаючи ті, які GNU CPP видає за замовчуванням.

- педантичний
Видайте всю обов’язкову діагностику, зазначену в стандарті C. Деякі з них залишилися
за замовчуванням, оскільки вони часто запускаються на нешкідливому коді.

-педантичні помилки
Видайте всю обов’язкову діагностику і перетворите всю обов’язкову діагностику на помилки.
Це включає обов’язкову діагностику, без якої проблеми GCC - педантичний але трактує як
попередження.

-M Замість виведення результату попередньої обробки виведіть правило, яке підходить для зробити
опис залежностей основного вихідного файлу. Препроцесор виводить один
зробити правило, що містить назву об’єктного файлу для цього вихідного файлу, двокрапку та імена
всіх включених файлів, включаючи ті, що надходять з -включати or -макроси команда-
параметри лінії.

Якщо не вказано явно (з -MT or -MQ), ім'я об'єктного файлу складається з
ім'я вихідного файлу з будь-яким суфіксом замінено суфіксом об'єктного файлу та будь-яким
провідні частини каталогу видалено. Якщо включено багато файлів, то правило таке
розділити на кілька рядків за допомогою \-новий рядок. Правило не має команд.

Цей параметр не пригнічує вихідні дані налагодження препроцесора, наприклад -дМ. Уникати
змішуючи такий вихід налагодження з правилами залежностей, ви повинні явно вказати
вихідний файл залежностей з -MF, або використовуйте змінну середовища, наприклад
DEPENDENCIES_OUTPUT. Вихід налагодження все одно буде надіслано до звичайного вихідного потоку як
Normal.

Проходження -M для водія має на увазі -E, і пригнічує попередження з неявним -w.

-ММ Люблю -M але не згадуйте файли заголовків, які знаходяться в системних каталогах заголовків,
а також файли заголовків, які включені, прямо чи опосередковано, з такого заголовка.

Це означає, що вибір кутових дужок або подвійних лапок в an #включати
Директива сама по собі не визначає, чи буде цей заголовок відображатися в -ММ
вихід залежностей. Це незначна зміна семантики порівняно з GCC версії 3.0 і
раніше.

-MF файл
При використанні з -M or -ММ, визначає файл для запису залежностей. Якщо ні -MF
надається комутатор, препроцесор надсилає правила туди, куди він надсилав би
попередньо оброблений вихід.

При використанні з параметрами драйвера -MD or -ММД, -MF перевизначає залежність за замовчуванням
вихідний файл.

-МГ У поєднанні з таким варіантом, як -M запит на створення залежностей, -МГ передбачає
відсутні заголовні файли створюються файлами і додає їх до списку залежностей без
викликаючи помилку. Ім'я файлу залежності береться безпосередньо з "#include"
директиву без передавання шляху. -МГ також пригнічує попередньо оброблений вихід, як a
відсутність заголовного файлу робить це марним.

Ця функція використовується для автоматичного оновлення make-файлів.

- депутат Цей параметр наказує CPP додати фальшиву ціль для кожної залежності, крім
main файл, через що кожен ні від чого не залежить. Ці фіктивні правила обходять помилки
зробити дає, якщо ви видалите файли заголовків без оновлення файлу Makefile підходити.

Це типовий вихід:

test.o: test.c test.h

test.h:

-MT мета
Змініть ціль правила, створеного генерацією залежностей. За замовчуванням CPP приймає
ім'я основного вхідного файлу, видаляє будь-які компоненти каталогу та будь-який суфікс файлу
такий як .c, і додає звичайний суфікс об’єкта платформи. Результат - мета.

An -MT параметр встановить цільовий рядок, який ви вкажете. Якщо хочеш
кількох цілей, ви можете вказати їх як один аргумент -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 -MF файл, крім цього -E не мається на увазі. Водій
визначає файл на основі того, чи є an -o надається варіант. Якщо так, драйвер використовує його
аргумент, але з суфіксом of .d, інакше він приймає назву вхідного файлу,
видаляє всі компоненти каталогу та суфікс і застосовує a .d суфікс.

If -MD використовується разом з -E, будь-який -o Перемикач розуміється для вказівки
вихідний файл залежностей, але якщо використовується без нього -E, кожен -o розуміється як вказівка ​​a
цільовий об'єктний файл.

З -E не мається на увазі, -MD можна використовувати для створення вихідного файлу залежностей як a
побічний ефект процесу компіляції.

-ММД
Люблю -MD за винятком згадки лише файлів заголовків користувача, а не системних файлів заголовків.

-fpch-deps
При використанні попередньо скомпільованих заголовків цей прапор спричиняє прапорці виведення залежностей
також перелік файлів із залежностей попередньо скомпільованого заголовка. Якщо тільки не вказано
буде перераховано попередньо скомпільований заголовок, а не файли, які були використані для його створення
оскільки ці файли не переглядаються, коли використовується попередньо скомпільований заголовок.

-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 приймалися a -язик варіант, який вибрав обидва
мови та рівня відповідності стандартам. Цю опцію вилучено, тому що
це конфліктує з -l варіант.

-std =standard
-ансі
Вкажіть стандарт, якому повинен відповідати код. Наразі CPP знає про C
і стандарти C++; інші можуть бути додані в майбутньому.

standard може бути одним із:

"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 "file"" з'явився як перший рядок основного джерела
файл. Однак перший каталог шукав файл чи працює препроцесор
каталог замість of каталог, що містить основний вихідний файл. Якщо не знайдено
там він шукається в решті ланцюга пошуку "#include "..."" як
Normal.

Якщо кілька -включати наведені параметри, файли включаються в порядку їх
з'являються в командному рядку.

-макроси файл
Точно так само -включати, за винятком будь-якого результату сканування файл кидається
далеко. Макроси, які він визначає, залишаються визначеними. Це дозволяє отримати всі макроси
із заголовка без обробки його декларацій.

Усі файли, визначені -макроси обробляються перед усіма файлами, зазначеними в -включати.

-ідірафтер реж
Пошук реж для заголовних файлів, але зробіть це після всі каталоги, зазначені в -I і
стандартні системні каталоги вичерпані. реж розглядається як система включає
каталог. Якщо реж починається з "=", потім "=" буде замінено на sysroot
префікс; побачити --sysroot та -isysroot.

-іпрефікс префікс
Вказувати префікс як префікс для наступних -iз префіксом варіанти. Якщо префікс
представляє каталог, ви повинні включити final /.

-iз префіксом реж
-iз префіксомперед реж
Додавати реж до префікса, зазначеного раніше з -іпрефікс, і додайте отримане
каталог до шляху пошуку включення. -iз префіксомперед ставить його на те саме місце -I
б; -iз префіксом кладе куди -ідірафтер б.

-isysroot реж
Цей варіант схожий на --sysroot параметр, але застосовується лише до заголовних файлів (крім
Цілі Дарвіна, де це стосується як заголовних файлів, так і бібліотек). Див
--sysroot варіант для отримання додаткової інформації.

-мультиліб реж
Скористайтесь реж як підкаталог каталогу, що містить цільові заголовки C++.

-ісистема реж
Пошук реж для заголовних файлів після всіх каталогів, зазначених у -I але перед
стандартні системні каталоги. Позначте його як системний каталог, щоб він отримав те саме
спеціальний режим, який застосовується до стандартних системних каталогів. Якщо реж починається
за допомогою "=", тоді "=" буде замінено префіксом sysroot; побачити --sysroot та
-isysroot.

- цитата реж
Пошук реж лише для заголовних файлів, запитуваних із "#include"файл""; вони не
шукав "#includeфайл>", перед усіма каталогами, зазначеними в -I і перед
стандартні системні каталоги. Якщо реж починається з "=", потім "=" буде замінено на
префікс sysroot; побачити --sysroot та -isysroot.

-fdirectives-only
Під час попередньої обробки обробляйте директиви, але не розгортайте макроси.

Поведінка опції залежить від -E та -fпопередньо оброблено Варіанти.

з -E, попередня обробка обмежується обробкою таких директив, як "#define",
"#ifdef" і "#error". Інші операції препроцесора, такі як розширення макросу та
перетворення триграфа не виконуються. Крім того, -dD варіант неявно
включений.

з -fпопередньо оброблено, попереднє визначення командного рядка та більшості вбудованих макросів
інвалід. Обробляються макроси, такі як "__LINE__", які залежать від контексту
нормально. Це дозволяє компілювати файли, попередньо оброблені за допомогою «-E
-fdirectives-only".

З обома -E та -fпопередньо оброблено, правила для -fпопередньо оброблено мати пріоритет. Це
дозволяє повну попередню обробку файлів, попередньо оброблених за допомогою «-E
-fdirectives-only".

-fdollars-in-identifiers
Прийняти $ в ідентифікаторах.

-fextended-ідентифікатори
Приймайте універсальні імена символів в ідентифікаторах. Цей параметр увімкнено за замовчуванням
для C99 (і пізніших стандартних версій C) і C++.

-fno-canonical-system-headers
Під час попередньої обробки не скорочуйте шляхи системних заголовків за допомогою канонікалізації.

-fпопередньо оброблено
Повідомте препроцесору, що вхідний файл уже попередньо оброблено. Це
пригнічує такі речі, як розширення макросу, перетворення триграфа, уникнення з’єднання нового рядка,
та обробка більшості директив. Препроцесор все ще розпізнає та видаляє
коментарів, щоб ви могли передати файл, попередньо оброблений з -C компілятору без
проблеми. У цьому режимі вбудований препроцесор є трохи більше, ніж токенізатором
для передніх кінців.

-fпопередньо оброблено є неявним, якщо вхідний файл має одне з розширень .i, .ii or .mi.
Це розширення, які GCC використовує для попередньо оброблених файлів, створених за допомогою -зберігати темп.

-ftabstop=ширина
Встановіть відстань між табуляторами. Це допомагає препроцесору звітувати про правильний стовпець
цифри в попередженнях або помилках, навіть якщо в рядку з’являються вкладки. Якщо значення менше
більше 1 або більше 100, параметр ігнорується. За замовчуванням – 8.

-fdebug-cpp
Цей параметр корисний лише для налагодження GCC. При використанні з -E, скидає налагодження
інформація про карти розташування. Кожному маркеру у виводі передує дамп
карті, до якої належить його місцезнаходження. Дамп карти, що містить місцезнаходження маркера
було б:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"М": ;"E": ,"loc": }

При використанні без -E, ця опція не діє.

-ftrack-макророзширення[=рівень]
Відстежуйте розташування маркерів у макророзширеннях. Це дозволяє компілятору випромінювати
діагностика поточного стека розширення макросів, коли виникає помилка компіляції
макророзширення. Використання цієї опції споживає препроцесор і компілятор
більше пам'яті. The рівень Параметр можна використовувати для вибору рівня точності маркера
відстеження розташування, що зменшує споживання пам'яті, якщо це необхідно. Значення 0 of
рівень деактивує цю опцію, як ніби ні -ftrack-макророзширення був присутній на
командний рядок. Значення 1 відстежує розташування маркерів у деградованому режимі заради
мінімальні витрати на пам'ять. У цьому режимі всі токени, отримані в результаті розширення an
аргумент функціонального макросу мають те саме розташування. Значення 2 відстежує маркери
локації повністю. Це значення найбільше потребує пам’яті. Коли надається ця опція
немає аргументу, значення параметра за замовчуванням таке 2.

Зверніть увагу, що «-ftrack-macro-expansion=2» активовано за замовчуванням.

-fexec-charset=набір
Встановити набір символів виконання, який використовується для рядкових і символьних констант. За замовчуванням
це UTF-8. набір може бути будь-яке кодування, яке підтримується системною бібліотекою "iconv".
рутина.

-fwide-exec-charset =набір
Встановити широкий набір символів виконання, який використовується для широкого рядка та символьних констант.
За замовчуванням є UTF-32 або UTF-16, залежно від того, що відповідає ширині "wchar_t". Як
з -fexec-charset, набір може бути будь-яке кодування, яке підтримується системним "iconv"
бібліотечна рутина; однак у вас виникнуть проблеми з кодуваннями, які не підходять
саме в "wchar_t".

-finput-charset=набір
Встановити вхідний набір символів, який використовується для перекладу з набору символів введення
файл у вихідний набір символів, який використовується GCC. Якщо мова не вказана, або GCC
не можна отримати цю інформацію з локалі, за замовчуванням є UTF-8. Це може бути
перевизначено місцевим стандартом або цим параметром командного рядка. Наразі команда-
Параметр рядка має пріоритет, якщо є конфлікт. набір може бути будь-яке кодування
підтримується системною бібліотечною процедурою "iconv".

-fworking-каталог
Увімкнути генерацію лінійних маркерів у виводі препроцесора, що дозволить компілятору
знати поточний робочий каталог на момент попередньої обробки. Коли ця опція є
увімкнено, препроцесор видаватиме після початкового маркера другий маркер
з поточним робочим каталогом, за яким слідують дві косі риски. GCC скористається цим
каталог, якщо він присутній у попередньо обробленому вводі, як каталог, створений як
поточний робочий каталог у деяких форматах налагоджувальної інформації. Цей варіант є
неявно ввімкнено, якщо ввімкнено інформацію про налагодження, але це можна заблокувати за допомогою
заперечену форму -fno-робочий-каталог, Якщо -P прапор присутній у команді
line, ця опція не має ефекту, оскільки жодні директиви "#line" не випускаються.

-fno-show-column
Не друкуйте номери стовпців у діагностиці. Це може знадобитися, якщо проводиться діагностика
сканується програмою, яка не розуміє номерів стовпців, наприклад
dejagnu.

-A присудок=відповідь
Складіть твердження з присудком присудок і відповісти відповідь. Ця форма є
віддає перевагу старшій формі -A присудок(відповідь), який досі підтримується, оскільки він
не використовує спеціальні символи оболонки.

-A -присудок=відповідь
Скасуйте твердження з присудком присудок і відповісти відповідь.

-dCHARS
ЧИСЛИ є послідовністю одного або кількох із наступних символів, і не має бути таким
передує пробіл. Інші символи інтерпретуються власне компілятором або
зарезервовані для майбутніх версій GCC, і тому ігноруються. Якщо вказати
персонажів, поведінка яких конфліктує, результат не визначено.

M Замість звичайного виводу створіть список #визначити директиви для всіх
макроси, визначені під час виконання препроцесора, включаючи попередньо визначені
макроси. Це дає вам спосіб дізнатися, що попередньо визначено у вашій версії
препроцесор. Припустимо, що у вас немає файлу foo.h, команда

торкніться foo.h; cpp -dM foo.h

покаже всі заздалегідь визначені макроси.

Якщо ви використовуєте -дМ без того -E варіант -дМ трактується як синонім до
-fdump-rtl-mach.

D Люблю M за винятком двох аспектів: так НЕ включити попередньо визначені макроси, і це
виходи обидва #визначити директиви та результат попередньої обробки. Обидва види
вихідних даних перейдіть до стандартного вихідного файлу.

N Люблю D, але видавати лише імена макросів, а не їх розширення.

I Вихід #включати директиви на додаток до результату попередньої обробки.

U Люблю D за винятком лише макросів, які розгортаються або чия визначеність перевіряється
у директивах препроцесора виводяться; вихід відкладається до використання або
тест макросу; і #undef директиви також виводяться для перевірених макросів, але
на той час не визначено.

-P Заборонити генерацію лінійних маркерів на виході з препроцесора. Це може бути
корисно під час запуску препроцесора на щось, що не є кодом C, і буде надіслано
до програми, яку можуть сплутати маркери ліній.

-C Не відкидайте коментарі. Усі коментарі передаються до вихідного файлу, за винятком
для коментарів в оброблених директивах, які видаляються разом з директивою.

При застосуванні слід бути готовим до побічних ефектів -C; це змушує препроцесор
розглядати коментарі як власні маркери. Наприклад, коментарі, що з’являються на сторінці
Початок того, що було б директивним рядком, призведе до перетворення цього рядка в
звичайний вихідний рядок, оскільки перший маркер у рядку більше не є a #.

-CC Не відкидайте коментарі, в тому числі під час розширення макросу. Це схоже -C, За винятком
що коментарі, що містяться в макросах, також передаються до вихідного файлу де
макрос розгорнутий.

Крім побічних ефектів -C варіант, -CC Параметр викликає всі C++-стилі
коментарі всередині макросу, які будуть перетворені в коментарі в стилі C. Це потрібно для запобігання згодом
використання цього макросу від ненавмисного коментування залишку вихідного рядка.

Команда -CC Параметр зазвичай використовується для підтримки коментарів lint.

-традиційний-cpp
Спробуйте наслідувати поведінку старомодних препроцесорів C, на відміну від ISO C
препроцесори.

-триграфи
Обробити триграфічні послідовності. Це трисимвольні послідовності, всі починаються з
??, які визначені ISO C як поодинокі символи. Наприклад, ??/ стенди
та цінності \, так '??/n' є символьною константою для нового рядка. За замовчуванням GCC ігнорує
триграфи, але в стандартних режимах він перетворює їх. Див -стандартний та -ансі
Варіанти.

Дев'ять триграфів та їх заміни

Триграф: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Заміна: [ ] { } # \ ^ | ~

- переназначити
Увімкніть спеціальний код, щоб обійти файлові системи, які дозволяють лише дуже короткий файл
імена, наприклад MS-DOS.

--допомога
-- target-help
Надрукуйте текст з описом всіх параметрів командного рядка замість попередньої обробки будь-чого.

-v Детальний режим. Роздрукуйте номер версії GNU CPP на початку виконання та
повідомити остаточну форму шляху включення.

-H Надрукуйте назву кожного файлу заголовка, який використовується, на додаток до інших звичайних дій. Кожен
ім'я має відступ, щоб показати, наскільки глибоко в #включати стек це. Попередньо скомпільований заголовок
файли також друкуються, навіть якщо вони визнані недійсними; недійсний попередньо скомпільований
заголовний файл друкується з ... x і дійсний з ... .

-версія
-- версія
Роздрукуйте номер версії GNU CPP. За допомогою однієї тире перейдіть до попередньої обробки як зазвичай.
З двома рисками негайно вийдіть.

Проходження Опції до Асемблер
Ви можете передати параметри асемблеру.

- Ва,варіант
Проходити варіант як варіант для асемблера. Якщо варіант містить коми, він розділений
на кілька варіантів через кому.

-Xassembler варіант
Проходити варіант як варіант для асемблера. Ви можете використовувати це для забезпечення специфічної системи
параметри ассемблера, які GCC не розпізнає.

Якщо ви хочете передати параметр, який приймає аргумент, ви повинні використовувати -Xassembler двічі,
один раз для варіанту і один раз для аргументу.

Опції та цінності Зв'язуючий
Ці параметри вступають у гру, коли компілятор зв’язує об’єктні файли у виконуваний файл
вихідний файл. Вони не мають сенсу, якщо компілятор не виконує крок посилання.

ім'я файлу-об'єкта
Ім’я файлу, яке не закінчується на спеціальний розпізнаний суфікс, вважається ім’ям an
об'єктний файл або бібліотека. (Об’єктні файли відрізняються від бібліотек компоновщиком
відповідно до вмісту файлу.) Якщо зв'язування виконано, ці об'єктні файли використовуються як
вхід до компоновщика.

-c
-S
-E Якщо використовується будь-який з цих параметрів, то компонувальник не запускається, а імена об’єктних файлів
не слід використовувати як аргументи.

-fuse-ld=bfd
Використовувати bfd компонувальник замість стандартного компонувальника.

-запобіжник-ld=золото
Використовувати золото компонувальник замість стандартного компонувальника.

-lбібліотека
-l бібліотека
Знайдіть бібліотеку з назвою бібліотека при з'єднанні. (Другий варіант з
бібліотека як окремий аргумент призначена лише для відповідності POSIX і не рекомендується.)

Має різницю, де в команді ви пишете цей параметр; лінкер шукає
і обробляє бібліотеки та об’єктні файли у зазначеному порядку. таким чином, foo.o
-lz бар.о шукає бібліотеку z після файлу foo.o але раніше бар.о. Якщо бар.о відноситься до
функції в z, ці функції можуть не завантажуватися.

Компонувальник шукає стандартний список каталогів для бібліотеки, що насправді є
файл з іменем бібліотека.а. Потім компонувальник використовує цей файл так, ніби він був вказаний
саме по імені.

Пошукові каталоги включають кілька стандартних системних каталогів і будь-які, які ви
вказати з -L.

Зазвичай файли, знайдені таким чином, є файлами бібліотеки ---архівними файлами, членами яких є
об'єктні файли. Компонувальник обробляє архівний файл, скануючи його на наявність учасників
які визначають символи, на які досі посилалися, але не визначені. Але якщо
знайдений файл є звичайним об’єктним файлом, він зв’язується звичайним способом. The
єдина різниця між використанням an -l опція та вказівка ​​імені файлу -l
оточує бібліотека з либ та .a і виконує пошук у кількох каталогах.

-lobjc
Вам потрібен цей особливий випадок -l параметр, щоб зв’язати Objective-C або
Програма Objective-C++.

-nostartfiles
Не використовуйте стандартні файли запуску системи під час підключення. Стандартна система
бібліотеки використовуються нормально, якщо -nostdlib or -нові за замовчуванням використовується.

-нові за замовчуванням
Не використовуйте стандартні системні бібліотеки під час підключення. Лише вказані вами бібліотеки
передаються компоновщику, а параметри, що вказують зв'язок системних бібліотек, наприклад
as -static-libgcc or -shared-libgcc, ігноруються. Використовуються стандартні файли запуску
звичайно, якщо -nostartfiles використовується.

Компілятор може генерувати виклики "memcmp", "memset", "memcpy" і "memmove". Ці
записи зазвичай вирішуються записами в libc. Ці точки входу повинні бути
надається через якийсь інший механізм, якщо вказано цей параметр.

-nostdlib
Не використовуйте стандартні файли запуску системи або бібліотеки під час підключення. Немає запуску
файли і лише вказані вами бібліотеки передаються компоновщику, а також параметри
вказуючи зв'язок системних бібліотек, наприклад -static-libgcc or -shared-libgcc,
ігноруються.

Компілятор може генерувати виклики "memcmp", "memset", "memcpy" і "memmove". Ці
записи зазвичай вирішуються записами в libc. Ці точки входу повинні бути
надається через якийсь інший механізм, якщо вказано цей параметр.

Одна зі стандартних бібліотек, яку ми обійшли -nostdlib та -нові за замовчуванням is libgcc.a, то
бібліотека внутрішніх підпрограм, які GCC використовує для подолання недоліків окремих
машини або спеціальні потреби для деяких мов.

У більшості випадків потрібно libgcc.a навіть якщо ви хочете уникнути інших стандартних бібліотек.
Іншими словами, коли ви вказуєте -nostdlib or -нові за замовчуванням ви повинні зазвичай
вкажіть -lgcc також. Це гарантує, що у вас немає невирішених посилань на
внутрішні підпрограми бібліотеки GCC. (Прикладом такої внутрішньої підпрограми є
"__main", що використовується для забезпечення виклику конструкторів C++.)

- пиріг
Створіть незалежний від позиції виконуваний файл для цілей, які його підтримують. Для передбачуваного
результатів, ви також повинні вказати той самий набір параметрів, що використовуються для компіляції (-fpie,
-fPIE, або підпараметри моделі), коли ви вказуєте цей параметр компонувальника.

- ні пирога
Не створюйте незалежний від позиції виконуваний файл.

-rдинамічний
Передайте прапор -експортно-динамічний до компонувальника ELF на цілях, які його підтримують. Це
інструктує компонувальнику додати всі символи, а не тільки використані, до динамічного символу
стіл. Цей параметр необхідний для деяких видів використання "dlopen" або дозволу отримання
зворотні трасування з програми.

-s Видаліть всю таблицю символів та інформацію про переміщення з виконуваного файлу.

-статичний
У системах, які підтримують динамічне зв’язування, це запобігає з’єднанню зі спільним
бібліотеки. На інших системах ця опція не діє.

- поділилися
Створіть спільний об’єкт, який потім можна буде зв’язати з іншими об’єктами для формування
виконуваний файл. Не всі системи підтримують цю опцію. Для передбачуваних результатів потрібно
також вкажіть той самий набір параметрів, що використовуються для компіляції (-fpic, -fPIC, або модель
підпараметри), коли ви вказуєте цю опцію компонувальника.[1]

-shared-libgcc
-static-libgcc
Про системи, які забезпечують libgcc як спільна бібліотека, ці параметри змушують використовувати
спільну або статичну версію відповідно. Якщо немає спільної версії libgcc було
створений під час налаштування компілятора, ці параметри не діють.

Існує кілька ситуацій, у яких програма має використовувати спільний libgcc
замість статичної версії. Найпоширенішим з них є при аплікації
бажає викидати та перехоплювати винятки в різних спільних бібліотеках. В такому разі,
кожна з бібліотек, а також сама програма повинні використовувати спільну libgcc.

Тому драйвери G++ і GCJ автоматично додаються -shared-libgcc коли ви будуєте
спільна бібліотека або основний виконуваний файл, оскільки зазвичай використовують програми C++ і Java
винятки, тому це правильно.

Якщо замість цього ви використовуєте драйвер GCC для створення спільних бібліотек, ви можете виявити, що вони
не завжди пов’язані зі спільним libgcc. Якщо GCC знайде, на його конфігурації
час, якщо у вас є компоновщик, відмінний від GNU, або компоновщик GNU, який не підтримує опцію
--eh-frame-hdr, він пов’язує спільну версію libgcc у спільні бібліотеки
за замовчуванням. В іншому випадку він використовує переваги компонувальника та оптимізує зв’язування
зі спільною версією libgcc, пов'язуючи зі статичною версією libgcc by
за замовчуванням. Це дозволяє виняткам поширюватися через такі спільні бібліотеки без
витрати на переміщення під час завантаження бібліотеки.

Однак, якщо бібліотека або основний виконуваний файл повинні викидати або перехоплювати винятки, ви
має зв’язати його за допомогою драйвера G++ або GCJ, відповідно до мов, що використовуються в
програмі або за допомогою параметра -shared-libgcc, щоб він був пов’язаний із спільним
libgcc.

-статичний-лібазан
Коли -fsanitize=адреса Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти лібасан. Якщо лібасан доступна як спільна бібліотека, і
-статичний параметр не використовується, то це посилання на спільну версію лібасан.
Команда -статичний-лібазан параметр спрямовує драйвер GCC на посилання лібасан статично, без
обов'язково статично зв'язуючи інші бібліотеки.

-статичний-лібцан
Коли -fsanitize=потік Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти лібцан. Якщо лібцан доступна як спільна бібліотека, і
-статичний параметр не використовується, то це посилання на спільну версію лібцан.
Команда -статичний-лібцан параметр спрямовує драйвер GCC на посилання лібцан статично, без
обов'язково статично зв'язуючи інші бібліотеки.

-static-liblsan
Коли -fsanitize=витік Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти liblsan. Якщо liblsan доступна як спільна бібліотека, і
-статичний параметр не використовується, то це посилання на спільну версію liblsan.
Команда -static-liblsan параметр спрямовує драйвер GCC на посилання liblsan статично, без
обов'язково статично зв'язуючи інші бібліотеки.

-статичний-лібубсан
Коли -fsanitize=не визначено Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти лібубсан. Якщо лібубсан доступна як спільна бібліотека,
і -статичний параметр не використовується, то це посилання на спільну версію
лібубсан, -статичний-лібубсан параметр спрямовує драйвер GCC на посилання лібубсан
статично, без обов'язкового статичного зв'язування інших бібліотек.

-static-libmpx
Коли -fcheck-покажчик межі та -mmpx параметри використовуються для зв'язування програми, GCC
драйвер автоматично встановлює посилання на libmpx. Якщо libmpx доступний як спільний
бібліотека та -статичний параметр не використовується, то це посилання проти спільних
версія libmpx, -static-libmpx параметр спрямовує драйвер GCC на посилання libmpx
статично, без обов'язкового статичного зв'язування інших бібліотек.

-static-libmpxwrappers
Коли -fcheck-покажчик межі та -mmpx параметри використовуються для зв’язування програми без
також використовуючи -fno-chkp-use-wrappers, драйвер GCC автоматично встановлює посилання
обгортки libmpx. Якщо обгортки libmpx доступна як спільна бібліотека, а також -статичний
параметр не використовується, то це посилання на спільну версію обгортки libmpx,
-static-libmpxwrappers параметр спрямовує драйвер GCC на посилання обгортки libmpx
статично, без обов'язкового статичного зв'язування інших бібліотек.

-static-libstdc++
Коли г ++ Програма використовується для зв'язування програми на C++, зазвичай вона автоматично створює посилання
проти libstdc ++. Якщо libstdc ++ доступна як спільна бібліотека, а також -статичний
параметр не використовується, то це посилання на спільну версію libstdc ++. Тобто
нормально добре. Однак іноді буває корисно заморозити версію libstdc ++
використовується програмою, не переходячи до повністю статичного посилання. The
-static-libstdc++ опція спрямовує г ++ драйвер за посиланням libstdc ++ статично, без
обов'язково статично зв'язуючи інші бібліотеки.

- символічний
Прив’язуйте посилання на глобальні символи під час створення спільного об’єкта. Попереджати про будь-які
невирішені посилання (якщо не замінено опцією редактора посилань -Xlinker -z
-Xlinker деф). Лише деякі системи підтримують цю опцію.

-T сценарій
Скористайтесь сценарій як скрипт компонувальника. Цей параметр підтримується більшістю систем, що використовують
Компонувальник GNU. На деяких цілях, наприклад, на голих цілях без операційної системи,
-T Опція може знадобитися під час посилання, щоб уникнути посилань на невизначені символи.

-Xlinker варіант
Проходити варіант як варіант для компонувальника. Ви можете використовувати це для забезпечення специфічної системи
параметри компонувальника, які GCC не розпізнає.

Якщо ви хочете передати параметр, який приймає окремий аргумент, ви повинні використовувати -Xlinker
двічі, один раз для варіанту і один раз для аргументу. Наприклад, пройти -стверджувати
Визначення, ви повинні написати -Xlinker -стверджувати -Xlinker Визначення. Вона не працює
написати -Xlinker "- стверджують визначення", оскільки це передає весь рядок як a
єдиний аргумент, чого не очікує компонувальник.

При використанні компоновщика GNU зазвичай зручніше передавати аргументи компоновщику
варіанти за допомогою варіант=значення синтаксису, ніж як окремі аргументи. Наприклад, ви
можна вказати -Xlinker -Map=output.map а не -Xlinker -Карта -Xlinker вихід.карта.
Інші компонувальники можуть не підтримувати цей синтаксис для параметрів командного рядка.

-Wl,варіант
Проходити варіант як варіант для компонувальника. Якщо варіант містить коми, розбивається на
кілька варіантів через кому. Ви можете використовувати цей синтаксис для передачі аргументу
варіант. Наприклад, -Wl,-Map,output.map проходить -Карта вихід.карта до лінкера. Коли
за допомогою компоновщика GNU ви також можете отримати той самий ефект -Wl,-Map=output.map.

ПРИМІТКА. В Ubuntu 8.10 і новіших версіях для LDFLAGS опція -Wl,-z,relro використовується.
Щоб вимкнути, використовуйте -Wl,-z,norelro.

-u символ
Уявіть символ символ undefined, щоб примусово визначити зв’язування бібліотечних модулів
це. Ви можете використовувати -u кілька разів з різними символами для примусового завантаження
додаткові бібліотечні модулі.

-z ключове слово
-z передається безпосередньо компонувальнику разом з ключовим словом ключове слово. Дивіться розділ
в документації вашого компонувальника для дозволених значень та їх значень.

Опції та цінності каталог Пошук
Ці параметри визначають каталоги для пошуку файлів заголовків, бібліотек і частин
компілятора:

-Iреж
Додайте каталог реж до заголовка списку каталогів для пошуку
файлів. Це можна використовувати, щоб замінити системний файл заголовка, замінивши свій власний
версії, оскільки ці каталоги шукаються перед системним файлом заголовка
каталогів. Однак ви не повинні використовувати цю опцію для додавання каталогів, які містять
системні заголовні файли, надані постачальником (використовуйте -ісистема для того). Якщо ви використовуєте більше одного
-I опція, каталоги скануються в порядку зліва направо; стандартна система
каталоги йдуть після.

Якщо стандартна система включає в себе каталог, або каталог, зазначений з -ісистема, Є
також зазначено с -I, -I варіант ігнорується. У каталозі все ще шукають, але
як системний каталог на його нормальному положенні в системі включає ланцюжок. Це до
переконайтеся, що процедура GCC виправляє помилкові системні заголовки та порядок для
Директива "include_next" не змінюється випадково. Якщо вам дійсно потрібно змінитися
порядок пошуку системних каталогів, використовуйте -ностдинк та / або -ісистема Варіанти.

-iplugindir=реж
Налаштуйте каталог для пошуку плагінів, які передаються -fplugin=ім'я замість
-fplugin=шлях/ім'я.тому. Ця опція не призначена для використання користувачем, а лише
пройшов повз водія.

- цитатареж
Додайте каталог реж до заголовка списку каталогів для пошуку
файли лише для випадку "#include"файл""; їх не шукають за "#include
<файл>", інакше як -I.

-Lреж
Додати каталог реж до списку каталогів, які потрібно шукати -l.

-Bпрефікс
Цей параметр вказує, де знайти виконувані файли, бібліотеки, включені файли та
файли даних самого компілятора.

Програма драйвера компілятора запускає одну або кілька підпрограм cpp, Cc1, as та ld.
Воно намагається префікс як префікс для кожної програми, яку вона намагається запустити, як з, так і без
машина/версія/.

Для кожної підпрограми, яку потрібно запустити, драйвер компілятора спочатку пробує -B префікс, якщо є.
Якщо це ім’я не знайдено, або якщо -B не вказано, драйвер пробує два стандартних
префікси, /usr/lib/gcc/ та /usr/local/lib/gcc/. Якщо жодне з них не призводить до a
знайдене ім’я файлу, шукається незмінена назва програми за допомогою
каталогів, зазначених у вашому PATH змінна оточення

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

-B префікси, які фактично вказують імена каталогів, також застосовуються до бібліотек у
компонувальник, оскільки компілятор перекладає ці параметри в -L параметри для компонувальника.
Вони також застосовуються для включення файлів у препроцесор, оскільки компілятор перекладає
ці варіанти в -ісистема опції для препроцесора. У цьому випадку компілятор
додає включати до префікса.

Файл підтримки часу виконання libgcc.a також можна шукати за допомогою -B префікс, якщо
необхідний. Якщо його там не знайдено, випробовують два стандартних префікса вище, і це
це все. Файл залишається поза посиланням, якщо його не знайдено цим способом.

Інший спосіб вказати префікс, схожий на -B префікс використовувати середовище
змінна GCC_EXEC_PREFIX.

Як особливий клудж, якщо шлях передбачений -B is [реж./]стадіяN/, Де N - це число
в діапазоні від 0 до 9, потім він замінюється на [dir/]включати. Це допоможе під час завантаження-
обв’язування компілятора.

-специфікації=файл
Процес файл після того, як компілятор прочитає стандарт дані файл, щоб замінити
значення за замовчуванням, які ПКУ Програма драйвера використовує, коли визначає, які перемикачі передавати
до Cc1, cc1plus, as, ld, тощо. Більше одного -специфікації=файл можна вказати на
командного рядка, і вони обробляються в порядку, зліва направо.

--sysroot=реж
Скористайтесь реж як логічний кореневий каталог для заголовків і бібліотек. Наприклад, якщо
компілятор зазвичай шукає заголовки в / usr / include та бібліотеки в / Usr / Бібліотека, Він
натомість шукає dir/usr/include та dir/usr/lib.

Якщо ви використовуєте і цю опцію, і -isysroot варіант, потім --sysroot варіант
стосується бібліотек, але -isysroot параметр застосовується до заголовних файлів.

Компонувальник GNU (починаючи з версії 2.16) має необхідну підтримку для цього
варіант. Якщо ваш компонувальник не підтримує цю опцію, аспект файлу заголовка
--sysroot все ще працює, але бібліотечний аспект ні.

--no-sysroot-суфікс
Для деяких цілей суфікс додається до кореневого каталогу, зазначеного з --sysroot,
залежно від інших використаних параметрів, щоб, наприклад, можна було знайти заголовки в
dir/suffix/usr/include замість dir/usr/include. Ця опція вимикає додавання
такого суфікса.

-Я- Цей параметр не підтримується. Будь ласка, використовуйте - цитата замість цього для -I каталогів раніше
-Я- і видаліть -Я- варіант. Будь-які каталоги, які ви вказали з -I варіанти раніше
-Я- параметр шукається лише для регістру "#include"файл""; вони не
шукав "#includeфайл>".

Якщо додаткові каталоги вказані з -I варіанти після -Я- варіант, ці
у каталогах здійснюється пошук усіх директив "#include". (Звичайно всі -I
каталоги використовуються таким чином.)

Крім того, -Я- Параметр забороняє використання поточного каталогу (де
поточний вхідний файл) як перший каталог пошуку для "#include"файл"".
Немає способу подолати цей ефект -Я-. З -Я. можна вказати пошук
каталог, який є поточним під час виклику компілятора. Це не зовсім те
те саме, що робить препроцесор за замовчуванням, але часто це задовільний.

-Я- не перешкоджає використанню стандартних системних каталогів для заголовних файлів.
Таким чином, -Я- та -ностдинк є незалежними.

Уточнення Мета машина та компілятор версія
Звичайним способом запуску GCC є запуск виконуваного файлу, який викликається ПКУабо машина-gcc коли хрест-
складання, або машина-gcc-версія щоб запустити версію, відмінну від тієї, що була встановлена
останній.

апаратні засоби моделі та Конфігурації
Кожен тип цільової машини може мати власні спеціальні параметри, починаючи з -m, вибирати
серед різних апаратних моделей або конфігурацій --- наприклад, 68010 проти 68020, плаваючий
співпроцесор або немає. Одну встановлену версію компілятора можна компілювати для будь-якої моделі
або конфігурації, відповідно до вказаних параметрів.

Деякі конфігурації компілятора також підтримують додаткові спеціальні параметри, зазвичай для
сумісність з іншими компіляторами на тій же платформі.

AAArch64 Опції

Ці параметри визначені для реалізацій AArch64:

-mabi=ім'я
Згенеруйте код для вказаної моделі даних. Допустимі значення є ilp32 для SysV-
як модель даних, де int, long int і покажчик є 32-бітовими, і lp64 для SysV-подібних
модель даних, де int є 32-розрядними, а long int і покажчиком є ​​64-бітними.

Значення за замовчуванням залежить від конкретної цільової конфігурації. Зверніть увагу, що LP64 і
ILP32 ABI несумісні з посиланням; ви повинні скомпілювати всю вашу програму з тим же
ABI та зв’язати з сумісним набором бібліотек.

-big-endian
Створення коду з великим порядком. Це значення за замовчуванням, якщо GCC налаштовано для файлу
aarch64_be-*-* мета.

-mgeneral-regs-only
Згенеруйте код, який використовує лише загальні регістри.

-mlittle-endian
Згенеруйте код з маленьким порядком байтів. Це значення за замовчуванням, якщо GCC налаштовано для файлу
aarch64-*-* але не aarch64_be-*-* мета.

-mcmodel = крихітний
Згенеруйте код для крихітної моделі коду. Програма та її статично визначені символи
мають бути в межах 1 Гб один від одного. Вказівники мають 64 біта. Програми можуть бути статичними
або динамічно пов'язані. Ця модель не повністю реалізована і в основному розглядається як
невеликий.

-mcmodel=мала
Згенеруйте код для моделі невеликого коду. Програма та її статично визначені
символи мають бути в межах 4 Гб один від одного. Вказівники мають 64 біта. Програми можуть бути
статично або динамічно пов'язані. Це модель коду за замовчуванням.

-mcmodel=великий
Згенеруйте код для моделі великого коду. Це не робить припущень щодо адрес і
розміри секцій. Вказівники мають 64 біти. Програми можуть бути лише статично пов’язані.

-mstrict-align
Не припускайте, що невирівняні посилання на пам’ять обробляються системою.

-momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer
Опустіть або збережіть покажчик кадру у функціях листка. Попередня поведінка є
за замовчуванням.

-mtls-dialect=дес
Використовуйте дескриптори TLS як механізм локального зберігання потоку для динамічного доступу до TLS
змінні. Це значення за замовчуванням.

-mtls-dialect=традиційний
Використовуйте традиційний TLS як механізм локального зберігання потоків для динамічного доступу до TLS
змінні.

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Увімкніть або вимкніть обхідний шлях для помилки ARM Cortex-A53 під номером 835769. Це
передбачає вставку інструкції NOP між інструкціями пам’яті та 64-розрядним цілим числом
інструкції множення-накопичувачі.

-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
Увімкніть або вимкніть обхідний шлях для помилки ARM Cortex-A53 під номером 843419. Це
Обхідний шлях помилки виконується під час посилання, і це передасть лише відповідний прапор
до лінкера.

-березень=ім'я
Вкажіть назву цільової архітектури, необов’язково з одним або кількома суфіксами
модифікатори функцій. Цей варіант має форму -березень=арка{+[немає]особливість}*, де
тільки допустиме значення для арка is ARMV8-A. Допустимі значення для особливість він має
задокументовані в підрозділі нижче.

Якщо вказано конфліктні модифікатори ознак, використовується крайній правий елемент.

GCC використовує це ім’я, щоб визначити, які інструкції він може видавати під час генерації
код збірки.

де - марш вказано без будь-якого з -mtune or -mcpu також уточнюється,
код налаштований на хорошу роботу в діапазоні цільових процесорів, що реалізують
цільова архітектура.

-mtune=ім'я
Вкажіть назву цільового процесора, для якого GCC має налаштувати продуктивність
код. Допустимі значення для цієї опції: родової, кора-a53, кора-a57,
кора-a72, exynos-m1, thunderx, xgene1.

Крім того, цей параметр може вказати, що GCC має налаштувати продуктивність коду
для системи big.LITTLE. Допустимі значення для цієї опції:
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

Де жодного з -mtune=, -mcpu= or -березень= вказано, код налаштований на виконання
добре в діапазоні цільових процесорів.

Цей параметр не може бути суфіксом модифікаторів функцій.

-mcpu=ім'я
Вкажіть назву цільового процесора, за бажанням із суфіксом однієї чи кількох функцій
модифікатори. Цей варіант має форму -mcpu=центральний процесор{+[немає]особливість}*, де допустимо
значення для центральний процесор ті самі, що доступні для -mtune.

Допустимі значення для особливість задокументовані в підрозділі нижче.

Якщо вказано конфліктні модифікатори ознак, використовується крайній правий елемент.

GCC використовує це ім’я, щоб визначити, які інструкції він може видавати під час генерації
код ассемблера (наче від - марш) і визначити цільовий процесор, для якого потрібно
налаштувати на виконання (наче за -mtune). Де цей параметр використовується разом із
- марш or -mtune, ці параметри мають пріоритет над відповідною частиною цього
варіант.

- марш та -mcpu Модифікатори функцій

Модифікатори функцій, які використовуються з - марш та -mcpu може бути одним із таких:

crc Увімкнути розширення CRC.

крипто
Увімкнути розширення Crypto. Це означає, що розширений SIMD увімкнено.

fp Увімкнути інструкції з плаваючою комою.

simd
Увімкніть розширені інструкції SIMD. Це означає, що інструкції з плаваючою комою є
увімкнено. Це значення за замовчуванням для всіх поточних можливих значень параметрів - марш та
-mcpu=.

Адаптєва Богоявлення Опції

Ці -m визначені параметри для Adapteva Epiphany:

-mhalf-reg-файл
Не виділяйте жодного регістра в діапазоні "r32"...r63". Це дозволяє виконувати код
апаратні варіанти, у яких відсутні ці регістри.

-mprefer-short-insn-regs
Переважно виділяють регістри, які дозволяють генерувати короткі команди. Це може
призведе до збільшення кількості інструкцій, тому це може або зменшити, або збільшити загальне
розмір коду.

-mbranch-cost=Num
Приблизно встановіть вартість гілок Num «прості» інструкції. Ця вартість становить лише а
евристичний і не гарантує отримання послідовних результатів у всіх випусках.

-mcmove
Увімкнути генерацію умовних ходів.

-mnops=Num
випускати Num NOP перед кожною іншою згенерованою інструкцією.

-mno-soft-cmpsf
Для порівняння з плаваючою комою з одинарною точністю випустіть інструкцію «fsub» та перевірте
прапори. Це швидше, ніж порівняння програмного забезпечення, але може отримати неправильні результати
у присутності NaNs, або коли порівнюються два різних малих числа так, що
їх різниця обчислюється як нуль. За замовчуванням є -msoft-cmpsf, Яка використовує
повільніше, але IEEE-сумісне порівняння програмного забезпечення.

-mstack-offset=Num
Встановіть зміщення між верхньою частиною стека та вказівником стека. Наприклад, значення 8
означає, що вісім байтів у діапазоні "sp+0...sp+7" можуть використовуватися функціями листка
без виділення стека. Цінності, крім 8 or 16 не перевірені і навряд чи
працювати. Зауважте також, що ця опція змінює ABI; складання програми з a
відмінне зміщення стека, ніж бібліотеки, з якими були скомпільовані, зазвичай не так
працювати. Цей параметр може бути корисним, якщо ви хочете оцінити, чи є інший зміщення стека
дасть вам кращий код, але фактично використовувати інше зміщення стека для створення
робочих програм, рекомендується налаштувати ланцюг інструментів з відповідними
--with-stack-offset=Num варіант.

-mno-round-найближчий
Зробіть планувальник припущенням, що для режиму округлення встановлено усечення. The
за замовчуванням -mround-найближчий.

-mlong-дзвінки
Якщо в атрибуті не вказано інше, припустимо, що всі виклики можуть бути поза межами
діапазон зміщення інструкцій "b" / "bl", а отже, завантажити адресу функції
в реєстр перед виконанням (інакше прямого) виклику. Це значення за замовчуванням.

-mкороткі дзвінки
Якщо в атрибуті не вказано інше, припустимо, що всі прямі виклики знаходяться в діапазоні
інструкцій "b" / "bl", тому використовуйте ці інструкції для прямих викликів. The
за замовчуванням -mlong-дзвінки.

-msmall16
Припустимо, що адреси можуть бути завантажені як 16-розрядні значення без знака. Це не стосується
адреси функцій, для яких -mlong-дзвінки семантика діє.

-mfp-mode=режим
Встановіть переважний режим одиниці з плаваючою комою. Це визначає плаваюче-
точковий режим, який надається та очікується під час виклику функції та часу повернення. Виготовлення
цей режим відповідає режиму, який вам переважно потрібен під час запуску функції
програми менше і швидше, уникаючи непотрібних перемикачів режимів.

режим можна встановити одне з таких значень:

гість
Будь-який режим при вході функції є дійсним і зберігається або відновлюється під час виконання функції
повертає, і коли він викликає інші функції. Цей режим корисний для компіляції
бібліотеки або інші одиниці компіляції, які ви можете включити в різні
програми з різними переважаючими режимами FPU, а також зручність можливості
використання одного об’єктного файлу переважає розмір і швидкість накладних витрат для будь-якого додаткового режиму
перемикання, яке може знадобитися, порівняно з тим, що було б потрібно з більшим
конкретний вибір переважного режиму FPU.

усікати
Це режим, який використовується для обчислень з плаваючою комою зі скороченням (тобто округленням
до нуля) режим округлення. Це включає перетворення з плаваючою комою в
ціле число.

круглий-найближчий
Це режим, який використовується для обчислень з плаваючою комою з округленням до найближчого чи-
режим рівномірного округлення.

Int Це режим, який використовується для виконання цілих обчислень у FPU, наприклад цілого числа
множити, або цілочисельне множити-накопичувати.

За замовчуванням - -mfp-mode=абонент

-мноспліт-лохи
-мно-постинк
-мно-постмодифікувати
Налаштування генерації коду, які вимикають, відповідно, розділення 32-бітових завантажень,
генерування адрес після інкременту та генерування адрес після модифікації. The
за замовчуванням є msplit-lohi, -mpost-inc та -mpost-змінити.

-mnovec-подвійний
Змініть бажаний режим SIMD на режим SIM. За замовчуванням є -mvect-подвійний, Яка використовує
Режим DI як бажаний режим SIMD.

-max-vect-align=Num
Максимальне вирівнювання для типів векторного режиму SIMD. Num може бути 4 або 8. За замовчуванням є
8. Зверніть увагу, що це зміна ABI, незважаючи на те, що багато інтерфейсів бібліотечних функцій є такими
не впливає, якщо вони не використовують векторні режими SIMD у місцях, які впливають на розмір та/або
вирівнювання відповідних типів.

-msplit-vecmove-early
Розділений вектор переміщується на переміщення одного слова перед перезавантаженням. Теоретично це може дати
краще розподіляти реєстри, але поки що, здається, зазвичай все було навпаки.

-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.

-мея
Створення розширених арифметичних інструкцій. Наразі лише "divaw", "adds", "sub",
і "sat16" підтримуються. Це завжди ввімкнено для -mcpu=ARC700.

-мно-мпи
Не генеруйте інструкції mpy для ARC700.

- mmul32x16
Згенеруйте 32x16-розрядні інструкції для множення та mac.

-mmul64
Згенеруйте інструкції mul64 і mulu64. Діє лише для -mcpu=ARC600.

-мнорм
Сформувати інструкцію норми. Це значення за замовчуванням, якщо -mcpu=ARC700 діє.

-mspfp
-mspfp-compact
FPX: генеруйте інструкції FPX Single Precision, налаштовані для компактної реалізації.

-mspfp-швидкий
FPX: генеруйте інструкції FPX Single Precision, налаштовані для швидкої реалізації.

-msimd
Увімкнути генерацію інструкцій ARC SIMD за допомогою вбудованих програм, що стосуються цілі. Тільки дійсний
та цінності -mcpu=ARC700.

-msoft-float
Цей параметр ігнорується; він надається лише з метою сумісності. програмне забезпечення
Код з плаваючою комою видається за замовчуванням, і це за замовчуванням може замінити FPX
варіанти; mspfp, mspfp-компактнийабо mspfp-швидкий для одиничної точності, і mdpfp, mdpfp-
компактнийабо mdpfp-швидкий для подвійної точності.

-mswap
Створення інструкцій підкачки.

Наступні параметри передаються асемблеру, а також визначають препроцесор
макросимволи.

-mdsp-packa
Передано асемблеру, щоб увімкнути розширення DSP Pack A. Також встановлює
символ препроцесора "__Xdsp_packa".

-mdvbf
Передано асемблеру, щоб увімкнути подвійне розширення viterbi butterfly. Також
встановлює символ препроцесора "__Xdvbf".

-mlock
Передано асемблеру, щоб увімкнути розширення Locked Load/Store Conditional.
Також встановлює символ препроцесора "__Xlock".

-mmac-d16
Передано асемблеру. Також встановлює символ препроцесора "__Xxmac_d16".

-mmac-24
Передано асемблеру. Також встановлює символ препроцесора "__Xxmac_24".

-mrtsc
Передано асемблеру, щоб увімкнути 64-розрядне розширення Time-Stamp Counter
інструкція. Також встановлює символ препроцесора "__Xrtsc".

-mswape
Передається асемблеру, щоб увімкнути інструкцію розширення упорядкування байтів підкачки.
Також встановлює символ препроцесора "__Xswape".

-мтелефонія
Передається асемблеру, щоб увімкнути інструкції з подвійним та одним операндом
телефонії. Також встановлює символ препроцесора "__Xtelephony".

-mxy
Передано асемблеру, щоб увімкнути розширення XY Memory. Також встановлює
символ препроцесора "__Xxy".

Наступні параметри визначають, як анотується код збірки:

- неправильний розмір
Анотуйте інструкції асемблера з приблизними адресами.

-mannotate-align
Поясніть, які міркування щодо вирівнювання призвели до рішення створити інструкцію
короткий або довгий.

До компонувальника передаються такі параметри:

- marclinux
Передано до компонувальника, щоб указати використання емуляції "arclinux". Цей варіант
увімкнено за замовчуванням у ланцюгах інструментів, створених для «arc-linux-uclibc» і
"arceb-linux-uclibc" цілі, коли профілювання не запитується.

-marclinux_prof
Передано до компоновщика, щоб указати використання емуляції "arclinux_prof". Це
Параметр увімкнено за замовчуванням у ланцюжках інструментів, створених для «arc-linux-uclibc» і
"arceb-linux-uclibc" цілі, коли запитується профілювання.

Наступні параметри контролюють семантику згенерованого коду:

-мепілог-cfi
Увімкнути генерацію інформації про кадри виклику для епілогів.

-mno-епілог-cfi
Вимкнути створення інформації про кадри виклику для епілогів.

-mlong-дзвінки
Генеруйте виклики insns як реєструйте непрямі виклики, забезпечуючи таким чином повний доступ
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-cache
Використовуйте звичайні доступи до кешованої пам’яті для непостійних посилань. Це значення за замовчуванням.

-mno-volatile-cache
Увімкнути обхід кешу для мінливих посилань.

Наступні параметри точного налаштування генерації коду:

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

-mauto-modify-reg
Увімкнути використання попереднього/постового модифікації із зміщенням регістра.

-mbbit-глазок
Увімкнути bbit peephole2.

-mno-brcc
Цей параметр вимикає вхід для конкретної цілі arc_reorg генерувати "BRcc"
інструкції. Це не впливає на генерацію "BRcc", що керується проходом комбінатора.

-mcase-вектор-pcrel
Використовуйте таблиці випадків перемикачів, що залежать від ПК - це дозволяє скорочувати таблицю випадків. Це
за замовчуванням для -Ос.

-mcompact-casesi
Увімкнути шаблон компактних футлярів. Це значення за замовчуванням для -Ос.

-mno-cond-exec
Вимкніть спеціальний пропуск ARCompact для створення умовних інструкцій виконання. За рахунок
для затримки планування слотів і взаємодії між номерами операндів, розмірами літералів,
довжини інструкцій та підтримки умовного виконання, незалежне від цілі
пропуск для генерування умовного виконання часто відсутній, тому порт ARC зберіг a
спеціальний прохід, який намагається знайти більше умовного виконання
можливості після розподілу регістрів, скорочення гілок і планування слотів затримки
було зроблено. Цей перехід зазвичай, але не завжди, покращує продуктивність і код
розмір, за рахунок додаткового часу компіляції, тому є можливість перемикання
це вимкнути. Якщо у вас виникли проблеми з інструкціями виклику, які перевищують допустимий зсув
діапазон, оскільки вони умовні, вам слід розглянути можливість використання -mmedium-дзвінки
замість цього.

- борошнистий-cbranchsi
Увімкнути використання шаблону cbranchsi перед перезавантаженням.

-mexpand-adddi
Розгорніть «adddi3» та «subdi3» під час генерації rtl на «add.f», «adc» тощо.

-індексовані навантаження
Дозволити використання індексованих навантажень. Це може бути проблематично, тому що деякі оптимізатори тоді
припустимо, що індексовані сховища існують, що не так.

-млра
Увімкнути розподіл локального реєстру. Це все ще експериментальне для ARC, тому за замовчуванням
компілятор використовує стандартне перезавантаження (тобто -мно-лра).

-mlra-пріоритет-немає
Не вказуйте жодного пріоритету для цільових реєстрів.

-mlra-priority-compact
Вкажіть пріоритет цільового регістра для r0..r3 / r12..r15.

-mlra-пріоритет-некомпактний
Зменшити пріоритет цільового реєстратора для r0..r3 / r12..r15.

-mno-мілікод
Під час оптимізації за розміром (використовуючи -Ос), прологи та епілоги, які мають зберегти або
відновлення великої кількості регістрів часто скорочується за допомогою виклику спец
функція в libgcc; це називають а мілікод дзвонити. Як можуть позувати ці дзвінки
проблеми з продуктивністю та/або викликають проблеми з підключенням під час зв’язування нестандартним способом,
ця опція надається, щоб вимкнути генерацію виклику мілікоду.

-mmixed-code
Налаштуйте розподіл регістрів, щоб допомогти генерувати 16-розрядні інструкції. Це взагалі має
ефект зменшення середнього розміру команди при збільшенні команди
рахувати.

-mq-клас
Увімкнути альтернативні інструкції 'q'. Це значення за замовчуванням для -Ос.

-mRcq
Увімкнути обробку обмежень Rcq - більшість генерації короткого коду залежить від цього. Це
за замовчуванням.

-mRcw
Увімкнути обробку обмежень Rcw - ccfsm condexec переважно залежить від цього. Це
за замовчуванням.

-msize-level=рівень
Точна оптимізація розміру щодо довжини інструкцій та вирівнювання. The
визнані цінності для рівень є:

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.

-big-endian
-EB Скомпілювати код для цілей з великим порядком байтів. Використання цих параметрів тепер застаріло. Користувачі
бажаючи коду з великим порядком, слід використовувати цілі "arceb-elf32" і "arceb-linux-uclibc"
під час побудови ланцюжка інструментів, для якого за замовчуванням є великий байт.

-mlittle-endian
-ТО Скомпілювати код для цілей з малим порядком. Використання цих параметрів тепер застаріло.
Користувачі, які хочуть код з маленьким порядком байтів, повинні використовувати "arc-elf32" і "arc-linux-uclibc"
цілі під час побудови ланцюжка інструментів, для якого за замовчуванням є байтове значення.

-barrel_shifter
Замінено -ствол-перемикач.

-mdpfp_compact
Замінено -mdpfp-компактний.

-mdpfp_fast
Замінено -mdpfp-швидкий.

-mdsp_packa
Замінено -mdsp-packa.

-MEA
Замінено -мея.

-mmac_24
Замінено -mmac-24.

-mmac_d16
Замінено -mmac-d16.

-mspfp_compact
Замінено -mspfp-compact.

-mspfp_fast
Замінено -mspfp-швидкий.

-mtune=центральний процесор
Цінності arc600, arc601, arc700 та arc700-xmac та цінності центральний процесор замінюються на ARC600, ARC601,
ARC700 та ARC700-xmac відповідно

-multcost=Num
Замінено - багатовартість.

ARM Опції

Ці -m параметри визначені для порту ARM:

-mabi=ім'я
Згенеруйте код для вказаного ABI. Допустимі значення: apcs-gnu, атшт, aapcs,
aaps-linux та iwmmxt.

-mapcs-фрейм
Згенеруйте кадр стека, який відповідає стандарту виклику процедур ARM для всіх
функції, навіть якщо це не є строго необхідним для правильного виконання коду.
Уточнення -fomit-кадр-покажчик за допомогою цього параметра кадри стека не будуть
створений для функцій листка. За замовчуванням є -mno-apcs-frame. Цей варіант є
застарів.

- карти
Це синонім до -mapcs-фрейм і є застарілим.

-mthumb-interwork
Згенеруйте код, який підтримує виклики між наборами інструкцій ARM і Thumb.
Без цієї опції в архітектурах до v5 два набори інструкцій не можуть бути
надійно використовується в одній програмі. За замовчуванням є -mno-thumb-interwork, оскільки трохи
більший код генерується, коли -mthumb-interwork вказано. У конфігураціях AAPCS
цей варіант безглуздий.

-mno-sched-prolog
Запобігайте зміні порядку інструкцій у пролозі функції або злиття
ці інструкції з інструкціями в тілі функції. Це означає, що все
функції починаються з розпізнаваного набору інструкцій (або фактично однієї на вибір
з невеликого набору різних прологів функцій), і цю інформацію можна використовувати для
знайти початок функцій всередині виконуваного фрагмента коду. За замовчуванням є
-msched-пролог.

-mfloat-abi=ім'я
Визначає, який ABI з плаваючою комою використовувати. Допустимі значення: м'який, softfp та
жорсткий.

Уточнення м'який змушує GCC генерувати вихідні дані, що містять виклики бібліотеки для floating-
точкові операції. softfp дозволяє генерувати код з використанням апаратної плаваючої коми
інструкції, але все ще використовує конвенції про виклики soft-float. жорсткий дозволяє
генерування інструкцій з плаваючою комою та використання специфічних для FPU умов викликів.

Значення за замовчуванням залежить від конкретної цільової конфігурації. Зверніть увагу, що жорсткий поплавок
і soft-float ABI несумісні з посиланням; ви повинні скомпілювати всю вашу програму з
той самий ABI і зв'язок із сумісним набором бібліотек.

-mlittle-endian
Згенеруйте код для процесора, що працює в режимі малого байта. Це значення за замовчуванням для
всі стандартні конфігурації.

-big-endian
Створення коду для процесора, що працює в режимі big-endian; за замовчуванням – компілювати
код для процесора з малим кінцем.

-березень=ім'я
Це визначає назву цільової архітектури ARM. GCC використовує цю назву для
визначити, які інструкції він може видавати під час генерації коду складання. Це
Опція може використовуватися разом із або замість -mcpu= варіант. Допустимі
назви: armv2, ARMV2A, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, ARMV6Z, armv6zk, armv6-m, armv7, ARMV7-A, armv7-r,
armv7-m, armv7e-m, armv7ve, ARMV8-A, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.

-march = armv7ve є архітектурою armv7-a з розширеннями віртуалізації.

-march=armv8-a+crc дозволяє генерувати код для архітектури ARMv8-A разом з
додаткові розширення CRC32.

-березня = рідний змушує компілятор автоматично визначати архітектуру збірки
комп'ютер. Наразі ця функція підтримується лише в GNU/Linux, і не у всіх
архітектури визнані. Якщо автоматичне визначення не вдалось, параметр не має
ефект

-mtune=ім'я
Цей параметр визначає назву цільового процесора ARM, для якого GCC має налаштуватися
продуктивність коду. Для деяких реалізацій ARM може бути краща продуктивність
отримані за допомогою цієї опції. Допустимі назви: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, рука 7 м, arm7d, arm7dm, ARM7DI, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, рука710т, рука720т, рука740т, міцна рука, сильна рука110, сильна рука1100,
сильна рука1110, arm8, arm810, arm9, arm9e, arm920, рука920т, рука922т, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, рука940т, arm9tdmi, arm10tdmi, рука1020т, arm1026ej-s,
arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, ARM1176JZF-S, кора-a5, кора-a7, кора-a8, кора-a9,
кора-a12, кора-a15, кора-a53, кора-a57, кора-a72, кора головного мозку-r4, кора головного мозку-r4f,
кора головного мозку-r5, кора головного мозку-r7, кора-m7, кора-m4, кора-m3, кора-m1, кора-m0,
кора-m0plus, cortex-m1.small-multiple, cortex-m0.small-multiple,
cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xscale, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, FA606TE, FA626TE, fmp626, FA726TE, xgene1.

Крім того, цей параметр може вказати, що GCC має налаштувати продуктивність коду
для системи big.LITTLE. Допустимі назви: cortex-a15.cortex-a7,
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

-mtune=загальний-арка вказує, що GCC має налаштувати продуктивність для поєднання
процесори в архітектурі арка. Метою є створення коду, який добре працює на
поточні найпопулярніші процесори, балансуючи між оптимізаціями, які приносять користь деяким
ЦП у діапазоні та уникнення підводних каменів продуктивності інших ЦП. Наслідки
ця опція може змінитися в майбутніх версіях GCC, оскільки моделі ЦП з'являються і зникають.

-mtune = рідний змушує компілятор автоматично визначати ЦП комп’ютера збірки. В
в даний час ця функція підтримується лише в GNU/Linux, і не всі архітектури
визнаний. Якщо автоматичне визначення невдало, ця опція не діє.

-mcpu=ім'я
Це визначає назву цільового процесора ARM. GCC використовує цю назву для отримання
ім'я цільової архітектури ARM (як би вказано в - марш) і процесор ARM
тип, для якого потрібно налаштувати продуктивність (наче вказано в -mtune). Де цей варіант
використовується разом з - марш or -mtune, ці параметри мають пріоритет над
відповідна частина цього варіанту.

Допустимі назви для цієї опції такі ж, як і для -mtune.

-mcpu=загальний-арка також допустимо і еквівалентно -березень=арка
-mtune=загальний-арка, Побачити -mtune для отримання додаткової інформації.

-mcpu = рідний змушує компілятор автоматично визначати ЦП комп’ютера збірки. В
в даний час ця функція підтримується лише в GNU/Linux, і не всі архітектури
визнаний. Якщо автоматичне визначення невдало, ця опція не діє.

-mfpu=ім'я
Це визначає, яке обладнання з плаваючою комою (або апаратна емуляція) доступне
ціль. Допустимі назви: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, VFPV3-D16-FP16,
vfpv3xd, vfpv3xd-fp16, неоновий, неон-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8 та crypto-neon-fp-armv8.

If -msoft-float вказано, це визначає формат значень з плаваючою комою.

Якщо вибране обладнання з плаваючою комою включає розширення NEON (наприклад -mfpu=неоновий),
зверніть увагу, що операції з плаваючою комою не генеруються шляхом автоматичної векторизації GCC
якщо не -funsafe-math-optimizations також уточнюється. Це тому, що обладнання NEON
не повністю реалізує стандарт IEEE 754 для арифметики з плаваючою комою (в
певні деноральні значення розглядаються як нульові), тому використання інструкцій NEON може
призводять до втрати точності.

-mfp16-format=ім'я
Вкажіть формат типу "__fp16" з плаваючою комою з напівточністю. Допустимі
імена є ніхто, тобто та альтернатива; за замовчуванням ніхто, у цьому випадку "__fp16"
тип не визначений.

-mstructure-size-boundary=n
Розміри всіх конструкцій і об’єднань округляються до кратного числа
біти, встановлені цією опцією. Допустимі значення: 8, 32 і 64. Значення за замовчуванням
різниться для різних ланцюжків інструментів. Для цільового ланцюга інструментів COFF значенням за замовчуванням є
8. Значення 64 допускається лише в тому випадку, якщо базовий ABI підтримує його.

Зазначення більшого числа може створити швидший та ефективніший код, але також може
збільшити розмір програми. Різні значення потенційно несумісні.
Код, скомпільований з одним значенням, не обов’язково буде працювати з кодом або бібліотеками
складені з іншим значенням, якщо вони обмінюються інформацією за допомогою структур або об'єднань.

-mabort-on-noreturn
Згенеруйте виклик функції "abort" в кінці функції "noreturn". це є
виконується, якщо функція намагається повернути.

-mlong-дзвінки
-mno-long-cales
Вказує компілятору виконувати виклики функцій, спочатку завантажуючи адресу
функцію в регістр, а потім виконати виклик підпрограми для цього регістра. Це
комутатор потрібен, якщо цільова функція знаходиться за межами 64-мегабайтної адресації
діапазон версії інструкції виклику підпрограми на основі зміщення.

Навіть якщо цей перемикач увімкнено, не всі виклики функцій перетворюються на довгі виклики.
Евристика полягає в тому, що статичні функції, функції, які мають "short_call"
атрибут, функції, які входять до сфери дії директиви "#pragma no_long_calls",
і функції, визначення яких вже були скомпільовані в поточному
блок компіляції не перетворюються на довгі виклики. Винятки з цього правила такі
слабкі визначення функцій, функції з атрибутом "long_call" або "section"
атрибут і функції, які входять до сфери дії директиви "#pragma long_calls".
завжди перетворюються на довгі дзвінки.

Ця функція не ввімкнена за замовчуванням. Уточнення -mno-long-cales відновлює
поведінка за замовчуванням, як і розміщення викликів функцій у межах "#pragma
long_calls_off". Зауважте, що ці перемикачі не впливають на роботу компілятора
генерує код для обробки викликів функцій за допомогою покажчиків функцій.

-msingle-pic-base
Розглядайте регістр, який використовується для адресації PIC, як доступний лише для читання, а не завантажуйте його в файл
пролог для кожної функції. За ініціалізацію цього відповідає система виконання
зареєструвати з відповідним значенням перед початком виконання.

-mpic-register=Реджо
Вкажіть регістр, який буде використовуватися для PIC-адресації. Для стандартного базового випадку PIC,
за замовчуванням — будь-який відповідний регістр, визначений компілятором. Для одного базового випадку PIC,
за замовчуванням R9 якщо ціль заснована на EABI або ввімкнена перевірка стека, інакше
за замовчуванням R10.

-mpic-data-є-текст-відносний
Припустимо, що кожен сегмент даних відноситься до текстового сегмента під час завантаження. тому
він дозволяє адресувати дані за допомогою операцій, пов'язаних з ПК. Цей параметр увімкнено за замовчуванням
для цілей, відмінних від VxWorks RTP.

-mpoke-назва-функції
Напишіть назву кожної функції в текстовий розділ безпосередньо перед функцією
пролог. Згенерований код подібний до цього:

t0
.ascii "arm_poke_function_name", 0
.вирівняти
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, №4

Виконуючи зворотне трасування стека, код може перевірити значення "pc", що зберігається в "fp +
0". Якщо функція трасування дивиться на розташування "pc - 12", а верхні 8 бітів
set, то ми знаємо, що безпосередньо перед цим є ім'я функції
розташування та має довжину "((pc[-3]) & 0xff000000)".

-mthumb
-марм
Виберіть між генеруванням коду, який виконується в станах ARM і Thumb. За замовчуванням для
більшість конфігурацій генерують код, який виконується в стані ARM, але за замовчуванням
можна змінити, налаштувавши GCC за допомогою --з режимом =були налаштувати параметр.

-mtpcs-фрейм
Згенеруйте кадр стека, який відповідає стандарту виклику процедури Thumb для
всі функції, які не є листовими. (Листкова функція - це функція, яка не викликає жодної іншої
функції.) За замовчуванням є -mno-tpcs-frame.

-mtpcs-leaf-frame
Згенеруйте кадр стека, який відповідає стандарту виклику процедури Thumb для
всі функції листка. (Лукова функція - це функція, яка не викликає жодних інших функцій.)
За замовчуванням - -mno-apcs-leaf-frame.

-mcallee-супер-взаємодія
Надає всім видимим ззовні функціям у файлі, що компілюється, інструкцію ARM
встановити заголовок, який перемикається в режим Thumb перед виконанням решти функції.
Це дозволяє викликати ці функції з коду, що не взаємодіє. Цей варіант є
недійсний у конфігураціях AAPCS, оскільки взаємодія ввімкнено за замовчуванням.

-mcaller-super-interworking
Дозволяє правильно виконувати виклики через покажчики функцій (включаючи віртуальні функції).
незалежно від того, чи був цільовий код скомпільований для взаємодії чи ні.
Виконання вказівника функції, якщо ця опція має невеликі накладні витрати
увімкнено. Ця опція недійсна в конфігураціях AAPCS, оскільки є взаємодія
увімкнено за замовчуванням.

-mtp=ім'я
Вкажіть модель доступу для покажчика локального сховища потоку. Дійсними є моделі
м'який, який генерує виклики "__aeabi_read_tp", cp15, який отримує потік
вказівник безпосередньо з "cp15" (підтримується архітектурою arm6k), і автоматичний, Яка
використовує найкращий доступний метод для вибраного процесора. Налаштування за замовчуванням
автоматичний.

-mtls-dialect=діалект
Вкажіть діалект для доступу до локального сховища потоку. Два діалектs є
підтримується---гну та gnu2, гну діалект вибирає оригінальну схему GNU для
підтримка локальних і глобальних динамічних моделей TLS. The gnu2 діалект вибирає GNU
схема дескриптора, яка забезпечує кращу продуктивність для спільних бібліотек. GNU
Схема дескриптора сумісна з оригінальною схемою, але вимагає нової
підтримка асемблера, компонувальника та бібліотеки. Початкова та локальна моделі exec TLS є
ця опція не впливає і завжди використовує оригінальну схему.

-mword-переміщення
Згенеруйте абсолютні переміщення лише для значень розміру зі словом (тобто R_ARM_ABS32). Це
увімкнено за замовчуванням для цільових пристроїв (uClinux, SymbianOS), де завантажувач часу виконання нав’язує
це обмеження та коли -fpic or -fPIC вказано.

-mfix-cortex-m3-ldrd
Деякі ядра Cortex-M3 можуть викликати пошкодження даних, коли інструкції "ldrd" з
використовуються регістри призначення та бази, що перекриваються. Цей параметр дозволяє уникнути генерації
ці інструкції. Цей параметр увімкнено за замовчуванням, коли -mcpu=кортекс-m3 is
вказано.

-муніципальний доступ
-mno-unaligned-access
Вмикає (або вимикає) читання та запис 16- і 32-розрядних значень з адрес
які не вирівняні за 16 або 32 бітами. За замовчуванням неузгоджений доступ вимкнено для всіх
попередній ARMv6 і всі архітектури ARMv6-M, а також увімкнено для всіх інших архітектур. Якщо
неузгоджений доступ не увімкнено, тоді доступ до слів у упакованих структурах даних a
байт за раз.

Атрибут ARM «Tag_CPU_unaligned_access» встановлюється у згенерованому об’єктному файлі на
або true або false, залежно від налаштування цієї опції. Якщо доступ не вирівняний
увімкнено, то також визначено символ препроцесора "__ARM_FEATURE_UNALIGNED".

-mneon-for-64bits
Дозволяє використовувати Neon для обробки скалярних 64-бітних операцій. За замовчуванням це вимкнено
оскільки вартість переміщення даних з основних регістрів до Neon висока.

-mslow-flash-data
Припустимо, що завантаження даних із flash відбувається повільніше, ніж інструкція отримання. Тому буквально
навантаження зведено до мінімуму для кращої продуктивності. Ця опція підтримується лише тоді, коли
компіляція для M-профілю ARMv7 і вимкнена за замовчуванням.

-masm-syntax-unified
Припустимо, що вбудований асемблер використовує уніфікований синтаксис asm. Наразі значення за замовчуванням вимкнено
що передбачає розділений синтаксис. Наразі ця опція доступна лише для Thumb1 і
не впливає на стан ARM і Thumb2. Однак це може змінитися в майбутніх випусках
GCC. Розділений синтаксис слід вважати застарілим.

-mrestrict-it
Обмежує генерацію IT-блоків, щоб відповідати правилам ARMv8. IT-блоки можуть
містять лише одну 16-бітну інструкцію з вибраного набору інструкцій. Це
Параметр увімкнено за замовчуванням для режиму Thumb ARMv8.

-mprint-tune-info
Надрукуйте інформацію про налаштування ЦП як коментар у файлі ассемблера. Цей варіант використовується
тільки для регресійного тестування компілятора і не призначений для звичайного використання в
компіляція коду. Цей параметр вимкнено за замовчуванням.

AVR Опції

Ці параметри визначені для реалізацій AVR:

-mmcu=mcu
Вкажіть архітектуру набору інструкцій Atmel AVR (ISA) або тип MCU.

За замовчуванням для цієї опції є @tie{}avr2.

GCC підтримує такі пристрої AVR та ISA:

"avr2"
"Класичні" пристрої з програмною пам'яттю до 8@tie{}КіБ. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
"Класичні" пристрої з програмною пам'яттю до 8@tie{}КіБ і з "MOVW"
інструкція. mcu@tie{}= "ata5272", "ata6616c", "attiny13", "attiny13a",
"attiny2313", "attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261",
"attiny261a", "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny441",
"attiny45", "attiny461", "attiny461a", "attiny48", "attiny828", "attiny84",
"attiny84a", "attiny841", "attiny85", "attiny861", "attiny861a", "attiny87",
"attiny88", "at86rf401".

"avr3"
"Класичні" пристрої з програмною пам'яттю від 16@tie{}KiB до 64@tie{}KiB.
mcu@tie{}= "at43usb355", "at76c711".

"avr31"
«Класичні» пристрої з 128@tie{}КіБ пам’яті програм. mcu@tie{}= "atmega103",
"at43usb320".

"avr35"
"Класичні" пристрої з програмною пам'яттю від 16@tie{}KiB до 64@tie{}KiB і з
інструкція "MOVW". mcu@tie{}= "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".

"avr4"
«Розширені» пристрої з програмною пам’яттю до 8@tie{}КіБ. mcu@tie{}= "ata6285",
"ata6286", "ata6289", "ata6612c", "atmega48", "atmega48a", "atmega48p",
"atmega48pa", "atmega8", "atmega8a", "atmega8hva", "atmega8515", "atmega8535",
"atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2",
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
«Розширені» пристрої з програмною пам’яттю від 16@tie{}KiB до 64@tie{}KiB.
mcu@tie{}= "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831",
"ata6613c", "ata6614q", "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", "atmega32", "atmega32a", "atmega32c1", "atmega32hvb",
"atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
"atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega325pa", "atmega3250", "atmega3250a", "atmega3250p",
"atmega3250pa", "atmega328", "atmega328p", "atmega329", "atmega329a",
"atmega329p", "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
"atmega3290pa", "atmega406", "atmega64", "atmega64a", "atmega64c1", "atmega64hve",
"atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640", "atmega644",
"atmega644a", "atmega644p", "atmega644pa", "atmega644rfr2", "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{}КіБ пам’яті програм. mcu@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".

"avr6"
"Розширені" пристрої з 3-байтовим ПК, тобто з програмою понад 128@tie{}КіБ
пам'ять. mcu@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".

"avrxmega2"
Пристрої "XMEGA" з програмною пам'яттю понад 8@tie{}КіБ і до 64@tie{}КіБ.
mcu@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".

"avrxmega4"
Пристрої "XMEGA" з більш ніж 64@tie{}KiB і до 128@tie{}KiB програми
пам'ять. mcu@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5"
Пристрої "XMEGA" з більш ніж 64@tie{}KiB і до 128@tie{}KiB програми
пам’яті та більше ніж 64@tie{}КіБ оперативної пам’яті. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Пристрої "XMEGA" з програмною пам'яттю понад 128@tie{}КіБ. mcu@краватка{}=
"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{}КіБ оперативної пам’яті. mcu@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

"авртини"
"TINY" Крихітні основні пристрої з 512@tie{}B до 4@tie{}КіБ програмної пам'яті.
mcu@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".

"avr1"
Цей ISA реалізований мінімальним ядром AVR і підтримується лише для асемблера.
mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-accumulate-args
Накопичувати вихідні аргументи функції та отримати/звільнити необхідний простір стека
вихідні аргументи функції один раз у пролозі/епілозі функції. Без цієї опції,
вихідні аргументи висуваються перед викликом функції та випливають після цього.

Виведення аргументів після виклику функції може бути дорогим на AVR, тому
накопичення простору стека може призвести до менших виконуваних файлів, оскільки потрібні аргументи
не видаляти зі стеку після такого виклику функції.

Цей параметр може призвести до зменшення розміру коду для функцій, які виконують кілька викликів
функції, які отримують свої аргументи в стеку, як виклики функцій, подібних до printf.

-mbranch-cost=коштувати
Встановіть витрати на відділення для умовних інструкцій відділення коштувати. Розумні значення
та цінності коштувати є малі, невід’ємні цілі числа. Вартість відділення за замовчуванням дорівнює 0.

-mcall-прологи
Функції прологи/епілоги розширюються як виклики відповідних підпрограм. код
розмір менший.

-м'ята8
Припустимо, що "int" є 8-бітовим цілим числом. Це впливає на розміри всіх типів: "char" дорівнює 1
байт, "int" - 1 байт, "long" - 2 байти, а "long long" - 4 байти. Будь ласка
зауважте, що ця опція не відповідає стандартам C, але призводить до менших розмірів
розмір коду.

-mn-flash=Num
Припустимо, що флеш-пам’ять має розмір Num разів 64@tie{}КіБ.

-mno-переривання
Згенерований код несумісний з апаратними перериваннями. Розмір коду менший.

- розслабитися
Спробуйте замінити "CALL" відповідно. Інструкція «JMP» за допомогою коротшої «RCALL» відповідно. "RJMP"
інструкція, якщо є. Налаштування - розслабитися просто додає --M-Link-Relax варіант для
командний рядок асемблера та -- розслабтеся параметр у командному рядку компонувальника.

Розслаблення стрибків виконується компонувальником, оскільки зміщення переходу раніше не було відоме
код розташований. Отже, код асемблера, згенерований компілятором, однаковий,
але інструкції у виконуваному файлі можуть відрізнятися від інструкцій на асемблері
Код.

Якщо потрібні заглушки компоновщика, необхідно ввімкнути розслаблення, дивіться розділ «EIND» і
заглушки лінкера нижче.

-mrmw
Припустимо, що пристрій підтримує інструкції Read-Modify-Write "XCH", "LAC", "LAS"
і "LAT".

-msp8
Розглядайте регістр покажчика стека як 8-розрядний регістр, тобто приймайте старший байт
покажчик стека дорівнює нулю. Загалом, вам не потрібно встановлювати цю опцію вручну.

Ця опція використовується внутрішньо компілятором для вибору та створення мультиліб
архітектури "avr2" і "avr25". Ці архітектури поєднують пристрої з і без
"SPH". Для будь-яких налаштувань, крім -mmcu=avr2 or -mmcu=avr25 додає драйвер компілятора
або видаляє цю опцію з командного рядка компілятора, оскільки компілятор
потім знає, чи має пристрій або архітектура 8-бітовий покажчик стека і, таким чином, немає "SPH"
зареєструватися чи ні.

-mstrict-X
Використовуйте адресний регістр "X" способом, запропонованим апаратним забезпеченням. Це означає, що «X».
використовується лише для непрямої адресації, адресації після інкременту або перед декрементом.

Без цієї опції регістр "X" може використовуватися так само, як і "Y" або "Z".
потім емулюється додатковими інструкціями. Наприклад, завантаження значення за допомогою
"X+const" адресація з невеликим невід'ємним "const < 64" до регістра Rn is
виконується як

adiw r26, const ; X += конст
ld , X ; = *X
sbiw r26, const ; X -= конст

-mtiny-стек
Змінюйте лише нижні 8@tie{}бітів покажчика стека.

-nodevicelib
Не створюйте посилання на бібліотеку AVR-LibC, специфічну для пристрою, "libdev.a".

-Waddr-space-convert
Попереджають про перетворення між адресними просторами в тому випадку, коли отримана адреса
простір не міститься у вхідному адресному просторі.

"EIND" і пристрої з більш ніж 128 Кібайт Flash

Вказівники в реалізації мають ширину 16@tie{}бітів. Адреса функції або мітки
представлений у вигляді адреси слова, щоб непрямі переходи та виклики могли націлюватися на будь-який код
адреса в діапазоні 64@tie{}Кі слів.

Щоб полегшити непрямий перехід на пристрої з понад 128@tie{}Кі байт
пам'яті програми, існує спеціальний регістр функції під назвою "EIND", який служить як
найбільш значуща частина цільової адреси, коли є інструкції "EICALL" або "EIJMP".
використаний

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

* Компілятор ніколи не встановлює "EIND".

* Компілятор використовує "EIND" неявно в інструкціях "EICALL"/"EIJMP" або може прочитати
"EIND" безпосередньо, щоб імітувати непрямий виклик/стрибок за допомогою "RET"
інструкція.

* Компілятор припускає, що "EIND" ніколи не змінюється під час коду запуску або під час
додаток. Зокрема, "EIND" не зберігається/відновлюється у функції чи переривання
рутинна служба пролог/епілог.

* Для непрямих викликів функцій і обчисленого переходу генерує компонувальник заглушки. Заглушки
іноді також називаються стрибками батути. Таким чином, непрямий виклик/перехід переходить до
така заглушка. Заглушка містить прямий перехід на потрібну адресу.

* Розслаблення компоновщика має бути увімкнено, щоб компонувальник правильно генерував заглушки
у всіх ситуаціях. Дивіться опцію компілятора - розслабитися і параметр компонування -- розслабтеся.
Існують кутові випадки, коли компонувальник повинен генерувати заглушки, але переривається
без розслаблення та без корисного повідомлення про помилку.

* Сценарій компонувальника за замовчуванням упорядкований для коду з "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". Такий код виконується до
загальний код запуску, який ініціалізує RAM і викликає конструктори, але після розряду
код запуску з AVR-LibC, який встановлює "EIND" у сегмент, де знаходиться векторна таблиця
розташований.

#включати

статична порожнеча
__атрибут__((section(.init3"),голий,вживаний,без_функції_instrument))
init3_set_eind (недійсний)
{
__asm ​​volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND) : "r24","пам'ять");
}

Символ "__trampolines_start" визначено в скрипті компоновщика.

* Заглушки автоматично генеруються компонувальником, якщо виконуються дві наступні умови
зустрів:

-
(скорочено для породжувати заглушки) ось так:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
поза сегмент, де розташовані заглушки.

* Компілятор випускає такі модифікатори "gs" для міток коду в таких ситуаціях:

-
-
- -mcall-прологи>
параметр командного рядка.

-
таблиці ви можете вказати -fno-jump-tables параметр командного рядка.

-
-
* Перехід до несимволічних адрес подібний НЕ підтримується:

int main (порожній)
{
/* Виклик функції за адресою слова 0x2 */
повернути ((int(*)(void)) 0x2)();
}

Замість цього потрібно налаштувати заглушку, тобто функцію потрібно викликати через символ
("func_4" у прикладі):

int main (порожній)
{
extern int func_4 (порожній);

/* Виклик функції за адресою байта 0x4 */
повернути 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» встановлюється за потребою перед операцією.

* Якщо пристрій підтримує оперативну пам’ять більше 64@tie{}KiB, і компілятор потрібно змінити
«RAMPZ» для виконання операції, «RAMPZ» скидається на нуль після операції.

* Якщо пристрій має певний регістр "RAMP", пролог/епілог ISR
зберігає/відновлює цей SFR та ініціалізує його нулем на випадок, якщо код ISR може
(неявно) використовувати його.

* ОЗП більше 64@tie{}КіБ не підтримується GCC для цільових пристроїв AVR. Якщо ви використовуєте
вбудований ассемблер для читання з місць за межами 16-розрядного діапазону адрес і зміни
одного з регістрів "RAMP", ви повинні скинути його на нуль після доступу.

AVR Вбудовані макроси

GCC визначає кілька вбудованих макросів, щоб код користувача міг перевірити наявність або
відсутність особливостей. Майже будь-який з наступних вбудованих макросів виводиться з пристрою
можливостей і, таким чином, викликані -mmcu= параметр командного рядка.

Ще більше вбудованих макросів для AVR див AVR Названий адреса Приміщення та AVR Вбудований
Функції.

"__AVR_ARCH__"
Вбудований макрос, який розв’язується до десяткового числа, що ідентифікує архітектуру та
залежить від -mmcu=mcu варіант. Можливі значення:

2, 25, 3, 31, 35, 4, 5, 51, 6

та цінності mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",

відповідно і

100, 102, 104, 105, 106, 107

та цінності mcu="avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
відповідно. Якщо mcu вказує пристрій, цей вбудований макрос встановлюється відповідним чином. Для
наприклад, з -mmcu = atmega8 макросу визначено 4.

"__AVR_Пристрій__"
Установка -mmcu=пристрій визначає цей вбудований макрос, який відображає назву пристрою. Для
наприклад, -mmcu = atmega8 визначає вбудований макрос "__AVR_ATmega8__", -mmcu=attiny261a
визначає "__AVR_ATtiny261A__" тощо.

Назви вбудованих макросів відповідають схемі "__AVR_Пристрій__" де Пристрій є
назва пристрою згідно з посібником користувача AVR. Різниця між Пристрій у вбудованому
макрос і пристрій in -mmcu=пристрій полягає в тому, що останній завжди пишеться в нижньому регістрі.

If пристрій це не пристрій, а лише базова архітектура avr51, цей макрос не є
визначений.

"__AVR_DEVICE_NAME__"
Установка -mmcu=пристрій визначає цей вбудований макрос до імені пристрою. Наприклад,
з -mmcu = atmega8 макрос визначено як "atmega8".

If пристрій це не пристрій, а лише базова архітектура avr51, цей макрос не є
визначений.

"__AVR_XMEGA__"
Пристрій/архітектура належить до сімейства пристроїв XMEGA.

"__AVR_HAVE_ELPM__"
Пристрій має інструкцію «ELPM».

"__AVR_HAVE_ELPMX__"
Пристрій має «ELPM Rn,Z" та «ELPM Rn,Z+" інструкціям.

"__AVR_HAVE_MOVW__"
Пристрій має інструкцію «MOVW» для виконання 16-розрядних переміщень регістра-реєстру.

"__AVR_HAVE_LPMX__"
Пристрій має «LPM Rn,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{}КіБ пам’яті програм. Це також означає, що програма
лічильник (ПК) має ширину 3@tie{}байти.

"__AVR_2_BYTE_PC__"
Лічильник програми (ПК) має ширину 2@tie{}байти. Це стосується пристроїв з до
128@tie{}КіБ програмної пам’яті.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Регістр покажчика стека (SP) розглядається як 8-розрядний відповідно 16-розрядний регістр
компілятор. На визначення цих макросів впливає -mtiny-стек.

"__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",
відповідно.

"__НІ_ПРЕРІВ__"
Цей макрос відображає -mno-переривання параметр командного рядка.

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Деякі пристрої AVR (AT90S8515, ATmega103) не повинні пропускати 32-розрядні інструкції через
апаратна помилка. Інструкції пропуску: "SBRS", "SBRC", "SBIS", "SBIC" і "CPSE".
Другий макрос визначається, лише якщо також встановлено "__AVR_HAVE_JMP_CALL__".

"__AVR_ISA_RMW__"
Пристрій має інструкції Read-Modify-Write (XCH, LAC, LAS і LAT).

"__AVR_SFR_OFFSET__=зміщення"
Інструкції, які можуть звертатися до регістрів спеціальних функцій введення-виводу безпосередньо, наприклад "IN",
"OUT", "SBI" і т. д. можуть використовувати іншу адресу, наче адресована інструкцією до
доступ до оперативної пам’яті, як-от «LD» або «STS». Це зміщення залежить від архітектури пристрою та має
віднімається від адреси оперативної пам’яті, щоб отримати відповідну адресу вводу/виводу@tie{}.

"__WITH_AVRLIBC__"
Компілятор налаштований на використання разом з AVR-Libc. Див --with-avrlibc
налаштувати параметр.

Чорношкірий Опції

-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, bf542m,
bf544m, bf547m, bf548m, bf549m, bf561, bf592.

The optional огляд визначає кремнієву редакцію цільового Blackfin
процесор. Увімкнено будь-які обхідні шляхи, доступні для цільової силіконової версії.
If огляд is ніхто, обхідні шляхи не ввімкнені. Якщо огляд is будь-якийВсі
увімкнено обхідні шляхи для цільового процесора. Макрос "__SILICON_REVISION__".
визначається двома шістнадцятковими цифрами, що представляють головне та другорядне числа в
ревізія кремнію. Якщо огляд is ніхто, "__SILICON_REVISION__" не визначено.
If огляд is будь-який, "__SILICON_REVISION__" визначено як 0xffff. Якщо це
необов'язковий огляд не використовується, GCC припускає останню відому силіконову версію
цільовий процесор Blackfin.

GCC визначає макрос препроцесора для вказаного центральний процесор. Для bfin-ельф ланцюжок інструментів,
цей параметр призводить до того, що апаратний BSP, наданий libgloss, буде пов’язаний у if -msim is
не дано.

Без цієї опції, bf532 за замовчуванням використовується як процесор.

Зауважте, що підтримка для bf561 є неповним. Для bf561, є лише макрос препроцесора
визначений.

-msim
Вказує, що програма буде запущена на симуляторі. Це викликає симулятор
BSP, наданий libgloss для посилання. Цей параметр діє лише для bfin-ельф
ланцюжок інструментів. Деякі інші варіанти, наприклад - середня спільна бібліотека та -mfdpic, мати на увазі
-msim.

-momit-leaf-frame-pointer
Не зберігайте покажчик кадру в регістрі для листових функцій. Це дозволяє уникнути
інструкції для збереження, налаштування та відновлення покажчиків кадрів і створює додатковий регістр
доступний у функціях листа. Варіант -fomit-кадр-покажчик знімає рамку
покажчик для всіх функцій, що може ускладнити налагодження.

-mspecld-аномалія
Коли ввімкнено, компілятор гарантує, що згенерований код не містить
спекулятивні навантаження після інструкцій переходу. Якщо використовується ця опція,
"__WORKAROUND_SPECULATIVE_LOADS" визначено.

-mno-specld-аномалія
Не генеруйте зайвий код, щоб запобігти спекулятивним навантаженням.

-mcsync-аномалія
Якщо ввімкнено, компілятор гарантує, що згенерований код не містить CSYNC або
Інструкції SSYNC занадто швидко після умовних розгалужень. Якщо використовується ця опція,
"__WORKAROUND_SPECULATIVE_SYNCS" визначено.

-mno-csync-аномалія
Не генеруйте додатковий код, щоб запобігти появі інструкцій CSYNC або SSYNC
незабаром після умовної гілки.

-mlow-64k
Коли ввімкнено, компілятор може вільно використовувати знання, що цілий
Програма вміщається в низькі 64 КБ пам'яті.

-mno-low-64k
Припустимо, що програма довільно велика. Це значення за замовчуванням.

-mstack-check-l1
Виконайте перевірку стека, використовуючи інформацію, поміщену uClinux в пам’ять L1
ядро

- середня спільна бібліотека
Згенеруйте код, який підтримує спільні бібліотеки за допомогою методу ідентифікатора бібліотеки. Це дозволяє
для виконання на місці та спільних бібліотек у середовищі без віртуальної пам’яті
управління. Цей варіант має на увазі -fPIC. З bfin-ельф ціль, цей параметр передбачає
-msim.

-mno-id-shared-library
Створіть код, який не передбачає використання спільних бібліотек на основі ідентифікатора. Це
за замовчуванням.

-mleaf-id-shared-library
Згенеруйте код, який підтримує спільні бібліотеки за допомогою методу ID бібліотеки, але припускає
що ця бібліотека або виконуваний файл не буде пов’язуватися з іншими спільними бібліотеками ідентифікаторів.
Це дозволяє компілятору використовувати швидший код для переходів і викликів.

-mno-leaf-id-shared-library
Не думайте, що компілюваний код не буде зв’язуватися з жодними спільними бібліотеками ідентифікаторів.
Більш повільний код генерується для insns переходу та виклику.

-mshared-library-id=n
Вказує ідентифікаційний номер спільної бібліотеки на основі ідентифікатора, що компілюється.
Зазначення значення 0 генерує більш компактний код; вказуючи інші значення сил
виділення цього номера поточній бібліотеці, але більше не простору або часу-
ефективніше, ніж пропускати цей варіант.

-msep-дані
Створіть код, який дозволяє розташовувати сегмент даних в іншій області пам'яті
з текстового сегмента. Це дозволяє виконувати на місці в середовищі без
управління віртуальною пам'яттю шляхом усунення переміщення текстового розділу.

-mno-sep-data
Створіть код, який передбачає, що сегмент даних слідує за текстовим сегментом. Це
за замовчуванням.

-mlong-дзвінки
-mno-long-cales
Вказує компілятору виконувати виклики функцій, спочатку завантажуючи адресу
функцію в регістр, а потім виконати виклик підпрограми для цього регістра. Це
комутатор потрібен, якщо цільова функція знаходиться за межами 24-бітового діапазону адресації
зміщена версія інструкції виклику підпрограми.

Ця функція не ввімкнена за замовчуванням. Уточнення -mno-long-cales відновлює
поведінка за замовчуванням. Зауважте, що ці перемикачі не впливають на те, як генерує компілятор
код для обробки викликів функцій через покажчики функцій.

-mfast-fp
Посилання на швидку бібліотеку з плаваючою комою. Ця бібліотека розслабляє IEEE
правила стандарту з плаваючою комою для перевірки введених даних щодо не-число (NAN), у
інтерес до виконання.

-minline-plt
Увімкнути вбудовування записів PLT у викликах функцій до невідомих функцій
зв’язати локально. Без цього ефекту немає -mfdpic.

- багатоядерний
Створіть окрему програму для багатоядерних процесорів Blackfin. Цей варіант викликає
правильні стартові файли та сценарії посилань, які підтримують багатоядерність, які будуть використовуватися, а також визначає
макрос "__BFIN_MULTICORE". Його можна використовувати тільки з -mcpu=bf561[-огляд].

Цей параметр можна використовувати з -mcorea or -mcoreb, який вибирає одну програму-
модель програмування на ядро. Без -mcorea or -mcoreb,
Використовується одно-додаткова/двоядерна модель програмування. У цій моделі основний
функцію Core B слід назвати як "coreb_main".

Якщо цей параметр не використовується, використовується одноядерна модель прикладного програмування.

-mcorea
Створіть окрему програму для Core A BF561, використовуючи програму one-application-per-
базова модель програмування. Для підтримки Core використовуються правильні стартові файли та сценарії посилань
A, і визначено макрос "__BFIN_COREA". Цей параметр можна використовувати тільки в
поєднання з - багатоядерний.

-mcoreb
Створіть окрему програму для Core B BF561, використовуючи програму one-application-per-
базова модель програмування. Для підтримки Core використовуються правильні стартові файли та сценарії посилань
B і визначено макрос "__BFIN_COREB". Коли використовується цей параметр, "coreb_main"
слід використовувати замість «основний». Цей параметр можна використовувати лише разом із
- багатоядерний.

-msdram
Створіть окрему програму для SDRAM. Використовуються правильні стартові файли та сценарії посилань
щоб помістити програму в SDRAM, і визначено макрос "__BFIN_SDRAM". The
Завантажувач повинен ініціалізувати SDRAM перед завантаженням програми.

-micplb
Припустимо, що ICPLB увімкнено під час виконання. Це впливає на певну аномалію
обхідні шляхи. Для цілей Linux за замовчуванням передбачається, що ICPLB увімкнено; для
автономні програми за замовчуванням вимкнено.

C6X Опції

-березень=ім'я
Це визначає назву цільової архітектури. GCC використовує це ім’я для визначення
які інструкції він може видавати під час генерації коду складання. Допустимі
назви: c62x, c64x, c64x+, c67x, c67x+, c674x.

-big-endian
Згенеруйте код для цілі з великим порядком.

-mlittle-endian
Згенеруйте код для цілі з малим порядком байтів. Це значення за замовчуванням.

-msim
Виберіть файли запуску та скрипт компоновника, які підходять для симулятора.

-msdata=за замовчуванням
Помістіть невеликі глобальні та статичні дані в розділ ".neardata", на який вказує
реєстр «В14». Помістіть невеликі неініціалізовані глобальні та статичні дані в розділ ".bss",
який примикає до розділу ".neardata". Помістіть невеликі дані лише для читання в файл
розділ ".rodata". Для великих фрагментів даних використовуються відповідні розділи
".fardata", ".far" і ".const".

-msdata=все
Помістіть усі дані, а не лише невеликі об’єкти, у розділи, зарезервовані для малих даних, і
використовуйте адресацію щодо регістру «B14» для доступу до них.

-msdata=немає
Не використовуйте розділи, зарезервовані для невеликих даних, і використовуйте абсолютні адреси
отримати доступ до всіх даних. Помістіть усі ініціалізовані глобальні та статичні дані в ".fardata"
розділ, а всі неініціалізовані дані в розділі ".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 байт

-metrax4
-metrax100
Варіанти -metrax4 та -metrax100 є синонімами до -березень=v3 та -березень=v8
відповідно.

-mmul-bug-обхідний шлях
-mno-mul-bug-обхідний шлях
Усуньте помилку в інструкціях "muls" і "mulu" для моделей ЦП, де вона є
застосовується. Ця опція активна за замовчуванням.

-mpdebug
Увімкніть специфічну для CRIS детальну інформацію, пов’язану з налагодженням, у коді складання. Це
опція також має ефект вимкнення #БЕЗ_ДОдатку Індикатор форматованого коду до
асемблера на початку файлу збірки.

-mcc-init
Не використовуйте результати коду умови з попередньої інструкції; завжди випускати порівняти і
тестові інструкції перед використанням кодів умов.

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

-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
Ці параметри (ні- варіанти) упорядкувати (усунути домовленості) для каркаса стека,
окремі дані та константи, які потрібно вирівняти для максимального розміру доступу до даних
для обраної моделі процесора. За замовчуванням встановлюється 32-розрядне вирівнювання. ABI
Ці параметри не впливають на такі деталі, як макет структури.

-m32-біт
-m16-біт
-m8-біт
Подібно до параметрів stack-data- та const-align вище, ці параметри організовують
фрейм стека, записувані дані та константи мають бути вирівняними по 32, 16 або 8 біт.
За замовчуванням встановлено 32-бітове вирівнювання.

-мно-пролог-епілог
-мпролог-епілог
з -мно-пролог-епілог, нормальна функція пролог і епілог, які налаштовані
кадр стека пропущено, а інструкції повернення або послідовності повернення відсутні
генерується в коді. Використовуйте цю опцію тільки разом із візуальним оглядом
скомпільований код: жодних попереджень чи помилок не генерується, коли мають бути збережені регістри виклику
збережено, або потрібно виділити сховище для локальних змінних.

-mno-gotplt
-mgotplt
з -fpic та -fPIC, не генеруйте (генеруйте) послідовності інструкцій, які завантажуються
адреси функцій із частини PLT GOT, а не (традиційна для інших
архітектури) виклики до PLT. За замовчуванням є -mgotplt.

-melf
Застарілий параметр no-op розпізнається лише за допомогою cris-axis-elf і cris-axis-linux-gnu
цілі.

-mlinux
Застарілий параметр no-op розпізнається лише для цільової групи cris-axis-linux-gnu.

-сим
Ця опція, визнана для cris-axis-elf, організовує зв'язок із введенням-виводом
функції з бібліотеки симулятора. Код, ініціалізовані дані та дані, ініціалізовані нулем
виділяються послідовно.

-sim2
Люблю -сим, але передайте параметри компонувальника, щоб знайти ініціалізовані дані за 0x40000000 і нуль-
ініціалізовані дані 0x80000000.

CR16 Опції

Ці параметри визначені спеціально для портів CR16.

-ммак
Увімкніть використання інструкцій множення-нагромадження. Вимкнено за замовчуванням.

-mcr16cplus
-mcr16c
Згенеруйте код для архітектури CR16C або CR16C+. Архітектура CR16C+ за замовчуванням.

-msim
Посилає бібліотеку libsim.a, сумісну з симулятором. Застосовується до ELF
тільки компілятор.

-м'ята32
Виберіть тип цілого числа як 32-бітну ширину.

-mbit-ops
Генерує інструкції "sbit"/"cbit" для маніпуляцій з бітами.

-mdata-model=модель
Виберіть модель даних. Вибір для модель він має близько, далеко or середа. середа є за замовчуванням.
Тим не менш, далеко недійсний з -mcr16c, оскільки архітектура CR16C не підтримує
далека модель даних.

Дарвін Опції

Ці параметри визначені для всіх архітектур під керуванням операційної системи Darwin.

FSF GCC on Darwin не створює «жирні» об'єктні файли; він створює об’єктний файл для
єдина архітектура, для якої створено GCC. GCC від Apple щодо Дарвіна справді створює «жир»
файлів, якщо їх декілька -арх використовуються варіанти; це робиться за допомогою компілятора або компоновщика
кілька разів і об’єднуючи результати разом з ліпо.

Підтип створеного файлу (наприклад PPC7400 or PPC970 or i686) визначається
прапори, які вказують на ISA, на який націлено GCC, наприклад -mcpu or - марш,
-force_cpusubtype_ALL параметр можна використовувати, щоб змінити це.

Інструменти Дарвіна відрізняються за своєю поведінкою, коли вони представлені з невідповідністю ISA. The
монтажник, as, дозволяє використовувати лише інструкції, які дійсні для підтипу
файл, який він створює, тому ви не можете помістити 64-розрядні інструкції в a PPC750 об'єктний файл. The
компонувальник для спільних бібліотек, /usr/bin/libtool, виходить з ладу і друкує помилку, якщо запитають
створити спільну бібліотеку з менш обмеженим підтипом, ніж її вхідні файли (для
приклад, намагаючись поставити a PPC970 об'єктний файл у a PPC7400 бібліотека). Лінкер для
виконувані файли, ld, тихо надає виконуваному файлу найбільш обмежувальний підтип з усіх його
вхідні файли.

-Fреж
Додайте каталог фреймворку реж до початку списку довідників для пошуку
для заголовних файлів. Ці каталоги чергуються з каталогами, зазначеними в -I
і скануються в порядку зліва направо.

Каталог фреймворків — це каталог із фреймворками. Рамка - це а
каталог з a Заголовки та / або PrivateHeaders каталогу, що міститься безпосередньо в ньому
закінчується .рамка. Ім'я фреймворка є ім'ям цього каталогу без урахування
.рамка. Заголовки, пов’язані з фреймворком, знаходяться в одному з цих двох
довідники, с Заголовки обшукується першим. Субфреймворк - це каркас
каталог, який знаходиться у фреймворку Frameworks каталог. Включає підрамник
заголовки можуть з’являтися лише в заголовку фреймворка, який містить підфреймворк, або
у заголовку субфреймворка. Два підфреймворка є братами і сестрами, якщо вони зустрічаються в
той самий каркас. Субфреймворк не повинен мати те саме ім'я, що і фреймворк; а
у разі порушення видається попередження. Наразі підрамник не може мати
підрамки; у майбутньому механізм може бути розширений для підтримки цього. The
стандартні рамки можна знайти в /Система/Бібліотека/Фреймворки та
/ Library / Frameworks. Приклад включення виглядає як "#include ",
де Рамки позначає назву каркаса і заголовок.h зустрічається в
PrivateHeaders or Заголовки каталог.

-iframeworkреж
Люблю -F за винятком того, що каталог розглядається як системний каталог. Основна відмінність
між цим -iframework та -F це те, що з -iframework компілятор не попереджає
про конструкції, що містяться у файлах заголовків, знайдених через реж. Цей варіант дійсний
тільки для сімейства мов C.

– здогадався
Видавати інформацію про налагодження для символів, які використовуються. Для формату налагодження stabs,
це дозволяє -feliminate-unused-debug-symbols. За замовчуванням увімкнено.

-gfull
Видавати інформацію про налагодження для всіх символів і типів.

-mmacosx-версія-мін=версія
Найстарішою версією MacOS X, на якій буде працювати цей виконуваний файл, є версія. Типовий
значення версія включають 10.1, 10.2 і 10.3.9.

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

-mkernel
Увімкнути режим розробки ядра. The -mkernel набори опцій -статичний, -fno-загальний,
-fno-use-cxa-atexit, -fno-виключення, -fno-non-call-exceptions, -fapple-kext,
-fno-слабий та -fno-rtti де це застосовно. Цей режим також встановлюється -mno-altivec,
-msoft-float, -fno-вбудований та -mlong-гілка для цілей PowerPC.

-mone-byte-bool
Перевизначте значення за замовчуванням для "bool", щоб "sizeof(bool)==1". За замовчуванням "sizeof(bool)"
дорівнює 4 при компіляції для Darwin/PowerPC і 1 при компіляції для Darwin/x86, тому це
параметр не впливає на x86.

Увага! Команда -mone-byte-bool switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Використання цього перемикача може знадобитися
перекомпіляції всіх інших модулів програми, включаючи системні бібліотеки. Використовуй це
переключитися, щоб відповідати моделі даних, яка не є стандартною.

-Mfix-and Continue
-закріпи-і-продовж
-findirect-дані
Згенеруйте код, придатний для швидкої розробки, наприклад, щоб дозволити GDB
динамічно навантажувати .o файлів у вже запущені програми. -findirect-дані та
-закріпи-і-продовж надаються для зворотної сумісності.

-всі_завантаження
Завантажує всі члени статичних архівних бібліотек. Бачити людину ld(1) для отримання додаткової інформації.

-arch_errors_fatal
Помилки, пов’язані з файлами, які мають неправильну архітектуру, будуть фатальними.

-bind_at_load
Позначає вихідний файл таким чином, що динамічний компонувальник зв’язує всі
невизначені посилання під час завантаження або запуску файлу.

- пучок
Створіть файл формату пакета Mach-o. Бачити людину ld(1) для отримання додаткової інформації.

-bundle_loader виконуваний файл
Цей параметр визначає виконуваний файл який завантажить вихідний файл збірки
пов'язаний. Бачити людину ld(1) для отримання додаткової інформації.

-динамічна бібліотека
Коли цей параметр переданий, GCC створює динамічну бібліотеку замість виконуваного файлу when
зв’язування за допомогою Дарвіна libtool команда

-force_cpusubtype_ALL
Це призводить до того, що вихідний файл GCC має ALL підтип, замість контрольованого
-mcpu or - марш варіант.

-дозволений_клієнт ім'я_клієнта
-ім'я_клієнта
-сумісність_версія
-Поточна версія
-мертва_смуга
-файл залежностей
-dylib_файл
-dylinker_install_name
-динамічний
-список_експортованих_символів
- список файлів
-flat_простір імен
-force_flat_простір імен
-headerpad_max_install_names
-база_зображення
-у цьому
-ім'я_інсталяції
-keep_private_externs
-багатомодульний
-множення_визначено
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-нопребінд
-noseglinkedit
-pagezero_size
-передв'язка
-prebind_all_twolevel_modules
-private_bundle
-relocs_лише_читання
-сектальний
-сектооб'єкти символи
- навіщо навантажувати
-seg1addr
-сектотворити
-сектооб'єкти символи
-секторний
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_name_file
-seglinkedit
-сегпрот
-segs_read_only_addr
-segs_read_write_addr
-одномодульний
-статичний
-під_бібліотека
-суб_парасолька
-дворівневий простір імен
-парасолька
-невизначений
-список_неекспортованих_символів
-weak_reference_misparches
-що завантажено
Ці параметри передаються лінкеру Дарвіна. Довідкова сторінка Darwin Linker описує
їх детально.

Грудень Альфа Опції

Ці -m визначено параметри для реалізацій DEC Alpha:

-mno-soft-float
-msoft-float
Використовуйте (не використовуйте) апаратні інструкції з плаваючою комою
операції. Коли -msoft-float вказано, функціонує в libgcc.a використовуються для виконання
операції з плаваючою комою. Якщо вони не замінені підпрограмами, які емулюють
операції з плаваючою комою або скомпільовані таким чином, щоб викликати такі емуляції
підпрограм, ці підпрограми видають операції з плаваючою комою. Якщо ви збираєтесь для
Alpha без операцій з плаваючою комою, ви повинні переконатися, що бібліотека створена
щоб їм не дзвонити.

Зауважте, що альфа-реалізації без операцій з плаваючою комою повинні мати
регістри з плаваючою комою.

-mfp-reg
-mno-fp-regs
Згенеруйте код, який використовує (не використовує) набір регістрів з плаваючою комою. -mno-fp-regs
мається на увазі -msoft-float. Якщо набір регістрів з плаваючою комою не використовується, з плаваючою комою
операнди передаються в цілих регістрах, як якщо б вони були цілими числами і з плаваючою комою
результати передаються в $0 замість $f0. Це нестандартна послідовність викликів, тому
будь-яка функція з аргументом з плаваючою комою або значенням, що повертається, викликаним зібраним кодом
з -mno-fp-regs також має бути скомпільований з цим параметром.

Типовим використанням цієї опції є створення ядра, яке не використовує, а отже, потребує
не зберігати та не відновлювати, будь-які регістри з плаваючою комою.

-миее
Архітектура Alpha реалізує апаратне забезпечення з плаваючою комою, оптимізоване для максимуму
продуктивність. Здебільшого він відповідає стандарту IEEE з плаваючою комою. однак,
для повної відповідності необхідна допомога з програмним забезпеченням. Ця опція генерує код
повністю IEEE-сумісний код крім який неточний прапор не підтримується (див. нижче).
Якщо цей параметр увімкнено, макрос препроцесора "_IEEE_FP" визначається під час
компіляція. Отриманий код менш ефективний, але здатний правильно підтримувати
денормалізовані числа та виняткові значення IEEE, такі як не-число та плюс/мінус
нескінченність. Інші компілятори Alpha називають цю опцію -ieee_with_no_neexact.

-міее-з-неточним
Це схоже -миее крім згенерованого коду також підтримує IEEE неточний прапор.
Увімкнення цієї опції призводить до того, що згенерований код реалізує повністю сумісний IEEE
математика. На додаток до "_IEEE_FP", "_IEEE_FP_EXACT" визначається як макрос препроцесора.
У деяких альфа-реалізаціях отриманий код може виконуватися значно повільніше, ніж
код, згенерований за замовчуванням. Оскільки існує дуже мало коду, який залежить від
неточний прапор, зазвичай не слід вказувати цей параметр. Викликають інші компілятори Alpha
цей варіант -ieee_with_neexact.

-mfp-trap-mode=режим пастки
Цей параметр визначає, які пастки, пов’язані з плаваючою комою, увімкнено. Інша Альфа
компілятори називають цю опцію -fptm режим пастки. Режим пастки можна встановити на один з чотирьох
значення:

n Це налаштування за замовчуванням (звичайне). Єдині пастки, які ввімкнені, це
ті, які не можна вимкнути в програмному забезпеченні (наприклад, поділ на нульову пастку).

u На додаток до пасток, включених за допомогою n, також увімкнено уловлювачі нижнього потоку.

su Люблю u, але інструкції позначено як безпечні для завершення програмного забезпечення (див
Посібник з архітектури Alpha для деталей).

Sui Люблю su, але також увімкнено неточні пастки.

-mfp-rounding-mode=режим округлення
Вибір режиму округлення IEEE. Інші компілятори Alpha називають цю опцію -fprm
режим округлення, режим округлення може бути одним з:

n Звичайний режим округлення IEEE. Числа з плаваючою комою округлюються до найближчого
номер машини або до парного номера машини в разі нічиєї.

m Округлюємо до мінус нескінченності.

c Режим рубленого округлення. Числа з плаваючою комою округлюються до нуля.

d Режим динамічного округлення. Поле в регістрі керування з плаваючою комою (fpcrСм.
Довідковий посібник з архітектури Alpha) керує діючим режимом округлення. C
бібліотека ініціалізує цей регістр для округлення до плюс нескінченності. таким чином,
якщо ваша програма не змінює файл fpcr, d відповідає округлінню до плюса
нескінченність.

-mtrap-precision=пастка-точність
В архітектурі Alpha пастки з плаваючою комою є неточними. Це означає без
програмне забезпечення неможливо відновити з плаваючої пастки та програми
виконання зазвичай потрібно припинити. GCC може генерувати код, який може допомогти
обробники пасток операційної системи для визначення точного розташування, яке викликало а
пастка з плаваючою комою. Залежно від вимог програми, різні
можна вибрати рівні точності:

p Точність програми. Цей параметр є за замовчуванням і означає, що може лише обробник пастки
визначити, яка програма викликала виняток з плаваючою комою.

f Точність функції. Обробник пастки може визначити функцію, яка викликала a
виняток з плаваючою комою.

i Точність інструкції. Обробник пастки може визначити точну інструкцію
викликав виняток з плаваючою комою.

Інші компілятори Alpha надають еквівалентні параметри, які називаються -scope_safe та
-resumption_safe.

-mieee-відповідний
Цей параметр позначає згенерований код як відповідний IEEE. Ви не повинні використовувати цю опцію
якщо ви також не вкажете -mtrap-precision=i і будь-який -mfp-trap-mode=su or
-mfp-trap-mode = sui. Єдиний його ефект - випускати лінію .flag 48 у функції
пролог згенерованого файлу збірки.

-mbuild-константи
Зазвичай GCC перевіряє 32- або 64-розрядну цілу константу, щоб побачити, чи може вона її створити
з менших констант у двох-трьох інструкціях. Якщо він не може, він виводить
константа як литерал і генерує код для завантаження його з сегмента даних під час виконання.

Використовуйте цей параметр, щоб вимагати створення GCC всі цілі константи з використанням коду, навіть якщо
потрібно більше інструкцій (максимум шість).

Зазвичай ви використовуєте цю опцію для створення спільної бібліотеки динамічного завантажувача. Сам а
спільна бібліотека, вона повинна перемістити себе в пам’яті, перш ніж вона зможе знайти змінні та
константи у власному сегменті даних.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-мно-фікс
-ммакс
-мно-макс
Вкажіть, чи повинен GCC генерувати код для використання додаткових BWX, CIX, FIX і MAX
набори інструкцій. За замовчуванням використовуються набори інструкцій, які підтримуються центральним процесором
тип, зазначений через -mcpu= опція або ЦП, на якому було побудовано GCC, якщо такого немає
вказано.

-mfloat-vax
-mfloat-ieee
Створіть код, який використовує (не використовує) арифметику VAX F і G з плаваючою комою
одинарної та подвійної точності IEEE.

-mexplicit-relocs
-mno-explicit-relocs
Старші асемблери Alpha не передбачали жодного способу генерувати переміщення символів, окрім як через
макроси асемблера. Використання цих макросів не дозволяє оптимально планувати інструкції.
GNU binutils починаючи з версії 2.12 підтримує новий синтаксис, який дозволяє компілятору
чітко позначте, які переміщення мають застосовуватися до яких інструкцій. Цей варіант є
в основному корисний для налагодження, оскільки GCC виявляє можливості асемблера, коли він
будується і відповідно встановлює значення за замовчуванням.

-msmall-data
-mlarge-data
Коли -mexplicit-relocs фактично, доступ до статичних даних здійснюється через gp-відносний
переїзди. Коли -msmall-data використовується, в них розміщуються об’єкти довжиною 8 байт або менше
a невеликий дані область (розділи ".sdata" і ".sbss") і доступ до них здійснюється через 16-бітовий
переміщення з реєстру $gp. Це обмежує розмір невеликої області даних до
64 КБ, але дозволяє отримати прямий доступ до змінних за допомогою однієї інструкції.

За замовчуванням - -mlarge-data. За допомогою цього параметра область даних обмежена трохи нижче
2 Гб. Програми, які вимагають більше 2 Гб даних, повинні використовувати "malloc" або "mmap".
розподілити дані в купі, а не в сегменті даних програми.

Під час створення коду для спільних бібліотек, -fpic мається на увазі -msmall-data та -fPIC
мається на увазі -mlarge-data.

-msmall-text
-великий текст
Коли -msmall-text використовується, компілятор припускає, що код всієї програми
(або спільна бібліотека) поміщається в 4 МБ, і, таким чином, доступний за допомогою інструкції розгалуження.
Коли -msmall-data Якщо використовується, компілятор може припустити, що всі локальні символи спільні
однакове значення $gp, і таким чином зменшується кількість інструкцій, необхідних для функції
дзвонити з 4 до 1.

За замовчуванням - -великий текст.

-mcpu=тип_процесора
Встановіть набір команд і параметри планування команд для типу машини
тип_процесора. Ви можете вказати або EV назва стилю або відповідний номер мікросхеми.
GCC підтримує параметри планування для сімейства процесорів EV4, EV5 і EV6 і
вибирає значення за замовчуванням для набору інструкцій із вказаного вами процесора. Якщо
Ви не вказуєте тип процесора, GCC за замовчуванням визначає процесор, на якому
був побудований компілятор.

Підтримувані значення для тип_процесора він має

ev4
ev45
21064
Планується як EV4 і не має розширень набору інструкцій.

ev5
21164
Планується як EV5 і не має розширень набору інструкцій.

ev56
21164a
Планується як EV5 і підтримує розширення BWX.

pca56
21164pc
21164PC
Планується як EV5 і підтримує розширення BWX і MAX.

ev6
21264
Планується як EV6 і підтримує розширення BWX, FIX і MAX.

ev67
21264a
Планується як EV6 і підтримує розширення BWX, CIX, FIX і MAX.

Нативні ланцюги інструментів також підтримують цю цінність рідний, яка обирає найкращу архітектуру
варіант для хост-процесора. -mcpu = рідний не має ефекту, якщо GCC не визнає
процесор.

-mtune=тип_процесора
Встановіть лише параметри планування інструкцій для типу машини тип_процесора,
набір інструкцій не змінено.

Нативні ланцюги інструментів також підтримують цю цінність рідний, яка обирає найкращу архітектуру
варіант для хост-процесора. -mtune = рідний не має ефекту, якщо GCC не визнає
процесор.

-memory-latency=час
Встановлює затримку, яку планувальник повинен приймати для типових посилань на пам’ять, як їх бачить
додаток. Це число сильно залежить від використовуваних шаблонів доступу до пам'яті
за програмою та розміром зовнішнього кешу на машині.

Допустимі варіанти для час він має

номер
Десяткове число, що представляє тактовий цикл.

L1
L2
L3
основний
Компілятор містить оцінки кількості тактів для "типових" EV4 &
Апаратне забезпечення EV5 для кешів рівня 1, 2 і 3 (також називаються Dcache, Scache і
Bcache), а також в основну пам'ять. Зверніть увагу, що L3 дійсний лише для EV5.

FR30 Опції

Ці параметри визначені спеціально для порту FR30.

-msmall-модель
Використовуйте модель малого адресного простору. Це може створити менший код, але це припускає
щоб усі символічні значення та адреси вписувалися в 20-бітовий діапазон.

-мно-лсім
Припустимо, що підтримка під час виконання була надана, і тому немає необхідності включати
бібліотека симулятора (libsim.a) у командному рядку компонувальника.

LIF Опції

-mgpr-32
Використовуйте лише перші 32 регістри загального призначення.

-mgpr-64
Використовуйте всі 64 регістри загального призначення.

-mfpr-32
Використовуйте лише перші 32 регістри з плаваючою комою.

-mfpr-64
Використовуйте всі 64 регістри з плаваючою комою.

-mhard-float
Використовуйте інструкції з обладнання для операцій з плаваючою комою.

-msoft-float
Використовуйте бібліотечні підпрограми для операцій з плаваючою комою.

-malloc-cc
Динамічно розподіляти регістри коду умов.

-mfixed-cc
Не намагайтеся динамічно виділити регістри коду умов, використовуйте лише "icc0" і
"fcc0".

-mdword
Змініть ABI на використання подвійних слів insns.

-мно-слово
Не використовуйте інструкції з подвійних слів.

-mподвійний
Використовуйте подвійні інструкції з плаваючою комою.

-мно-подвійний
Не використовуйте подвійні інструкції з плаваючою комою.

-ммедіа
Використовуйте інструкції зі ЗМІ.

-мно-медіа
Не використовуйте інструкції з медіа.

-ммуладд
Використовуйте інструкції множення та додавання/віднімання.

-мно-муладд
Не використовуйте інструкції множення та додавання/віднімання.

-mfdpic
Виберіть FDPIC ABI, який використовує дескриптори функцій для представлення покажчиків
функції. Без будь-яких опцій, пов’язаних із PIC/PIE, це означає -fPIE. З -fpic or
-fpie, передбачається, що записи GOT і невеликі дані знаходяться в межах 12-бітового діапазону від GOT
базова адреса; з -fPIC or -fPIE, GOT зміщення обчислюються з 32 бітами. З
bfin-ельф ціль, цей параметр передбачає -msim.

-minline-plt
Увімкнути вбудовування записів PLT у викликах функцій до невідомих функцій
зв’язати локально. Без цього ефекту немає -mfdpic. За замовчуванням увімкнено, якщо
оптимізація для швидкості та компіляція для спільних бібліотек (тобто, -fPIC or -fpic), або
коли варіант оптимізації, наприклад -О3 або вище присутній у командному рядку.

-mTLS
Припустимо великий сегмент TLS під час генерації локального коду потоку.

-mtls
Не припускайте великий сегмент TLS під час генерації локального коду потоку.

-mgprel-ro
Увімкнути використання переміщень "GPREL" в FDPIC ABI для даних, які, як відомо, знаходяться в
розділи лише для читання. Він увімкнено за замовчуванням, за винятком -fpic or -fpie: незважаючи на
це може допомогти зменшити глобальну таблицю зміщень, вона обмінює 1 інструкцію на 4. З
-fPIC or -fPIE, він обмінює 3 інструкції на 4, одну з яких може використовувати декілька
символів, і це уникає необхідності запису GOT для посилання на символ, тому це
більше шансів на перемогу. якщо це не так, -mno-gprel-ro можна використовувати для його вимкнення.

-multilib-library-pic
Посилання на бібліотеки зображень (бібліотека, а не FD). Це мається на увазі -mlibrary-pic, так само
як мимо -fPIC та -fpic без -mfdpic. Ви ніколи не повинні використовувати його явно.

-mlinked-fp
Дотримуйтесь вимоги EABI, щоб завжди створювати покажчик кадру, коли кадр стека
виділяється. Цей параметр увімкнено за замовчуванням і його можна вимкнути за допомогою
-mno-linked-fp.

-mlong-дзвінки
Використовуйте непряму адресацію для виклику функцій за межами поточного блоку компіляції. Це
дозволяє розміщувати функції в будь-якому місці 32-бітового адресного простору.

- злоякісні мітки
Спробуйте вирівняти мітки до 8-байтової межі, вставивши NOP в попередній пакет.
Цей параметр діє лише тоді, коли ввімкнено пакування VLIW. Це не створює нового
пакети; він просто додає NOP до існуючих.

-mlibrary-pic
Згенеруйте незалежний від позиції код EABI.

-macc-4
Використовуйте лише перші чотири регістри накопичувача носія.

-macc-8
Використовуйте всі вісім регістрів накопичувача носія.

-mpack
Упакуйте інструкції VLIW.

-мно-пакет
Не пакуйте інструкції VLIW.

-мно-прапори
Не позначайте перемикачі ABI в e_flags.

-mcond-хід
Увімкнути використання вказівок умовного переміщення (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-cond-ход
Вимкніть використання інструкцій умовного переміщення.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mscc
Увімкнути використання інструкцій умовного набору (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-scc
Вимкніть використання інструкцій умовного набору.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mcond-exec
Увімкнути використання умовного виконання (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-cond-exec
Вимкнути використання умовного виконання.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mvliw-філія
Запустіть пропуск, щоб упакувати гілки в інструкції VLIW (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-vliw-філія
Не запускайте пропуск для упаковки гілок в інструкції VLIW.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mmulti-cond-exec
Увімкнути оптимізацію "&&" і "||" в умовному виконанні (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-multi-cond-exec
Вимкнути оптимізацію «&&» та «||» в умовному виконанні.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mnested-cond-exec
Увімкнути вкладені умовні оптимізації виконання (за замовчуванням).

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-mno-nested-cond-exec
Вимкнути вкладені умовні оптимізації виконання.

Цей перемикач в основному призначений для налагодження компілятора і, ймовірно, буде видалений в a
майбутня версія.

-moptimize-membar
Цей перемикач видаляє зайві інструкції "membar" з коду, створеного компілятором.
Він включений за замовчуванням.

-mno-optimize-membar
Цей перемикач вимикає автоматичне видалення зайвих інструкцій "membar" з
згенерований код.

-mtomcat-статистика
Заставте газ роздрукувати статистику котів.

-mcpu=центральний процесор
Виберіть тип процесора, для якого потрібно генерувати код. Можливі значення frv, fr550,
кіт, fr500, fr450, fr405, fr400, fr300 та простий.

GNU / Linux Опції

Ці -m параметри визначені для цілей GNU/Linux:

-mglibc
Використовуйте бібліотеку GNU C. Це значення за замовчуванням, крім увімкненого *-*-linux-*uclibc* та
*-*-linux-*android* цілі.

-muclibc
Використовуйте бібліотеку uClibc C. Це увімкнено за замовчуванням *-*-linux-*uclibc* цілі.

-мбіонічний
Використовуйте бібліотеку Bionic C. Це увімкнено за замовчуванням *-*-linux-*android* цілі.

-мандоїд
Скомпілювати код, сумісний з платформою Android. Це увімкнено за замовчуванням
*-*-linux-*android* цілі.

Під час компіляції цей параметр вмикається -мбіонічний, -fPIC, -fno-виключення та -fno-rtti by
за замовчуванням. Під час підключення ця опція змушує драйвер GCC передавати параметри, специфічні для Android
до компонувальника. Нарешті, ця опція викликає макрос препроцесора "__ANDROID__".
визначений.

-tno-android-cc
Вимкнути ефекти компіляції -мандоїд, тобто не вмикати -мбіонічний, -fPIC,
-fno-виключення та -fno-rtti за замовчуванням

-tno-android-ld
Вимкнути ефекти зв’язування -мандоїд, тобто передати стандартні параметри підключення Linux до
лінкер.

H8 / 300 Опції

Ці -m визначені параметри для реалізацій H8/300:

- розслабитися
Скоротіть деякі посилання на адресу під час посилання, якщо це можливо; використовує параметр компонування
- розслабитися.

-мх Згенеруйте код для H8/300H.

-РС Згенеруйте код для H8S.

-мн Згенеруйте код для H8S та H8/300H у звичайному режимі. Цей перемикач необхідно використовувати
або з -мх or -РС.

-ms2600
Згенеруйте код для H8S/2600. Цей перемикач необхідно використовувати з -РС.

-mexr
Розширені регістри зберігаються в стеку перед виконанням функції з монітором
атрибут. Опція за замовчуванням -mexr. Ця опція дійсна лише для цілей 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-delay
Ця опція ігнорується та надається лише з метою сумісності.

-mdisable-fpregs
Запобігайте будь-якому використанню регістрів з плаваючою комою. Це необхідно для
компіляція ядер, які виконують ліниве перемикання контексту регістрів з плаваючою комою. Якщо
Ви використовуєте цей параметр і намагаєтеся виконувати операції з плаваючою комою, компілятор
перериває.

-mdisable-indexing
Заборонити компілятору використовувати режими адреси індексації. Це швидше уникає деяких
незрозумілі проблеми під час компіляції MIG-генерованого коду під MACH.

-mno-space-regs
Створіть код, який передбачає, що ціль не має проміжних регістрів. Це дозволяє GCC
генерувати швидші непрямі виклики та використовувати немасштабовані режими адреси індексу.

Такий код підходить для систем і ядер PA рівня 0.

-mfast-indirect-calls
Створіть код, який передбачає, що виклики ніколи не перетинають межі простору. Це дозволяє GCC
видавати код, який виконує швидші непрямі виклики.

Цей параметр не працює за наявності спільних бібліотек або вкладених функцій.

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який не може використовувати розподільник регістрів. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-mlong-load-store
Генеруйте завантаження з 3 команд і зберігайте послідовності, як іноді вимагає HP-UX 10
компонувальник. Це еквівалентно +k опцію для компіляторів HP.

-mportable-runtime
Використовуйте конвенції портативних викликів, запропоновані HP для систем ELF.

-mgas
Дозволити використання директив асемблера, які розуміє лише 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-float
Створити вихідні дані, що містять бібліотечні виклики для з плаваючою комою. Увага! необхідний
бібліотеки доступні не для всіх цілей HPPA. Зазвичай об'єкти
використовується звичайний компілятор C для машини, але це неможливо зробити безпосередньо в крос-
компіляція. Ви повинні зробити власні заходи, щоб забезпечити відповідну бібліотеку
функції для крос-компіляції.

-msoft-float змінює умову виклику у вихідному файлі; тому це лише
корисно, якщо ви компілюєте всі програми з цією опцією. Зокрема, потрібно
скласти libgcc.a, бібліотека, яка постачається з GCC, с -msoft-float для цього
працювати.

-msio
Згенеруйте попередньо визначене "_SIO" для серверного введення введення. За замовчуванням є -mwsio. Це породжує
попередньо визначає "__hp9000s700", "__hp9000s700__" і "_WSIO" для робочої станції IO.
Ці параметри доступні під HP-UX і HI-UX.

-mgnu-ld
Використовуйте параметри, характерні для GNU ld. Це минає - поділилися до ld при будівництві спільного
бібліотека. Це значення за замовчуванням, коли GCC налаштовано, явно чи неявно, за допомогою
Компонувальник GNU. Цей параметр не впливає на які ld називається; це змінює лише те, що
параметри передаються до нього ld, ld що називається визначається
--з-ld параметр configure, шлях пошуку програми 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
що називається визначається --з-ld параметр configure, пошук програми GCC
шлях і, нарешті, користувач PATH. Компонувальник, який використовується GCC, може бути надрукований за допомогою
який `gcc -print-prog-name=ld`. Ця опція доступна лише на 64-розрядній моделі HP-UX
GCC, тобто налаштований з hppa*64*-*-hpux*.

-mlong-дзвінки
Згенеруйте код, який використовує довгі послідовності викликів. Це гарантує, що дзвінок завжди доступний
щоб досягти заглушок, згенерованих компонувальником. За замовчуванням генеруються довгі виклики лише тоді, коли
відстань від місця виклику до початку функції або блоку перекладу, як
випадок може бути, перевищує попередньо визначений ліміт, встановлений типом гілки, що використовується. The
обмеження для звичайних викликів становлять 7,600,000 240,000 2.0 і XNUMX XNUMX байт відповідно для PA XNUMX
і архітектури PA 1.X. Сибвиклики завжди обмежені 240,000 XNUMX байт.

Відстані вимірюються від початку функцій при використанні
-ffunction-секції або при використанні -mgas та -mno-portable-runtime опції
разом під HP-UX з компонувальником SOM.

Зазвичай цей параметр не бажано використовувати, оскільки він погіршує продуктивність. однак,
він може бути корисним у великих програмах, особливо коли використовується часткове посилання
створити додаток.

Типи довгих викликів, які використовуються, залежать від можливостей асемблера та компоновщика,
і тип коду, який створюється. Вплив на системи, які підтримують довго
абсолютні виклики, і довгі pic символ-різниці або pc-відносні виклики повинні бути
відносно невеликий. Однак непрямий виклик використовується в 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.o. -munix=98 надає додаткові попередні визначення для "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" і "_INCLUDE_XOPEN_SOURCE_500",
і стартовий файл unix98.o.

Це важливо зауважити, що цей параметр змінює інтерфейси для різних бібліотек
рутини. Це також впливає на операційну поведінку бібліотеки C. таким чином, екстремальний
Використовуючи цю опцію, потрібна обережність.

Бібліотечний код, який призначений для роботи з більш ніж одним стандартом UNIX, повинен перевірити,
установіть та відновіть змінну "__xpg4_extended_mask" відповідно до вимог. Більшість програмного забезпечення GNU
не надає цієї можливості.

-nolibdld
Придушити створення параметрів посилання для пошуку libdld.sl, коли -статичний опція
зазначено на HP-UX 10 і новіших версіях.

-статичний
Реалізація HP-UX setlocale в libc залежить від libdld.sl. Там
не є архівною версією libdld.sl. Таким чином, коли -статичний вказана опція,
Для вирішення цієї залежності потрібні спеціальні параметри посилання.

На HP-UX 10 і новіших версіях драйвер GCC додає необхідні параметри для підключення
libdld.sl, коли -статичний вказана опція. Це призводить до того, що отриманий двійковий файл
бути динамічним. На 64-бітному порту компонувальники за замовчуванням генерують динамічні двійкові файли
будь який випадок. The -nolibdld параметр можна використовувати, щоб запобігти додаванню драйвера GCC
ці параметри посилань.

-нитки
Додайте підтримку багатопоточності за допомогою dce нитка бібліотека під HP-UX. Цей варіант
встановлює прапори як для препроцесора, так і для компонувальника.

IA-64 Опції

Це -m параметри, визначені для архітектури Intel IA-64.

-big-endian
Згенеруйте код для цілі з великим порядком. Це значення за замовчуванням для HP-UX.

-mlittle-endian
Згенеруйте код для цілі з малим порядком байтів. Це значення за замовчуванням для AIX5 і GNU/Linux.

-mgnu-as
-мно-гну-ас
Згенеруйте (або не створюйте) код для асемблера GNU. Це значення за замовчуванням.

-mgnu-ld
-mno-gnu-ld
Згенеруйте (або не створюйте) код для компонувальника GNU. Це значення за замовчуванням.

-mno-pic
Згенеруйте код, який не використовує регістр глобальних покажчиків. Результат – не позиція
незалежний код і порушує IA-64 ABI.

-mvolatile-asm-stop
-mno-volatile-asm-stop
Генеруйте (або не робіть) стоповий біт безпосередньо перед і після нестабільних операторів asm.

-mregister-Name
-mno-реєстрові назви
Створити (чи ні) in, loc та з імена регістрів для регістрів із стеком. Це
може зробити висновок асемблера більш читабельним.

-mno-sdata
-msdata
Вимкніть (або ввімкніть) оптимізацію, яка використовує розділ малих даних. Це може бути корисним
для усунення помилок оптимізатора.

-mconstant-gp
Згенеруйте код, який використовує єдине значення глобального покажчика. Це корисно, коли
компіляція коду ядра.

-mauto-pic
Створіть код, який можна самостійно переміщувати. Це означає -mconstant-gp. Це корисно
при компіляції коду прошивки.

-minline-float-divide-min-latency
Згенеруйте код для вбудованих поділу значень з плаваючою комою, використовуючи мінімальну затримку
алгоритм.

-minline-float-divide-max-throughput
Згенеруйте код для вбудованого поділу значень з плаваючою комою, використовуючи максимальну пропускну здатність
алгоритм.

-mno-inline-float-divide
Не генеруйте вбудований код для поділу значень з плаваючою комою.

-minline-int-divide-min-latency
Згенеруйте код для вбудованого поділу цілих значень, використовуючи мінімальну затримку
алгоритм.

-minline-int-divide-max-throughput
Згенеруйте код для вбудованого поділу цілих значень, використовуючи максимальну пропускну здатність
алгоритм.

-mno-inline-int-divide
Не генеруйте вбудований код для поділу цілих значень.

-minline-sqrt-min-latency
Згенеруйте код для вбудованих квадратних коренів за допомогою алгоритму мінімальної затримки.

-minline-sqrt-max-throughput
Згенеруйте код для вбудованих квадратних коренів за допомогою алгоритму максимальної пропускної здатності.

-mno-inline-sqrt
Не генеруйте вбудований код для "sqrt".

-змішаний-божевільний
-мно-злитий-мадд
Генерувати (не)генерувати код, який використовує об’єднане множення/додавання або множення/віднімання
інструкції. За замовчуванням слід використовувати ці інструкції.

-mno-dwarf2-asm
-mdwarf2-asm
Не генеруйте (або робіть) код асемблера для інформації про налагодження номера рядка DWARF 2.
Це може бути корисно, якщо не використовується ассемблер GNU.

- борошнисті стоп-біти
-mno-early-stop-bits
Дозвольте розмістити стоп-біти раніше, ніж безпосередньо перед інструкцією that
спрацював стоп-біт. Це може покращити планування інструкцій, але не завжди
роби це.

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який не може використовувати розподільник регістрів. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-mtls-size=tls-розмір
Вкажіть бітовий розмір негайних зміщень TLS. Допустимі значення: 14, 22 і 64.

-mtune=тип процесора
Налаштуйте планування інструкцій для конкретного ЦП, дійсні значення ітан,
ітан1, милосердя, ітан2 та mckinley.

-milp32
-mlp64
Згенеруйте код для 32-розрядного або 64-розрядного середовища. 32-розрядне середовище встановлює int,
long і вказівник на 32 біти. 64-розрядне середовище встановлює значення int на 32 біти та long і
покажчик на 64 біта. Це спеціальні позначки HP-UX.

-mno-sched-br-data-spec
-msched-br-спец.даних
(Вимкнути/Увімкнути) спекулятивне планування даних перед перезавантаженням. Це призводить до генерації
інструкції «ld.a» та відповідні інструкції перевірки («ld.c» / «chk.a»). The
за замовчуванням — «вимкнути».

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis)Увімкнути спекулятивне планування даних після перезавантаження. Це призводить до генерації
інструкції «ld.a» та відповідні інструкції перевірки («ld.c» / «chk.a»). The
за замовчуванням — «увімкнути».

-Мно-Шед-Контроль
-msched-control-spec
(Вимкнути/Увімкнути) контроль спекулятивного планування. Ця функція доступна лише під час
планування регіону (тобто перед перезавантаженням). Це призводить до генерації "ld.s"
інструкції та відповідні інструкції перевірки «чк.с». За замовчуванням є
'вимкнути'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis) Дозволяє спекулятивне планування інструкцій, які залежать від даних
спекулятивні навантаження перед перезавантаженням. Це ефективно тільки при -msched-br-спец.даних
увімкнено. За замовчуванням — «включити».

-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis) Дозволяє спекулятивне планування інструкцій, які залежать від даних
спекулятивні навантаження після перезавантаження. Це ефективно тільки при -msched-ar-data-spec
увімкнено. За замовчуванням — «включити».

-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis) Дозволяє спекулятивне планування інструкцій, які залежать від
контролювати спекулятивні навантаження. Це ефективно тільки при -msched-control-spec включений.
За замовчуванням — «включити».

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Якщо ввімкнено, спекулятивні інструкції вибираються для розкладу, лише якщо їх немає
інші варіанти на даний момент. Це робить використання спекуляцій на основі даних набагато ширшим
консервативний. За замовчуванням — «вимкнути».

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Якщо ввімкнено, контрольно-спекулятивні інструкції вибираються для розкладу лише за наявності
на даний момент іншого вибору немає. Це змушує використовувати контрольні спекуляції значним чином
більш консервативний. За замовчуванням — «вимкнути».

-mno-ched-count-spec-in ratical-path
-msched-count-spec-in-critical-path
Якщо ввімкнено, спекулятивні залежності враховуються під час обчислення
пріоритети інструкцій. Це робить використання спекуляцій дещо більшим
консервативний. За замовчуванням — «вимкнути».

-msched-spec-ldc
Використовуйте просту перевірку спекуляцій даних. Цей параметр увімкнено за замовчуванням.

-msched-control-spec-ldc
Використовуйте просту перевірку для контрольних спекуляцій. Цей параметр увімкнено за замовчуванням.

-msched-stop-bits-after-every-cycle
Після кожного циклу під час планування ставте стоп-біт. Цей параметр увімкнено за замовчуванням.

-msched-fp-mem-deps-zero-cost
Припустимо, що сховища і навантаження з плаваючою комою навряд чи викличуть конфлікт, коли
поміщені в ту саму групу навчання. Цей параметр вимкнено за замовчуванням.

-msel-sched-dont-check-control-spec
Створіть перевірки для контрольних спекуляцій у вибірковому плануванні. Цей прапор є
за замовчуванням вимкнено.

-msched-max-memory-insns=max-insns
Обмежте кількість insns пам’яті на групу інструкцій, надавши менший пріоритет
наступні insns пам'яті намагаються запланувати в тій самій групі інструкцій.
Часто корисно для запобігання конфліктам банку кешу. Значення за замовчуванням – 1.

-msched-max-memory-insns-hard-limit
Встановлює ліміт, визначений за msched-max-memory-insns жорстке обмеження, що забороняє більше
ніж це число в групі інструкцій. В іншому випадку межа «м’яка», тобто
що при досягненні ліміту перевага надається операціям без пам’яті, а з пам’яттю
операції все ще можуть бути заплановані.

LM32 Опції

Ці -m параметри визначені для архітектури LatticeMico32:

-barrel-shift-enabled
Увімкнути інструкції щодо зміни бочки.

-mdivid-увімкнено
Увімкнути інструкції ділення та модуля.

-mmultiply-увімкнено
Увімкнути інструкції множення.

-msign-extend-enabled
Увімкнути інструкції щодо розширення знака.

-з підтримкою muser
Увімкнути визначені користувачем інструкції.

M32C Опції

-mcpu=ім'я
Виберіть ЦП, для якого буде створено код. ім'я може бути одним із r8c для R8C/Tiny
серія, m16c для серії M16C (до /60), м32 см для серії M16C/80, або m32c
для серії M32C/80.

-msim
Вказує, що програма буде запущена на симуляторі. Це викликає альтернативу
Бібліотека часу виконання, яку потрібно підключити, яка підтримує, наприклад, файловий ввод-вивод. Ви не повинні
використовуйте цю опцію під час створення програм, які працюватимуть на реальному обладнанні; ти повинен
надайте власну бібліотеку часу виконання для будь-яких необхідних функцій введення-виводу.

-memregs=номер
Вказує кількість псевдореєстрів на основі пам’яті, які GCC використовує під час генерації коду.
Ці псевдореєстри використовуються як справжні регістри, тому між ними існує компроміс
Здатність GCC вмістити код у доступні регістри та зниження продуктивності
використання пам'яті замість регістрів. Зверніть увагу, що всі модулі в програмі повинні бути
скомпільовано з тим самим значенням для цього параметра. Через це ви не повинні використовувати це
варіант із стандартними бібліотеками часу виконання GCC.

M32R/D Опції

Ці -m визначені параметри для архітектур Renesas M32R/D:

-m32r2
Згенеруйте код для M32R/2.

-m32rx
Згенеруйте код для M32R/X.

-m32r
Згенеруйте код для M32R. Це значення за замовчуванням.

-mmodel=мала
Припустимо, що всі об’єкти живуть у нижчих 16 МБ пам’яті (щоб їх адреси були
завантажено інструкцією "ld24") і припустимо, що всі підпрограми доступні за допомогою
інструкція «бл». Це значення за замовчуванням.

Адресність конкретного об’єкта можна встановити за допомогою атрибута «модель».

-mmodel=середній
Припустимо, що об’єкти можуть бути в будь-якому місці 32-бітового адресного простору (компілятор створює
інструкції "seth/add3" для завантаження їхніх адрес) і припустимо, що всі підпрограми є такими
доступний за допомогою інструкції "bl".

-mmodel=великий
Припустимо, що об’єкти можуть бути в будь-якому місці 32-бітового адресного простору (компілятор створює
інструкції "seth/add3" для завантаження їхніх адрес) і припускати, що підпрограми можуть бути не такими
доступний за допомогою інструкції "bl" (компілятор генерує набагато повільніше
послідовність інструкцій "seth/add3/jl").

-msdata=немає
Вимкніть використання невеликої області даних. Змінні поміщаються в один із ".data", ".bss" або
".rodata" (якщо не вказано атрибут "section"). Це значення за замовчуванням.

Невелика область даних складається з розділів ".sdata" і ".sbss". Об'єкти можуть бути
явно помістити в малу область даних з атрибутом "section", використовуючи один з них
розділи.

-msdata=sdata
Помістіть невеликі глобальні та статичні дані в область малих даних, але не генеруйте спеціальні
код для посилання на них.

-msdata=використання
Помістіть невеликі глобальні та статичні дані в область малих даних і створіть спеціальні
інструкції щодо посилання на них.

-G Num
Поставте глобальні та статичні об’єкти меншими або рівними Num байтів у невеликі дані або
Розділи BSS замість звичайних даних або розділів BSS. Значення за замовчуванням Num is
8. -msdata для параметра потрібно встановити один з sdata 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 включно.

-mno-flush-trap
Вказує, що кеш не може бути очищений за допомогою пастки.

-mflush-func=ім'я
Вказує назву функції операційної системи, яку потрібно викликати для очищення кешу. The
за замовчуванням _flush_cache, але виклик функції використовується лише якщо пастка недоступна.

-mno-flush-func
Вказує на відсутність функції ОС для очищення кешу.

M680x0 Опції

Це -m параметри, визначені для процесорів M680x0 і ColdFire. Налаштування за замовчуванням
залежать від того, яка архітектура була обрана під час налаштування компілятора; значення за замовчуванням
для найпоширеніших варіантів наведено нижче.

-березень=арка
Згенеруйте код для певної архітектури набору інструкцій M680x0 або ColdFire.
Допустимі значення арка для архітектури M680x0 є: 68000, 68010, 68020, 68030,
68040, 68060 та процесор32. Архітектури ColdFire вибираються відповідно до Freescale
Класифікація ISA і допустимі значення: ісаа, isaaplus, ізаб та Isac.

GCC визначає макрос "__mcfарка__" щоразу, коли він генерує код для ColdFire
ціль. The арка у цьому макросі є одним із - марш аргументи, наведені вище.

При спільному використанні, - марш та -mtune виберіть код, який працює на сімействі подібних
процесори, але вони оптимізовані для певної мікроархітектури.

-mcpu=центральний процесор
Згенеруйте код для конкретного процесора M680x0 або ColdFire. M680x0 центральний процесорє:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 та процесор32. ColdFire центральний процесорs
наведені в таблиці нижче, яка також класифікує процесори на сімейства:

Сім'я: -mcpu аргументація
51 : 51 51ac 51ag 51cn 51em 51JE 51jf 51jg 51jm 51mm 51qe 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 та процесор32. Мікроархітектури ColdFire: cfv1, cfv2, cfv3, cfv4 та
cfv4e.

Vous використання aussi можете оплатити -mtune=68020-40 для коду, який має працювати відносно добре на 68020,
68030 і 68040 цілей. -mtune=68020-60 схожий, але включає 68060 цілей як
добре. Ці два параметри вибирають ті самі рішення щодо налаштування, що й -m68020-40 та -m68020-60
відповідно.

GCC визначає макроси "__mcарка" і "__mcарка__" при налаштуванні на архітектуру 680x0
арка. Він також визначає "mcарка" хіба що -ансі або не-GNU -стандартний використовується варіант.
Якщо GCC налаштовується на діапазон архітектур, вибраних -mtune=68020-40 or
-mtune=68020-60, він визначає макроси для кожної архітектури в діапазоні.

GCC також визначає макрос "__mарх__" при налаштуванні на мікроархітектуру 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
Створення вихідних даних для CPU 520X ColdFire. Це значення за замовчуванням, коли компілятор
налаштовано для систем на базі 520X. Це еквівалентно -mcpu=5206, і є зараз
відхилено на користь цього варіанту.

Використовуйте цю опцію для мікроконтролера з ядром 5200, включаючи MCF5202, MCF5203,
MCF5204 і MCF5206.

-m5206e
Створення вихідних даних для CPU 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, І
тепер відкинуто на користь цього варіанту.

-m68020-40
Згенеруйте вихідні дані для 68040, не використовуючи жодної з нових інструкцій. Це призводить
у коді, який може працювати відносно ефективно на 68020/68881, 68030 або
68040. Згенерований код використовує інструкції 68881, які емульовано на
68040.

Опція еквівалентна -березень=68020 -mtune=68020-40.

-m68020-60
Згенеруйте вихідні дані для 68060, не використовуючи жодної з нових інструкцій. Це призводить
у коді, який може працювати відносно ефективно на 68020/68881, 68030 або
68040. Згенерований код використовує інструкції 68881, які емульовано на
68060.

Опція еквівалентна -березень=68020 -mtune=68020-60.

-mhard-float
-м68881
Створення інструкцій з плаваючою комою. Це значення за замовчуванням для 68020 і вище, і
для пристроїв ColdFire, які мають FPU. Він визначає макрос "__HAVE_68881__".
Цілі M680x0 і "__mcffpu__" на цілях ColdFire.

-msoft-float
Не генеруйте інструкції з плаваючою комою; замість цього використовуйте виклики бібліотеки. Це
за замовчуванням для цілей 68000, 68010 і 68832. Це також за замовчуванням для ColdFire
пристрої, які не мають FPU.

-mdiv
-мно-див
Генерувати (не генерувати) апаратні інструкції поділу та залишку ColdFire. Якщо
- марш використовується без -mcpu, за замовчуванням для архітектур ColdFire є "включено" і "вимкнено"
для архітектури M680x0. В іншому випадку значення за замовчуванням береться з цільового ЦП (або
ЦП за замовчуванням або той, який визначено -mcpu). Наприклад, за замовчуванням "вимкнено"
та цінності -mcpu=5206 і "включено" для -mcpu=5206e.

GCC визначає макрос "__mcfhwdiv__", коли цей параметр увімкнено.

-mкороткий
Вважайте, що тип "int" має ширину 16 біт, наприклад "short int". Додатково параметри
передані стеку також вирівнюються за 16-бітовою межею навіть для цілей, API яких
вимагає просування до 32-розрядної.

-мно-короткі
Не вважайте, що тип "int" має ширину 16 біт. Це значення за замовчуванням.

-mnobitfield
-mno-бітове поле
Не використовуйте інструкції бітового поля. The -м68000, -mcpu32 та -м5200 варіанти мають на увазі
-mnobitfield.

-мбітфілд
Використовуйте інструкції з бітовим полем. The -м68020 варіант передбачає -мбітфілд, Це
за замовчуванням, якщо ви використовуєте конфігурацію, розроблену для 68020.

-mrtd
Використовуйте іншу конвенцію про виклик функцій, в якій функції, які приймають фіксований
кількість аргументів повертається з інструкцією "rtd", яка виводить їх аргументи
під час повернення. Це зберігає одну інструкцію в абоненті, оскільки в цьому немає потреби
наведіть туди аргументи.

Ця умова виклику несумісна з умовою, яка зазвичай використовується в Unix, тому ви
не можна використовувати його, якщо вам потрібно викликати бібліотеки, скомпільовані за допомогою компілятора Unix.

Крім того, ви повинні надати прототипи функцій для всіх функцій, які беруть змінну
кількість аргументів (включаючи «printf»); інакше для генерується неправильний код
виклики цих функцій.

Крім того, якщо ви викликаєте функцію із занадто великою кількістю, результатом буде серйозно неправильний код
аргументи. (Як правило, додаткові аргументи нешкідливо ігноруються.)

Інструкція "rtd" підтримується 68010, 68020, 68030, 68040, 68060 і CPU32
процесори, але не 68000 чи 5200.

-mno-rtd
Не використовуйте умови виклику, вибрані за допомогою -mrtd. Це значення за замовчуванням.

-malign-int
-mno-align-int
Контролюйте, чи GCC вирівнює "int", "long", "long long", "float", "double" і "long
double" змінні на 32-бітовій межі (-malign-int) або 16-бітну межу
(-mno-align-int). Вирівнювання змінних за 32-бітними межами створює код, який запускається
дещо швидше на процесорах з 32-розрядними шинами за рахунок більшої пам'яті.

Увага! якщо ви використовуєте -malign-int switch, GCC вирівнює структури, що містять вищезазначені
типи відрізняються від більшості опублікованих специфікацій бінарного інтерфейсу програми
m68k.

-mpcrel
Використовуйте відносний до ПК режим адресації 68000 безпосередньо, замість використання глобального
офсетна таблиця. Наразі цей варіант має на увазі -fpic, що допускає щонайбільше 16-бітове зміщення
для ПК-відносної адресації. -fPIC наразі не підтримується -mpcrel, хоча
це може підтримуватися для процесорів 68020 і вище.

-mno-strict-align
-mstrict-align
Не припускайте, що невирівняні посилання на пам’ять обробляються системою.

-msep-дані
Створіть код, який дозволяє розташовувати сегмент даних в іншій області пам'яті
з текстового сегмента. Це дозволяє виконувати на місці в середовищі без
управління віртуальною пам'яттю. Цей варіант має на увазі -fPIC.

-mno-sep-data
Створіть код, який передбачає, що сегмент даних слідує за текстовим сегментом. Це
за замовчуванням.

- середня спільна бібліотека
Згенеруйте код, який підтримує спільні бібліотеки за допомогою методу ідентифікатора бібліотеки. Це дозволяє
для виконання на місці та спільних бібліотек у середовищі без віртуальної пам’яті
управління. Цей варіант має на увазі -fPIC.

-mno-id-shared-library
Створіть код, який не передбачає використання спільних бібліотек на основі ідентифікатора. Це
за замовчуванням.

-mshared-library-id=n
Вказує ідентифікаційний номер спільної бібліотеки на основі ідентифікатора, що компілюється.
Зазначення значення 0 генерує більш компактний код; вказуючи інші значення сил
виділення цього номера поточній бібліотеці, але це більше не простір або час
ефективніше, ніж пропускати цей варіант.

-mxgot
-mno-xgot
Створюючи незалежний від позиції код для ColdFire, згенеруйте код, який працює if
GOT має більше 8192 записів. Цей код більший і повільніший за код
створюється без цієї опції. На процесорах M680x0 ця опція не потрібна; -fPIC
вистачає.

GCC зазвичай використовує одну інструкцію для завантаження значень з GOT. Поки це є
відносно ефективний, він працює лише в тому випадку, якщо GOT менший за 64 тис. Будь-що
більше змушує компонувальник повідомляти про помилку, наприклад:

переміщення зрізане відповідно до: R_68K_GOT16O foobar

Якщо це станеться, вам слід перекомпілювати свій код за допомогою -mxgot. Тоді він повинен працювати з
дуже великі ГОТ. Однак код, згенерований за допомогою -mxgot є менш ефективним, оскільки він
приймає 4 інструкції, щоб отримати значення глобального символу.

Зауважте, що деякі компонувальники, включаючи новіші версії компоновщика GNU, можуть створювати
кілька GOT і сортування записів GOT. Якщо у вас є такий лінкер, то вам тільки знадобиться
to use -mxgot під час компіляції одного об’єктного файлу, який отримує доступ до більш ніж 8192 GOT
записи. Дуже мало хто робить.

Ці параметри не діють, якщо GCC не генерує незалежний від позиції код.

MCore Опції

Це -m параметри, визначені для процесорів Motorola M*Core.

-mhardlit
-мно-жорсткий
Вбудовані константи в потік коду, якщо це можна зробити двома інструкціями або менше.

-mdiv
-мно-див
Використовуйте інструкцію поділу. (Увімкнено за замовчуванням).

-mrelax-негайний
-мно-розслабитися-негайно
Дозволити негайні елементи довільного розміру в бітових операціях.

-mwide-bitfields
-mno-wide-bitfields
Завжди розглядайте бітові поля як розмір "int".

-m4byte-функції
-mno-4byte-функції
Примусово вирівняти всі функції за 4-байтовою межею.

-mcallgraph-дані
-mno-callgraph-data
Видавати інформацію про коллграф.

-mslow-байтів
-mno-slow-bytes
Віддавайте перевагу доступу до слова під час читання кількості байтів.

-mlittle-endian
-big-endian
Згенеруйте код для цілі з маленьким байтом.

-м210
-м340
Згенеруйте код для процесора 210.

-мно-лсім
Припустимо, що підтримка під час виконання була надана, і тому опустіть бібліотеку симулятора
(libsim.a) з командного рядка компонувальника.

-mstack-increment=розмір
Встановіть максимальну суму для однієї операції збільшення стека. Великі значення можуть
збільшення швидкодії програм, які містять функції, які потребують великої кількості
простір стека, але вони також можуть викликати помилку сегментації, якщо стек розширено
забагато. Значення за замовчуванням — 0x1000.

MeP Опції

-mabsdiff
Вмикає інструкцію "abs", яка є абсолютною різницею між двома регістрами.

-mall-opts
Вмикає всі додаткові інструкції ---середнє значення, множення, ділення, бітові операції,
провідний нуль, абсолютна різниця, мін/макс, кліп і насиченість.

- середній
Вмикає інструкцію "ave", яка обчислює середнє значення двох регістрів.

-based=n
Змінні розміру n за замовчуванням у розділ ".based" розміщуються байти або менше.
Базовані змінні використовують регістр $tp як базовий регістр, і існує обмеження в 128 байт
до розділу ".based".

-бітопс
Вмикає інструкції з бітової операції --- бітовий тест ("btstm"), встановити ("bsetm"), очистити
("bclrm"), invert ("bnotm") і test-and-set ("tas").

-mc=ім'я
Вибирає, в який розділ розміщуються константні дані. ім'я може бути крихітний, близькоабо далеко.

-mclip
Вмикає інструкцію «кліп». Зауважте, що -mclip не є корисним, якщо ви також
забезпечувати -ммінмакс.

-mconfig=ім'я
Вибирає одну з вбудованих конфігурацій ядра. Кожен чіп MeP має один або більше
модулі в ньому; кожен модуль має основний центральний процесор і різноманітні співпроцесори (за бажанням).
інструкції та периферійні пристрої. Надає інструмент "MeP-Integrator", який не входить до складу GCC
ці конфігурації за допомогою цієї опції; використання цієї опції те саме, що й використання всіх
відповідні параметри командного рядка. Конфігурація за замовчуванням дефолт.

-mcop
Вмикає інструкції співпроцесора. За замовчуванням це 32-розрядний співпроцесор. Примітка
що співпроцесор зазвичай увімкнено через -mconfig= варіант.

-mcop32
Вмикає інструкції 32-розрядного співпроцесора.

-mcop64
Вмикає інструкції 64-розрядного співпроцесора.

-mivc2
Вмикає планування IVC2. IVC2 — 64-розрядний співпроцесор VLIW.

-mdc
Спричиняє розміщення постійних змінних у розділі ".near".

-mdiv
Вмикає інструкції "div" і "divu".

-меб
Створення коду з великим порядком.

-мел
Згенеруйте код з маленьким порядком байтів.

-міо-леткі
Повідомляє компілятору, що будь-яка змінна, позначена атрибутом "io", має бути
вважається нестабільним.

-мл Призначає змінні розділу ".far" за замовчуванням.

-млеадз
Вмикає інструкцію "leadz" (провідний нуль).

-мм Призначає змінні розділу ".near" за замовчуванням.

-ммінмакс
Вмикає інструкції "min" і "max".

-Мульт
Вмикає інструкції множення та множення-нагромадження.

-mno-opts
Вимикає всі додаткові інструкції, увімкнені за допомогою -mall-opts.

- повторити
Вмикає інструкції "повторити" та "повторити", які використовуються для циклу з низьким рівнем накладних витрат.

-РС За умовчанням усі змінні переходять до розділу ".tiny". Зверніть увагу, що є a
Обмеження 65536 байт для цього розділу. Доступ до цих змінних використовує базу %gp
зареєструйтесь.

-мсатур
Вмикає інструкції щодо насичення. Зауважте, що компілятор наразі цього не робить
створювати їх самостійно, але ця опція включена для сумісності з іншими інструментами,
як ми".

-msdram
Зв’яжіть середовище виконання на основі SDRAM замість середовища виконання на основі ROM за замовчуванням.

-msim
Зв’яжіть бібліотеки часу виконання симулятора.

-мсімновець
Зв’яжіть бібліотеки часу виконання симулятора, виключаючи вбудовану підтримку для скидання та
вектори винятків і таблиці.

-mtf
Створює всі функції за замовчуванням до розділу ".far". Без цієї опції функціонує
за замовчуванням до розділу ".near".

-mtiny=n
Змінні, які є n байти або менше виділяються в розділ ".tiny". Ці
змінні використовують базовий регістр $gp. За замовчуванням для цього параметра є 4, але зверніть увагу на це
існує обмеження в 65536 байт для розділу ".tiny".

MicroBlaze Опції

-msoft-float
Використовуйте програмну емуляцію для плаваючої коми (за замовчуванням).

-mhard-float
Використовуйте апаратні інструкції з плаваючою комою.

-mmemcpy
Не оптимізуйте переміщення блоків, використовуйте «memcpy».

-mno-clearbss
Ця опція не підтримується. Використовуйте -fno-zero-initialized-in-bss замість цього.

-mcpu=тип процесора
Використовуйте функції та плануйте код для даного ЦП. Підтримувані значення знаходяться в
формат vX.YY.Z, Де X є основною версією, YY є другорядною версією, і Z is
код сумісності. Приклад значень v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.

-mxl-soft-mul
Використовуйте програмну емуляцію множення (за замовчуванням).

-mxl-soft-div
Використовуйте програмну емуляцію для поділу (за замовчуванням).

-mxl-barrel-shift
Використовуйте апаратний перемикач ствола.

-mxl-шаблон-порівняти
Використовуйте інструкції для порівняння шаблонів.

-msmall-ділить
Використовуйте оптимізацію пошуку таблиці для малих цілих поділень зі знаком.

-mxl-перевірка стеку
Ця опція не підтримується. Використовуйте -fstack-check замість цього.

-mxl-gp-opt
Використовуйте розділи ".sdata"/.sbss, що відповідають GP.

-mxl-множення-високий
Використовуйте вказівки множення на високе значення для високої частини множення 32x32.

-mxl-float-convert
Використовуйте апаратні інструкції перетворення з плаваючою комою.

-mxl-float-sqrt
Використовуйте апаратну інструкцію квадратного кореня з плаваючою комою.

-big-endian
Згенеруйте код для цілі з великим порядком.

-mlittle-endian
Згенеруйте код для цілі з маленьким байтом.

-mxl-змінити порядок
Використовуйте інструкції щодо зміни порядку (переміщення та зворотне завантаження/збереження байтів).

-mxl-mode-додаток-модель
Виберіть модель програми додаток-модель. Дійсними є моделі

виконуваний файл
звичайний виконуваний файл (за замовчуванням), використовує код запуску crt0.o.

xmdstub
для використання з інтрузивним налагодженням програмного забезпечення Xilinx Microprocessor Debugger (XMD).
агент під назвою xmdstub. Для цього використовується файл запуску crt1.o і встановлює початкову адресу
програму на 0x800.

завантажувач
для програм, які завантажуються за допомогою завантажувача. Ця модель використовує файл запуску
crt2.o який не містить векторного обробника скидання процесора. Це підходить
для передачі керування скиданням процесора на завантажувач, а не на
Додаток.

новаторів
для програм, які не потребують жодного з векторів MicroBlaze. Цей варіант
може бути корисним для програм, що працюють у межах програми моніторингу. Ця модель
використовує crt3.o як файл запуску.

варіант -xl-mode-додаток-модель є застарілим псевдонімом для -mxl-mode-додаток-модель.

MIPS Опції

-EB Створення коду з великим порядком.

-ТО Згенеруйте код з маленьким порядком байтів. Це значення за замовчуванням для mips*el-*-* конфігурації

-березень=арка
Згенеруйте код, який працює на арка, що може бути ім'ям загального MIPS ISA або
назва конкретного процесора. Назви ISA: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5
та mips64r6. Назви процесорів: 4 кк, 4km, 4 кп, 4ksc, 4kec, 4кем, 4 фотографії, 4тис,
5 кк, 5kf, 20 кк, 24 кк, 24KF2_1, 24KF1_1, 24kec, 24kef2_1, 24kef1_1, 34 кк, 34KF2_1,
34KF1_1, 34кн, 74 кк, 74KF2_1, 74KF1_1, 74KF3_2, 1004 кк, 1004KF2_1, 1004KF1_1,
loongson2e, loongson2f, loongson3a, M4K, M14K, m14kc, m14ke, m14kec, октеон, октеон+,
октеон2, октеон3, Оріон, p5600, 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
(це є, mips1 для 32-розрядних ABI і mips3 для 64-розрядних ABI).

Власний ланцюг інструментів Linux/GNU також підтримує це значення рідний, який обирає найкращих
варіант архітектури для хост-процесора. -березня = рідний не має ефекту, якщо це робить GCC
не розпізнає процесор.

В назвах процесорів кінцеве 000 можна скоротити як k (наприклад, -березень=r2k).
Префікси необов’язкові та vr може бути написано r.

Назви форми nF2_1 посилаються на процесори з тактовою частотою FPU на половину частоти
ядро, назви форми nF1_1 посилаються на процесори з тактовою частотою FPU
як ядро, так і назви форми nF3_2 посилаються на процесори з частотою FPU
3:2 по відношенню до ядра. З міркувань сумісності, nf приймається як a
синонім до nF2_1 в той час як nx та bfx прийняті як синоніми для nF1_1.

GCC визначає два макроси на основі значення цієї опції. Перший - "_MIPS_ARCH",
яка дає назву цільової архітектури у вигляді рядка. Другий має форму
"_MIPS_ARCH_фу", Де Foo це прописне значення "_MIPS_ARCH". Наприклад,
-березень=r2000 встановлює "_MIPS_ARCH" на "r2000" і визначає макрос "_MIPS_ARCH_R2000".

Зауважте, що макрос "_MIPS_ARCH" використовує імена процесора, наведені вище. В інших
слів, він має повний префікс і не скорочує 000 as k, У випадку з-
ABI, макрос називає вирішену архітектуру ("mips1" або "mips3"). Воно називає
архітектура за замовчуванням, коли немає - марш надається варіант.

-mtune=арка
Оптимізуйте для арка. Крім усього іншого, ця опція керує тим, як відображаються інструкції
заплановані, а також передбачувана вартість арифметичних операцій. Список арка величини
те саме, що і для - марш.

Якщо цей параметр не використовується, GCC оптимізує для процесора, зазначеного в - марш. По
використання - марш та -mtune разом можна створити код, який працює на a
сімейство процесорів, але оптимізувати код для одного конкретного члена цього сімейства.

-mtune визначає макроси "_MIPS_TUNE" і "_MIPS_TUNE_фу", які працюють у тому ж
спосіб як - марш описані вище.

-mips1
Дорівнює -march=mips1.

-mips2
Дорівнює -march=mips2.

-mips3
Дорівнює -march=mips3.

-mips4
Дорівнює -march=mips4.

-mips32
Дорівнює -march=mips32.

-mips32r3
Дорівнює -march=mips32r3.

-mips32r5
Дорівнює -march=mips32r5.

-mips32r6
Дорівнює -march=mips32r6.

-mips64
Дорівнює -march=mips64.

-mips64r2
Дорівнює -march=mips64r2.

-mips64r3
Дорівнює -march=mips64r3.

-mips64r5
Дорівнює -march=mips64r5.

-mips64r6
Дорівнює -march=mips64r6.

-mips16
-mno-mips16
Генерувати (не генерувати) код MIPS16. Якщо GCC націлений на MIPS32 або MIPS64
архітектури, він використовує MIPS16e ASE.

Генерацією коду MIPS16 також можна керувати на основі кожної функції за допомогою
атрибути "mips16" і "nomips16".

-mflip-mips16
Згенеруйте код MIPS16 для змінних функцій. Ця опція передбачена для регресії
тестування генерації змішаного коду MIPS16/не-MIPS16 і не призначений для звичайного
використовувати при компіляції коду користувача.

-minterlink-стиснутий
-mno-interlink-compressed
Вимагайте (не вимагайте), щоб код, який використовує стандартний (нестиснутий) MIPS ISA, був пов’язаним
сумісний з кодом MIPS16 і microMIPS, і навпаки.

Наприклад, код, який використовує стандартне кодування ISA, не може перейти безпосередньо до MIPS16 або
код microMIPS; він повинен використовувати або виклик, або непрямий стрибок. -minterlink-стиснутий
тому вимикає прямі стрибки, якщо GCC не знає, що ціль стрибка не є
стиснутий.

-minterlink-mips16
-mno-interlink-mips16
Псевдоніми -minterlink-стиснутий та -mno-interlink-compressed. Ці варіанти
попередніми microMIPS ASE і збережені для зворотної сумісності.

-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Згенеруйте код для заданого ABI.

Зверніть увагу, що EABI має 32-розрядний і 64-розрядний варіанти. GCC зазвичай генерує 64-розрядні
коду, коли ви вибираєте 64-розрядну архітектуру, але ви можете використовувати -mgp32 щоб отримати 32-бітний код
замість цього.

Інформацію про O64 ABI дивhttp://gcc.gnu.org/projects/mipso64-abi.html>.

GCC підтримує варіант o32 ABI, у якому регістри з плаваючою комою мають 64, а не
шириною більше 32 біт. Ви можете вибрати цю комбінацію за допомогою -mabi=32 -mfp64. Це ABI
покладається на інструкції "mthc1" і "mfhc1" і тому підтримується лише для
Процесори MIPS32R2, MIPS32R3 і MIPS32R5.

Призначення регістра для аргументів і значень, що повертаються, залишаються тими ж, але кожен
скалярне значення передається в одному 64-бітному регістрі, а не в парі 32-бітних
реєстри. Наприклад, повертаються скалярні значення з плаваючою комою $f0 тільки, а не а
$f0/$f1 пара. Набір збережених реєстрів викликів також залишається незмінним, оскільки парні
пронумеровані регістри подвійної точності зберігаються.

Підтримуються два додаткові варіанти o32 ABI для переходу з
Регістри від 32 до 64 біт. Це FPXX (-mfpxx) і FP64A (-mfp64
-мно-непарний-спрег). Розширення FPXX вимагає, щоб весь код виконувався правильно
при запуску з використанням 32-розрядних або 64-розрядних регістрів. Код може бути взаємопов'язаний з будь-яким
FP32 або FP64, але не обидва. Розширення FP64A схоже на розширення FP64, але
забороняє використання регістрів одинарної точності з непарними номерами. Це можна використовувати в
у поєднанні з режимом "FRE" FPU в процесорах MIPS32R5 і дозволяє як FP32
і код FP64A для взаємозв'язку та виконання в одному процесі без зміни режимів FPU.

-mabicalls
-мно-абікали
Згенеруйте (не генеруйте) код, який підходить для динамічних об’єктів у стилі SVR4.
-mabicalls є за замовчуванням для систем на основі SVR4.

-mshared
-мно-спільний
Генеруйте (не генеруйте) код, який повністю незалежний від позиції, і який може
тому підключатися до спільних бібліотек. Ця опція впливає лише на -mabicalls.

ВСІ -mabicalls код традиційно був незалежним від позиції, незалежно від опцій
як -fPIC та -fpic. Однак, як розширення, ланцюг інструментів GNU дозволяє виконувати виконувані файли
використовувати абсолютні доступи для локально прив’язуваних символів. Він також може використовувати коротший GP
послідовності ініціалізації та генерувати прямі виклики локально визначених функцій. Це
режим вибирається за допомогою -мно-спільний.

-мно-спільний залежить від binutils 2.16 або вище і генерує об'єкти, які тільки можуть бути
зв'язаний компоновщиком GNU. Однак цей варіант не впливає на ABI фіналу
виконуваний файл; це впливає лише на ABI переміщуваних об’єктів. Використання -мно-спільний
зазвичай робить виконувані файли меншими і швидшими.

-mshared є типовим.

-mplt
-мно-плт
Припустимо (не припускаємо), що статичні та динамічні компонувальники підтримують PLT та копіюють
переїзди. Ця опція впливає лише на -мно-спільний -mabicalls. Для n64 ABI це
без цього варіант не має ефекту -msym32.

Ви можете зробити -mplt за замовчуванням, налаштувавши GCC за допомогою --with-mips-plt. За замовчуванням
is -мно-плт інакше.

-mxgot
-mno-xgot
Підніміть (не піднімайте) звичайні обмеження на розмір глобальної таблиці зсувів.

GCC зазвичай використовує одну інструкцію для завантаження значень з GOT. Поки це є
відносно ефективний, він працює лише в тому випадку, якщо GOT менший за 64 тис. Будь-що
більше змушує компонувальник повідомляти про помилку, наприклад:

переміщення скорочено, щоб відповідати: R_MIPS_GOT16 foobar

Якщо це станеться, вам слід перекомпілювати свій код за допомогою -mxgot. Це працює з дуже
великі GOT, хоча код також менш ефективний, оскільки його потрібно три
інструкції для отримання значення глобального символу.

Зауважте, що деякі компонувальники можуть створювати кілька GOT. Якщо у вас є такий лінкер, ви
потрібно лише використовувати -mxgot коли один об’єктний файл отримує доступ до більш ніж 64 тис
вартість GOT записів. Дуже мало хто робить.

Ці параметри не діють, якщо GCC не генерує незалежний від позиції код.

-mgp32
Припустимо, що регістри загального призначення мають ширину 32 біти.

-mgp64
Припустимо, що регістри загального призначення мають ширину 64 біти.

-mfp32
Припустимо, що регістри з плаваючою комою мають ширину 32 біти.

-mfp64
Припустимо, що регістри з плаваючою комою мають ширину 64 біти.

-mfpxx
Не припускайте ширину регістрів з плаваючою комою.

-mhard-float
Використовуйте інструкції співпроцесора з плаваючою комою.

-msoft-float
Не використовуйте інструкції співпроцесора з плаваючою комою. Реалізація з плаваючою комою
обчислення з використанням викликів бібліотеки.

-mno-float
Дорівнює -msoft-float, але додатково стверджує, що програма, що компілюється
не виконує жодних операцій з плаваючою комою. Наразі ця опція підтримується
лише за допомогою деяких конфігурацій MIPS, де можна вибрати спеціальний набір
бібліотеки, які не мають усієї підтримки з плаваючою комою (включаючи, наприклад,
формати пункту "printf"). Якщо код скомпільовано з -mno-float випадково містить
операцій з плаваючою комою, ймовірно, виникне збій під час з'єднання або виконання.

-msingle-float
Припустимо, що співпроцесор з плаваючою комою підтримує лише операції одинарної точності.

-mdouble-float
Припустимо, що співпроцесор з плаваючою комою підтримує операції подвійної точності. Це
є типовим.

-modd-spreg
-мно-непарний-спрег
Увімкнути використання регістрів з плаваючою комою з непарними номерами одинарної точності для o32
ABI. Це значення за замовчуванням для процесорів, які, як відомо, підтримують ці регістри.
При використанні o32 FPXX ABI, -мно-непарний-спрег встановлено за замовчуванням.

-mabs=2008
-mabs = спадщина
Ці параметри керують обробкою спеціального не-число (NaN) IEEE 754
дані з плаваючою комою з "abs.fmt" і «нег.fmt" інструкції до машини.

За замовчуванням або коли -mabs = спадщина Використовується застаріла обробка. У цьому
у випадку, якщо ці інструкції вважаються арифметичними, і уникати їх при правильному виконанні
є обов’язковим, а вхідним операндом може бути NaN. Довша послідовність інструкцій
який маніпулює бітом знака дату з плаваючою комою вручну використовується замість цього, якщо
-фінітна-математична також вказано варіант.

Команда -mabs=2008 Опція вибирає обробку IEEE 754-2008. В даному випадку ці
інструкції вважаються неарифметичними і, отже, працюють правильно у всіх
випадки, зокрема, коли вхідним операндом є NaN. Ці інструкції
тому завжди використовуються для відповідних операцій.

-mnan=2008
-mnan=спадщина
Ці параметри керують кодуванням спеціального не-число (NaN) IEEE 754
дані з плаваючою комою.

Команда -mnan=спадщина параметр вибирає застаріле кодування. У цьому випадку тихі NaNs (qNaNs)
позначаються першим бітом їхнього кінцевого значення, а поле дорівнює 0, тоді як
сигнальні NaN (sNaNs) позначаються першим бітом їхнього кінцевого значення та
поле дорівнює 1.

Команда -mnan=2008 параметр вибирає кодування IEEE 754-2008. У цьому випадку qNaN є
позначаються першим бітом їхнього кінцевого значення, а поле дорівнює 1, тоді як sNaN
позначаються першим бітом їхнього кінцевого значення, а поле дорівнює 0.

За замовчуванням - -mnan=спадщина якщо GCC не налаштовано з --with-nan=2008.

-mllsc
-mno-llsc
Використовувати (не використовувати) ll, sc та синхронізувати інструкції для реалізації вбудованої атомної пам'яті
функції. Якщо жодна з опцій не вказана, GCC використовує інструкції, якщо ціль
архітектура їх підтримує.

-mllsc корисно, якщо середовище виконання може емулювати інструкції та -mno-llsc
може бути корисним під час компіляції для нестандартних ISA. Ви можете зробити будь-який варіант
за замовчуванням, налаштувавши GCC за допомогою --with-llsc та --без-llsc відповідно.
--with-llsc є стандартним для деяких конфігурацій; дивіться інсталяційну документацію
for details.

-mdsp
-мно-дсп
Використовуйте (не використовуйте) версію 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-розрядного коду та потребує апаратної підтримки з плаваючою комою
включений.

-mips3d
-mno-mips3d
Використовуйте (не використовуйте) MIPS-3D ASE. Варіант -mips3d мається на увазі -неповноцінний-неодружений.

-mmicromips
-mno-micromips
Генерувати (не генерувати) код microMIPS.

Генерацією коду MicroMIPS можна також керувати на основі кожної функції за допомогою
атрибути "micromips" і "nomicromips".

- ммт
-мно-мт
Використовуйте (не використовуйте) інструкції MT Multithreading.

-mmcu
-мно-мцу
Використовуйте (не використовуйте) інструкції MIPS MCU ASE.

-мева
-мно-ева
Використовуйте (не використовуйте) інструкції MIPS Enhanced Virtual Addressing.

-mvirt
-мно-вірт
Використовуйте (не використовуйте) інструкції для програми віртуалізації MIPS.

-mxpa
-mno-xpa
Використовуйте (не використовуйте) інструкції MIPS eXtended Physical Address (XPA).

-mlong64
Змусити "довгі" типи мати ширину 64 біта. Побачити -mlong32 для пояснення дефолту
і спосіб визначення розміру покажчика.

-mlong32
Змусити типи "long", "int" і вказівники мати ширину 32 біти.

Розмір за замовчуванням "int", "long" і покажчиків залежить від ABI. Всі
підтримувані ABI використовують 32-розрядні "int". n64 ABI використовує 64-розрядні "long", як і 64-розрядні
EABI; інші використовують 32-розрядні "довгі". Вказівники мають такий самий розмір, як "довгі" або "
такого ж розміру, як і цілі регістри, залежно від того, що менше.

-msym32
-mno-sym32
Припустимо (не припускаємо), що всі символи мають 32-бітові значення, незалежно від вибраного
ABI. Ця опція корисна в поєднанні з -mabi=64 та -мно-абікали Тому що це
дозволяє GCC генерувати коротші та швидші посилання на символічні адреси.

-G Num
Помістіть визначення зовнішніх даних у невеликий розділ даних, якщо цих даних немає
більше, ніж Num байтів. GCC може потім генерувати більш ефективний доступ до даних; побачити
-mgpopt for details.

За умовчанням -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 -mgpopt та Спосіб посилання а
змінна Кожен що не більше ніж Num байтів, ви повинні переконатися в цьому Кожен розміщено
у невеликому розділі даних. Якщо Кожен визначається іншим модулем, ви повинні або скомпілювати
що модуль з досить високим -G встановлення або додавання атрибута "section". Кожен's
визначення. Якщо Кожен є звичайним, ви повинні зв'язати програму з досить високим -G
установка.

Найпростіший спосіб задовольнити ці обмеження – зібрати та зв’язати кожен модуль
з такою ж -G варіант. Однак ви можете створити бібліотеку, яка підтримує
кілька різних обмежень малих даних. Ви можете зробити це, зібравши бібліотеку з
найвища підтримувана -G налаштування та додатково використання -mno-extern-sdata зупинити
бібліотеку від припущень щодо даних, визначених ззовні.

-mgpopt
-mno-gpopt
Використовуйте (не використовуйте) доступи щодо GP для символів, які, як відомо, містяться в невеликих даних
розділ; побачити -G, -mlocal-sdata та -mextern-sdata. -mgpopt є стандартним для всіх
конфігурації

-mno-gpopt корисний у випадках, коли регістр $gp може не містити значення
"_gp". Наприклад, якщо код є частиною бібліотеки, яка може використовуватися під час завантаження
monitor, програми, які викликають підпрограми монітора завантаження, передають невідоме значення в $gp. (В
У таких ситуаціях зазвичай компілюється сам монітор завантаження -G0.)

-mno-gpopt мається на увазі -mno-local-sdata та -mno-extern-sdata.

-вбудовані дані
-mno-вбудованих-даних
Якщо можливо, спочатку розподіліть змінні до розділу даних лише для читання, а потім у розділі
невеликий розділ даних, якщо це можливо, інакше в даних. Це дає трохи повільніший код
ніж за замовчуванням, але зменшує обсяг оперативної пам’яті, необхідної під час виконання, і, таким чином, може
бути кращим для деяких вбудованих систем.

-muninit-const-in-rodata
-mno-uninit-const-in-rodata
Помістіть неініціалізовані змінні "const" у розділ даних лише для читання. Цей варіант є
має значення лише в поєднанні з -вбудовані дані.

-mcode-readable=установка
Укажіть, чи може GCC генерувати код, який читає з виконуваних розділів. Існує
три можливі налаштування:

-mcode-readable=так
Інструкції можуть вільно отримувати доступ до виконуваних розділів. Це налаштування за замовчуванням.

-Mcode-readable = pcrel
MIPS16 інструкції щодо завантаження ПК можуть отримати доступ до виконуваних розділів, але інші
інструкції не повинні цього робити. Ця опція корисна для процесорів 4KSc і 4KSd
коли код TLB має біт заборони читання. Це також корисно для процесорів
який можна налаштувати на подвійний інтерфейс SRAM інструкцій/даних і що,
як і M4K, автоматично перенаправляє навантаження, пов’язані з ПК, на оперативну пам’ять інструкцій.

-mcode-readable=ні
Інструкції не повинні мати доступ до виконуваних розділів. Ця опція може бути корисною на
цілі, які налаштовані на подвійний інтерфейс SRAM інструкції/дані, але
що (на відміну від M4K) не автоматично перенаправляє навантаження, пов’язані з ПК, на
інструкційна оперативна пам'ять.

-msplit-адреси
-mno-split-адреси
Увімкнути (вимкнути) використання операторів переміщення ассемблера "%hi()" і "%lo()". Це
варіант замінено на -mexplicit-relocs але зберігається для зворотного
Сумісність.

-mexplicit-relocs
-mno-explicit-relocs
Використовуйте (не використовуйте) оператори переміщення асемблера під час роботи з символічними адресами.
Альтернатива, обрана -mno-explicit-relocs, замість цього використовувати макроси асемблера.

-mexplicit-relocs є за замовчуванням, якщо GCC був налаштований на використання асемблера, який
підтримує операторів переміщення.

-mcheck-zero-division
-мно-перевірка-нуль-ділення
Уловити (не захопити) на ціле ділення на нуль.

За замовчуванням - -mcheck-zero-division.

-mрозділяти-пастки
-mdivide-breaks
Системи MIPS перевіряють поділ на нуль, генеруючи або умовну пастку, або a
інструкція перервати. Використання пасток призводить до меншого розміру коду, але підтримується лише в MIPS
II і пізніше. Крім того, деякі версії ядра Linux мають помилку, яка запобігає захвату
від генерування належного сигналу ("SIGFPE"). Використовуйте -mрозділяти-пастки допускати умовні
пастки на архітектурах, які їх підтримують і -mdivide-breaks змусити використання
перерви.

Зазвичай за замовчуванням -mрозділяти-пастки, але це можна змінити під час налаштування
використання --with-divide=розриви. Перевірку ділення на нуль можна повністю вимкнути за допомогою
-мно-перевірка-нуль-ділення.

-mmemcpy
-mno-memcpy
Примусово (не примусово) використання «memcpy» для нетривіальних переміщень блоків. За замовчуванням є
-mno-memcpy, що дозволяє GCC вставляти більшість копій постійного розміру.

-mlong-дзвінки
-mno-long-cales
Вимкніть (не вимикайте) використання інструкції «jal». Виклик функцій за допомогою "jal"
є більш ефективним, але вимагає, щоб абонент і абонент мали однакові 256 мегабайт
сегмент.

Цей параметр не впливає на код abicalls. За замовчуванням є -mno-long-cales.

-ммад
-мно-божевільний
Увімкнути (вимкнути) використання інструкцій "mad", "madu" і "mul", як передбачено
R4650 ISA.

- mimadd
-mno-imadd
Увімкнути (вимкнути) використання цілочисельних інструкцій "madd" і "msub". За замовчуванням є
- mimadd на архітектурах, які підтримують "madd" і "msub", за винятком 74k
архітектури, де було виявлено, що вона генерує повільніший код.

-змішаний-божевільний
-мно-злитий-мадд
Увімкнути (вимкнути) використання інструкцій множення та накопичення з плаваючою комою, коли вони
доступні. За замовчуванням є -змішаний-божевільний.

На CPU R8000, коли використовуються інструкції множення-нагромадження, проміжне значення
продукт розраховується з нескінченною точністю і не підлягає змиву FCSR
Нульовий біт. За деяких обставин це може бути небажаним. На інших процесорах
результат чисельно ідентичний еквівалентному обчисленню з використанням роздільного множення,
інструкції додавання, віднімання та заперечення.

-nocpp
Скажіть ассемблеру MIPS не запускати свій препроцесор над файлами ассемблера користувача (за допомогою a
.s суфікс) при їх складанні.

-mfix-24k
-mno-fix-24k
Усуньте помилку 24K E48 (втрачені дані про магазини під час поповнення). Обхідні шляхи
реалізуються асемблером, а не GCC.

-mfix-r4000
-mno-fix-r4000
Обійти певні помилки ЦП R4000:

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

- Подвійне слово або зсув змінної можуть дати неправильний результат, якщо вони виконуються під час
виконується ціле множення.

- Цілочисельне ділення може дати неправильний результат, якщо воно розпочато в інтервалі затримки a
взята гілка або стрибок.

-mfix-r4400
-mno-fix-r4400
Обійти певні помилки ЦП R4400:

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

-mfix-r10000
-mno-fix-r10000
Обійти певні помилки в 10000 рупій:

- Послідовності "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-barrier=установка
Укажіть, чи повинен GCC вставляти бар’єри кешу, щоб уникнути побічних ефектів
спекуляції на процесорах R10K.

Як і багато процесорів, R10K намагається передбачити результат умовного
гілки і спекулятивно виконує інструкції з «взятої» гілки. Це пізніше
скасовує ці інструкції, якщо прогнозований результат неправильний. Однак на R10K,
навіть скасовані інструкції можуть мати побічні ефекти.

Ця проблема стосується лише сховищ ядра та, залежно від системи, завантаження ядра.
Як приклад, спекулятивно виконане сховище може завантажити цільову пам'ять у кеш
і позначте рядок кешу як брудний, навіть якщо згодом саме сховище буде перервано. Якщо DMA
операція записує в ту саму область пам'яті перед очищенням "брудного" рядка
кешовані дані перезаписують дані DMA. Повну інформацію дивіться у посібнику з процесора R10K
опис, включаючи інші потенційні проблеми.

Один обхідний шлях – вставляти інструкції бар’єру кешу перед кожним доступом до пам’яті
може бути виконано спекулятивно, і це може мати побічні ефекти, навіть якщо буде перервано.
-mr10k-cache-barrier=установка контролює виконання GCC цього обхідного шляху. Це
передбачає, що перерваний доступ до будь-якого байту в наступних регіонах не має сторони
ефекти:

1. пам'ять, яку займає кадр стека поточної функції;

2. пам'ять, зайнята вхідним аргументом стека;

3. пам'ять, зайнята об'єктом з адресою постійної часу зв'язку.

Ядро несе відповідальність за забезпечення спекулятивного доступу до цих регіонів
дійсно безпечні.

Якщо програма введення містить оголошення функції, наприклад:

void foo (пустота);

тоді реалізація "foo" повинна дозволяти виконувати "j foo" і "jal foo".
спекулятивно. GCC дотримується цього обмеження для функцій, які він сам компілює. Це
очікує, що функції, які не є GCC (наприклад, рукописний код зборки), зроблять те саме.

Опція має три форми:

-mr10k-cache-barrier=load-store
Вставте бар’єр кешу перед завантаженням або збереженням, яке може бути виконано спекулятивно
і це може мати побічні ефекти, навіть якщо перервано.

-mr10k-cache-barrier=зберігати
Вставте бар’єр кешу перед сховищем, який може бути виконаний спекулятивно і
які можуть мати побічні ефекти навіть у разі переривання.

-mr10k-cache-barrier=немає
Вимкніть вставку бар’єрів кешу. Це налаштування за замовчуванням.

-mflush-func=функц
-mno-flush-func
Вказує функцію, яку потрібно викликати, щоб очистити кеш I та D або не викликати жодної такої
функція. У разі виклику функція повинна приймати ті самі аргументи, що й загальна
"_flush_func", тобто адреса діапазону пам'яті, для якого виконується кеш
flushed, розмір діапазону пам’яті та число 3 (щоб очистити обидва кеші). The
за замовчуванням залежить від цільового GCC, для якого було налаштовано, але зазвичай це й те, і інше
"_flush_func" або "__cpu_flush".

mbranch-cost=Num
Приблизно встановіть вартість гілок Num «прості» інструкції. Ця вартість становить лише а
евристичний і не гарантує отримання послідовних результатів у всіх випусках. Нуль
вартість надмірно вибирає значення за замовчуванням, яке базується на -mtune установка.

- імовірно, що гілка
-мно-гілка-ймовірно
Увімкнути або вимкнути використання інструкцій Branch Likely, незалежно від значення за замовчуванням для
обрана архітектура. За замовчуванням інструкції Branch ймовірно можуть бути створені, якщо
вони підтримуються обраною архітектурою. Виняток становить для MIPS32 і
архітектури та процесори MIPS64, які реалізують ці архітектури; для тих,
Відгалуження Імовірні інструкції не генеруються за замовчуванням, оскільки MIPS32 і
Архітектура MIPS64 спеціально не підтримує їх використання.

-mfp-виключення
-mno-fp-винятки
Вказує, чи ввімкнено винятки FP. Це впливає на те, як інструкції FP
заплановано для деяких процесорів. За замовчуванням увімкнено винятки FP.

Наприклад, на SB-1, якщо винятки FP вимкнені, і ми випромінюємо 64-розрядні
коду, то ми можемо використовувати обидва канали FP. В іншому випадку ми можемо використовувати лише одну трубу FP.

-mvr4130-вирівняти
-mno-vr4130-вирівняти
Конвеєр VR4130 є двостороннім суперскалярним, але може видавати лише дві інструкції
разом, якщо перший вирівняний по 8 байтів. Коли цей параметр увімкнено, GCC вирівнюється
пар інструкцій, які, на його думку, мають виконуватися паралельно.

Ця опція діє лише при оптимізації для VR4130. Зазвичай він створює код
швидше, але за рахунок збільшення. Він увімкнено за замовчуванням на
рівень оптимізації -О3.

-msynci
-мно-син
Увімкнути (вимкнути) генерацію інструкцій "synci" для архітектур, які це підтримують.
Інструкції "synci" (якщо ввімкнено) генеруються, коли "__builtin___clear_cache"
складено.

Цей параметр за замовчуванням -мно-син, але значення за замовчуванням можна змінити, налаштувавши
GCC с -із синці.

Під час компіляції коду для однопроцесорних систем, як правило, безпечно використовувати "synci".
Однак у багатьох багатоядерних (SMP) системах це не робить інструкцію недійсною
кешується на всіх ядрах і може призвести до невизначеної поведінки.

-mrelax-pic-дзвінки
-mno-relax-pic-дзвінки
Спробуйте перетворити дзвінки PIC, які зазвичай надсилаються через реєстр $25, на прямі дзвінки.
Це можливо лише в тому випадку, якщо компонувальник може розв’язати пункт призначення під час з’єднання та якщо
пункт призначення знаходиться в межах досяжності для прямого виклику.

-mrelax-pic-дзвінки є за замовчуванням, якщо GCC був налаштований на використання асемблера та a
компонувальник, який підтримує директиву збірки ".reloc" і -mexplicit-relocs В
ефект. З -mno-explicit-relocs, ця оптимізація може бути виконана за допомогою
ассемблер і компонувальник окремо без допомоги компілятора.

-mmcount-ra-адреса
-mno-mcount-ra-адреса
Видавати (не випускати) код, який дозволяє "_mcount" змінювати повернення функції, що викликає
адреса. Якщо ввімкнено, цей параметр розширює звичайний інтерфейс "_mcount" новим
ra-адреса параметр, який має тип "intptr_t *" і передається в регістр $12.
Потім "_mcount" може змінити адресу повернення, виконавши обидві дії:

* Повернення нової адреси в реєстрі $31.

* Зберігання нової адреси в "*ra-адреса", Якщо ra-адреса є ненульовим.

За замовчуванням - -mno-mcount-ra-адреса.

MMIX Опції

Ці параметри визначені для MMIX:

-mlibfuncs
-mno-libfuncs
Вкажіть, що компілюються внутрішні бібліотечні функції, передаючи всі значення
реєстри, незалежно від розміру.

-мепсилон
-мно-епсилон
Створіть інструкції порівняння з плаваючою комою, які порівнюють відносно "rE"
Регістр іпсілон.

-mabi=mmixware
-mabi=gnu
Згенеруйте код, який передає параметри функції та повертає значення, які (у виклику
функція) розглядаються як регістри $0 і вище, на відміну від GNU ABI, який використовує global
реєструє $231 і вище.

-mzero-розширити
-mno-zero-extender
Під час зчитування даних із пам’яті розміром менше 64 біт використовуйте (не використовуйте) нульовий
розширення інструкцій завантаження за замовчуванням, а не розширення знаків.

-mknuthdiv
-мно-кнутдів
Нехай результат ділення, що дає остачу, має той самий знак, що й дільник.
За умовчанням, -мно-кнутдів, знак залишку слід за знаком
дивіденд. Обидва методи арифметично дійсні, останній майже виключно
використаний

-mtolevel-symbols
-mno-tolevel-symbols
До початку (не до початку) a : до всіх глобальних символів, тож можна використовувати код збірки
з директивою складання "PREFIX".

-melf
Згенеруйте виконуваний файл у форматі ELF, а не за замовчуванням ммо формат, який використовується
mmmix тренажер.

-mbranch-передбачити
-мно-гілка-передбачити
Використовуйте (не використовуйте) інструкції ймовірного розгалуження, коли передбачено статичне розгалуження
вказує на ймовірне відділення.

-бази-адреси
-mno-base-адреси
Генерувати (не генерувати) код, який використовує база адреси. Використання базової адреси
автоматично генерує запит (обробляється асемблером і компонувальником) для a
константу, яку потрібно встановити в глобальному реєстрі. Регістр використовується для однієї або кількох баз
адреси запитів у діапазоні від 0 до 255 від значення, що зберігається в реєстрі. The
зазвичай призводить до короткого і швидкого коду, але кількість різних елементів даних, які
може бути вирішено обмежено. Це означає, що програма, яка використовує багато статичних даних
може вимагати -mno-base-адреси.

-msingle-exit
-мно-одновихідні
Примусово (не примусово) згенерований код мати єдину точку виходу в кожній функції.

MN10300 Опції

Ці -m параметри визначені для архітектур Matsushita MN10300:

-mmult-помилка
Згенеруйте код, щоб уникнути помилок в інструкціях множення для процесорів MN10300.
Це значення за замовчуванням.

-mno-mult-bug
Не генеруйте код, щоб уникнути помилок в інструкціях множення для MN10300
процесори

-мама33
Згенеруйте код за допомогою функцій, характерних для процесора AM33.

-mno-am33
Не генеруйте код за допомогою функцій, характерних для процесора AM33. Це
за замовчуванням.

-мам33-2
Згенеруйте код за допомогою функцій, характерних для процесора AM33/2.0.

-мама34
Згенеруйте код за допомогою функцій, характерних для процесора AM34.

-mtune=тип процесора
Використовуйте тимчасові характеристики вказаного типу ЦП під час планування інструкцій.
Це не змінює цільовий тип процесора. Тип ЦП має бути одним із
Mn10300, am33, ранку 33-2 вечора or am34.

-mreturn-pointer-on-d0
Створюючи функцію, яка повертає покажчик, повертайте покажчик як у "a0", так і в
"d0". В іншому випадку покажчик повертається тільки в "a0" і намагається викликати такий
функції без прототипу призводять до помилок. Зауважте, що цей параметр увімкнено
за замовчуванням; використовувати -mno-покажчик-повернення-на-d0 , щоб вимкнути його.

-mno-crt0
Не створюйте посилання в об’єктному файлі ініціалізації під час виконання C.

- розслабитися
Вкажіть компоновщику, що він повинен виконати перехід оптимізації релаксації
скорочувати розгалуження, виклики та абсолютні адреси пам'яті. Цей варіант має тільки ефект
при використанні в командному рядку для останнього кроку посилання.

Цей параметр унеможливлює символічне налагодження.

-mliw
Дозвольте компілятору створити Довго Інструкція слово інструкції, якщо метою є
AM33 або пізніше. Це значення за замовчуванням. Цей параметр визначає макрос препроцесора
"__LIW__".

-mnoliw
Не дозволяйте компілятору генерувати Довго Інструкція слово інструкції. Цей варіант
визначає макрос препроцесора "__NO_LIW__".

-msetlb
Дозвольте компілятору створити файл SETLB та LCC інструкції, якщо метою є
AM33 або пізніше. Це значення за замовчуванням. Цей параметр визначає макрос препроцесора
"__SETLB__".

-mnosetlb
Не дозволяйте компілятору генерувати SETLB or LCC інструкції. Цей параметр визначає
макрос препроцесора "__NO_SETLB__".

Moxie Опції

-меб
Створення коду з великим порядком. Це значення за замовчуванням для мокси-*-* конфігурації

-мел
Згенеруйте код з маленьким порядком байтів.

-mmul.x
Згенеруйте інструкції mul.x та umul.x. Це значення за замовчуванням для моксибокс-*-*
конфігурації

-mno-crt0
Не створюйте посилання в об’єктному файлі ініціалізації під час виконання C.

MSP430 Опції

Ці параметри визначені для MSP430:

-masm-hex
Змусити вихід збірки завжди використовувати шістнадцяткові константи. Зазвичай такі константи підписуються
десяткові, але ця опція доступна для тестування та/або естетичних цілей.

-mmcu=
Виберіть MCU для націлювання. Це використовується для створення символу препроцесора C на основі
ім'я MCU, перетворене у верхній регістр і попередньо і після фіксованого за допомогою __. Це в свою чергу
використовується в msp430.h файл заголовка, щоб вибрати додатковий заголовок, специфічний для MCU
файлу.

Параметр також встановлює для використання ISA. Якщо ім’я MCU відоме лише
підтримувати 430 ISA, тоді це вибрано, інакше вибирається 430X ISA. А
загальна назва MCU msp430 також можна використовувати для вибору 430 ISA. Так само
родової msp430x Назва MCU вибирає 430X ISA.

Крім того, до командного рядка компоновщика додається спеціальний для MCU скрипт компоновника. The
Ім'я сценарію - це назва MCU з .ld додається. Таким чином уточнюючи -mmcu = xxx on
ПКУ командний рядок визначає символ препроцесора C "__XXX__" і викликає компонувальник
щоб шукати скрипт під назвою xxx.ld.

Ця опція також передається асемблеру.

-mcpu=
Визначає ISA для використання. Прийняті значення є msp430, msp430x та msp430xv2, це
опція не підтримується. The -mmcu= параметр слід використовувати для вибору ISA.

-msim
Посилання на бібліотеки часу виконання симулятора та скрипт компоновника. Замінює будь-які сценарії, які
буде обрано -mmcu= варіант.

-великий
Використовуйте адресацію великої моделі (20-розрядні покажчики, 32-розрядні "size_t").

-msmall
Використовуйте адресацію малої моделі (16-розрядні покажчики, 16-бітовий "size_t").

- розслабитися
Ця опція передається асемблеру та компоновщику і дозволяє компонувальнику працювати
певні оптимізації, які неможливо виконати до останнього посилання.

mhwmult=
Описує тип апаратного забезпечення, який підтримується ціль. Прийняті значення є
ніхто без апаратного множення, 16bit для оригінального 16-розрядного множення підтримується
ранніми MCU. 32bit для 16/32-розрядного множення, яке підтримується пізнішими MCU та серія f5
для 16/32-розрядного множення, яке підтримується мікроконтролерами серії F5. Значення автоматичний також може бути
дано. Це говорить GCC вивести підтримку апаратного множення на основі імені MCU
надані -mmcu варіант. Якщо ні -mmcu тоді вказується параметр 32bit апаратні засоби
передбачається множинна підтримка. автоматичний це налаштування за замовчуванням.

Апаратне множення зазвичай виконується шляхом виклику бібліотечної процедури. Це рятує
простір у згенерованому коді. При складанні на -О3 або вище, однак апаратне забезпечення
множник викликається вбудований. Це робить код більшим, але швидшим.

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

- minrt
Увімкнути використання мінімального середовища виконання - без статичних ініціализаторів або
конструктори. Це призначено для пристроїв з обмеженою пам’яттю. Компілятор включає
спеціальні символи в деяких об’єктах, які повідомляють компоновщику та середовищі виконання, які фрагменти коду
не вимагається.

NDS32 Опції

Ці параметри визначені для реалізацій NDS32:

-big-endian
Створення коду в режимі великого ланцюга.

-mlittle-endian
Створення коду в режимі малого байта.

-mreduced-regs
Використовуйте регістри зі зменшеним набором для виділення регістрів.

-mfull-regs
Використовуйте повні регістри для виділення регістрів.

-mcmov
Створіть умовні інструкції переміщення.

-mno-cmov
Не генеруйте умовні інструкції переміщення.

-mperf-ext
Створіть інструкції з розширення продуктивності.

-mno-perf-ext
Не створюйте інструкції з розширення продуктивності.

-mv3push
Згенеруйте інструкції push3/pop25 v25.

-mno-v3push
Не генеруйте інструкції v3 push25/pop25.

-m16-біт
Згенеруйте 16-розрядні інструкції.

-mno-16-біт
Не генеруйте 16-розрядні інструкції.

-misr-vector-size=Num
Вкажіть розмір кожного вектора переривання, який має бути 4 або 16.

-mcache-block-size=Num
Вкажіть розмір кожного блоку кешу, який має бути 2 від 4 до 512.

-березень=арка
Вкажіть назву цільової архітектури.

-mcmodel=код-модель
Встановіть для моделі коду одну з

невеликий
Усі дані та сегменти даних лише для читання мають бути в межах адресного простору 512 КБ.
Текстовий сегмент має бути в межах 16 МБ адресного простору.

середа
Сегмент даних має бути в межах 512 КБ, тоді як сегмент даних лише для читання може бути
в межах 4 Гб адресного простору. Текстовий сегмент повинен залишатися в межах 16 МБ
адресний простір.

великий
Усі сегменти тексту та даних можуть бути в межах 4 Гб адресного простору.

-mctor-dtor
Увімкнути функцію конструктора/деструктора.

- розслабитися
Інструкції з посилання для розслаблення.

Ніос II Опції

Це параметри, визначені для процесора Altera Nios II.

-G Num
Поставте глобальні та статичні об’єкти меншими або рівними Num байтів у невеликі дані або
Розділи BSS замість звичайних даних або розділів BSS. Значення за замовчуванням Num is
8.

-mgpopt=варіант
-mgpopt
-mno-gpopt
Генерувати (не генерувати) доступи щодо GP. Наступні варіант імена є
визнано:

ніхто
Не створюйте доступи щодо GP.

місцевий
Створення доступу, пов’язаного з GP, для малих об’єктів даних, які не є зовнішніми або
слабкий. Також використовуйте GP-відносну адресацію для об’єктів, які були явно
розміщується в невеликому розділі даних за допомогою атрибута "section".

в цілому
Що стосується місцевий, а також генерувати GP-відносні доступи для невеликих об’єктів даних, які
зовнішні або слабкі. Якщо ви використовуєте цю опцію, ви повинні переконатися, що всі частини
ваша програма (включаючи бібліотеки) скомпільована з тим же -G установка.

дані
Створення доступу, пов’язаного з GP, для всіх об’єктів даних у програмі. Якщо ви використовуєте
за допомогою цього параметра всі дані та сегменти BSS вашої програми мають поміститися в 64 Кб
пам’яті, і ви повинні використовувати відповідний скрипт компонувальника, щоб виділити їх усередині
адресний діапазон глобального покажчика.

всі Генеруйте GP-відносні адреси для покажчиків функцій, а також покажчиків даних. Якщо
Ви використовуєте цю опцію, весь текст, дані та сегменти BSS у вашій програмі повинні
вміщається в 64 КБ пам’яті, і для виділення потрібно використовувати відповідний скрипт компоновника
їх у межах адресного діапазону глобального покажчика.

-mgpopt еквівалентна -mgpopt=локальний та -mno-gpopt еквівалентна -mgpopt=немає.

За замовчуванням - -mgpopt крім коли -fpic or -fPIC вказано для створення позицій-
незалежний код. Зауважте, що Nios II ABI не дозволяє GP-relative доступи з
спільні бібліотеки.

Можливо, потрібно буде вказати -mno-gpopt явно при створенні програм, які включають
великі обсяги невеликих даних, включаючи великі розділи даних GOT. У цьому випадку,
16-бітове зміщення для GP-відносної адресації може бути недостатньо великим, щоб дозволити доступ до
весь невеликий розділ даних.

-мел
-меб
Згенеруйте код з маленьким (за замовчуванням) або великим (експериментальним) кодом відповідно.

-mbypass-кеш
-mno-bypass-cache
Змусити всі інструкції завантаження та зберігання завжди обходити кеш за допомогою варіантів введення-виводу
інструкції. За замовчуванням не обходити кеш.

-mno-cache-volatile
-mcache-volatile
Нестабільний доступ до пам’яті обходить кеш, використовуючи варіанти вводу/виводу для завантаження та зберігання
інструкції. За замовчуванням не обходити кеш.

-mno-fast-sw-div
-mfast-sw-div
Не використовуйте швидке ділення на основі таблиці для малих чисел. За замовчуванням використовується швидкий
розділити на -О3 і вище.

-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-mhw-mulx
-mno-hw-div
-mhw-div
Увімкнути або вимкнути надсилання інструкцій сімейства "mul", "mulx" і "div".
компілятор. За замовчуванням видає "mul", а не "div" і "mulx".

-mcustom-insn=N
-mno-custom-insn
Кожен -mcustom-insn=N Опція дозволяє використовувати користувацьку інструкцію з кодуванням N коли
генерування коду, який використовує insn, Наприклад, -mcustom-fadds=253 створює настрою
інструкція 253 для операцій додавання з плаваючою комою одинарної точності замість
поведінка за замовчуванням використання виклику бібліотеки.

Наступні значення insn підтримуються. Якщо не зазначено інше, з плаваючою комою
Очікується, що операції будуть реалізовані з нормальною семантикою IEEE 754 і
безпосередньо відповідають операторам C або еквівалентним вбудованим функціям GCC.

З плаваючою комою одинарної точності:

примхи, fsubs, fdivs, fmuls
Двійкові арифметичні дії.

фнеги
Унарне заперечення.

fabss
Унарне абсолютне значення.

fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
Операції порівняння.

fмін, fmaxs
Мінімум і максимум з плаваючою комою. Ці інструкції генеруються лише якщо
-фінітна-математична вказано.

fsqrts
Унарна операція квадратного кореня.

fcoss, fsins, ftans, фатани, fexps, бичі
Тригонометричні та експоненціальні функції з плаваючою комою. Ці інструкції є
створюється лише якщо -funsafe-math-optimizations також уточнюється.

З плаваючою комою подвійної точності:

нудьга, fsubd, fdivd, fmold
Двійкові арифметичні дії.

фнегд
Унарне заперечення.

fabsd
Унарне абсолютне значення.

fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmltd, fcmpned
Операції порівняння.

fmind, fmaxd
Мінімальна і максимальна подвійна точність. Ці інструкції генеруються лише якщо
-фінітна-математична вказано.

fsqrtd
Унарна операція квадратного кореня.

fcosd, fsind, ftand, fatand, fexpd, Flogd
Тригонометричні та експоненціальні функції подвійної точності. Ці інструкції є
створюється лише якщо -funsafe-math-optimizations також уточнюється.

Конверсії:

fextsd
Перетворення з одинарної точності на подвійну.

ftruncds
Перетворення з подвійної точності на одинарну.

фікссі, fixsu, fixdi, fixdu
Перетворення з плаваючою комою в цілі типи зі знаком або без знака, с
зрізання до нуля.

круглий
Перетворення з числа з плаваючою крапкою одинарної точності в ціле число зі знаком з округленням до
найближче ціле число і зв’язки від нуля. Це відповідає
Функція "__builtin_lroundf", коли -fno-math-errno використовується.

floatis, поплавок, плаваючий, floatud
Перетворення цілих чисел зі знаком або без знака в типи з плаваючою комою.

Крім того, всі наведені нижче інструкції передачі для внутрішніх регістрів X і Y
необхідно надати для використання будь-яких інструкцій подвійної точності з плаваючою комою.
Спеціальні інструкції, що беруть два вихідні операнди подвійної точності, очікують першого
операнд у 64-розрядному регістрі X. Інший операнд (або тільки операнд унарного
операція) надається користувацькій арифметичній інструкції з найменшою значимістю
половина в вихідному реєстрі src1 і найзначніша половина в src2. Звичай
Інструкція, яка повертає результат подвійної точності, повертає найбільш значущий 32
біти в регістрі призначення, а друга половина в 32-розрядному регістрі Y. GCC
автоматично генерує необхідні кодові послідовності для запису в регістр X та/або читання
регістр Y, коли використовуються інструкції з плаваючою комою подвійної точності.

fwrx
Запис src1 в найменшу значущу половину X і src2 в найбільш значущі
половина X.

fwry
Запис src1 в Y.

frdxhi, frdxlo
Прочитайте найбільшу або найменшу (відповідно) значущу половину X і збережіть її dest.

frdy
Прочитайте значення Y і збережіть його dest.

Зауважте, що ви можете отримати більше локального контролю над генерацією користувальницької роботи Nios II
інструкції за допомогою "target("custom-insn=N")" та "target("no-custom-insn")"
атрибути функції або прагми.

-mcustom-fpu-cfg=ім'я
Ця опція вмикає попередньо визначений іменований набір кодувань користувацьких інструкцій (див
-mcustom-insn вище). На даний момент визначено такі набори:

-mcustom-fpu-cfg=60-1 еквівалентно: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -fsingle-precision-constant

-mcustom-fpu-cfg=60-2 еквівалентно: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -mcustom-fdivs=255 -fsingle-precision-constant

-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-precision-constant

Індивідуальні інструкційні завдання, які дає індивід -mcustom-insn= замінити параметри
ті, які надає -mcustom-fpu-cfg=, незалежно від порядку опцій на
command line.

Зауважте, що ви можете отримати більше локального контролю над вибором конфігурації FPU
за допомогою "target("custom-fpu-cfg=ім'я")" атрибут функції або прагма.

Ці додаткові -m доступні варіанти для цілі Altera Nios II ELF (голий метал):

-mhal
Зв'язок із HAL BSP. Це пригнічує зв’язок із запуском C, наданого GCC
і код завершення, і зазвичай використовується разом з -msys-crt0= вказати
розташування альтернативного коду запуску, наданого HAL BSP.

-msmallc
Посилання на обмежену версію бібліотеки C, -lsmallc, а не Newlib.

-msys-crt0=стартовий файл
стартовий файл це ім'я файлу стартового файлу (crt0), який буде використовуватися під час зв'язування. Цей варіант
корисно лише в поєднанні з -mhal.

-msys-lib=systemlib
systemlib це назва бібліотеки бібліотеки, яка забезпечує низькорівневі системні виклики
вимагає бібліотека C, наприклад "читання" і "запис". Цей варіант зазвичай використовується
посилання з бібліотекою, наданою HAL BSP.

Nvidia PTX Опції

Ці параметри визначені для Nvidia PTX:

-м32
-м64
Згенеруйте код для 32-розрядного або 64-розрядного ABI.

-mmainkernel
Посилання в коді для __основного ядра. Це для автономного, а не для розвантаження
виконання.

ПДП-11 Опції

Ці параметри визначені для PDP-11:

-mfpu
Використовуйте апаратну FPP з плаваючою комою. Це значення за замовчуванням. (FIS з плаваючою комою на
PDP-11/40 не підтримується.)

-msoft-float
Не використовуйте апаратні засоби з плаваючою комою.

-mac0
Результати повернення з плаваючою комою ac0 (fr0 в синтаксисі ассемблера Unix).

-mno-ac0
Повернути результати з плаваючою комою в пам’яті. Це значення за замовчуванням.

-м40
Згенеруйте код для PDP-11/40.

-м45
Згенеруйте код для PDP-11/45. Це значення за замовчуванням.

-м10
Згенеруйте код для PDP-11/10.

-mbcopy-builtin
Використовуйте вбудовані шаблони "movmemhi" для копіювання пам'яті. Це значення за замовчуванням.

-mbcopy
Не використовуйте вбудовані шаблони "movmemhi" для копіювання пам'яті.

-м'ята16
-mno-int32
Використовуйте 16-бітний "int". Це значення за замовчуванням.

-м'ята32
-mno-int16
Використовуйте 32-розрядний "int".

-mfloat64
-mno-float32
Використовуйте 64-розрядний "float". Це значення за замовчуванням.

-mfloat32
-mno-float64
Використовуйте 32-бітний "float".

-мабші
Використовуйте шаблон "abshi2". Це значення за замовчуванням.

-мно-абши
Не використовуйте шаблон "abshi2".

-мфілія-дорого
Зробіть вигляд, що гілки дорогі. Це для експериментів із генерацією коду
тільки.

-mbranch-дешево
Не вдавайте, що гілки дорогі. Це значення за замовчуванням.

-munix-asm
Використовуйте синтаксис ассемблера Unix. Це значення за замовчуванням, коли налаштовано для pdp11-*-bsd.

-mdec-asm
Використовуйте синтаксис ассемблера DEC. Це значення за замовчуванням, якщо налаштовано для будь-якої мети PDP-11
окрім pdp11-*-bsd.

пікочіп Опції

Ці -m параметри визначені для реалізацій PicoChip:

-mae=ae_type
Встановіть набір інструкцій, набір регістрів і параметри планування команд для масиву
тип елемента ae_type. Підтримувані значення для ae_type він має БУДЬ, MUL та МАК.

-mae=БУДЬ-ЯКИЙ вибирає повністю загальний тип AE. Код, згенерований за допомогою цієї опції, запускається
на будь-який з інших типів AE. Код не такий ефективний, як був би у разі компіляції
для певного типу AE, а деякі типи операцій (наприклад, множення) не працюють
належним чином на всіх типах AE.

-mae=MUL вибирає тип MUL AE. Це найкорисніший тип AE для скомпільованого коду,
і є за замовчуванням.

-mae=MAC вибирає MAC AE у стилі DSP. Код, скомпільований з цією опцією, може постраждати від
погана продуктивність маніпуляції з байтами (char), оскільки DSP AE не забезпечує
апаратна підтримка завантаження/зберігання байтів.

-msymbol-as-address
Дозволити компілятору безпосередньо використовувати назву символу як адресу в завантаженні/збереженні
інструкції, без попереднього завантаження її в реєстр. Як правило, використання цього
Параметр генерує більші програми, які працюють швидше, ніж коли цей параметр не використовується.
Однак результати відрізняються від програми до програми, тому це залишено як варіант користувача,
замість того, щоб бути ввімкненим постійно.

-мно-неефективні-попередження
Вимикає попередження про генерацію неефективного коду. Ці попередження можуть бути
генерується, наприклад, під час компіляції коду, який виконує операції з пам'яттю на рівні байтів
на типі MAC AE. MAC AE не має апаратної підтримки пам'яті байтового рівня
операції, тому всі завантаження/зберігання байтів повинні бути синтезовані із завантаження/зберігання слова
операції. Це неефективно, тому генерується попередження, що вказує на це
слід переписати код, щоб уникнути операцій з байтами або націлити на тип AE, який має
необхідна апаратна підтримка. Ця опція вимикає ці попередження.

PowerPC Опції

Вони перераховані під

RL78 Опції

-msim
Посилання в додаткових цільових бібліотеках для підтримки роботи в симуляторі.

-mmul=немає
-mmul=g13
-mmul=rl78
Визначає тип апаратної підтримки множення, яка буде використовуватися. За замовчуванням є
ніхто, який використовує програмні функції множення. The g13 варіант для
апаратне множення/розділ периферійних пристроїв лише на цілях RL78/G13. The 78 рублів опція
для стандартного апаратного множення, визначеного в посібнику з програмного забезпечення RL78.

-m64bit-подвійники
-m32bit-подвійники
Зробіть тип даних "подвійний" 64 біт (-m64bit-подвійники) або 32 біти (-m32bit-подвійники)
за розміром. За замовчуванням є -m32bit-подвійники.

IBM RS / 6000 та PowerPC Опції

Ці -m параметри визначені для IBM RS/6000 і PowerPC:

-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
Ви використовуєте ці параметри, щоб визначити, які інструкції доступні на вашому процесорі
використовують. Значення за замовчуванням цих параметрів визначається під час налаштування GCC.
Визначення -mcpu=тип_процесора перекриває специфікацію цих параметрів. ми
рекомендуємо використовувати -mcpu=тип_процесора варіант, а не перераховані вище варіанти.

Уточнення -mpowerpc-gpopt дозволяє GCC використовувати додаткову архітектуру PowerPC
інструкції в групі загального призначення, включаючи квадратний корінь з плаваючою комою.
Уточнення -mpowerpc-gfxopt дозволяє GCC використовувати додаткову архітектуру PowerPC
інструкції в групі «Графіка», включаючи вибір з плаваючою комою.

Команда -mmfcrf Опція дозволяє GCC генерувати переміщення з поля регістру умов
інструкція реалізована на процесорі POWER4 та інших процесорах, які підтримують
Архітектура PowerPC V2.01. The -mpopcntb Опція дозволяє GCC генерувати popcount
та інструкція зворотної оцінки FP подвійної точності, реалізована на POWER5
процесор та інші процесори, які підтримують архітектуру PowerPC V2.02. The
-mpopcntd Опція дозволяє GCC генерувати інструкцію popcount, реалізовану на
Процесор POWER7 та інші процесори, які підтримують архітектуру PowerPC V2.06.
Команда -mfprnd Опція дозволяє GCC генерувати інструкції округлення FP до цілого числа
реалізовано на процесорі POWER5+ та інших процесорах, які підтримують PowerPC
Архітектура V2.03. The -mcmpb Опція дозволяє GCC генерувати порівняльні байти
інструкція реалізована на процесорі POWER6 та інших процесорах, які підтримують
Архітектура PowerPC V2.05. The -mmfpgpr Опція дозволяє GCC генерувати переміщення FP
інструкції до/з регістра загального призначення, реалізовані на процесорі POWER6X і
інші процесори, які підтримують розширену архітектуру PowerPC V2.05. The -mhard-dfp
Опція дозволяє GCC генерувати десяткові інструкції з плаваючою комою, реалізовані на
деякі процесори POWER.

Команда -mpowerpc64 Опція дозволяє GCC генерувати додаткові 64-розрядні інструкції, які
знаходяться в повній архітектурі PowerPC64 і розглядають GPR як 64-розрядні подвійні слова
кількості. GCC за замовчуванням -mno-powerpc64.

-mcpu=тип_процесора
Встановіть тип архітектури, використання реєстрів і параметри планування інструкцій для
тип машини тип_процесора. Підтримувані значення для тип_процесора він має 401, 403, 405, 405 кадри на секунду, 440,
440 кадри на секунду, 464, 464 кадри на секунду, 476, 476 кадри на секунду, 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, живлення ПК, powerpc64, powerpc64le та rs64.

-mcpu=powerpc, -mcpu = powerpc64 та -mcpu=powerpc64le вкажіть чистий 32-розрядний PowerPC
(будь-який байт), 64-розрядний PowerPC і 64-розрядний PowerPC
архітектурні типи машин із відповідною загальною моделлю процесора
цілі планування.

Інші параметри визначають конкретний процесор. Код, згенерований відповідно до цих параметрів
найкраще працює на цьому процесорі і може взагалі не працювати на інших.

Команда -mcpu параметри автоматично вмикають або вимикають такі параметри:

-мальтівець -mfprnd -mhard-float -mmfcrf - множинні -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mпрямий-хід -mpower8-fusion
-mpower8-вектор -mquad-пам'ять -mquad-memory-atomic

Конкретні параметри, встановлені для будь-якого конкретного ЦП, відрізняються в різних версіях компілятора,
залежно від того, яке налаштування створює оптимальний код для цього ЦП; це не так
обов'язково відображати реальні можливості обладнання. Якщо ви бажаєте встановити
індивідуальний параметр до певного значення, ви можете вказати його після -mcpu варіант
як -mcpu=970 -mno-altivec.

На AIX, -мальтівець та -mpowerpc64 параметри не вмикаються та не вимкнені -mcpu
наразі, оскільки AIX не має повної підтримки цих параметрів. Ви можете
все одно вмикайте або вимикайте їх окремо, якщо ви впевнені, що це працюватиме у вашому
довкілля.

-mtune=тип_процесора
Встановіть параметри планування інструкцій для типу машини тип_процесора, але не встановлюйте
тип архітектури або використання реєстру, як -mcpu=тип_процесора робить. Ті самі значення для
тип_процесора використовуються для -mtune що стосується -mcpu. Якщо вказано обидва, згенерується код
використовує архітектуру та регістри, встановлені за допомогою -mcpu, але параметри планування, встановлені за допомогою
-mtune.

-mcmodel=мала
Згенеруйте код PowerPC64 для невеликої моделі: TOC обмежено 64 КБ.

-mcmodel=середній
Згенеруйте код PowerPC64 для середньої моделі: TOC та інші статичні дані можуть бути підвищені
загальним розміром 4G.

-mcmodel=великий
Згенеруйте код PowerPC64 для великої моделі: TOC може мати розмір до 4G. Інший
дані та код обмежені лише 64-бітовим адресним простором.

-мальтівець
-mno-altivec
Згенеруйте код, який використовує (не використовує) інструкції AltiVec, а також увімкніть використання
вбудованих функцій, які забезпечують більш прямий доступ до набору інструкцій AltiVec.
Можливо, вам також знадобиться встановити -mabi=altivec щоб налаштувати поточний ABI за допомогою AltiVec ABI
удосконалення.

Коли -мальтівець використовується, а не -maltivec=le or -maltivec=бути, порядок елементів
для таких внутрішніх компонентів Altivec, як "vec_splat", "vec_extract" і "vec_insert"
Порядок елементів масиву, що відповідає порядковості байтів цілі. Тобто елемент
нуль визначає крайній лівий елемент у векторному регістрі, коли орієнтується на великий кінець
платформи та визначає крайній правий елемент у векторному регістрі під час націлювання на a
платформа з малим порядком.

-maltivec=бути
Генеруйте інструкції Altivec, використовуючи порядок елементів із великим порядком, незалежно від того, чи є
ціль має великий або маленький кінець. Це значення за замовчуванням, якщо орієнтуватися на великий байт
платформи.

Порядок елементів використовується для інтерпретації номерів елементів у внутрішніх елементах Altivec, наприклад
"vec_splat", "vec_extract" і "vec_insert". За замовчуванням вони відповідають елементу масиву
порядок, що відповідає порядковості байтів для цілі.

-maltivec=le
Генеруйте інструкції Altivec, використовуючи порядок елементів з маленьким байтом, незалежно від того
ціль має великий або маленький кінець. Це значення за замовчуванням, якщо націлюватися на трохи-
порядкова платформа. Наразі ця опція ігнорується, якщо націлюватися на великий байт
платформи.

Порядок елементів використовується для інтерпретації номерів елементів у внутрішніх елементах Altivec, наприклад
"vec_splat", "vec_extract" і "vec_insert". За замовчуванням вони відповідають елементу масиву
порядок, що відповідає порядковості байтів для цілі.

-mvrsave
-мно-врсаве
Генеруйте інструкції VRSAVE під час генерації коду AltiVec.

-mgen-cell-microcode
Створення інструкцій мікрокоду клітинки.

-mwarn-cell-microcode
Попереджати, коли надходить інструкція мікрокоду клітинки. Приклад мікрокоду клітинки
інструкція є змінною зміною.

-msecure-plt
Згенеруйте код, який дозволяє ld та ld.так для створення виконуваних файлів і спільних бібліотек
невиконувані розділи ".plt" і ".got". Це параметр PowerPC 32-розрядний SYSV ABI.

-mbss-plt
Згенеруйте код, який використовує розділ BSS ".plt", який ld.так заповнює та вимагає ".plt"
і розділи ".got", які є як для запису, так і для виконання. Це 32-розрядний PowerPC
Опція SYSV ABI.

-мисель
-мно-ісел
Цей перемикач дозволяє або вимикає генерацію інструкцій ISEL.

-misel=так ні
Цей перемикач більше не підтримується. Використовуйте -мисель та -мно-ісел замість цього.

-mspe
-мно-спе
Цей перемикач вмикає або вимикає генерацію інструкцій SPE simd.

- утруднений
-мнопарні
Цей перемикач вмикає або вимикає створення інструкцій PAIRED simd.

-mspe=так ні
Цей параметр не підтримується. Використовуйте -mspe та -мно-спе замість цього.

-mvsx
-mno-vsx
Створення коду, який використовує (не використовує) векторні/скалярні (VSX) інструкції, а також
дозволити використання вбудованих функцій, які забезпечують більш прямий доступ до VSX
набір інструкцій.

-mcrypto
-мно-крипто
Увімкнути використання (вимкнути) вбудованих функцій, які надають прямий доступ до
криптографічні інструкції, які були додані у версії 2.07 PowerPC ISA.

-mпрямий-хід
-мно-прямий-хід
Згенеруйте код, який використовує (не використовує) інструкції для переміщення даних між файлами
регістри загального призначення та векторні/скалярні (VSX) регістри, які були додані
версія 2.07 PowerPC ISA.

-mpower8-fusion
-mno-power8-fusion
Генерує код, який зберігає (не зберігає) деякі цілі операції суміжними, так що
інструкції можна об'єднати разом на процесорах power8 і новіших.

-mpower8-вектор
-mno-power8-вектор
Згенеруйте код, який використовує (не використовує) векторні та скалярні інструкції, які були
додано у версії 2.07 PowerPC ISA. Також увімкніть використання вбудованих функцій
які забезпечують більш прямий доступ до векторних інструкцій.

-mquad-пам'ять
-mno-quad-пам'ять
Створіть код, який використовує (не використовує) інструкції неатомарної пам'яті чотирьох слів.
Команда -mquad-пам'ять опція вимагає використання 64-розрядного режиму.

-mquad-memory-atomic
-mno-quad-memory-atomic
Створіть код, який використовує (не використовує) атомні інструкції пам'яті чотирьох слів. The
-mquad-memory-atomic опція вимагає використання 64-розрядного режиму.

-mupper-regs-df
-mno-upper-regs-df
Згенеруйте код, який використовує (не використовує) скалярні інструкції подвійної точності
націльте всі 64 регістри в наборі регістрів векторної/скалярної з плаваючою комою, які були
додано у версії 2.06 PowerPC ISA. -mupper-regs-df увімкнено за замовчуванням, якщо
ви використовуєте будь-який з -mcpu=потужність7, -mcpu=потужність8або -mvsx Варіанти.

-mupper-regs-sf
-mno-upper-regs-sf
Створити код, який використовує (не використовує) скалярні інструкції одинарної точності, які
націльте всі 64 регістри в наборі регістрів векторної/скалярної з плаваючою комою, які були
додано у версії 2.07 PowerPC ISA. -mupper-regs-sf увімкнено за замовчуванням, якщо
ви використовуєте будь-який з -mcpu=потужність8 or -mpower8-вектор Варіанти.

- mupper-regs
-mno-upper-regs
Згенеруйте код, який використовує (не використовує) скалярні інструкції, націлені на всі 64
регістрів у векторному/скалярному наборі регістрів з плаваючою комою, залежно від моделі
машина.

Якщо -mno-upper-regs використовується параметр, він вимикає обидва -mupper-regs-sf та
-mupper-regs-df Варіанти.

-mfloat-gprs=так/одиночний/подвійний/ні
-mfloat-gprs
Цей перемикач вмикає або вимикає генерацію операцій з плаваючою комою на
регістри загального призначення для архітектур, які його підтримують.

Аргумент так or один дозволяє використовувати одинарну точність з плаваючою комою
операції.

Аргумент подвійний дозволяє використовувати одинарну та подвійну точність з плаваючою комою
операції.

Аргумент немає вимикає операції з плаваючою комою в регістрах загального призначення.

Наразі ця опція доступна лише на MPC854x.

-м32
-м64
Створення коду для 32-розрядних або 64-розрядних середовищ Darwin і SVR4 (включаючи
GNU/Linux). 32-розрядне середовище встановлює int, long і покажчик на 32 біти і
генерує код, який працює на будь-якому варіанті PowerPC. 64-розрядне середовище встановлює int
32 біти та long і вказівник на 64 біти та генерує код для PowerPC64, як для
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc
Змінити генерацію TOC (Змісту), яка створюється для кожного
виконуваний файл. The -mfull-toc параметр вибраний за замовчуванням. У цьому випадку GCC
виділяє принаймні один запис TOC для кожного унікального неавтоматичного посилання на змінну в
ваша програма. GCC також розміщує константи з плаваючою комою в TOC. Проте тільки
16,384 XNUMX записи доступні в TOC.

Якщо ви отримуєте повідомлення про помилку компонувальника про те, що ви переповнили доступний
Місце TOC, ви можете зменшити кількість простору TOC, що використовується з -mno-fp-in-toc та
-mno-sum-in-toc Варіанти. -mno-fp-in-toc запобігає GCC від розміщення з плаваючою комою
константи в TOC і -mno-sum-in-toc змушує GCC генерувати код для обчислення
сума адреси та константи під час виконання замість того, щоб вводити цю суму в TOC.
Ви можете вказати один або обидва з цих параметрів. Кожен з них змушує GCC виробляти дуже
дещо повільніший і більший код за рахунок збереження простору TOC.

Якщо у вас все одно не вистачає місця в TOC, навіть якщо ви вказали обидва ці параметри,
вкажіть -mminimal-toc замість цього. Ця опція змушує GCC робити лише один запис TOC для
кожен файл. Коли ви вказуєте цей параметр, GCC виробляє повільніший і більший код
але який використовує надзвичайно мало місця TOC. Ви можете використовувати цю опцію лише на
файли, які містять код, який виконується рідше.

-maix64
-maix32
Увімкнути 64-розрядний AIX ABI та умову виклику: 64-розрядні покажчики, 64-розрядний тип «довгий» та
інфраструктуру, необхідну для їх підтримки. Уточнення -maix64 мається на увазі -mpowerpc64,
в той час як -maix32 вимикає 64-розрядний ABI і має на увазі -mno-powerpc64. GCC за замовчуванням
-maix32.

-mxl-compat
-mno-xl-compat
Створіть код, який більше відповідає семантиці компілятора IBM XL при використанні AIX-
сумісний ABI. Передайте аргументи з плаваючою комою прототипним функціям за межами
зареєструвати область збереження (RSA) у стеку на додаток до аргументів FPR. Не припускайте
що найбільш значимий подвійний у 128-бітовому довгому значенні double правильно округлюється, коли
порівняння значень і перетворення в подвійне. Використовуйте назви символів XL для довгого подвійного
підтримувати рутини.

Умову викликів AIX було розширено, але спочатку не було задокументовано для обробки
незрозумілий випадок K&R C виклику функції, яка приймає адресу своїх аргументів
менше аргументів, ніж заявлено. Компілятори IBM XL мають доступ до аргументів з плаваючою комою
не поміщаються в RSA зі стека, коли підпрограма компілюється без
оптимізація. Тому що завжди зберігати аргументи з плаваючою комою в стеку є
неефективна та рідко потрібна, ця опція не ввімкнена за замовчуванням і лише є
необхідно під час виклику підпрограм, скомпільованих компіляторами IBM XL без оптимізації.

-mpe
Підтримайте IBM RS / 6000 SP Паралельні Навколишнє середовище (PE). Посилання на програму, написану для використання
передача повідомлення зі спеціальним кодом запуску для запуску програми. The
система повинна мати PE встановлений у стандартному місці (/usr/lpp/ppe.poe/), або
дані файл потрібно замінити на -специфікації= можливість вказати відповідний
розташування каталогу. Паралельне середовище не підтримує потоки, тому -mpe
варіант і -нитка варіанти несумісні.

-злоякісний-природний
- злоякісна сила
На AIX, 32-розрядних Darwin і 64-розрядних PowerPC GNU/Linux опція -злоякісний-природний
перекриває визначене ABI вирівнювання більших типів, таких як подвійні числа з плаваючою комою,
на їхній межі на основі природного розміру. Варіант - злоякісна сила доручає GCC
дотримуйтесь правил вирівнювання, визначених ABI. GCC за замовчуванням має стандартне вирівнювання
визначені в ABI.

У 64-розрядній версії Darwin природне вирівнювання є за замовчуванням, і - злоякісна сила НЕ
підтримується.

-msoft-float
-mhard-float
Згенеруйте код, який не використовує (використовує) набір регістрів з плаваючою комою. програмне забезпечення
Емуляція з плаваючою комою надається, якщо ви використовуєте -msoft-float варіант і передайте
опція до GCC при з'єднанні.

-msingle-float
-mdouble-float
Створення коду для операцій з плаваючою комою одинарної або подвійної точності.
-mdouble-float мається на увазі -msingle-float.

-msimple-fpu
Не генеруйте інструкції "sqrt" і "div" для апаратної одиниці з плаваючою комою.

-mfpu=ім'я
Вкажіть тип одиниці з плаваючою комою. Допустимі значення для ім'я він має sp_lite (дорівнює
-msingle-float -msimple-fpu), dp_lite (дорівнює -mdouble-float -msimple-fpu),
sp_full (дорівнює -msingle-float), А також dp_full (дорівнює -mdouble-float).

-mxilinx-fpu
Виконайте оптимізацію блоку з плаваючою комою на Xilinx PPC 405/440.

- множинні
-мно-множинний
Згенеруйте код, який використовує (не використовує) інструкції завантаження з кількома словами та
зберігати інструкції з кількох слів. Ці інструкції генеруються за замовчуванням на
POWER, а не генерується в системах PowerPC. Не використовувати - множинні на мало-
порядкові системи PowerPC, оскільки ці інструкції не працюють, коли ввімкнено процесор
режим малого ланцюга. Виняток становлять PPC740 і PPC750, які дозволяють це зробити
інструкції в режимі малого байта.

-mstring
-мно-рядок
Згенеруйте код, який використовує (не використовує) інструкції рядка завантаження та сховище
рядкові інструкції слова для збереження кількох регістрів і виконання невеликих блокових переміщень. Ці
інструкції генеруються за замовчуванням у системах POWER і не генеруються на PowerPC
системи. Не використовувати -mstring на системах PowerPC з малим кінцем, оскільки ті
інструкції не працюють, коли процесор перебуває в режимі малого байта. Винятки
це PPC740 і PPC750, які дозволяють виконувати ці інструкції в режимі малого байта.

-оновити
-mno-оновлення
Згенеруйте код, який використовує (не використовує) завантаження або зберігайте інструкції, які оновлюють
базовий регістр за адресою обчислюваної ділянки пам'яті. Ці інструкції
генеруються за замовчуванням. Якщо ви використовуєте -mno-оновлення, між ними є невелике віконце
час оновлення покажчика стека та адреси попереднього кадру
збережений, що означає код, який проходить кадр стека через переривання або сигнали
отримати пошкоджені дані.

-mavoid-indexed-addresses
-mno-уникати-індексованих-адрес
Створіть код, який намагається уникнути (не уникнути) використання індексованого завантаження або збереження
інструкції. Ці інструкції можуть призвести до зниження продуктивності процесорів Power6
у певних ситуаціях, наприклад, при переході через великі масиви, які перетинають 16M
межа. Цей параметр увімкнено за замовчуванням, якщо націлено на Power6, і вимкнено
інакше.

-змішаний-божевільний
-мно-злитий-мадд
Створіть код, який використовує (не використовує) множення та накопичення з плаваючою комою
інструкції. Ці інструкції генеруються за замовчуванням, якщо апаратна з плаваючою комою
використовується. Машинозалежний -змішаний-божевільний опція тепер зіставлена ​​з машиною-
незалежний -ffp-contract=швидко варіант, і -мно-злитий-мадд відображається на
-ffp-contract=вимкнено.

-mmulhw
-mno-mulhw
Створити код, який використовує (не використовує) напівслова множення та множення-накопичування
інструкції для процесорів IBM 405, 440, 464 і 476. Ці інструкції є
генерується за замовчуванням під час націлювання на ці процесори.

-mdlmzb
-мно-длмзб
Згенеруйте код, який використовує (не використовує) рядковий пошук dlmzb інструкція з IBM
Процесори 405, 440, 464 і 476. Ця інструкція генерується за замовчуванням, коли
націлені на ці процесори.

-mno-bit-align
-mbit-align
У системі V.4 і вбудованих системах PowerPC не (не) примушують структури та об’єднання
які містять бітові поля, які мають бути вирівняні з базовим типом бітового поля.

Наприклад, за замовчуванням структура, що не містить нічого, крім 8 «беззнакових» бітових полів
довжина 1 вирівняна з 4-байтовою межею і має розмір 4 байти. З допомогою
-mno-bit-align, структура вирівняна за межею 1 байт і має розмір 1 байт.

-mno-strict-align
-mstrict-align
У системі V.4 і вбудованих системах PowerPC не передбачається (не) припускає, що невирівняна пам'ять
посилання обробляються системою.

-mrelocable
-мнопереміщаються
Згенеруйте код, який дозволяє (не дозволяє) переміщувати статичний виконуваний файл до a
іншу адресу під час виконання. Простий вбудований системний завантажувач PowerPC повинен
перемістити весь вміст ".got2" і 4-байтових місць, перерахованих у ".fixup"
розділ, таблицю 32-розрядних адрес, створених за допомогою цієї опції. Щоб це спрацювало, все
об'єкти, пов'язані разом, повинні бути скомпільовані -mrelocable or -mrelocatable-lib.
-mrelocable код вирівнює стек за 8-байтовою межею.

-mrelocatable-lib
-mno-relocable-lib
Люблю -mrelocable, -mrelocatable-lib створює розділ ".fixup", щоб дозволити статику
виконувані файли, які будуть переміщені під час виконання, але -mrelocatable-lib не використовує
менше вирівнювання стека -mrelocable. Об’єкти, складені з -mrelocatable-lib може
бути пов’язаним з об’єктами, скомпільованими з будь-якою комбінацією -mrelocable Варіанти.

-мно-ток
-mtoc
У системі V.4 і вбудованих системах PowerPC не передбачається (не) припускати, що регістр 2 містить
покажчик на глобальну область, що вказує на адреси, що використовуються в програмі.

-маленький
-mlittle-endian
У системі V.4 і вбудованих системах PowerPC компілюють код для процесора в невеликій кількості
порядковий режим. The -mlittle-endian варіант такий самий, як -маленький.

-великий
-big-endian
У системі V.4 та вбудованих системах PowerPC компілюйте код для процесора у великому
порядковий режим. The -big-endian варіант такий самий, як -великий.

-mdynamic-no-pic
У системах Darwin і Mac OS X компілюйте код, щоб його не можна було переміщувати, а це
його зовнішні посилання переміщуються. Отриманий код підходить для
програми, але не спільні бібліотеки.

-msingle-pic-base
Розглядайте регістр, який використовується для адресації PIC, як доступний лише для читання, а не завантажуйте його в файл
пролог для кожної функції. За ініціалізацію цього відповідає система виконання
зареєструвати з відповідним значенням перед початком виконання.

-mpriritize-restricted-insns=пріоритет
Ця опція керує пріоритетом, який призначається обмеженому слоту відправлення
інструкції під час другого проходу планування. Аргумент пріоритет приймає значення
0, 1або 2 призначити ні, найвищий або другий за вищим (відповідно) пріоритет
інструкції з обмеженим доступом.

-msched-costly-dep=тип_залежності
Цей параметр контролює, які залежності будуть вважатися витратними для цілі
планування інструкцій. Аргумент тип_залежності приймає одне з наступних
значення:

немає Жодна залежність не коштує дорого.

всі Усі залежності коштують дорого.

true_store_to_load
Справжня залежність від магазину до навантаження коштує дорого.

store_to_load
Будь-яка залежність від магазину до навантаження коштує дорого.

номер
Будь-яка залежність, для якої затримка більше або дорівнює номер коштує дорого.

-minsert-sched-nops=схема
Цей параметр визначає, яка схема вставки NOP використовується під час другого планування
пройти. Аргумент схема приймає одне з таких значень:

немає Не вставляйте NOP.

майданчик Заповніть NOPs будь-яку групу диспетчеризації, яка має вільні місця видачі, відповідно до
групування планувальника.

regroup_exact
Вставте NOP, щоб змусити дорогі залежні заклади розділити окремі групи. Вставте точно
згідно з оцінками, стільки NOP, скільки необхідно, щоб примусити insn до нової групи
групування процесорів.

номер
Вставте NOP, щоб змусити дорогі залежні заклади розділити окремі групи. Вставити номер
NOPs, щоб примусити insn до нової групи.

-mcall-sysv
У системі V.4 і вбудованих системах PowerPC компілюйте код, використовуючи умовні умови виклику, що
дотримуватися проекту двійкового інтерфейсу додатків System V PowerPC від березня 1995 року
доповнення до процесора. Це значення за замовчуванням, якщо ви не налаштували GCC за допомогою
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Вкажіть обидва -mcall-sysv та -меабі Варіанти.

-Mcall-sysv-noeabi
Вкажіть обидва -mcall-sysv та -мно-еабі Варіанти.

-mcall-aixdesc
У системі V.4 і вбудованих системах PowerPC компілюйте код для операційної системи AIX.

-mcall-linux
На системі V.4 та вбудованих системах PowerPC компілюйте код для GNU на базі Linux
системи.

-mcall-freebsd
У системі V.4 і вбудованих системах PowerPC компілюйте код для роботи FreeBSD
системи.

-mcall-netbsd
У системі V.4 і вбудованих системах PowerPC компілюйте код для роботи NetBSD
системи.

-mcall-openbsd
У системі V.4 і вбудованих системах PowerPC компілюйте код для роботи OpenBSD
системи.

-maix-struct-return
Повернути всі структури в пам’яті (як зазначено в AIX ABI).

-msvr4-struct-return
Повертати структури менше 8 байт у регістрах (як зазначено в SVR4 ABI).

-mabi=abi-тип
Розширте поточний ABI за допомогою певного розширення або видаліть таке розширення. Дійсний
значення є altivec, no-altivec, спе, ні-спе, ibmlongdouble, ieeelongdouble, elfv1,
elfv2.

-mabi=spe
Розширте поточний ABI за допомогою розширень SPE ABI. Це не змінює ABI за замовчуванням,
замість цього він додає розширення SPE ABI до поточного ABI.

-mabi=no-spe
Вимкніть розширення Book-E SPE ABI для поточного ABI.

-mabi=ibmlongdouble
Змініть поточний ABI, щоб використовувати IBM розширеної точності long double. Це PowerPC
32-розрядний варіант SYSV ABI.

-mabi=ieeelongdouble
Змініть поточний ABI, щоб використовувати IEEE розширеної точності long double. Це PowerPC
32-розрядний варіант ABI для Linux.

-mabi=elfv1
Змініть поточний ABI, щоб використовувати ABI ELFv1. Це стандартний ABI для big-endian
PowerPC 64-розрядна версія Linux. Для перевизначення ABI за замовчуванням потрібна спеціальна підтримка системи та
ймовірно, зазнає невдачі у вражаючий спосіб.

-mabi=elfv2
Змініть поточний ABI, щоб використовувати ABI ELFv2. Це стандартний ABI для малого-
endian PowerPC 64-розрядний Linux. Для перевизначення ABI за замовчуванням потрібна спеціальна система
підтримки і, ймовірно, зазнає невдачі в вражаючий спосіб.

-мпрототип
-мно-прототип
У системі V.4 і вбудованих системах PowerPC передбачається, що всі виклики змінного аргументу
функції правильно прототиповані. В іншому випадку компілятор повинен вставити інструкцію
перед кожним непрототипованим викликом встановити або очистити біт 6 регістра коду умови
("CR"), щоб вказати, чи передаються значення з плаваючою комою
регістрів у випадку, якщо функція приймає змінні аргументи. З -мпрототип, тільки дзвінки
до прототипу змінної функції аргументу встановіть або очистіть біт.

-msim
У вбудованих системах PowerPC припустимо, що викликається модуль запуску sim-crt0.o та
що стандартні бібліотеки C є libsim.a та libc.a. Це значення за замовчуванням для
powerpc-*-eabisim конфігурації

-mmvme
У вбудованих системах PowerPC припустимо, що викликається модуль запуску crt0.o і
стандартні бібліотеки C libmvme.a та libc.a.

- шалено
У вбудованих системах PowerPC припустимо, що викликається модуль запуску crt0.o і
стандартні бібліотеки C libads.a та libc.a.

- жовтий ніж
У вбудованих системах PowerPC припустимо, що викликається модуль запуску crt0.o і
стандартні бібліотеки C Libyk.a та libc.a.

-mvxworks
У системі V.4 і вбудованих системах PowerPC вкажіть, що ви компілюєте для a
Система VxWorks.

-член
У вбудованих системах PowerPC встановіть біт "PPC_EMB" у заголовку прапорів ELF, щоб вказати
Що eabi використовуються розширені переїзди.

-меабі
-мно-еабі
У системі V.4 і вбудованих системах PowerPC (не) дотримуються вбудованих
Бінарний інтерфейс додатків (EABI), який являє собою набір модифікацій Системи
Специфікації V.4. Вибір -меабі означає, що стек вирівняний з 8-байтовим
межі, функція "__eabi" викликається з "main" для налаштування середовища EABI,
і -msdata Опція може використовувати як "r2", так і "r13", щоб вказувати на два окремих невеликих даних
області. Вибір -мно-еабі означає, що стек вирівняний за 16-байтовою межею, ні
Функція ініціалізації EABI викликається з "main" і -msdata використовується лише варіант
"r13", щоб вказати на одну невелику область даних. The -меабі опція ввімкнена за замовчуванням, якщо ви
налаштовано GCC за допомогою одного з powerpc*-*-eabi* Варіанти.

-msdata=eabi
У системі V.4 і вбудованих системах PowerPC поставте невеликий ініціалізований глобальний і
статичні дані в розділі ".sdata2", на який вказує регістр "r2". Покладіть дрібні
ініціалізовані глобальні та статичні дані, які не є "const", у розділі ".sdata", який є
на який вказує регістр "r13". Помістіть невеликі неініціалізовані глобальні та статичні дані в файл
розділ «.sbss», який примикає до розділу «.sdata». The -msdata=eabi варіант
є несумісним з -mrelocable варіант. -msdata=eabi параметр також встановлює параметр
-член варіант.

-msdata=sysv
У системі V.4 і вбудованих системах PowerPC помістіть невеликі глобальні та статичні дані в файл
розділ ".sdata", на який вказує регістр "r13". Поставте маленький неініціалізований
глобальні та статичні дані в розділі ".sbss", який суміжний з ".sdata"
розділ. The -msdata=sysv варіант несумісний з -mrelocable варіант.

-msdata=за замовчуванням
-msdata
У системі V.4 та вбудованих системах PowerPC, якщо -меабі використовується, компілювати код те саме
as -msdata=eabi, інакше скомпілювати код так само, як -msdata=sysv.

-msdata=дані
У системі V.4 і вбудованих системах PowerPC помістіть невеликі глобальні дані в ".sdata"
розділ. Помістіть невеликі неініціалізовані глобальні дані в розділ «.sbss». Не використовувати
однак зареєструйте "r13", щоб адресувати невеликі дані. Це поведінка за замовчуванням, якщо
інший -msdata використовуються варіанти.

-msdata=немає
-mno-sdata
У вбудованих системах PowerPC помістіть усі ініціалізовані глобальні та статичні дані в ".data"
розділ, а всі неініціалізовані дані в розділі ".bss".

-mblock-move-inline-limit=Num
Вбудовані всі переміщення блоку (наприклад, виклики "memcpy" або копії структури) менше або
дорівнює Num байтів. Мінімальне значення для Num становить 32 байти для 32-розрядних цілей і 64
байтів на 64-бітних цілях. Значення за замовчуванням залежить від цілі.

-G Num
У вбудованих системах PowerPC розмістіть глобальні та статичні елементи менше або дорівнюють Num
байтів у секції малих даних або BSS замість звичайних даних або секції BSS.
За замовчуванням Num є 8. The -G Num комутатор також передається компоновщику. Усі модулі
слід скомпілювати з тим же -G Num value.

-mregnames
-mno-regnames
У системі V.4 та вбудованих системах PowerPC не видають (не) імена регістрів у
виведення на мові асемблера за допомогою символічних форм.

-mlongcall
-mno-longcall
За замовчуванням припустимо, що всі дзвінки віддалені, тому довше і дорожче
необхідна послідовність викликів. Це потрібно для дзвінків, розмір яких перевищує 32 мегабайти
(33,554,432 XNUMX XNUMX байт) з поточного розташування. Короткий виклик генерується, якщо
компілятор знає, що виклик не може бути таким далеким. Цей параметр можна змінити за допомогою
атрибут функції "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 може ігнорувати всі специфікації довгого виклику, коли лінкер відомий
генерувати клей.

-mtls-маркери
-mno-tls-маркери
Позначте (не позначайте) виклики "__tls_get_addr" з переміщенням із зазначенням функції
аргумент. Переміщення дозволяє компоновщику надійно асоціювати виклик функції
Інструкції з налаштування аргументів для оптимізації TLS, що, у свою чергу, дозволяє GCC краще
заплануйте послідовність.

-нитка
Додає підтримку багатопоточності за допомогою pthreads бібліотека. Цей параметр встановлює прапори для
як препроцесор, так і компонувальник.

-mrecip
-мно-рецепт
Цей параметр дозволяє використовувати взаємну оцінку та оцінку зворотного квадратного кореня
інструкції з додатковими кроками Ньютона-Рафсона для підвищення точності замість
виконання ділення або квадратного кореня та ділення для аргументів з плаваючою комою. Ви повинні використовувати
-швидка математика варіант при використанні -mrecip (або принаймні -funsafe-math-optimizations,
-тільки кінцева математика, -частотно-мат та -fno-trapping-math). Зауважте, що в той час як
пропускна здатність послідовності, як правило, вища, ніж пропускна здатність не-
взаємною інструкцією, точність послідовності може бути зменшена до 2 ulp
(тобто обернене до 1.0 дорівнює 0.99999994) для взаємних квадратних коренів.

-mrecip=вибирати
Цей параметр визначає, які інструкції взаємної оцінки можуть використовуватися. вибирати це
розділений комами список параметрів, перед яким може стояти символ "!" щоб інвертувати параметр:

всі Увімкнути всі інструкції щодо оцінки.

дефолт
Увімкнути інструкції за замовчуванням, еквівалентні до -mrecip.

ніхто
Вимкнути всі інструкції щодо оцінки, еквівалентно -мно-рецепт.

DIV Увімкніть інструкції взаємного наближення як для одинарної, так і для подвійної
точність.

див
Увімкнути інструкції взаємного наближення одинарної точності.

розділ
Увімкніть інструкції взаємної апроксимації подвійної точності.

rsqrt
Увімкніть інструкції наближення взаємного квадратного кореня для одиничних і
подвійна точність.

rsqrtf
Увімкнути інструкції наближення з взаємним квадратним коренем одинарної точності.

rsqrtd
Увімкніть інструкції щодо наближення взаємного квадратного кореня подвійної точності.

Так, наприклад, -mrecip=все,!rsqrtd дозволяє виконати всі взаємні оцінки
інструкції, крім інструкцій "FRSQRTE", "XSRSQRTEDP" і "XVRSQRTEDP"
які обробляють обчислення зворотного квадратного кореня подвійної точності.

-mrecip-точність
-мно-рецепт-точність
Припустимо (не припускаємо), що інструкції щодо взаємної оцінки забезпечують вищу -
точні оцінки, ніж це передбачено PowerPC ABI. Вибір -mcpu=потужність6,
-mcpu=потужність7 or -mcpu=потужність8 автоматично вибирає -mrecip-точність. подвійний-
інструкції точної оцінки квадратного кореня не генеруються за замовчуванням на низьких
точні машини, оскільки вони не дають оцінку, яка сходиться через три
кроки.

-mveclibabi=тип
Визначає тип ABI, який використовуватиметься для векторізації внутрішніх елементів за допомогою зовнішньої бібліотеки.
На даний момент підтримується єдиний тип маса, що вказує на використання IBM Mathematical
Бібліотеки підсистеми прискорення (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-math-optimizations також має бути увімкнено. Бібліотеки MASS повинні бути
вказано під час посилання.

-мфриз
-мно-фриз
Генерувати (не генерувати) інструкцію "friz", коли -funsafe-math-optimizations
Опція використовується для оптимізації округлення значень з плаваючою комою до 64-розрядного цілого і
повернутися до плаваючої коми. Інструкція "friz" не повертає те саме значення, якщо
Число з плаваючою комою завелике, щоб поміститися в ціле число.

-mpointers-to-nested-functions
-mno-вказівники-вкладені-функції
Згенеруйте (не генеруйте) код для завантаження регістра статичного ланцюга ("r11"), коли
виклик через покажчик в AIX і 64-розрядних системах Linux, де вказівник на функцію
вказує на 3-слівний дескриптор, що вказує адресу функції, значення TOC, яке потрібно завантажити
регістр "r2", і статичне значення ланцюга, яке буде завантажено в регістр "r11". The
-mpointers-to-nested-functions увімкнено за замовчуванням. Ви не можете викликати через вказівники до
вкладені функції або вказівники на функції, скомпільовані іншими мовами, які використовують
статичний ланцюг, якщо ви використовуєте -mno-вказівники-вкладені-функції.

-msave-toc-indirect
-mno-save-toc-indirect
Згенеруйте (не генеруйте) код, щоб зберегти значення TOC у зарезервованої позиції стека
у пролозі функції, якщо функція викликає через покажчик на AIX та 64-розрядних
Системи Linux. Якщо значення TOC не збережено в пролозі, воно зберігається безпосередньо перед цим
виклик через покажчик. The -mno-save-toc-indirect параметр за замовчуванням.

-mcompat-align-parm
-mno-compat-align-parm
Згенеруйте (не генеруйте) код для передачі параметрів структури з максимальним вирівнюванням
64 біт, для сумісності зі старішими версіями GCC.

Старіші версії GCC (до 4.9.0) неправильно не вирівнювали параметр структури
на 128-бітній межі, коли ця структура містила член, який вимагає 128-біт
вирівнювання. Це виправлено в останніх версіях GCC. Цей параметр можна використовувати
для створення коду, сумісного з функціями, скомпільованими зі старішими версіями
GCC.

Команда -mno-compat-align-parm параметр за замовчуванням.

RX Опції

Ці параметри командного рядка визначені для цілей RX:

-m64bit-подвійники
-m32bit-подвійники
Зробіть тип даних "подвійний" 64 біт (-m64bit-подвійники) або 32 біти (-m32bit-подвійники)
за розміром. За замовчуванням є -m32bit-подвійники. примітки Апаратне забезпечення RX з плаваючою комою працює лише
на 32-бітові значення, тому за замовчуванням є -m32bit-подвійники.

-fpu
-nofpu
Вмикає (-fpu) або вимикає (-nofpu) використання апаратного забезпечення RX з плаваючою комою. The
за замовчуванням увімкнено для серії RX600 і вимкнено для серії RX200.

Інструкції з плаваючою комою генеруються лише для 32-бітових значень з плаваючою комою,
однак, тому апаратне забезпечення FPU не використовується для дублів, якщо -m64bit-подвійники опція
використаний

примітки Якщо -fpu тоді параметр увімкнено -funsafe-math-optimizations також увімкнено
автоматично. Це тому, що інструкції RX FPU самі по собі небезпечні.

-mcpu=ім'я
Вибирає тип цільового ЦП RX. На даний момент підтримуються три типи:
родової RX600 та RX200 серії апаратних і спец RX610 ЦП. За замовчуванням є
RX600.

Єдина відмінність між ними RX600 та RX610 Ест дие ле RX610 не підтримує
Інструкція «МВТИПЛ».

Команда RX200 серія не має апаратної одиниці з плаваючою комою і так -nofpu увімкнено
за замовчуванням, коли вибрано цей тип.

-big-endian-data
-mlittle-endian-data
Зберігайте дані (але не код) у форматі big-endian. За замовчуванням є
-mlittle-endian-data, тобто зберігати дані у форматі малого байта.

-msmall-data-limit=N
Вказує максимальний розмір глобальних і статичних змінних, які можуть бути розміщені в байтах
в малу область даних. Використання невеликої області даних може призвести до меншої та швидшої
коду, але розмір області обмежений, і програміст повинен забезпечити це
площа не переповнюється. Також, коли невелика область даних використовується один із RX
регістри (зазвичай "r13") зарезервовано для використання, що вказують на цю область, тому його немає
більше доступний для використання компілятором. Це може призвести до уповільнення та/або збільшення
код, якщо змінні поміщаються в стек, а не зберігаються в цьому регістрі.

Зверніть увагу, що загальні змінні (змінні, які не були ініціалізовані) і константи є
не поміщаються в малу область даних, оскільки вони призначаються іншим розділам у
вихідний виконуваний файл.

Значення за замовчуванням дорівнює нулю, що вимикає цю функцію. Зауважте, цієї функції немає
увімкнено за замовчуванням з вищими рівнями оптимізації (-О2 тощо) через
потенційно шкідливі наслідки резервування реєстру. Це залежить від програміста
експериментувати та з’ясовувати, чи корисна ця функція їхній програмі. Побачити
опис -мпід варіант для опису того, як фактично зареєструватися
утримуйте вказівник невеликої області даних.

-msim
-мно-сім
Використовуйте час виконання симулятора. За замовчуванням використовується середовище виконання, специфічне для дошки libgloss.

-mas100-синтаксис
-mno-as100-синтаксис
Під час створення виводу асемблера використовуйте синтаксис, сумісний з AS100 Renesas
монтажник. Цей синтаксис також може оброблятися асемблером GAS, але він має деякі
обмеження, тому він не генерується за замовчуванням.

-mmax-constant-size=N
Вказує максимальний розмір константи в байтах, яку можна використовувати як операнд
інструкція RX. Хоча набір інструкцій RX допускає константи до 4
довжина байтів, що використовуються в інструкціях, довше значення дорівнює більшому
інструкція. Таким чином, за деяких обставин може бути корисно обмежити розмір
константи, які використовуються в інструкціях. Замість цього є занадто великі константи
поміщається в постійний пул і посилається через регістр опосередкованого напрямку.

Значення N може бути від 0 до 4. Значення 0 (за замовчуванням) або 4 означає, що
допускаються константи будь-якого розміру.

- розслабитися
Увімкнути релаксацію лінкера. Розслаблення лінкера – це процес, за допомогою якого лінкер намагається
зменшити розмір програми, знайшовши коротші версії різних інструкцій.
Вимкнено за умовчанням.

-mint-register=N
Вкажіть кількість регістрів, які потрібно зарезервувати для функцій обробника швидких переривань. The
значення N може бути від 0 до 4. Значення 1 означає, що регістр "r13" зарезервований
для ексклюзивного використання обробників швидких переривань. Значення 2 резерви «r13» і
"r12". Значення 3 резервів "r13", "r12" і "r11" і значення 4 резервів "r13"
через "r10". Значення 0 за замовчуванням не резервує жодних регістрів.

-msave-acc-in-interrupts
Вказує, що функції обробника переривань повинні зберігати регістр акумулятора.
Це необхідно лише в тому випадку, якщо звичайний код може використовувати регістр акумулятора, наприклад
оскільки він виконує 64-розрядні множення. За замовчуванням акумулятор ігнорується
оскільки це робить обробники переривань швидшими.

-мпід
-мно-під
Дозволяє генерувати незалежні від позиції дані. Коли ввімкнено будь-який доступ до
постійні дані виконуються через зміщення від базової адреси, що зберігається в регістрі. Це
дозволяє визначати розташування постійних даних під час виконання без необхідності
виконуваний файл, який буде переміщено, що є перевагою для вбудованих додатків із close
обмеження пам'яті. Цей параметр не впливає на дані, які можна змінити.

Зауважте, що використання цієї функції резервує регістр, зазвичай «r13», для постійних даних
базова адреса. Це може призвести до повільнішого та/або більшого коду, особливо у складному
функції.

Фактичний регістр, обраний для зберігання постійної адреси бази даних, залежить від того, чи
-msmall-data-limit та / або -монетний реєстр увімкнено параметри командного рядка.
Починаючи з регістра «r13» і продовжуючи вниз, першими виділяються регістри
щоб задовольнити вимоги -монетний реєстр, То -мпід і, нарешті
-msmall-data-limit. Таким чином, регістр малої області даних може бути "r8"
якщо обидва -mint-register=4 та -мпід вказуються в командному рядку.

За замовчуванням ця функція не ввімкнена. За замовчуванням можна відновити за допомогою -мно-під
параметр командного рядка.

-mno-warn-multiple-fast-interrupts
-mwarn-множинні-швидкі-переривання
Запобігає GCC від видачі попереджувального повідомлення, якщо він знаходить більше одного швидкого переривання
обробник під час компіляції файлу. За замовчуванням видає попередження для кожного додаткового
Знайдено обробник швидкого переривання, оскільки RX підтримує лише одне таке переривання.

Примітка: Загальний параметр командного рядка GCC -фіксований-Реджо має особливе значення для RX
порт при використанні з атрибутом функції "переривання". Цей атрибут вказує на a
функція, призначена для обробки швидких переривань. GCC гарантує, що використовує лише регістри
"r10", "r11", "r12" та/або "r13" і лише за умови, що нормальне використання
відповідні реєстри були обмежені через -фіксований-Реджо or -монетний реєстр
параметри командного рядка.

S / 390 та zSeries Опції

Це -m параметри, визначені для архітектури S/390 і zSeries.

-mhard-float
-msoft-float
Використовуйте (не використовуйте) апаратні інструкції з плаваючою комою та регістри для floating-
точкові операції. Коли -msoft-float вказано, функціонує в libgcc.a звикли
виконувати операції з плаваючою комою. Коли -mhard-float вказано, компілятор
генерує інструкції IEEE з плаваючою комою. Це значення за замовчуванням.

-mhard-dfp
-mno-hard-dfp
Використовуйте (не використовуйте) апаратні інструкції з плаваючою комою для десяткового
операції з плаваючою комою. Коли -mno-hard-dfp вказано, функціонує в libgcc.a він має
використовується для виконання десяткових операцій з плаваючою комою. Коли -mhard-dfp вказано,
компілятор генерує апаратні інструкції з десятковою плаваючою комою. Це значення за замовчуванням
та цінності -march=z9-ec або вище.

-млонг-подвійний-64
-млонг-подвійний-128
Ці перемикачі керують розміром типу «довгий подвійний». Розмір 64 біта робить
"long double" тип еквівалентний типу "double". Це значення за замовчуванням.

-mbackchain
-мно-бекчейн
Зберігайте (не зберігайте) адресу кадру абонента як покажчик бекчейна в
кадр стека викликаного. Для налагодження за допомогою інструментів може знадобитися бекчейн
не розуміють інформацію про кадр виклику DWARF 2. Коли -mno-packed-stack В
ефект, покажчик бекчейна зберігається в нижній частині кадру стека; коли
-mpacked-stack фактично, бекчейн розміщується в самому верхньому слові
Область збереження реєстру 96/160 байт.

Загалом, код скомпільований з -mbackchain сумісний із викликом із кодом, скомпільованим з
-mmo-backchain; однак використання бекчейна для цілей налагодження зазвичай вимагає
з яким побудовано весь двійковий файл -mbackchain. Зверніть увагу, що поєднання з
-mbackchain, -mpacked-stack та -mhard-float не підтримується. Для того щоб побудувати а
використання ядра linux -msoft-float.

За замовчуванням не підтримується бекчейн.

-mpacked-stack
-mno-packed-stack
Використовуйте (не використовуйте) макет упакованого стека. Коли -mno-packed-stack вказано,
Компілятор використовує всі поля області збереження регістру розміром 96/160 байт тільки для їх
призначення за замовчуванням; невикористані поля все ще займають місце в стеку. Коли -mpacked-stack is
зазначено, слоти збереження регістру щільно запаковані у верхній частині збереження регістру
площа; невикористаний простір повторно використовується для інших цілей, що дозволяє більш ефективно використовувати його
доступний простір стека. Однак коли -mbackchain також діє, найвищий
слово області збереження завжди використовується для зберігання бекчейну та зворотної адреси
register завжди зберігається на два слова нижче бекчейна.

Поки не використовується бекчейн кадрів стека, код, згенерований за допомогою -mpacked-stack
сумісний із викликом із кодом, згенерованим за допомогою -mno-packed-stack. Зверніть увагу, що деякі не FSF
випуски GCC 2.95 для згенерованого коду S/390 або zSeries, який використовує кадр стека
бекчейн під час виконання, а не лише для налагодження. Такий код не викликає-
сумісний з кодом, скомпільованим з -mpacked-stack. Також зверніть увагу, що поєднання з
-mbackchain, -mpacked-stack та -mhard-float не підтримується. Для того щоб побудувати а
використання ядра linux -msoft-float.

За замовчуванням не використовувати макет упакованого стека.

-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.

-мзарх
-меса
Коли -мзарх вказано, згенеруйте код, використовуючи інструкції, доступні на
z/Архітектура. Коли -меса вказано, згенеруйте код, використовуючи інструкції
доступний на ESA/390. Зауважте, що -меса неможливо з -м64. При генерації
код, сумісний із GNU/Linux для S/390 ABI, за замовчуванням -меса. При генерації
код, сумісний з GNU/Linux для zSeries ABI, за замовчуванням -мзарх.

-mmvcle
-mno-mvcle
Згенеруйте (або не генеруйте) код за допомогою інструкції "mvcle" для виконання блоку
рухається. Коли -mno-mvcle вказано, замість цього використовуйте цикл "mvc". Це значення за замовчуванням
якщо не оптимізувати розмір.

-mdebug
-mno-налагодження
Роздрукуйте (або не друкуйте) додаткову інформацію про налагодження під час компіляції. За замовчуванням є
щоб не друкувати налагоджувальну інформацію.

-березень=тип процесора
Згенеруйте код, який працює на тип процесора, що є назвою системи, що представляє a
певний тип процесора. Можливі значення для тип процесора він має g5, g6, z900, z990, z9-109,
z9-ec, z10, z196, zEC12 та z13. При генерації коду скористайтеся інструкцією
доступний на z/Architecture, за замовчуванням -березень=z900. В іншому випадку, за замовчуванням
-марш=g5.

-mtune=тип процесора
Налаштуйтеся на тип процесора все, що стосується згенерованого коду, крім ABI
і набір доступних інструкцій. Список тип процесора значення такі ж, як і для
- марш. За замовчуванням використовується значення для - марш.

-mtpf-trace
-mno-tpf-trace
Згенеруйте код, який додає (не додає) специфічні гілки ОС TPF для відстеження підпрограм
в операційній системі. Цей параметр вимкнено за замовчуванням, навіть під час компіляції для
ОС TPF.

-змішаний-божевільний
-мно-злитий-мадд
Створіть код, який використовує (не використовує) множення та накопичення з плаваючою комою
інструкції. Ці інструкції генеруються за замовчуванням, якщо апаратна з плаваючою комою
використовується.

-mwarn-framesize=розмір кадру
Видавати попередження, якщо поточна функція перевищує заданий розмір кадру. Тому що це є
перевірка під час компіляції, це не повинно бути справжньою проблемою під час виконання програми. Це
призначений для визначення функцій, які, швидше за все, викликають переповнення стека. це є
корисно для використання в середовищі з обмеженим розміром стека, наприклад, ядро ​​Linux.

-mwarn-динамічний стек
Видавати попередження, якщо функція викликає "alloca" або використовує масиви динамічного розміру. Це
як правило, це погана ідея з обмеженим розміром стека.

-mstack-guard=стек-охоронець
-mstack-size=розмір стопки
Якщо ці параметри передбачені, сервер S/390 видає додаткові інструкції в файлі
Пролог функції, який запускає пастку, якщо розмір стека дорівнює стек-охоронець байт вище
розмір стопки (Пам’ятайте, що стек на S/390 зростає вниз). Якщо стек-охоронець
Опція опускається найменша потужність на 2 більша за розмір кадру скомпільованого
обрана функція. Ці параметри призначені для використання для налагодження стека
проблеми з переповненням. Додатково випромінюваний код викликає лише невеликі накладні витрати і
тому може також використовуватися в виробничих системах без більшої продуктивності
деградація. Наведені значення мають бути точними степенями 2 і розмір стопки повинен бути
більше стек-охоронець не перевищуючи 64 тис. Щоб бути ефективним, доп
код робить припущення, що стек починається з адреси, вирівняної за значенням
дається розмір стопки, стек-охоронець опцію можна використовувати лише разом із
розмір стопки.

-mhotpatch=попередні напівслова,після напівслова
Якщо параметр гарячого виправлення увімкнено, для нього створюється пролог функції "гарячого виправлення".
всі функції в блоці компіляції. Перед міткою функції стоїть дане
кількість двобайтових інструкцій NOP (попередні напівслова, максимум 1000000). Після
етикетка, 2 * після напівслова байти додаються, використовуючи найбільші інструкції, подібні до NOP
архітектура дозволяє (максимум 1000000).

Якщо обидва аргументи нульові, гаряче виправлення вимкнено.

Цю опцію можна замінити для окремих функцій з атрибутом «hotpatch».

Рахунок Опції

Ці параметри визначені для реалізацій Score:

-меб
Скомпілювати код для режиму big-endian. Це значення за замовчуванням.

-мел
Скомпілювати код для режиму малого ланцюга.

-mnhwloop
Вимкнути генерацію інструкцій "bcnz".

-мулс
Увімкнути створення неузгоджених інструкцій завантаження та збереження.

-ммак
Увімкніть використання інструкцій множення-нагромадження. Вимкнено за замовчуванням.

-mscore5
Вкажіть SCORE5 як цільову архітектуру.

-mscore5u
Вкажіть SCORE5U цільової архітектури.

-mscore7
Вкажіть SCORE7 як цільову архітектуру. Це значення за замовчуванням.

-mscore7d
Вкажіть SCORE7D як цільову архітектуру.

SH Опції

Ці -m визначені параметри для реалізацій SH:

-м1 Згенеруйте код для SH1.

-м2 Згенеруйте код для SH2.

-m2e
Згенеруйте код для SH2e.

-m2a-nofpu
Згенеруйте код для SH2a без FPU або для SH2a-FPU таким чином, щоб
одиниця з плаваючою комою не використовується.

-m2a-лише одиночний
Згенеруйте код для SH2a-FPU таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m2a-один
Згенеруйте код для SH2a-FPU, припускаючи, що одиниця з плаваючою комою має одинарну точність
режим за замовчуванням.

-m2a
Згенеруйте код для SH2a-FPU, припускаючи, що одиниця з плаваючою комою має подвійну точність
режим за замовчуванням.

-м3 Згенеруйте код для SH3.

-m3e
Згенеруйте код для SH3e.

-m4-nofpu
Згенеруйте код для SH4 без одиниці з плаваючою комою.

-m4-лише одиночний
Згенеруйте код для SH4 за допомогою блоку з плаваючою комою, який підтримує лише одинарний
точна арифметика.

-m4-один
Згенеруйте код для SH4, припускаючи, що одиниця з плаваючою комою перебуває в режимі одинарної точності
за замовчуванням

-м4 Згенеруйте код для SH4.

-m4-100
Згенеруйте код для SH4-100.

-m4-100-nofpu
Згенеруйте код для SH4-100 таким чином, щоб одиниця з плаваючою комою не використовувалася.

-m4-100-одиночний
Згенеруйте код для SH4-100, припускаючи, що одиниця з плаваючою комою перебуває в режимі одинарної точності
за замовчуванням

-m4-100-лише одиночний
Згенеруйте код для SH4-100 таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4-200
Згенеруйте код для SH4-200.

-m4-200-nofpu
Згенеруйте код для SH4-200 без таким чином, щоб одиниця з плаваючою комою не була
використаний

-m4-200-одиночний
Згенеруйте код для SH4-200, припускаючи, що одиниця з плаваючою комою перебуває в режимі одинарної точності
за замовчуванням

-m4-200-лише одиночний
Згенеруйте код для SH4-200 таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4-300
Згенеруйте код для SH4-300.

-m4-300-nofpu
Згенеруйте код для SH4-300 без таким чином, щоб одиниця з плаваючою комою не була
використаний

-m4-300-одиночний
Згенеруйте код для SH4-300 таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4-300-лише одиночний
Згенеруйте код для SH4-300 таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4-340
Згенеруйте код для SH4-340 (без MMU, без FPU).

-m4-500
Згенеруйте код для SH4-500 (без FPU). Проходить -isa=sh4-nofpu до асемблера.

-m4a-nofpu
Згенеруйте код для SH4al-dsp або для SH4a таким чином, щоб з плаваючою комою
одиниця не використовується.

-m4a-лише одиночний
Згенеруйте код для SH4a таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4a-один
Згенеруйте код для SH4a, припускаючи, що одиниця з плаваючою комою має одинарну точність
режим за замовчуванням.

-m4a
Згенеруйте код для SH4a.

-m4al
Такий же, як -m4a-nofpu, за винятком того, що він неявно проходить -dsp до асемблера. GCC
на даний момент не створює жодних інструкцій DSP.

-m5-32media
Згенеруйте 32-розрядний код для SHmedia.

-m5-32media-nofpu
Згенеруйте 32-розрядний код для SHmedia таким чином, щоб одиниця з плаваючою комою не була
використаний

-m5-64media
Згенеруйте 64-розрядний код для SHmedia.

-m5-64media-nofpu
Згенеруйте 64-розрядний код для SHmedia таким чином, щоб одиниця з плаваючою комою не була
використаний

-m5-компактний
Згенеруйте код для SHcompact.

-m5-compact-nofpu
Згенеруйте код для SHcompact таким чином, щоб одиниця з плаваючою комою не використовувалася.

-мб Скомпілювати код для процесора в режимі big-endian.

-мл Скомпілювати код для процесора в режимі малого байта.

-mdalign
Вирівняти подвоєння за 64-бітними межами. Зауважте, що це змінює конвенції викликів,
і, таким чином, деякі функції зі стандартної бібліотеки C не працюють, якщо ви не перекомпілюєте
це спочатку з -mdalign.

- розслабитися
Скоротіть деякі посилання на адресу під час посилання, якщо це можливо; використовує параметр компонування
- розслабитися.

- велика таблиця
Використовуйте 32-бітові зміщення в таблицях "перемикання". За замовчуванням використовуються 16-бітові зміщення.

-бітопс
Увімкнути використання інструкцій маніпуляції бітами на SH2A.

-mfmovd
Увімкніть використання інструкції «fmovd». Перевірте -mdalign для обмежень вирівнювання.

-мренеси
Дотримуйтесь умов дзвінків, визначених Renesas.

-мно-ренеси
Дотримуйтесь умов викликів, визначених для GCC до конвенцій Renesas
були доступні. Цей параметр є за замовчуванням для всіх цілей ланцюжка інструментів SH.

-mnomacsave
Позначте регістр "MAC" як заблокований виклик, навіть якщо -мренеси дається.

-миее
-мно-іее
Контролюйте відповідність IEEE порівнянь з плаваючою комою, що впливає на обробку
випадків, коли результат порівняння не впорядкований. За замовчуванням -миее is
неявно ввімкнено. Якщо -фінітна-математична увімкнено -мно-іее встановлюється неявно,
що призводить до швидшого порівняння з плаваючою комою, більший-рівний і менший-рівний. The
Параметри implcit можна змінити, вказавши будь-яке -миее or -мно-іее.

-minline-ic_invalidate
Вбудований код для скасування записів кешу інструкцій після налаштування вкладеної функції
батути. Цей параметр не діє, якщо - режим користувача діє і вибрано
варіант генерації коду (напр -м4) не дозволяє використовувати інструкцію "icbi".
Якщо вибраний параметр генерації коду не дозволяє використовувати "icbi"
інструкція, і - режим користувача не діє, вбудований код маніпулює
масив адрес кешу інструкцій безпосередньо з асоціативним записом. Це не тільки
вимагає привілейованого режиму під час виконання, але він також не працює, якщо був рядок кешу
відображено через TLB і стало невідображеним.

- неправильний розмір
Розмір і розташування інструкції дампу в коді зборки.

-mpadstruct
Ця опція не підтримується. Він доповнює структури до 4 байтів, тобто
несумісний з SH ABI.

-matomic-model=модель
Встановлює модель атомарних операцій і додаткові параметри через кому
список. Детальніше про атомарні вбудовані функції див __атомний Вбудовані,
підтримуються такі моделі та параметри:

ніхто
Вимкніть згенеровані компілятором атомарні послідовності та випустіть бібліотечні виклики для atomic
операції. Це значення за замовчуванням, якщо ціль не "sh*-*-linux*".

м’який-гуса
Створення атомних послідовностей програмного забезпечення gUSA, сумісного з GNU/Linux для вбудованого атома
у функціях. Створені атомні послідовності потребують додаткової підтримки з боку
код обробки переривань/виключень системи і підходять лише для SH3* і
Одноядерні системи SH4*. Ця опція ввімкнена за замовчуванням, коли ціль є
"sh*-*-linux*" і SH3* або SH4*. Якщо метою є SH4A, ця опція також
частково використовує апаратні атомарні інструкції "movli.l" і "movco.l" для
створювати більш ефективний код, якщо строгий вказано.

soft-tcb
Створення програмних атомних послідовностей, які використовують змінну в управлінні потоком
блокувати. Це варіант послідовностей gUSA, який також можна використовувати на SH1*
і цілі SH2*. Створені атомні послідовності потребують додаткової підтримки з
код обробки переривань/виключень системи та підходять лише для
одноядерні системи. При використанні цієї моделі, gbr-offset= параметр повинен бути
також зазначено.

м'яка-маска
Генеруйте програмні атомарні послідовності, які тимчасово вимикають переривання шляхом налаштування
«SR.IMASK = 1111». Ця модель працює тільки тоді, коли програма працює в привілейованому режимі
і підходить лише для одноядерних систем. Додаткова підтримка від
Код обробки переривань/виключень системи не потрібен. Ця модель є
увімкнено за замовчуванням, якщо цільовим є "sh*-*-linux*" і SH1* або SH2*.

hard-llcs
Згенеруйте апаратні атомні послідовності за допомогою інструкцій "movli.l" і "movco.l".
тільки Це доступне лише на SH4A і підходить для багатоядерних систем.
Оскільки апаратні інструкції підтримують лише 32-розрядні атомарні змінні, доступ до 8
або 16-розрядні змінні емулюються з 32-розрядними доступами. Код, скомпільований з цим
Опція також сумісна з іншим програмним забезпеченням атомарної моделі переривання/виключення
системи обробки, якщо вони виконуються на системі SH4A. Додаткова підтримка від
Для цієї моделі не потрібен код обробки переривань/виключень системи.

gbr-offset=
Цей параметр визначає зміщення в байтах змінної в елементі керування потоком
блокова структура, яка повинна використовуватися створеними атомними послідовностями, коли
soft-tcb модель обрана. Для інших моделей цей параметр ігнорується.
Вказане значення має бути цілим кратним чотирьом і знаходитися в діапазоні від 0 до 1020.

строгий
Цей параметр запобігає змішаному використанню кількох атомних моделей, навіть якщо вони є
сумісний, і змушує компілятор генерувати атомні послідовності вказаного
тільки модель.

-mtas
Згенеруйте код операції "tas.b" для "__atomic_test_and_set". Зверніть увагу, що залежно від
конкретна конфігурація апаратного та програмного забезпечення може погіршити загальну продуктивність
через очищення рядка кешу операндів, які мають на увазі інструкцію "tas.b". Увімкнено
багатоядерні процесори SH4A інструкцію "tas.b" слід використовувати з обережністю, оскільки вона
може призвести до пошкодження даних для певних конфігурацій кешу.

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

- режим користувача
-mno-usermode
Не дозволяти (дозволити) компілятору генерувати код привілейованого режиму. Уточнення
- режим користувача також передбачає -mno-inline-ic_invalidate якщо вбудований код не працюватиме
в режимі користувача. - режим користувача є за замовчуванням, якщо цільовим є "sh*-*-linux*". Якщо
мета SH1* або SH2* - режим користувача не впливає, оскільки немає режиму користувача.

-multcost=номер
Встановіть вартість для примноження insn.

-mdiv=стратегія
Встановити стратегію поділу, яка буде використовуватися для цілочисельних операцій поділу. Для SHmedia
стратегія може бути одним з:

fp Виконує операцію з плаваючою комою. Це має дуже високу затримку, але потребує
лише кілька інструкцій, тому це може бути хорошим вибором, якщо вашого коду достатньо
ILP, що легко використовується, щоб дозволити компілятору планувати роботу з плаваючою комою
інструкції разом з іншими інструкціями. Ділення на нуль викликає а
виняток з плаваючою комою.

фактура Використовує цілі операції для обчислення оберненого дільника, а потім
множить дивіденд на обернений. Ця стратегія дозволяє CSE та підйому
зворотного обчислення. Ділення на нуль обчислює невизначений результат,
але не захоплює.

інв:мінлат
Варіант фактура де, якщо не було знайдено жодних CSE або можливостей підйому, або якщо
вся операція була піднята на те саме місце, останні етапи
Зворотні обчислення переплітаються з кінцевим множенням, щоб зменшити загальне
затримки, за рахунок використання кількох інструкцій і, таким чином, пропозиції менше
можливості планування за допомогою іншого коду.

call
Викликає бібліотечну функцію, яка зазвичай реалізує інв:мінлат стратегія. Це
дає високу щільність коду для компіляцій "m5-*media-nofpu".

дзвінок2
Використовує іншу точку входу тієї ж функції бібліотеки, де передбачається, що a
покажчик на таблицю пошуку вже налаштовано, що надає навантаження на покажчик
до CSE та оптимізації підняття коду.

інв:дзвінок
inv:call2
inv:fp
Використовувати фактура алгоритм початкового генерування коду, але якщо код залишається
неоптимізовано, поверніться до call, дзвінок2або fp стратегії, відповідно. Зауважте, що
потенційно-захоплюючий побічний ефект ділення на нуль переноситься окремою
інструкції, тому можливо, що всі цілі інструкції піднято,
але маркер побічного ефекту залишається на місці. Рекомбінація до
операції з плаваючою комою або виклик у цьому випадку неможливі.

inv20u
інв20л
Варіанти інв:мінлат стратегія. У випадку, якщо обернене обчислення
не відокремлені від множення, вони прискорюють ділення там, де підходить дивіденд
на 20 біт (знак плюс, якщо це можливо), вставивши тест, щоб пропустити кількість
операції в цьому випадку; цей тест уповільнює випадок більших дивідендів.
inv20u припускає, що такий малий дивіденд є малоймовірним, і інв20л
припускає, що це ймовірно.

Для цілей, відмінних від SHmedia стратегія може бути одним з:

call-div1
Викликає бібліотечну функцію, яка використовує однокрокову інструкцію поділу "div1".
виконати операцію. Ділення на нуль обчислює невизначений результат і робить
не пастка. Це значення за замовчуванням, за винятком SH4, SH2A та SHcompact.

call-fp
Викликає бібліотечну функцію, яка виконує операцію з плаваючою подвійною точністю
точка. Ділення на нуль викликає виняток з плаваючою комою. Це значення за замовчуванням
для SHcompact з FPU. Вказати це для цілей, які не мають подвійного
Precision FPU за замовчуванням має значення "call-div1".

дзвінок стіл
Викликає бібліотечну функцію, яка використовує таблицю пошуку для малих дільників і
Інструкція "div1" з розрізненням регістру для більших дільників. Ділення на нуль
обчислює невизначений результат і не захоплює. Це значення за замовчуванням для SH4.
Вказати це для цілей, які не мають інструкцій динамічного зсуву за замовчуванням
до "call-div1".

Якщо стратегія поділу не вказана, вибирається стратегія за замовчуванням
на поточну мету. Для SH2A стратегією за замовчуванням є використання "divs" і "divu"
інструкції замість викликів бібліотечних функцій.

-accumulate-outgoing-args
Один раз зарезервуйте місце для вихідних аргументів у пролозі функції, а не навколо
кожен дзвінок. Як правило, це вигідно для продуктивності та розміру. Також необхідний для розслаблення
щоб уникнути зміни фрейму стека навколо умовного коду.

-mdivsi3_libfunc=ім'я
Встановіть назву функції бібліотеки, яка використовується для 32-розрядного ділення зі знаком ім'я, це
впливає лише на назву, використану в call та інв:дзвінок стратегії поділу та
компілятор все ще очікує тих самих наборів регістрів введення/виводу/захищеності, як якщо б це
варіанта не було.

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який розподільник регістрів не може використовувати. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-індексована адресація
Увімкнути використання режиму індексованої адресації для SHmedia32/SHcompact. Це тільки
безпечно, якщо апаратне забезпечення та/або ОС реалізують 32-розрядну семантику обертання для індексованого
режим адресації. Архітектура дозволяє реалізувати процесори з 64-розрядними
MMU, який ОС може використовувати для отримання 32-розрядної адресації, але без поточного обладнання
реалізація підтримує цей або будь-який інший спосіб зробити режим індексованої адресації безпечним
для використання в 32-розрядній ABI за замовчуванням -mno-індексована-адресація.

-mgettrcost=номер
Встановіть передбачувану вартість для інструкції "gettr". номер. За замовчуванням 2 if
-mpt-виправлено діє, 100 в іншому випадку.

-mpt-виправлено
Припустимо, що інструкції "pt*" не перехоплюють. Це зазвичай генерує краще запланований код,
але це небезпечно на поточному обладнанні. Нинішнє визначення архітектури говорить про це
"ptabs" і "ptrel" пастку, коли ціль anded з 3 дорівнює 3. Це має
ненавмисний ефект, що робить небезпечним планування виконання цих інструкцій до a
гілки, або підняти їх із петлі. Наприклад, "__do_global_ctors", частина
libgcc який запускає конструктори під час запуску програми, викликає функції у списку, який є
розмежований -1. З -mpt-виправлено варіант, "ptabs" виконується перед тестуванням
проти -1. Це означає, що всі конструктори працюють трохи швидше, але коли
цикл доходить до кінця списку, програма аварійно завершує роботу, оскільки "ptabs" завантажує -1 в
цільовий реєстр.

Оскільки цей параметр небезпечний для будь-якого обладнання, що реалізує поточну архітектуру
специфікації, за замовчуванням -mno-pt-фіксований. Якщо не вказано явно з
-mgettrcost, -mno-pt-фіксований також передбачає -mgettrcost=100; це стримує реєстрацію
виділення з використанням цільових регістрів для зберігання звичайних цілих чисел.

-minvalid-символи
Припустимо, що символи можуть бути недійсними. Звичайні символи функцій, згенеровані компілятором
завжди дійсні для завантаження за допомогою "movi"/"shori"/"ptabs" або "movi"/"shori"/"ptrel", але
за допомогою трюків ассемблера та/або компонувальника можна генерувати символи, які викликають
"ptabs" або "ptrel" для захоплення. Цей варіант має значення лише тоді, коли -mno-pt-фіксований В
ефект. Це запобігає перехресному базовому блоку CSE, підйому та більшій частині планування символу
навантаження. За замовчуванням є -mno-invalid-symbols.

-mbranch-cost=Num
Припустимо Num бути витратою на інструкцію філії. Більші числа роблять компілятор
спробуйте створити більше коду без розгалужень, якщо це можливо. Якщо не вказано значення
вибирається залежно від типу процесора, для якого компілюється.

-mzdcгілка
-mno-zdcgranch
Припустимо (не припускаємо), що нульове зміщення умовного розгалуження інструкцій "bt" і
"bf" швидкі. Якщо -mzdcгілка вказано, компілятор віддає перевагу нульовому зміщенню
кодові послідовності гілки. Це ввімкнено за замовчуванням під час генерації коду для SH4 і
SH4A. Його можна явно вимкнути, вказавши -mno-zdcgranch.

-mcbranch-force-dey-slot
Примусово використовувати слоти затримки для умовних розгалужень, що заповнює слот затримки
з "nop", якщо не вдається знайти відповідну інструкцію. За замовчуванням ця опція є
інвалід. Його можна ввімкнути, щоб обійти апаратні помилки, як було знайдено в оригіналі
SH7055.

-змішаний-божевільний
-мно-злитий-мадд
Створіть код, який використовує (не використовує) множення та накопичення з плаваючою комою
інструкції. Ці інструкції генеруються за замовчуванням, якщо апаратна з плаваючою комою
використовується. Машинозалежний -змішаний-божевільний опція тепер зіставлена ​​з машиною-
незалежний -ffp-contract=швидко варіант, і -мно-злитий-мадд відображається на
-ffp-contract=вимкнено.

-mfsca
-mno-fsca
Дозволити або заборонити компілятору видавати інструкцію «fsca» для синуса і косинуса
наближення. Варіант -mfsca необхідно використовувати в поєднанні з
-funsafe-math-optimizations. Він включений за замовчуванням під час генерації коду для SH4A.
використання -mno-fsca вимикає синус і косинус наближення, навіть якщо
-funsafe-math-optimizations діє.

-мфсрра
-мно-фсрра
Дозволити або заборонити компілятору видавати інструкцію "fsrra" для зворотного квадрата
кореневі наближення. Варіант -мфсрра необхідно використовувати в поєднанні з
-funsafe-math-optimizations та -фінітна-математична. Він увімкнено за замовчуванням, коли
генерування коду для SH4A. Використання -мно-фсрра вимикає зворотний квадратний корінь
наближення, навіть якщо -funsafe-math-optimizations та -фінітна-математична знаходяться в
ефект

-mpend-cmove
Віддавайте перевагу умовним розгалуженням з нульовим зміщенням для інструкції умовного переміщення
візерунки. Це може призвести до прискорення коду на процесорі SH4.

Solaris 2 Опції

Ці -m Параметри підтримуються в Solaris 2:

-mclear-hwcap
-mclear-hwcap повідомляє компілятору видалити апаратні можливості, згенеровані файлом
Монтажник Solaris. Це необхідно лише тоді, коли об’єктні файли не використовують розширення ISA
підтримуються поточною машиною, але перевірте під час виконання, чи використовувати їх.

-нечистий текст
-нечистий текст, використовується на додаток до - поділилися, повідомляє компілятору не передавати -z текст до
компонувальник під час зв’язування спільного об’єкта. Використовуючи цю опцію, ви можете зв’язати позицію-
залежний код у спільний об’єкт.

-нечистий текст пригнічує "переміщення залишаються проти розподілених, але не для запису
розділів" повідомлення про помилку компонувальника. Однак необхідні переміщення ініціюють копіювання на-
запису, а спільний об'єкт фактично не використовується між процесами. Замість
використання -нечистий текст, ви повинні скомпілювати весь вихідний код з -fpic or -fPIC.

Ці перемикачі підтримуються на додаток до перерахованого вище в Solaris 2:

-pthreads
Додайте підтримку багатопоточності за допомогою бібліотеки потоків POSIX. Цей параметр встановлює
прапори як для препроцесора, так і для компонувальника. Цей параметр не впливає на нитку
безпеку об'єктного коду, створеного компілятором, або бібліотек, що постачаються з ним.

-нитка
Це синонім до -pthreads.

SPARC Опції

Ці -m Параметри підтримуються на SPARC:

-mno-app-regs
-mapp-regs
Вказувати -mapp-regs для створення виводу за допомогою глобальних регістрів з 2 по 4, які
SPARC SVR4 ABI резервує для застосування. Як і глобальний регістр 1, кожен глобальний
Регістри з 2 по 4 потім розглядаються як доступний регістр, який блокується
виклики функцій. Це значення за замовчуванням.

Щоб бути повністю сумісним із SVR4 ABI за ціною деякої втрати продуктивності, вкажіть
-mno-app-regs. За допомогою цієї опції вам слід компілювати бібліотеки та системне програмне забезпечення.

-mflat
-мно-плоска
з -mflat, компілятор не генерує інструкції збереження/відновлення і використовує a
модель «плоского» або однорегістрового вікна. Ця модель сумісна зі звичайною
зареєструвати модель вікна. Локальні регістри та вхідні регістри (0--5) нерухомі
обробляються як регістри "збережених викликів" і за потреби зберігаються в стеку.

з -мно-плоска (за замовчуванням), компілятор генерує інструкції збереження/відновлення (крім
для функцій листка). Це нормальний режим роботи.

-mfpu
-mhard-float
Створити вихідні дані, що містять інструкції з плаваючою комою. Це значення за замовчуванням.

-mno-fpu
-msoft-float
Створити вихідні дані, що містять бібліотечні виклики для з плаваючою комою. Увага! необхідний
бібліотеки доступні не для всіх цілей SPARC. Зазвичай об'єкти
використовується звичайний компілятор C для машини, але це неможливо зробити безпосередньо в крос-
компіляція. Ви повинні зробити власні заходи, щоб забезпечити відповідну бібліотеку
функції для крос-компіляції. Вбудовані цілі sparc-*-aout та спаркліт-*-*
забезпечувати програмну підтримку з плаваючою комою.

-msoft-float змінює умову виклику у вихідному файлі; тому це лише
корисно, якщо ви компілюєте всі програми з цією опцією. Зокрема, потрібно
скласти libgcc.a, бібліотека, яка постачається з GCC, с -msoft-float для цього
працювати.

-mhard-quad-float
Створіть вихідні дані, що містять чотири слова (довгі подвійні) команди з плаваючою комою.

-msoft-quad-float
Згенерувати вихідні дані, що містять бібліотечні виклики для чотирьох слів (довгих подвійних) з плаваючою комою
інструкції. Викликані функції – це ті, які вказані в SPARC ABI. Це
за замовчуванням.

На момент написання цієї статті не існує реалізацій SPARC, які мають апаратну підтримку
чотирислівні інструкції з плаваючою комою. Усі вони викликають обробник пастки для одного з них
ці інструкції, а потім обробник пастки емулює ефект інструкції.
Через накладні витрати обробника пастки це набагато повільніше, ніж виклик бібліотеки ABI
рутини. Таким чином, -msoft-quad-float параметр за замовчуванням.

-mno-невирівняні-подвійники
-мунілінізовані-двійники
Припустимо, що подвійні мають 8-байтове вирівнювання. Це значення за замовчуванням.

з -мунілінізовані-двійники, GCC припускає, що двійники мають 8-байтове вирівнювання, лише якщо вони
містяться в іншому типі, або якщо вони мають абсолютну адресу. Інакше це
передбачає, що вони мають 4-байтове вирівнювання. Вказавши цю опцію, можна уникнути деяких рідкісних
проблеми сумісності з кодом, створеним іншими компіляторами. Це не за замовчуванням
оскільки це призводить до втрати продуктивності, особливо для коду з плаваючою комою.

- режим користувача
-mno-режим користувача
Не генеруйте код, який можна виконувати лише в режимі супервізора. Це актуально лише для
інструкція "casa", видана для процесора LEON3. Це значення за замовчуванням.

-mno-faster-structs
-mfaster-structs
з -mfaster-structs, компілятор припускає, що структури повинні мати 8 байт
вирівнювання. Це дозволяє використовувати пари інструкцій "ldd" і "std" для копій
у присвоєнні структури замість вдвічі більшої кількості пар "ld" і "st". Однак,
використання цього зміненого вирівнювання безпосередньо порушує SPARC ABI. Таким чином, це задумано
тільки для використання на цілях, де розробник визнає, що їх результуючий код є
прямо не відповідає правилам ABI.

-mcpu=тип_процесора
Встановіть набір інструкцій, набір регістрів і параметри планування команд
тип машини тип_процесора. Підтримувані значення для тип_процесора він має v7, кипарис, v8, супершпарк,
гіперспарк, Леон, leon3, leon3v7, спаркліт, f930, f934, sparclite86x, іскорка,
tsc701, v9, ультраспарк, ultrasparc3, Ніагара, ніагара2, ніагара3 та ніагара4.

Нативні інструменти Solaris і GNU/Linux також підтримують цю цінність рідний, який вибирає
найкращий варіант архітектури для хост-процесора. -mcpu = рідний не має ефекту, якщо
GCC не розпізнає процесор.

Параметри планування інструкцій за замовчуванням використовуються для значень, які вибирають
архітектура, а не реалізація. Це такі v7, v8, спаркліт, іскорка, v9.

Ось список кожної підтримуваної архітектури та її реалізацій.

v7 кипарис, leon3v7

v8 supersparc, hypersparc, leon, leon3

спаркліт
f930, f934, sparclite86x

іскорка
tsc701

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. The
Єдина відмінність від коду 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=іскорка, GCC генерує код для варіанту SPARClet SPARC
архітектури. Це додає ціле число множити, множити/накопичувати, цілочисельне ділення
інструкції кроку та сканування ("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, leon3v7, f930, f934, sparclite86x,
tsc701, ультраспарк, ultrasparc3, Ніагара, ніагара2, ніагара3 та ніагара4. З
власні інструменти Solaris і GNU/Linux, рідний також можна використовувати.

-mv8plus
-mno-v8plus
з -mv8plus, GCC генерує код для SPARC-V8+ ABI. Відмінність від V8
ABI полягає в тому, що глобальний і вихідний регістри вважаються шириною 64 біта. Це ввімкнено
за замовчуванням на Solaris у 32-розрядному режимі для всіх процесорів SPARC-V9.

-mvis
-мно-віс
з -mvis, GCC генерує код, який використовує переваги UltraSPARC Visual
Розширення набору інструкцій. За замовчуванням є -мно-віс.

-mvis2
-мно-вис2
з -mvis2, GCC генерує код, який використовує переваги версії 2.0 UltraSPARC
Розширення набору візуальних інструкцій. За замовчуванням є -mvis2 при націленні на процесор, що
підтримує такі інструкції, як UltraSPARC-III та новіші. Налаштування -mvis2 Також
Набори -mvis.

-mvis3
-мно-вис3
з -mvis3, GCC генерує код, який використовує переваги версії 3.0 UltraSPARC
Розширення набору візуальних інструкцій. За замовчуванням є -mvis3 при націленні на процесор, що
підтримує такі інструкції, як-от niagara-3 і пізніші. Налаштування -mvis3 також набори
-mvis2 та -mvis.

-mcbcond
-mno-cbcond
з -mcbcond, GCC генерує код, який використовує переваги порівняння та розгалуження
інструкції, як визначено в Sparc Architecture 2011. За замовчуванням є -mcbcond коли
орієнтований на процесор, який підтримує такі інструкції, наприклад niagara-4 і новіші.

-mpopc
-мно-попк
з -mpopc, GCC генерує код, який використовує переваги сукупності UltraSPARC
інструкція з підрахунку. За замовчуванням є -mpopc під час націлювання на процесор, який підтримує таке
інструкції, такі як Ніагара-2 і пізніші.

-mfmaf
-mno-fmaf
з -mfmaf, GCC генерує код, який використовує переваги UltraSPARC Fused Multiply-
Додайте розширення з плаваючою комою. За замовчуванням є -mfmaf при націленні на процесор, що
підтримує такі інструкції, як 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=який
Встановіть для моделі коду одну з

медлоу
Модель середнього/низького коду: 64-бітові адреси, програми повинні бути пов’язані в нижній 32
біт пам'яті. Програми можуть бути статично або динамічно пов'язані.

медмід
Середня/середня модель коду: 64-розрядні адреси, програми повинні бути пов’язані в нижній частині
44 біта пам’яті, сегменти тексту та даних мають бути меншими за 2 ГБ та
сегмент даних має розташовуватися в межах 2 Гб від текстового сегмента.

медани
Модель коду Medium/Anywhere: 64-розрядні адреси, програми можуть бути пов’язані будь-де
у пам’яті розмір сегментів тексту та даних не повинен перевищувати 2 Гб та даних
сегмент повинен знаходитися в межах 2 Гб від текстового сегмента.

embmedany
Модель коду Medium/Anywhere для вбудованих систем: 64-розрядні адреси, текст
і сегменти даних мають бути меншими за 2 ГБ, обидва починаються з будь-якого місця в пам’яті
(визначається під час посилання). Глобальний регістр %g4 вказує на базу даних
сегмент. Програми статично пов’язані, і PIC не підтримується.

-модель пам'яті=mem-модель
Встановіть модель пам’яті, яка діє на процесорі, на одну з

дефолт
Модель пам’яті за замовчуванням для процесора та операційної системи.

rmo Порядок розслабленої пам'яті

псо Часткове замовлення магазину

TSOs Загальне замовлення магазину

sc Послідовна послідовність

Ці моделі пам’яті формально визначені в Додатку D архітектури Sparc V9
вручну, як установлено в полі "PSTATE.MM" процесора.

-mstack-bias
-mno-stack-bias
з -mstack-bias, GCC припускає, що покажчик стека та покажчик кадру, якщо він присутній,
зміщуються на -2047, яке необхідно додати під час створення посилань на кадр стека. Це
є за замовчуванням у 64-розрядному режимі. В іншому випадку припустимо, що такого зміщення немає.

СПУ Опції

Ці -m на SPU підтримуються параметри:

-mwarn-reloc
-merror-reloc
Завантажувач для SPU не обробляє динамічні переміщення. За замовчуванням GCC дає an
помилка, коли він генерує код, який вимагає динамічного переміщення. -mno-error-reloc
вимикає помилку, -mwarn-reloc замість цього створює попередження.

-msafe-dma
-munsafe-dma
Інструкції, які ініціюють або тестують завершення DMA, не можна змінювати
щодо завантажень і сховищ пам’яті, до якої здійснюється доступ. З -munsafe-dma
Ви повинні використовувати ключове слово "volatile", щоб захистити доступ до пам'яті, але це може призвести до
неефективний код у місцях, де пам'ять, як відомо, не змінюється. Замість позначки
пам'ять як нестабільна, можна використовувати -msafe-dma щоб наказати компілятору обробити DMA
інструкції, які потенційно впливають на всю пам’ять.

-mbranch-підказки
За замовчуванням GCC генерує інструкцію підказки про розгалуження, щоб уникнути зупинок конвеєра
завжди прийняті або ймовірно взяті гілки. Підказка не генерується ближче 8
інструкції від свого відділення. Є мало причин для їх відключення, за винятком
налагодження, або щоб зробити об’єкт трохи меншим.

-msmall-mem
-mlarge-mem
За замовчуванням GCC генерує код, припускаючи, що адреси ніколи не перевищують 18 біт.
з -mlarge-mem генерується код, який передбачає повну 32-бітну адресу.

-mstdmain
За замовчуванням GCC зв’язується з кодом запуску, який бере на себе головну функцію в стилі SPU
інтерфейс (який має нетрадиційний список параметрів). З -mstdmain, посилання GCC
ваша програма проти коду запуску, який передбачає інтерфейс у стилі C99 як "основний",
включаючи локальну копію рядків "argv".

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який не може використовувати розподільник регістрів. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-mea32
-mea64
Скомпілювати код, припускаючи, що вказівники на адресний простір PPU доступні через "__ea"
іменований кваліфікатор адресного простору має ширину 32 або 64 біти. За замовчуванням 32 біти.
Оскільки це параметр зміни ABI, весь об’єктний код у виконуваному файлі має бути скомпільований
з тим же налаштуванням.

-madress-space-conversion
-mno-адресний простір-перетворення
Дозволити/заборонити обробку адресного простору "__ea" як надмножини загальної адреси
простір. Це дозволяє явне переведення типу між "__ea" і загальним покажчиком, а також
неявні перетворення загальних покажчиків у покажчики "__ea". За замовчуванням дозволено
перетворення покажчиків адресного простору.

-mcache-size=розмір кешу
Цей параметр контролює версію libgcc, яку компілятор посилає на виконуваний файл
і вибирає програмно-керований кеш для доступу до змінних за адресою "__ea".
простір із певним розміром кешу. Можливі варіанти для розмір кешу він має 8, 16, 32, 64
та 128. Розмір кешу за замовчуванням становить 64 КБ.

-matomic-оновлення
-mno-atomic-updates
Цей параметр контролює версію libgcc, яку компілятор посилає на виконуваний файл
і вибирає, чи будуть атомарні оновлення керованого програмним забезпеченням кешу змінних на стороні PPU
використовуються. Якщо ви використовуєте атомарні оновлення, змініть змінну PPU за допомогою коду SPU
Кваліфікатор адресного простору з іменем "__ea" не заважає змінам інших PPU
змінні, що знаходяться в одному рядку кешу з коду PPU. Якщо ви не використовуєте atomic
оновлення, такі перешкоди можуть виникнути; однак, запис рядків кешу назад більше
ефективний. Поведінка за замовчуванням — використання атомарних оновлень.

-mdual-nops
-mdual-nops=n
За замовчуванням GCC вставляє nops, щоб збільшити подвійну проблему, коли очікує її збільшення
продуктивність. n може бути значенням від 0 до 10. Менше n вставляє менше номерів. 10 є
за замовчуванням, 0 те саме, що -mno-dual-nops. Вимкнено з -Ос.

-mhint-max-nops=n
Максимальна кількість підказок для вставки для підказки гілки. Підказка гілки має бути не менше 8
інструкції від філії, на яку вона впливає. GCC вставки до n ні
застосуйте це, інакше він не генерує підказку гілки.

-mhint-max-distance=n
Кодування інструкції підказки розгалуження обмежує підказку в межах 256
інструкції філії, на яку вона впливає. За замовчуванням GCC перевіряє, чи він знаходиться всередині
125.

-msafe-підказки
Обійти апаратну помилку, яка призводить до зупинки SPU на невизначений термін. За замовчуванням GCC
вставляє інструкцію "hbrp", щоб переконатися, що ця затримка не станеться.

Опції та цінності SYSTEM V

Ці додаткові параметри доступні в System V Release 4 для сумісності з іншими
компілятори на цих системах:

-G Створіть спільний об’єкт. Рекомендується це - символічний or - поділилися використовувати замість цього.

- Qy Визначте версії кожного інструменту, який використовується компілятором, у асемблері ".ident".
директива у виводі.

-Qn Утримайтеся від додавання директив ".ident" до вихідного файлу (це за замовчуванням).

-YP,диски
Шукайте каталоги диски, і ніяких інших, для бібліотек, зазначених у -l.

-Там,реж
Подивіться в довіднику реж щоб знайти препроцесор M4. Асемблер використовує це
варіант.

ПЛИТКА-Gx Опції

Ці -m Параметри підтримуються на TILE-Gx:

-mcmodel=мала
Згенеруйте код для маленької моделі. Відстань для прямих дзвінків обмежена 500 м
в будь-який бік. Адреси, відносні до ПК, мають 32 біта. Абсолютна підтримка адрес
повний діапазон адрес.

-mcmodel=великий
Згенеруйте код для великої моделі. Немає обмежень щодо відстані дзвінка, ПК-
відносні адреси або абсолютні адреси.

-mcpu=ім'я
Вибирає тип ЦП, який буде цільовим. Наразі підтримується єдиний тип tilegx.

-м32
-м64
Згенеруйте код для 32-розрядного або 64-розрядного середовища. 32-розрядне середовище встановлює int,
long і вказівник на 32 біти. 64-розрядне середовище встановлює значення int на 32 біти та long і
покажчик на 64 біта.

-big-endian
-mlittle-endian
Згенеруйте код у режимі великого/маленького байду відповідно.

TILEPro Опції

Ці -m Опції підтримуються на TILEPro:

-mcpu=ім'я
Вибирає тип ЦП, який буде цільовим. Наразі підтримується єдиний тип tilepro.

-м32
Згенеруйте код для 32-розрядного середовища, яке встановлює int, long і покажчик на 32 біти.
Це єдина підтримувана поведінка, тому прапор по суті ігнорується.

V850 Опції

Ці -m визначені параметри для реалізацій V850:

-mlong-дзвінки
-mno-long-cales
Розглядайте всі дзвінки як далекі (близькі). Якщо дзвінки вважаються далекими,
компілятор завжди завантажує адресу функції в регістр і викликає непрямий виклик
через покажчик.

-мно-еп
-меп
Не оптимізуйте (не оптимізуйте) базові блоки, які використовують той самий покажчик індексу 4 або більше
разів, щоб скопіювати вказівник в регістр "ep" і використовувати коротші "sld" і "sst"
інструкції. The -меп Опція ввімкнена за замовчуванням, якщо ви оптимізуєте.

-мно-пролог-функція
-мпролог-функція
Не використовуйте (використовуйте) зовнішні функції для збереження та відновлення регістрів у пролозі
і епілог функції. Зовнішні функції працюють повільніше, але використовують менше коду
простір, якщо більше ніж одна функція зберігає однакову кількість регістрів. The
-мпролог-функція Опція ввімкнена за замовчуванням, якщо ви оптимізуєте.

-mspace
Намагайтеся зробити код якомога меншим. Наразі це просто вмикається -меп
та -мпролог-функція Варіанти.

-mtda=n
Помістіть статичні або глобальні змінні, розмір яких дорівнює n байт або менше в крихітну область даних
на який вказує регістр "ep". Маленька область даних може містити до 256 байт
(128 байт для посилань на байти).

-msda=n
Помістіть статичні або глобальні змінні, розмір яких дорівнює n байт або менше в малу область даних
на який вказує регістр "gp". Невелика область даних може вмістити до 64 кілобайт.

-mzda=n
Помістіть статичні або глобальні змінні, розмір яких дорівнює n байт або менше в перші 32
кілобайти пам'яті.

-mv850
Вкажіть, що цільовим процесором є V850.

-mv850e3v5
Вкажіть, що цільовим процесором є V850E3V5. Константа препроцесора
"__v850e3v5__" визначається, якщо використовується ця опція.

-mv850e2v4
Вкажіть, що цільовим процесором є V850E3V5. Це псевдонім для
-mv850e3v5 варіант.

-mv850e2v3
Вкажіть, що цільовим процесором є V850E2V3. Константа препроцесора
"__v850e2v3__" визначається, якщо використовується ця опція.

-mv850e2
Вкажіть, що цільовим процесором є V850E2. Константа препроцесора
"__v850e2__" визначається, якщо використовується ця опція.

-mv850e1
Вкажіть, що цільовим процесором є V850E1. Константи препроцесора
"__v850e1__" і "__v850e__" визначаються, якщо використовується ця опція.

-mv850es
Вкажіть, що цільовим процесором є V850ES. Це псевдонім для -mv850e1
варіант.

-mv850e
Вкажіть, що цільовим процесором є V850E. Константа препроцесора "__v850e__"
визначається, якщо використовується ця опція.

Якщо ні -mv850 ні -mv850e ні -mv850e1 ні -mv850e2 ні -mv850e2v3 ні -mv850e3v5
визначаються, тоді вибирається цільовий процесор за замовчуванням і відповідний __v850*__
визначена константа препроцесора.

Константи препроцесора "__v850" і "__v851__" завжди визначені, незалежно від
який варіант процесора є цільовим.

-mdisable-call
-mno-disable-call
Ця опція пригнічує створення інструкції "CALLT" для v850e, v850e1,
v850e2, v850e2v3 і v850e3v5 архітектури v850.

Цей параметр увімкнено за замовчуванням, коли використовується RH850 ABI (див -mrh850-abi), А також
вимкнено за замовчуванням, коли використовується GCC ABI. Якщо виконуються інструкції "CALLT".
генерується, то визначається символ препроцесора C "__V850_CALLT__".

- розслабитися
-мно-розслабитися
Передайте (або не передайте) своє - розслабитися параметр командного рядка для асемблера.

- довгі стрибки
-мно-стрибки в довжину
Вимкніть (або знову ввімкніть) генерацію інструкцій переходу щодо ПК.

-msoft-float
-mhard-float
Вимкніть (або знову ввімкніть) генерацію апаратних інструкцій з плаваючою комою. Це
Опція важлива лише тоді, коли є цільова архітектура V850E2V3 або вище. Якщо
апаратні інструкції з плаваючою комою генеруються потім препроцесором C
визначено символ "__FPU_OK__", інакше визначено символ "__NO_FPU__".

-млю
Дозволяє використовувати інструкцію e3v5 LOOP. Використання цієї інструкції не є
увімкнено за замовчуванням, коли вибрано архітектуру e3v5, оскільки вона все ще використовується
експериментальний.

-mrh850-abi
-мггс
Вмикає підтримку версії RH850 V850 ABI. Це значення за замовчуванням. З
до цієї версії ABI застосовуються такі правила:

* Структури та об'єднання цілого розміру повертаються через покажчик пам'яті, а не
реєстр.

* Великі структури та об'єднання (розміром більше 8 байт) передаються за значенням.

* Функції вирівнюються за 16-бітними межами.

* -m8byte-align підтримується параметр командного рядка.

* -mdisable-call параметр командного рядка ввімкнено за замовчуванням. The
-mno-disable-call параметр командного рядка не підтримується.

Коли ця версія ABI увімкнена, символ препроцесора C "__V850_RH850_ABI__"
визначено.

-mgcc-abi
Вмикає підтримку старої версії GCC V850 ABI. З цією версією ABI
застосовуються такі правила:

* Структури та об'єднання цілого розміру повертаються в регістр "r10".

* Великі структури та об'єднання (розміром більше 8 байт) передаються за посиланням.

* Функції вирівнюються за 32-бітними межами, якщо вони не оптимізовані за розміром.

* -m8byte-align параметр командного рядка не підтримується.

* -mdisable-call Параметр командного рядка підтримується, але не вмикається за замовчуванням.

Коли ця версія ABI увімкнена, символ препроцесора C "__V850_GCC_ABI__"
визначено.

-m8byte-align
-mno-8byte-align
Дозволяє підтримувати типи "подвійний" і "довгий довгий" для вирівнювання за 8-байтовими межами.
За замовчуванням обмежується вирівнювання всіх об’єктів не більше ніж 4 байтами. Коли
-m8byte-align фактично символ препроцесора C "__V850_8BYTE_ALIGN__" є
визначений.

- великий перемикач
Згенеруйте код, який підходить для великих таблиць перемикачів. Використовуйте цю опцію, лише якщо
асемблер/компоновник скаржиться на розгалуження за межами діапазону в таблиці перемикачів.

-mapp-regs
Ця опція змушує використовувати r2 і r5 в коді, згенерованому компілятором. Це
налаштування за замовчуванням.

-mno-app-regs
Ця опція змушує r2 і r5 розглядати як фіксовані регістри.

VAX Опції

Ці -m параметри визначені для VAX:

-мунікс
Не виводьте певні інструкції переходу ("aobleq" і так далі), які ассемблер Unix
оскільки VAX не може працювати на великій відстані.

-мгну
Виведіть ці інструкції переходу, припустивши, що працює асемблер GNU
використаний

-мг Вивести код для чисел із плаваючою комою у форматі G замість D-формату.

Visium Опції

-mdebug
Програма, яка виконує введення/виводу файлів і призначена для запуску на цільовому MCM, має бути
пов'язаний з цією опцією. Це призводить до того, що бібліотеки libc.a та libdebug.a підключаються.
Програму слід запускати на цільовому рівні під керуванням віддаленого налагодження GDB
заглушка.

-msim
Повинна бути програма, яка виконує введення-виведення файлів і призначена для запуску на симуляторі
пов'язаний з опцією. Це призводить до того, що бібліотеки libc.a і libsim.a будуть пов’язані.

-mfpu
-mhard-float
Згенеруйте код, що містить інструкції з плаваючою комою. Це значення за замовчуванням.

-mno-fpu
-msoft-float
Згенеруйте код, що містить бібліотечні виклики з плаваючою комою.

-msoft-float змінює умову виклику у вихідному файлі; тому це лише
корисно, якщо ви компілюєте всі програми з цією опцією. Зокрема, потрібно
скласти libgcc.a, бібліотека, яка постачається з GCC, с -msoft-float для цього
працювати.

-mcpu=тип_процесора
Встановіть набір інструкцій, набір регістрів і параметри планування команд
тип машини тип_процесора. Підтримувані значення для тип_процесора він має мкм, gr5 та gr6.

мкм є синонімом gr5 представлений для зворотної сумісності.

За замовчуванням (якщо не налаштовано інше), GCC генерує код для варіанту GR5
архітектура Visium.

з -mcpu=gr6, GCC генерує код для варіанту GR6 архітектури Visium.
Єдина відмінність від коду GR5 полягає в тому, що компілятор генерує переміщення блоку
інструкціям.

-mtune=тип_процесора
Встановіть параметри планування інструкцій для типу машини тип_процесора, але не встановлюйте
набір інструкцій або набір регістрів, що є параметром -mcpu=тип_процесора б.

-msv-режим
Згенеруйте код для режиму супервізора, де немає обмежень на доступ
до загальних реєстрів. Це значення за замовчуванням.

- режим користувача
Згенеруйте код для режиму користувача, де є доступ до деяких загальних регістрів
заборонено: на GR5 не можна отримати доступ до регістрів r24-r31 в цьому режимі; на
GR6, впливає лише на регістри r29–r31.

VMS Опції

Ці -m визначені параметри для реалізацій VMS:

-mvms-коди повернення
Повернути коди умов VMS з "main". За замовчуванням повертається умова в стилі POSIX
(наприклад, коди помилок).

-mdebug-main=префікс
Позначте першу процедуру, назва якої починається з префікс як основна рутина для
налагоджувач.

-mmalloc64
За замовчуванням 64-розрядні процедури виділення пам’яті.

-mpointer-size=розмір
Встановити розмір покажчиків за замовчуванням. Можливі варіанти для розмір він має 32 or коротка для 32 біт
покажчики, 64 or довго для 64-розрядних покажчиків, і немає для підтримки лише 32-бітових покажчиків.
Пізніший варіант вимикає "прагма pointer_size".

VxWorks Опції

Параметри в цьому розділі визначені для всіх цілей VxWorks. Варіанти, характерні для
цільове обладнання перелічено разом з іншими параметрами для цієї цілі.

-mrtp
GCC може генерувати код як для ядер VxWorks, так і для процесів реального часу (RTP). Це
опція перемикається від першого до другого. Він також визначає макрос препроцесора
"__RTP__".

-нестатичні
Зв’яжіть виконуваний файл RTP зі спільними бібліотеками, а не зі статичними бібліотеками. The
опції -статичний та - поділилися також може використовуватися для RTP; -статичний є типовим.

-Бстатичний
-Бдинамічний
Ці параметри передаються компонувальнику. Вони визначені для сумісності з
діаб.

-Xbind-ледачий
Увімкнути відкладене прив’язування викликів функцій. Цей параметр еквівалентний -Вл,-з, зараз і
визначено для сумісності з Diab.

-Xbind-зараз
Вимкнути відкладене прив’язування викликів функцій. Цей параметр є за замовчуванням і визначено для
сумісність з Diab.

x86 Опції

Ці -m параметри визначені для сімейства комп’ютерів x86.

-березень=тип процесора
Створіть інструкції для типу машини тип процесора. На відміну від -mtune=тип процесора,
який просто налаштовує згенерований код для вказаного тип процесора, -березень=тип процесора
дозволяє GCC генерувати код, який може взагалі не запускатися на інших процесорах
зазначено. Уточнення -березень=тип процесора мається на увазі -mtune=тип процесора.

Вибір для тип процесора є:

рідний
Це вибирає ЦП для створення коду під час компіляції, визначаючи
тип процесора компілятора. Використання -березня = рідний дозволяє все
підмножини інструкцій, які підтримуються локальною машиною (тому результат може не виконуватися
на різних машинах). Використання -mtune = рідний створює код, оптимізований для локального
машини під обмеженнями вибраного набору інструкцій.

i386
Оригінальний процесор Intel i386.

i486
Процесор Intel i486. (Для цього чіпа не реалізовано планування.)

i586
Пентіум
Процесор Intel Pentium без підтримки MMX.

pentium-mmx
Процесор Intel Pentium MMX, заснований на ядрі Pentium з підтримкою набору інструкцій MMX.

Pentiumpro
Процесор Intel Pentium Pro.

i686
При використанні з - марш, використовується набір інструкцій Pentium Pro, тому код виконується
на всіх мікросхемах сімейства i686. При використанні з -mtune, воно має те саме значення, що й
родової.

pentium2
Процесор Intel Pentium II, заснований на ядрі Pentium Pro з підтримкою набору інструкцій MMX.

pentium3
pentium3m
Процесор Intel Pentium III, заснований на ядрі Pentium Pro з набором інструкцій MMX і SSE
support.

пентіум-м
Intel Pentium M; малопотужна версія процесора Intel Pentium III з MMX, SSE і SSE2
підтримка набору інструкцій. Використовується ноутбуками Centrino.

pentium4
pentium4m
Процесор Intel Pentium 4 з підтримкою набору інструкцій MMX, SSE та SSE2.

Прескотт
Покращена версія процесора Intel Pentium 4 з інструкцією MMX, SSE, SSE2 і SSE3
встановити підтримку.

нокона
Покращена версія процесора Intel Pentium 4 з 64-розрядними розширеннями, MMX, SSE, SSE2 і
Підтримка набору інструкцій SSE3.

ядро2
Процесор Intel Core 2 з 64-розрядними розширеннями, MMX, SSE, SSE2, SSE3 і SSSE3
підтримка набору інструкцій.

нехалем
Процесор Intel Nehalem з 64-розрядними розширеннями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Підтримка набору інструкцій SSE4.2 і POPCNT.

Вестмір
Процесор 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.

плющовий міст
Процесор Intel Ivy Bridge з 64-розрядними розширеннями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Набір інструкцій SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND і F16C
support.

Haswell
Процесор Intel Haswell з 64-розрядними розширеннями, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, ІМТ, ІМТ2
і підтримка набору інструкцій F16C.

Бродвелл
Процесор 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.

Боннель
Процесор Intel Bonnell з 64-розрядними розширеннями, MOVBE, MMX, SSE, SSE2, SSE3 і SSSE3
підтримка набору інструкцій.

Сільвермонт
Процесор Intel Silvermont з 64-розрядними розширеннями, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
Підтримка набору інструкцій SSE4.1, SSE4.2, POPCNT, AES, PCLMUL і RDRND.

кнл Центральний процесор Intel Knight's Landing з 64-розрядними розширеннями, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, ІМТ,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER і AVX512CD
підтримка набору інструкцій.

k6 Процесор AMD K6 з підтримкою набору інструкцій MMX.

k6-2
k6-3
Покращені версії процесора AMD K6 з MMX і 3DNow! підтримка набору інструкцій.

Athlon
атлон-тберд
Процесор AMD Athlon з MMX, 3dNOW!, покращений 3DNow! та інструкції попередньої вибірки SSE
support.

атлон-4
athlon-xp
атлон-мп
Покращений процесор AMD Athlon з MMX, 3DNow!, покращений 3DNow! та повна інструкція SSE
встановити підтримку.

k8
оптерон
атлон64
athlon-fx
Процесори на базі ядра AMD K8 з підтримкою набору інструкцій x86-64, в т.ч
процесори AMD Opteron, Athlon 64 і Athlon 64 FX. (Це перевершує MMX,
SSE, SSE2, 3DNow!, покращений 3DNow! і 64-розрядні розширення набору інструкцій.)

k8-sse3
opteron-sse3
athlon64-sse3
Покращені версії ядер AMD K8 з підтримкою набору інструкцій SSE3.

amdfam10
Барселона
Процесори на базі ядер сімейства AMD 10h з підтримкою набору інструкцій x86-64. (Це
супернабори MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, покращений 3DNow!, ABM і 64-розрядна версія
розширення набору інструкцій.)

bdver1
Процесори на базі ядер сімейства AMD 15h з підтримкою набору інструкцій x86-64. (Це
супернабори FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM і 64-розрядні розширення набору інструкцій.)

bdver2
15-ядерні процесори сімейства AMD з підтримкою набору інструкцій 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-розрядний набір інструкцій
розширення.)

bdver3
15-ядерні процесори сімейства AMD з підтримкою набору інструкцій 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-розрядний набір інструкцій
розширення.

bdver4
15-ядерні процесори сімейства AMD з підтримкою набору інструкцій 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-розрядні розширення набору інструкцій.

btver1
Процесори на базі ядер сімейства AMD 14h з підтримкою набору інструкцій x86-64. (Це
супернабори MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM і 64-розрядний набір інструкцій
розширення.)

btver2
Процесори на основі 16-годових ядер AMD Family з підтримкою набору інструкцій x86-64. Це
включає MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX і 64-розрядні розширення набору інструкцій.

Winchip-c6
ЦП IDT WinChip C6, що працює так само, як i486 з додатковим набором інструкцій MMX
support.

лебідка2
IDT WinChip 2 CPU, що працює так само, як i486 з додатковими MMX і 3DNow!
підтримка набору інструкцій.

c3 VIA C3 CPU з MMX і 3DNow! підтримка набору інструкцій. (Немає розкладу
реалізовано для цього чіпа.)

c3-2
ЦП VIA C3-2 (Nehemiah/C5XL) з підтримкою набору інструкцій MMX і SSE. (Немає
для цього чіпа реалізовано планування.)

геоде
Вбудований процесор AMD Geode з MMX і 3DNow! підтримка набору інструкцій.

-mtune=тип процесора
Налаштуйтеся на тип процесора все, що стосується згенерованого коду, крім ABI
і набір доступних інструкцій. При виборі конкретного тип процесора розклад
що підходить для цього конкретного чіпа, компілятор не генерує жодного коду
який не може працювати на типі машини за замовчуванням, якщо ви не використовуєте a -березень=тип процесора варіант.
Наприклад, якщо GCC налаштовано для i686-pc-linux-gnu, тоді -mtune=pentium4 генерує
код, який налаштований для Pentium 4, але все ще працює на машинах i686.

Вибір для тип процесора такі ж, як для - марш. В додаток, -mtune підтримує 2
додаткові можливості для тип процесора:

родової
Створюйте код, оптимізований для найпоширеніших процесорів IA32/AMD64/EM64T. Якщо ви
знати ЦП, на якому буде виконуватися ваш код, то вам слід використовувати відповідний
-mtune or - марш варіант замість -mtune=загальний. Але, якщо не знаєш
саме те, що будуть мати користувачі ЦП вашої програми, то вам слід використовувати це
варіант.

Оскільки нові процесори розгортаються на ринку, поведінка цього параметра
зміниться. Тому, якщо ви оновлюєте GCC до новішої версії, генерація коду
керований цим параметром, зміниться відповідно до найбільших процесорів
поширений на момент випуску цієї версії GCC.

Немає ніякого -march=загальний варіант, тому що - марш вказує набір інструкцій
компілятор може використовувати, і немає загального набору інструкцій, застосовного до всіх
процесори. У контрасті, -mtune вказує на процесор (або, у цьому випадку,
колекція процесорів), для яких оптимізовано код.

Intel
Створюйте код, оптимізований для найновіших процесорів Intel, якими є Haswell
і Silvermont для цієї версії GCC. Якщо ви знаєте процесор, на якому ваш код
запуститься, то вам слід використовувати відповідний -mtune or - марш варіант замість
-mtune=intel. Але, якщо ви хочете, щоб ваша програма працювала краще на обох Haswell
і Silvermont, то вам слід скористатися цією опцією.

Оскільки нові процесори Intel розгортаються на ринку, поведінка цього
варіант зміниться. Тому, якщо ви оновлюєте GCC до новішої версії, код
покоління, яке контролюється цією опцією, буде змінено, щоб відображати найновішу версію Intel
процесорів на момент випуску цієї версії GCC.

Немає ніякого -march=intel варіант, тому що - марш вказує набір інструкцій
компілятор може використовувати, і немає загального набору інструкцій, застосовного до всіх
процесори. У контрасті, -mtune вказує на процесор (або, у цьому випадку,
колекція процесорів), для яких оптимізовано код.

-mcpu=тип процесора
Застарілий синонім до -mtune.

-mfpmath=блок
Створити арифметику з плаваючою комою для вибраної одиниці блок. Вибір для блок є:

387 Використовуйте стандартний співпроцесор 387 з плаваючою комою, присутній на більшості мікросхем
і емулювали інакше. Код, скомпільований з цією опцією, працює майже скрізь.
Тимчасові результати обчислюються з 80-бітовою точністю замість точності
визначений типом, що призводить до дещо інших результатів порівняно з більшістю
інші чіпси. Побачити -флоат-магазин для більш детального опису.

Це вибір за замовчуванням для цілей x86-32.

ESS Використовуйте скалярні інструкції з плаваючою комою, наявні в наборі інструкцій SSE. Це
Набір інструкцій підтримується Pentium III і новішими мікросхемами, а також в лінійці AMD
від чіпів Athlon-4, Athlon XP і Athlon MP. Попередня версія SSE
Набір інструкцій підтримує лише арифметику одинарної точності, отже, подвійний і
Арифметика розширеної точності все ще виконується за допомогою 387. Пізніша версія є
тільки в чіпах Pentium 4 і AMD x86-64, також підтримує арифметику подвійної точності.

Для компілятора x86-32 необхідно використовувати -березень=тип процесора, -мссе or -msse2 перемикає на
увімкніть розширення SSE та зробіть цю опцію ефективною. Для компілятора x86-64,
ці розширення ввімкнені за замовчуванням.

Отриманий код має бути значно швидшим у більшості випадків і
уникнути проблем числової нестабільності коду 387, але може порушити деякі існуючі
код, який очікує, що тимчасові файли становлять 80 біт.

Це вибір за замовчуванням для компілятора x86-64.

sse,387
sse+387
обидва
Спробуйте використати обидва набори інструкцій одночасно. Це ефективно подвоює
кількість доступних регістрів, а на мікросхемах з окремими виконавчими блоками по 387
і SSE - ресурси виконання. Використовуйте цю опцію з обережністю, оскільки вона залишається
експериментальний, оскільки розподільник регістрів GCC не моделює окремо
функціональні одиниці добре, що призводить до нестабільної роботи.

-masm=діалект
Виведіть інструкції зі складання за допомогою Select діалект. Також впливає на те, який діалект
використовується для базового "asm" і розширеного "asm". Підтримувані варіанти (у діалектному порядку). att
or Intel. За замовчуванням att. Дарвін не підтримує Intel.

-mieee-fp
-mno-ieee-fp
Контролюйте, чи використовує компілятор порівняння з плаваючою комою IEEE. Ці
правильно обробляти випадок, коли результат порівняння не впорядкований.

-msoft-float
Створити вихідні дані, що містять бібліотечні виклики для з плаваючою комою.

Увага! необхідні бібліотеки не є частиною GCC. Зазвичай об'єкти
використовується звичайний компілятор C для машини, але це не можна зробити безпосередньо в крос-
компіляція. Ви повинні зробити власні заходи, щоб забезпечити відповідну бібліотеку
функції для крос-компіляції.

На машинах, де функція повертає результати з плаваючою комою в регістрі 80387
стеку, деякі коди операцій з плаваючою комою можуть видаватись, навіть якщо -msoft-float використовується.

-mno-fp-ret-in-387
Не використовуйте регістри FPU для повернення значень функцій.

Звичайна конвенція про виклик має функції, які повертають значення типів "float" і "double"
в регістрі FPU, навіть якщо немає FPU. Ідея полягає в тому, що операційна система
має емулювати FPU.

Опція -mno-fp-ret-in-387 викликає повернення таких значень у звичайному ЦП
натомість реєструється.

-mno-fancy-math-387
Деякі емулятори 387 не підтримують інструкції "sin", "cos" і "sqrt" для
387. Вкажіть цей параметр, щоб уникнути створення цих інструкцій. Цей варіант є
за замовчуванням на OpenBSD і NetBSD. Ця опція замінюється, коли - марш вказує на це
цільовий ЦП завжди має FPU, тому інструкція не потребує емуляції.
Ці інструкції не створюються, якщо ви також не використовуєте
-funsafe-math-optimizations перемикач.

-злоякісний-подвійний
-mno-align-double
Контролюйте, чи GCC вирівнює змінні "double", "long double" та "long long" на a
межа з двох слів або межа з одного слова. Вирівнювання "подвійних" змінних за двома словами
boundary створює код, який працює дещо швидше на Pentium за рахунок більшого
пам'ять.

На x86-64, -злоякісний-подвійний увімкнено за замовчуванням.

Увага! якщо ви використовуєте -злоякісний-подвійний вимикач, конструкції, що містять перераховані вище типи
вирівняні інакше, ніж опубліковані специфікації бінарного інтерфейсу програми
для x86-32 і не сумісні в бінарному коді зі структурами в коді, скомпільованому без
той перемикач.

-m96bit-long-double
-m128bit-long-double
Ці перемикачі керують розміром типу «довгий подвійний». Бінарний файл програми x86-32
інтерфейс визначає розмір 96 біт, тому -m96bit-long-double є за замовчуванням в
32-розрядний режим.

Сучасні архітектури (Pentium і новіші) вважають за краще, щоб "довгий подвійний" був вирівняний з 8-
або 16-байтовий кордон. У масивах або структурах, що відповідають ABI, це не так
можливо. Так уточнюючи -m128bit-long-double вирівнює "long double" до 16-байт
границі шляхом заповнення "довгого подвійного" додатковим 32-бітовим нулем.

У компіляторі x86-64, -m128bit-long-double є вибором за замовчуванням як його ABI
вказує, що "long double" вирівнюється за 16-байтовою межею.

Зауважте, що жодна з цих опцій не забезпечує додаткову точність порівняно зі стандартом x87
80 біт для "довгого подвійного".

Увага! якщо ви перевизначите значення за замовчуванням для цільового ABI, це змінить розмір
структур і масивів, що містять змінні "long double", а також змінюють
умова про виклик функцій для функцій, які беруть "long double". Тому їх немає
бінарно-сумісний із кодом, скомпільованим без цього перемикача.

-млонг-подвійний-64
-млонг-подвійний-80
-млонг-подвійний-128
Ці перемикачі керують розміром типу «довгий подвійний». Розмір 64 біта робить
"long double" тип еквівалентний типу "double". Це значення за замовчуванням для 32-біт
Бібліотека Bionic C. Розмір 128 біт робить тип "long double" еквівалентним
Тип "__float128". Це значення за замовчуванням для 64-розрядної бібліотеки Bionic C.

Увага! якщо ви перевизначите значення за замовчуванням для цільового ABI, це змінить розмір
структур і масивів, що містять змінні "long double", а також змінюють
умова про виклик функцій для функцій, які беруть "long double". Тому їх немає
бінарно-сумісний із кодом, скомпільованим без цього перемикача.

-malign-data=тип
Керуйте тим, як GCC вирівнює змінні. Підтримувані значення для тип він має Compat використання збільшилося
сумісне значення вирівнювання використовує GCC 4.8 і більш ранні, ABI використовує значення вирівнювання як
визначені psABI, і кешлін використовує збільшене значення вирівнювання для відповідності
розмір рядка кешу. Compat є типовим.

-mlarge-data-threshold=поріг
Коли -mcmodel=середній вказано, об’єкти даних більше ніж поріг розміщуються в
великий розділ даних. Це значення має бути однаковим для всіх об’єктів, до яких пов’язано
двійковий файл і за замовчуванням 65535.

-mrtd
Використовуйте іншу конвенцію про виклик функцій, в якій функції, які приймають фіксований
кількість аргументів повертається з "ret кількість" інструкція, яка висуває свої аргументи
під час повернення. Це зберігає одну інструкцію в абоненті, оскільки в цьому немає потреби
наведіть туди аргументи.

Ви можете вказати, що окрема функція викликається з цією послідовністю викликів
атрибут функції "stdcall". Ви також можете перевизначити -mrtd варіант за допомогою
атрибут функції "cdecl".

Увага! ця умова виклику несумісна з тим, що зазвичай використовується в Unix,
тому ви не можете використовувати його, якщо вам потрібно викликати бібліотеки, скомпільовані за допомогою компілятора Unix.

Крім того, ви повинні надати прототипи функцій для всіх функцій, які беруть змінну
кількість аргументів (включаючи «printf»); інакше для генерується неправильний код
виклики цих функцій.

Крім того, якщо ви викликаєте функцію із занадто великою кількістю, результатом буде серйозно неправильний код
аргументи. (Як правило, додаткові аргументи нешкідливо ігноруються.)

-mregparm=Num
Контролюйте, скільки регістрів використовується для передачі цілих аргументів. За замовчуванням ні
регістри використовуються для передачі аргументів, і можна використовувати щонайбільше 3 регістри. Ти можеш
керувати цією поведінкою для певної функції за допомогою атрибута function
"regparm".

Увага! якщо ви використовуєте цей перемикач, і Num відмінний від нуля, то ви повинні побудувати всі модулі
з тим же значенням, включаючи будь-які бібліотеки. Це включає системні бібліотеки та
модулі запуску.

-msseregparm
Використовуйте конвенції про передачу регістрів SSE для аргументів із плаваючою та подвійною величиною та значень, що повертаються.
Ви можете керувати цією поведінкою для певної функції за допомогою атрибута 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 ​​і новіших версій.
Only використовуйте цю опцію, якщо вам потрібно залишатися сумісним із існуючим кодом, створеним
ті попередні версії компілятора або старіші версії GCC.

-mpc32
-mpc64
-mpc80
Встановіть 80387 точність з плаваючою комою на 32, 64 або 80 біт. Коли -mpc32 зазначено,
значущі результати операцій з плаваючою комою округляються до 24 біт
(одинарна точність); -mpc64 округлює значущі результати результатів з плаваючою комою
операції до 53 біт (подвійна точність) і -mpc80 округлює значущі результати
операцій з плаваючою комою до 64 біт (розширена подвійна точність), що є
за замовчуванням. Коли використовується цей параметр, виконуються операції з плаваючою комою з більш високою точністю
недоступний для програміста без явного встановлення керуючого слова FPU.

Встановлення округлення операцій з плаваючою комою на менше, ніж 80 біт за замовчуванням
швидкість деяких програм на 2% і більше. Зауважте, що деякі математичні бібліотеки припускають це
операції з плаваючою комою з розширеною точністю (80 біт) увімкнені за замовчуванням; рутини
у таких бібліотеках може зазнати значної втрати точності, як правило, через таку
називається «катастрофічне скасування», коли ця опція використовується для встановлення точності до
менша, ніж розширена точність.

-mstackrealign
Перевирівняти стек при вході. На x86, -mstackrealign опція створює an
альтернативний пролог і епілог, які перебудовують стек часу виконання, якщо це необхідно. Це
підтримує змішування застарілих кодів, які зберігають 4-байтове вирівнювання стека з сучасними кодами, які
зберігайте 16-байтове вирівнювання стека для сумісності з SSE. Дивіться також атрибут
"force_align_arg_pointer", застосовний до окремих функцій.

-mpreferred-stack-boundary=Num
Спробуйте зберегти межу стека вирівняною з 2, підвищеною до Num межа байта. Якщо
-mpreferred-stack-boundary не вказано, за замовчуванням 4 (16 байт або 128 біт).

Увага! При генерації коду для архітектури x86-64 з розширеннями SSE
інвалід, -mpreferred-stack-boundary=3 можна використовувати для вирівнювання меж стека
до межі 8 байт. Оскільки x86-64 ABI вимагає вирівнювання стека 16 байт, це ABI
несумісний і призначений для використання в контрольованому середовищі, де є простір стека
важливе обмеження. Цей параметр призводить до неправильного коду, коли функції скомпільовані з 16
вирівнювання стека байтів (наприклад, функції зі стандартної бібліотеки) викликається with
неправильно вирівняний стек. У цьому випадку інструкції SSE можуть призвести до неправильного доступу до пам’яті
пастки. Крім того, аргументи змінних обробляються неправильно для вирівняних 16 байтів
об'єкти (включаючи x87 long double і __int128), що призводить до неправильних результатів. Ти повинен
побудувати всі модулі з -mpreferred-stack-boundary=3, включаючи будь-які бібліотеки. Це
включає системні бібліотеки та модулі запуску.

-mincoming-stack-boundary=Num
Припустимо, що вхідний стек вирівняний за 2, піднятим до Num межа байта. Якщо
-mincoming-stack-boundary не вказано, той, який визначено
-mpreferred-stack-boundary використовується.

У Pentium і Pentium Pro значення "double" і "long double" мають бути вирівняні з
8-байтовий кордон (див -злоякісний-подвійний) або зазнають значної продуктивності під час виконання
штрафні санкції. У Pentium III тип даних розширення SIMD (SSE) "__m128" може
не працює належним чином, якщо він не вирівняний по 16 байтам.

Щоб забезпечити належне вирівнювання цих значень у стеку, межа стека має бути як
вирівнюється відповідно до вимог будь-якого значення, що зберігається в стеку. Далі, кожна функція
має бути згенеровано таким чином, щоб стек вирівнювався. Таким чином викликається функція
скомпільовано з вищою бажаною межею стека з функції, скомпільованої з нижчою
бажана межа стека, швидше за все, вирівнює стек. Рекомендується це
бібліотеки, які використовують зворотні виклики, завжди використовують налаштування за замовчуванням.

Це додаткове вирівнювання дійсно споживає додатковий простір у стеку і загалом збільшує код
розмір. Код, який чутливий до використання простору стека, наприклад, вбудовані системи та
ядра операційної системи, можливо, захочеться зменшити бажане вирівнювання до
-mpreferred-stack-boundary=2.

-мммх
-мссе
-msse2
-msse3
-mssse3
-msse4
-msse4a
-msse4.1
-msse4.2
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-мша
-маес
-mpclmul
-mclfushopt
-mfsgsbase
-мрдрнд
-mf16c
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dnow
-mpopcnt
-мабм
-mbmi
-mbmi2
-mlzcnt
-mfxsr
-mxsave
-mxsaveopt
-mxsavec
-mxsaves
-mrtm
-мтбм
-mmpx
-mmwaitx
Ці перемикачі дозволяють використовувати інструкції в 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, MPX, MWAITX або 3DNow! розширені набори інструкцій. Кожна має відповідну -мно-
можливість вимкнути використання цих інструкцій.

Ці розширення також доступні як вбудовані функції: див x86 Вбудований Функції,
для детальної інформації про функції, які вмикаються та вимкнені цими перемикачами.

Щоб автоматично генерувати інструкції SSE/SSE2 з коду з плаваючою комою (на противагу
до 387 інструкції), див -mfpmath=sse.

GCC притискає інструкції SSEx, коли -mavx використовується. Замість цього він генерує новий AVX
інструкції або еквівалентність AVX для всіх інструкцій SSEx, якщо це необхідно.

Ці параметри дозволяють GCC навіть використовувати ці розширені інструкції в згенерованому коді
без -mfpmath=sse. Програми, які виконують визначення ЦП під час виконання, повинні компілюватися
окремі файли для кожної підтримуваної архітектури, використовуючи відповідні прапорці. в
зокрема, файл, що містить код виявлення ЦП, повинен бути скомпільований без
ці варіанти.

-mdump-tune-features
Ця опція наказує GCC скинути назви функцій налаштування продуктивності x86 і
налаштування за замовчуванням. Назви можна використовувати в -mtune-ctrl=список функцій.

-mtune-ctrl=список функцій
Цей параметр використовується для точного контролю над функціями генерації коду x86.
список функцій це список, розділений комами особливість імена. Дивись також
-mdump-tune-features. Коли вказано, то особливість вмикається, якщо йому не передувати
з ^, інакше він вимкнено. -mtune-ctrl=список функцій призначений для використання
розробниками GCC. Його використання може призвести до шляхів коду, які не охоплені тестуванням і можуть
потенційно призведе до ICE компілятора або помилок під час виконання.

-mno-за замовчуванням
Цей параметр наказує GCC вимкнути всі настроювані функції. Дивись також
-mtune-ctrl=список функцій та -mdump-tune-features.

-mcld
Ця опція наказує GCC видавати інструкцію "cld" у пролозі функцій
які використовують рядкові інструкції. Рядкові інструкції залежать від прапора DF для вибору
між режимами автоінкременту або автодекременту. Хоча ABI визначає прапор DF до
очищається під час введення функції, деякі операційні системи порушують цю специфікацію, тому що ні
очищення прапора DF у своїх диспетчерах винятків. Обробником винятків може бути
викликається із встановленим прапором DF, що призводить до режиму неправильного напрямку під час рядка
використовуються інструкції. Цю опцію можна ввімкнути за замовчуванням для 32-розрядних цільових пристроїв x86 за допомогою
налаштування GCC за допомогою --enable-cld налаштувати параметр. Покоління "cld"
інструкції можна приховати за допомогою -мно-клд варіант компілятора в цьому випадку.

-mvzeroupper
Ця опція наказує GCC видавати інструкцію "vzeroupper" перед передачею
контроль потоку з функції, щоб мінімізувати покарання переходу AVX до SSE
як видалити непотрібні "zeroupper" внутрішні властивості.

-mprefer-avx128
Цей параметр наказує GCC використовувати 128-розрядні інструкції AVX замість 256-бітних AVX
інструкції в автовекторизаторі.

-mcx16
Цей параметр дозволяє GCC генерувати інструкції "CMPXCHG16B". «CMPXCHG16B» дозволяє
для атомарних операцій над 128-бітними типами даних з подвійним словом (або словом). Це
корисно для лічильників з високою роздільною здатністю, які можуть оновлюватися кількома процесорами (або
ядра). Ця інструкція генерується як частина атомарних вбудованих функцій: див
__sync Вбудовані or __атомний Вбудовані for details.

-msahf
Ця опція дозволяє генерувати інструкції «SAHF» у 64-розрядному коді. Ранній Intel
Процесори Pentium 4 з підтримкою Intel 64, до впровадження Pentium 4 G1 крок
у грудні 2005 р. не було інструкцій "LAHF" і "SAHF", які підтримуються
AMD64. Це інструкції завантаження та збереження, відповідно, для певних прапорців стану.
У 64-розрядному режимі інструкція "SAHF" використовується для оптимізації "fmod", "drem" і
«залишок» вбудованих функцій; побачити Інше Вбудовані for details.

-mmovbe
Цей параметр дозволяє використовувати інструкцію "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-math-optimizations вмикається разом з -тільки кінцева математика та
-fno-trapping-math. Зауважте, що в той час як пропускна здатність послідовності вища за
пропускна здатність невзаємної команди, точність послідовності може бути
зменшено до 2 ulp (тобто обернене значення 1.0 дорівнює 0.99999994).

Зверніть увагу, що GCC реалізує "1.0f/sqrtf(х)" в термінах "RSQRTSS" (або "RSQRTPS").
з -швидка математика (або наведена вище комбінація параметрів) і не потрібна -mrecip.

Також зверніть увагу, що GCC випускає наведену вище послідовність з додатковим кроком Ньютона-Рафсона для
векторизований одиночний поділ і векторизований "sqrtf(х)" вже з -швидка математика
(або наведена вище комбінація параметрів) і не потрібна -mrecip.

-mrecip=вибирати
Цей параметр визначає, які інструкції взаємної оцінки можуть використовуватися. вибирати це
розділений комами список опцій, якому може передувати a ! щоб інвертувати параметр:

всі Увімкнути всі інструкції щодо оцінки.

дефолт
Увімкнути інструкції за замовчуванням, еквівалентні до -mrecip.

ніхто
Вимкнути всі інструкції щодо оцінки, еквівалентно -мно-рецепт.

DIV Увімкнути апроксимацію для скалярного поділу.

vec-div
Увімкнути апроксимацію для векторизованого поділу.

кв
Увімкнути апроксимацію для скалярного квадратного кореня.

vec-sqrt
Увімкнути апроксимацію для векторизованого квадратного кореня.

Так, наприклад, -mrecip=все,!sqrt дозволяє всі взаємні наближення,
крім квадратного кореня.

-mveclibabi=тип
Визначає тип ABI, який використовуватиметься для векторізації внутрішніх елементів за допомогою зовнішньої бібліотеки.
Підтримувані значення для тип він має svml для бібліотеки коротких векторів Intel і acml
для бібліотеки математичного ядра AMD. Щоб скористатися цією опцією, обидва -ftree-векторизувати та
-funsafe-math-optimizations має бути увімкнено, а також 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=ім'я
Згенеруйте код для вказаної конвенції про виклик. Допустимі значення є sysv та цінності
ABI, що використовується в GNU/Linux та інших системах, і ms для Microsoft ABI. The
за замовчуванням використовувати Microsoft ABI для націлювання на Microsoft Windows і SysV ABI
на всіх інших системах. Ви можете керувати цією поведінкою для певних функцій за допомогою
атрибути функції "ms_abi" і "sysv_abi".

-mtls-dialect=тип
Згенеруйте код для доступу до локального сховища потоку за допомогою гну or gnu2 конвенції. гну
– консервативний дефолт; gnu2 є більш ефективним, але він може додати компіляцію та запуск
вимоги часу, які не можуть бути задоволені для всіх систем.

-mpush-args
-mno-push-args
Використовуйте операції PUSH для збереження вихідних параметрів. Цей метод коротший і зазвичай
однаково швидкий, як і метод, що використовує операції SUB/MOV, і ввімкнено за замовчуванням. В деяких
випадки його вимкнення може підвищити продуктивність через покращення планування та скорочення
залежності.

-accumulate-outgoing-args
Якщо ввімкнено, обчислюється максимальна кількість місця, необхідного для вихідних аргументів
пролог функції. Це швидше на більшості сучасних процесорів через зменшення
залежностей, покращене планування та зменшене використання стека при бажаному стеку
boundary не дорівнює 2. Недоліком є ​​помітне збільшення розміру коду. Це
перемикач має на увазі -mno-push-args.

-mthreads
Підтримка потокобезпечної обробки винятків на MinGW. Програми, які покладаються на потокобезпечні
Обробка винятків повинна скомпілювати та зв’язати весь код з -mthreads варіант. Коли
компіляція, -mthreads визначає -D_MT; під час зв'язування він посилається в спеціальному помічнику потоку
бібліотека - lmingwthrd який очищає дані обробки винятків для кожного потоку.

-mno-align-stringops
Не вирівнюйте призначення операцій із вбудованим рядком. Цей перемикач зменшує код
розмір і покращує продуктивність у випадку, якщо призначення вже вирівняно, але GCC
не знає про це.

-minline-all-stringops
За замовчуванням GCC вбудовує рядкові операції лише тоді, коли відомо, що це місце призначення
вирівняно щонайменше за 4-байтовою межею. Це забезпечує більше вбудовування та збільшує код
розмір, але може покращити продуктивність коду, яка залежить від швидкого «memcpy», «strlen» і
«memset» для короткої довжини.

-minline-stringops-динамічно
Для рядкових операцій невідомого розміру використовуйте перевірки під час виконання з вбудованим кодом для small
блоки та бібліотека викликають великі блоки.

-mstringop-strategy=ALG
Перевизначення внутрішньої евристики прийняття рішень для конкретного алгоритму, для якого потрібно використовувати
операції вбудовування рядків. Допустимі значення для ALG є:

rep_byte
rep_4byte
rep_8byte
Розгорніть, використовуючи префікс i386 "rep" зазначеного розміру.

byte_loop
петля
unrolled_loop
Розгорніть у вбудований цикл.

libcall
Завжди використовуйте виклик бібліотеки.

-mmemcpy-стратегія=стратегія
Перевизначте внутрішню евристику прийняття рішень, щоб вирішити, чи має бути "__builtin_memcpy".
inlined і який вбудований алгоритм використовувати при очікуваному розмірі операції копіювання
відомий. стратегія це список, розділений комами ALG:Максимальна кількість:dest_align трійні. ALG
вказано в -mstringop-стратегія, Максимальна кількість визначає максимальний розмір байта, з яким
вбудований алгоритм ALG дозволено. Для останньої трійки, Максимальна кількість має бути "-1". The
Максимальна кількість трійок у списку необхідно вказати в порядку зростання. The
мінімальний розмір байта для ALG дорівнює 0 для першої трійки і "Максимальна кількість + 1" в
попередній діапазон.

-mmemset-strategy=стратегія
Варіант схожий на -mmemcpy-стратегія= крім того, що це контроль
Розширення "__builtin_memset".

-momit-leaf-frame-pointer
Не зберігайте покажчик кадру в регістрі для листових функцій. Це дозволяє уникнути
інструкції для збереження, налаштування та відновлення покажчиків кадрів і створює додатковий регістр
доступний у функціях листа. Варіант -fomit-leaf-frame-pointer знімає рамку
покажчик на функції листка, що може ускладнити налагодження.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Контролює, чи можна отримати доступ до змінних TLS зі зміщеннями від сегмента TLS
регістр (%gs для 32-розрядного, %fs для 64-розрядного), або чи має бути базовий покажчик потоку
додано. Чи є це правильним чи ні, залежить від операційної системи та чи вона
відображає сегмент, щоб охопити всю область TLS.

Для систем, які використовують бібліотеку GNU C, за замовчуванням увімкнено.

-msse2avx
-mno-sse2avx
Вкажіть, що асемблер повинен кодувати інструкції SSE з префіксом VEX. Варіант
-mavx вмикає це за замовчуванням.

-mfentry
-мно-фентрі
Якщо профілювання активне (-стор), поставте виклик лічильника профілювання перед прологом.
Примітка: на архітектурах x86 атрибут "ms_hook_prologue" неможливий у
момент для -mfentry та -стор.

-mrecord-mcount
-mno-record-mcount
Якщо профілювання активне (-стор), створіть розділ __mcount_loc, який містить покажчики
на кожен виклик профілювання. Це корисно для автоматичного виправлення та відключення викликів.

-mnop-mcount
-mno-nop-mcount
Якщо профілювання активне (-стор), генерувати виклики до функцій профілювання як nops.
Це корисно, коли вони повинні бути виправлені пізніше динамічно. Це, ймовірно, тільки
корисно разом з -mrecord-mcount.

-mskip-rax-setup
-mno-skip-rax-setup
Під час створення коду для архітектури x86-64 з вимкненими розширеннями SSE,
-skip-rax-setup можна використовувати, щоб пропустити налаштування регістра RAX, коли немає змінних
аргументи, що передаються у векторних регістрах.

Увага! Оскільки регістр RAX використовується, щоб уникнути непотрібного збереження векторних регістрів
стека під час передачі змінних аргументів, вплив цієї опції може бути викликаним
витрачайте деяку кількість місця в стеку, погано поводьтеся або стрибайте у випадкове місце. GCC 4.4 або новішої версії
не мають таких проблем, незалежно від значення регістра RAX.

-m8bit-idiv
-mno-8bit-idiv
На деяких процесорах, таких як Intel Atom, 8-розрядне ціле беззнакове ділення набагато швидше, ніж
32-розрядне/64-розрядне ціле ділення. Цей параметр створює перевірку часу виконання. Якщо обидва
ділене і дільник знаходяться в діапазоні від 0 до 255, 8-бітове ціле беззнакове ділення є
використовується замість 32-розрядного/64-розрядного цілого поділу.

-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
Розділіть 32-байтове невирівняне завантаження та збереження.

-mstack-protector-guard=охорона
Згенеруйте код захисту стека за допомогою canary at охорона. Підтримувані місця розташування в цілому
для глобальної канарки або тлс для потокової канарки в блоці TLS (за замовчуванням). Це
Опція діє лише тоді, коли -fstack-протектор or -fstack-protector-all вказано.

Ці -m перемикачі підтримуються на додаток до вищезазначених на процесорах x86-64 у 64-розрядних версіях
Середовища.

-м32
-м64
-mx32
-м16
Згенеруйте код для 16-розрядного, 32-розрядного або 64-розрядного середовища. The -м32 набори параметрів "int",
"long", і вказівник вводить до 32 біт і генерує код, який працює на будь-якій системі i386.

Команда -м64 параметр встановлює "int" на 32 біти, а "long" і типи вказівників на 64 біти, і
генерує код для архітектури x86-64. Для Дарвіна тільки -м64 варіант також
вимикає -fno-pic та -mdynamic-no-pic Варіанти.

Команда -mx32 Параметр встановлює типи "int", "long" і вказівники на 32 біти і генерує код
для архітектури x86-64.

Команда -м16 варіант такий самий, як -м32, за винятком того, що він виводить ".code16gcc"
директиву зборки на початку виводу збірки, щоб двійковий файл міг працювати
в 16-бітному режимі.

-мно-червона-зона
Не використовуйте так звану «червону зону» для коду x86-64. Червона зона передбачена
x86-64 ABI; це 128-байтова область за межами розташування покажчика стека, яка не є
модифіковані обробниками сигналів або переривань і тому можуть використовуватися для тимчасових даних
без коригування покажчика стека. Прапор -мно-червона-зона вимикає цю червону зону.

-mcmodel=мала
Згенеруйте код для моделі малого коду: програма та її символи повинні бути пов’язані
нижчі 2 ГБ адресного простору. Вказівники мають 64 біта. Програми можуть бути
статично або динамічно пов'язані. Це модель коду за замовчуванням.

-mcmodel=ядро
Згенеруйте код для моделі коду ядра. Ядро працює в мінус 2 ГБ
адресний простір. Ця модель повинна використовуватися для коду ядра Linux.

-mcmodel=середній
Згенеруйте код для середньої моделі: програма пов'язана в нижніх 2 ГБ
адресний простір. Там же розміщуються невеликі символи. Символи з розмірами більше ніж
-mlarge-data-threshold поміщаються в розділи великих даних або BSS і можуть бути розташовані
понад 2 Гб. Програми можуть бути статично або динамічно пов'язані.

-mcmodel=великий
Згенеруйте код для великої моделі. Ця модель не робить припущень щодо адрес
і розміри секцій.

-maddress-mode=long
Згенеруйте код для режиму довгої адреси. Це підтримується лише для 64-розрядних і x32
середовища. Це режим адреси за замовчуванням для 64-розрядних середовищ.

-maddress-mode=короткий
Згенеруйте код для режиму короткої адреси. Це підтримується лише для 32-розрядних і x32
середовища. Це режим адреси за замовчуванням для 32-розрядних і x32 середовищ.

x86 Windows Опції

Ці додаткові параметри доступні для цілей Microsoft Windows:

-mconsole
Ця опція вказує, що консольна програма має бути створена за допомогою інструкцій
компонувальник для встановлення типу підсистеми заголовка PE, необхідного для консольних програм.
Цей параметр доступний для цілей Cygwin і MinGW і ввімкнено за замовчуванням
ці цілі.

-mdll
Ця опція доступна для цілей Cygwin і MinGW. Він визначає, що DLL---a
динамічна бібліотека посилань --- має бути згенерована, що дозволить вибрати потрібну
об’єкт запуску та точка входу під час виконання.

-mnop-fun-dllimport
Ця опція доступна для цілей Cygwin і MinGW. У ньому вказується, що
Атрибут "dllimport" слід ігнорувати.

-mthread
Ця опція доступна для цілей MinGW. Він визначає, що потік, специфічний для MinGW
має бути використана підтримка.

- municode
Ця опція доступна для цілей MinGW-w64. Це викликає препроцесор "UNICODE".
макрос, який потрібно попередньо визначити, і вибирає код запуску, що підтримує Unicode.

-mwin32
Ця опція доступна для цілей Cygwin і MinGW. У ньому вказується, що типовий
Попередньо визначені макроси Microsoft Windows мають бути встановлені в препроцесорі, але цього не роблять
впливати на вибір бібліотеки часу виконання/код запуску.

-mwindows
Ця опція доступна для цілей Cygwin і MinGW. Він визначає, що графічний інтерфейс
програма має бути згенерована шляхом вказівки компоновщику встановити заголовок PE
відповідний тип підсистеми.

-fno-set-stack-executable
Ця опція доступна для цілей MinGW. Він визначає, що виконуваний прапор для
стек, який використовується вкладеними функціями, не встановлено. Це необхідно для запуску бінарних файлів
в режимі ядра Microsoft Windows, оскільки там User32 API, який використовується для встановлення
виконувані привілеї, недоступні.

-fwritable-relocation-rdata
Ця опція доступна для цілей MinGW і Cygwin. У ньому вказується, що переміщено-
дані з розділу лише для читання поміщаються в розділ .data. Це необхідно для старших
середовища виконання не підтримують модифікацію розділів .rdata для псевдопереміщення.

-mpe-aligned-commons
Ця опція доступна для цілей Cygwin і MinGW. У ньому вказується, що GNU
розширення до формату файлу PE, що дозволяє правильне вирівнювання COMMON змінних
слід використовувати при генерації коду. Він увімкнено за замовчуванням, якщо GCC виявляє, що
цільовий асемблер, знайдений під час налаштування, підтримує цю функцію.

Дивіться також під x86 Опції для стандартних варіантів.

Xstormy16 Опції

Ці параметри визначені для Xstormy16:

-msim
Виберіть файли запуску та скрипт компоновника, які підходять для симулятора.

Xtensa Опції

Ці параметри підтримуються для цілей Xtensa:

-mconst16
-mno-const16
Увімкнути або вимкнути використання інструкцій "CONST16" для завантаження постійних значень. The
Інструкція "CONST16" наразі не є стандартною опцією від Tensilica. Коли
увімкнено, інструкції "CONST16" завжди використовуються замість стандартних "L32R"
інструкції. Використання "CONST16" увімкнено за замовчуванням, лише якщо "L32R"
інструкція недоступна.

-змішаний-божевільний
-мно-злитий-мадд
Увімкнути або вимкнути використання комбінованих інструкцій множення/додавання та множення/віднімання в
опція з плаваючою комою. Це не має ефекту, якщо параметр з плаваючою комою також не є
увімкнено. Вимкнення об’єднаних інструкцій множення/додавання та множення/віднімання змушує функціонувати
компілятор використовувати окремі інструкції для операцій множення та додавання/віднімання.
Це може бути бажаним у деяких випадках, коли результати суворо відповідають стандарту IEEE 754
обов’язковий: об’єднані інструкції множення додавання/віднімання не округляють проміжне значення
результат, тим самим роблячи результати с більше біт з точністю, ніж зазначено в
Стандарт IEEE. Вимкнення інструкцій додавання/віднімання комбінованого множення також гарантує це
вихід програми не чутливий до здатності компілятора комбінувати множення і
операції додавання/віднімання.

-mserialize-volatile
-mno-serialize-volatile
Коли цей параметр увімкнено, GCC вставляє інструкції «MEMW» перед «незалежною» пам’яттю
посилання, щоб гарантувати послідовну узгодженість. За замовчуванням є -mserialize-volatile.
Скористайтесь -mno-serialize-volatile щоб пропустити інструкції "MEMW".

-mforce-no-pic
Для цілей, таких як GNU/Linux, де весь код Xtensa в режимі користувача має бути позиційним
незалежного коду (PIC), цей параметр вимикає PIC для компіляції коду ядра.

-mtext-section-literals
-mno-text-section-literals
Ці параметри контролюють обробку буквальних пулів. За замовчуванням є
-mno-text-section-literals, який розміщує літерали в окремому розділі виводу
файл. Це дозволяє розміщувати пул літералів у RAM/ROM даних, а також дозволяє
компонувальник для об'єднання літеральних пулів з окремих об'єктних файлів для видалення зайвих
літералів та покращення розміру коду. З -mtext-section-literals, літерали є
вміщені в текстовий розділ, щоб тримати їх якомога ближче до своїх
посилання. Це може знадобитися для великих файлів збірки.

-mtarget-align
-mno-target-align
Коли цей параметр увімкнено, GCC інструктує асемблеру автоматично вирівнювати
інструкції щодо зменшення штрафів за гілки за рахунок деякої щільності коду. The
асемблер намагається розширити інструкції щільності, щоб вирівняти цілі гілок та
інструкції за інструкціями виклику. Якщо попереднього сейфа недостатньо
інструкції щільності для вирівнювання цілі, розширення не виконується. За замовчуванням є
-mtarget-align. Ці параметри не впливають на лікування автовирівнювання
інструкції на кшталт "LOOP", які асемблер завжди вирівнює, або шляхом розширення
інструкції щільності або вставивши інструкції NOP.

-довгі дзвінки
-мно-довгі дзвінки
Коли цей параметр увімкнено, GCC інструктує асемблеру транслювати прямі виклики
непрямі виклики, якщо він не може визначити, що ціль прямого виклику знаходиться в
діапазон, дозволений інструкцією виклику. Цей переклад зазвичай відбувається для дзвінків до
функції в інших вихідних файлах. Зокрема, асемблер перекладає прямий
Інструкція «CALL» у «L32R», за якою слідує інструкція «CALLX». За замовчуванням є
-мно-довгі дзвінки. Цю опцію слід використовувати в програмах, де це може викликати виклик
потенційно бути поза зоною дії. Ця опція реалізована на асемблері, а не в
компілятор, тому код ассемблера, згенерований GCC, все ще показує прямий виклик
інструкції --- подивіться на розібраний об'єктний код, щоб побачити фактичні інструкції.
Зауважте, що асемблер використовує непрямий виклик для кожного міжфайлового виклику, а не тільки
ті, які дійсно знаходяться поза зоною дії.

zSeries Опції

Вони перераховані під

Опції та цінності код Покоління Умовні
Ці незалежні від машини параметри керують умовами інтерфейсу, які використовуються в коді
покоління

Більшість із них мають як позитивні, так і негативні форми; негативна форма -ффу is
-fno-foo. У таблиці нижче перелічено лише одну з форм --- та, яка не є
за замовчуванням. Ви можете знайти іншу форму, видаливши ні- або додавши його.

-fbounds-перевірка
Для інтерфейсів, які це підтримують, створіть додатковий код, щоб перевірити, чи використовувалися індекси
масиви доступу знаходяться в межах оголошеного діапазону. Наразі це підтримується лише
Інтерфейси Java та Fortran, де цей параметр за замовчуванням має значення true та false
відповідно.

-fstack-reuse=рівень повторного використання
Цей параметр керує повторним використанням простору стека для оголошених користувачем локальних/автоматичних змінних і
компілятор згенерував тимчасові файли. reuse_level може бути всі, named_varsабо ніхто. всі
дозволяє повторно використовувати стек для всіх локальних змінних і тимчасових елементів, named_vars дозволяє
повторно використовувати лише для визначених користувачем локальних змінних з іменами та ніхто вимикає повторне використання стека
повністю. Значенням за замовчуванням є всі. Опція потрібна, коли програма розширюється
час життя локальної змінної з областю дії або компілятора, створеного тимчасово за межами
кінцева точка, визначена мовою. Коли закінчується термін життя змінної, і якщо
змінна живе в пам'яті, оптимізуючий компілятор має свободу повторно використовувати свій стек
простір з іншими тимчасовими або локальними змінними з областю дії, чий живий діапазон не відповідає
перекриваються з ним. Застарілий код, що подовжує локальний термін життя, ймовірно, порушить
оптимізація повторного використання стека.

Наприклад,

int *p;
{
int local1;

p = &local1;
локальний1 = 10;
....
}
{
int local2;
локальний2 = 20;
...
}

if (*p == 10) // поза межами використання local1
{

}

Інший приклад:

структура А
{
A(int k) : i(k), j(k) { }
int i;
int j;
};

A *ap;

void foo(const A& ar)
{
ap = &ar;
}

недійсний бар()
{
фу(A(10)); // Час життя тимчасового об'єкта закінчується, коли повертається foo

{
A a(20);
....
}
ap->i+= 10; // ap посилання поза межами temp, чий простір
// повторно використовується з a. Яке значення ап->і?
}

Тривалість життя компілятора, створеного тимчасово, чітко визначається стандартом C++.
Коли закінчується життя тимчасового, і якщо тимчасове живе в пам'яті, то
оптимізуючий компілятор має свободу повторно використовувати простір стека з іншими тимчасовими елементами або
локальні змінні з областю дії, живий діапазон яких не перекривається з ним. Однак деякі з
застарілий код спирається на поведінку старих компіляторів, у яких стек тимчасових файлів
простір не використовується повторно, агресивне повторне використання стека може призвести до помилок під час виконання. Це
Опція використовується для керування тимчасовою оптимізацією повторного використання стеку.

-ftrapv
Цей параметр генерує пастки для переповнення зі знаком при додаванні, відніманні,
операції множення.

-fwrapv
Цей параметр наказує компілятору припустити, що арифметичне переповнення зі знаком
Додавання, віднімання та множення обертаються за допомогою доповнення до двох
представництво. Цей прапорець вмикає деякі оптимізації та вимикає інші. Це
Параметр увімкнено за замовчуванням для інтерфейсу Java, як того вимагає мова Java
специфікація.

-фекційні виключення
Увімкнути обробку винятків. Генерує додатковий код, необхідний для поширення винятків. Для
деякі цілі, це означає, що GCC генерує інформацію розгортання кадру для всіх функцій,
що може призвести до значного обсягу даних, хоча це не впливає
виконання. Якщо ви не вкажете цей параметр, GCC вмикає його за замовчуванням для мов
на зразок C++, які зазвичай вимагають обробки винятків, і вимикає її для таких мов, як
C, які зазвичай цього не потребують. Однак, можливо, вам доведеться ввімкнути цю опцію, коли
компіляція коду C, який повинен належним чином взаємодіяти з написаними обробниками винятків
на C++. Ви також можете вимкнути цю опцію, якщо ви збираєте старіший C++
програми, які не використовують обробку винятків.

-fnon-call-exceptions
Створіть код, який дозволяє інструкціям захоплення генерувати винятки. Зауважте, що це
вимагає підтримки для конкретної платформи, яка існує не скрізь. Крім того,
це тільки дозволяє захоплення інструкції для створення винятків, тобто посилання на пам'ять або
інструкції з плаваючою комою. Він не дозволяє викидати винятки з довільних
обробники сигналів, такі як "SIGALRM".

-fdelete-dead-exceptions
Враховуйте, що інструкції, які можуть викликати винятки, але іншим чином не сприяють цьому
виконання програми можна оптимізувати. Цей параметр увімкнено за замовчуванням
для інтерфейсу Ada, як це дозволено специфікацією мови Ada. Оптимізація
проходи, які викликають видалення мертвих винятків, увімкнені незалежно на різних
рівні оптимізації.

-забавні столики
Як і в -фекційні виключення, за винятком того, що він просто генерує будь-які необхідні статичні дані, але
ніяким іншим чином не впливає на згенерований код. Зазвичай це не потрібно
включити цю опцію; натомість мовний процесор, який потребує такої обробки, увімкне її
від вашого імені.

-fasynchronous-wind-tables
Створіть таблицю розгортання у форматі DWARF 2, якщо це підтримується цільовою машиною. Стіл є
точний на кожній межі команди, тому його можна використовувати для розгортання стека
асинхронні події (наприклад, налагоджувач або збирач сміття).

-fno-gnu-унікальний
У системах з останнім асемблером GNU і бібліотекою C компілятор C++ використовує файл
"STB_GNU_UNIQUE", щоб переконатися, що визначення членів шаблону статичні
а статичні локальні змінні у вбудованих функціях є унікальними навіть за наявності
"RTLD_LOCAL"; це необхідно, щоб уникнути проблем з бібліотекою, яку використовують дві різні
Плагіни "RTLD_LOCAL" залежно від визначення в одному з них і тому
не погоджуючись з іншим щодо прив'язки символу. Але це викликає
«dlclose» ігнорується для постраждалих DSO; якщо ваша програма покладається на повторну ініціалізацію
DSO через "dlclose" і "dlopen", ви можете використовувати -fno-gnu-унікальний.

-fpcc-struct-return
Повертайте значення "short" "struct" і "union" в пам'ять, як довші, а не в
реєстри. Ця конвенція менш ефективна, але вона має перевагу, що дозволяє
взаємозв'язок між файлами, скомпільованими GCC, і файлами, скомпільованими з іншими компіляторами,
зокрема портативний компілятор C (pcc).

Точна конвенція для повернення структур у пам'ять залежить від мети
макроси конфігурації.

Короткі структури та союзи – це ті, чиї розміри та вирівнювання збігаються з деякими
цілочисельний тип.

Увага! код, скомпільований з -fpcc-struct-return комутатор не сумісний із двоїчною системою
з кодом, скомпільованим за допомогою -freg-struct-return перемикач. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-freg-struct-return
Повертайте значення "struct" і "union" в регістрах, якщо це можливо. Це ефективніше
для невеликих споруд ніж -fpcc-struct-return.

Якщо ви не вкажете ні те, ні інше -fpcc-struct-return ні -freg-struct-return, GCC за замовчуванням
будь-яка умова є стандартною для цілі. Якщо стандартної конвенції немає,
GCC за замовчуванням -fpcc-struct-return, за винятком цілей, де GCC є основним
компілятор. У цих випадках ми можемо вибрати стандарт, а ми вибрали більш ефективний
альтернатива повернення реєстру.

Увага! код, скомпільований з -freg-struct-return комутатор не сумісний із двоїчною системою
з кодом, скомпільованим за допомогою -fpcc-struct-return перемикач. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-fshort-перерахування
Виділіть типу "перерахування" стільки байтів, скільки йому потрібно для оголошеного діапазону
можливі значення. Зокрема, тип "enum" еквівалентний найменшому цілу
тип, який має достатньо місця.

Увага! -fshort-перерахування switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-fshort-подвійний
Використовуйте той самий розмір для "подвійного", що і для "float".

Увага! -fshort-подвійний switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-fshort-wchar
Замінити базовий тип для "wchar_t" на "short unsigned int" замість
за замовчуванням для цілі. Ця опція корисна для створення програм для виконання
ВИНО.

Увага! -fshort-wchar switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-fno-загальний
У коді C контролює розміщення неініціалізованих глобальних змінних. Компілятори Unix C
традиційно допускали кілька визначень таких змінних у різних
одиниці компіляції шляхом розміщення змінних у загальний блок. Така поведінка
визначено -fзагальний, і є за замовчуванням для GCC для більшості цілей. З іншої сторони,
ISO C не вимагає такої поведінки, а на деяких цілях може містити швидкість або код
обмеження розміру на змінні посилання. The -fno-загальний параметр визначає, що
компілятор повинен помістити неініціалізовані глобальні змінні в розділ даних об'єкта
файл, а не генерувати їх як загальні блоки. Це призводить до того, що якщо
одна і та ж змінна оголошується (без "extern") у двох різних компіляціях, ви отримуєте a
помилка множинного визначення, коли ви їх пов’язуєте. У цьому випадку ви повинні скомпілювати з
-fзагальний замість цього. Компіляція з -fno-загальний корисно для цілей, для яких він
забезпечує кращу продуктивність, або якщо ви хочете переконатися, що програма працюватиме далі
інші системи, які завжди обробляють оголошення неініціалізованих змінних таким чином.

-fno-ідентифікатор
Ігноруйте директиву "#ident".

-finhibit-size-директива
Не виводьте директиву ассемблера ".size" або будь-що інше, що може викликати проблеми
якщо функція розділена посередині, а дві половини розміщені в далеких місцях
окремо в пам'яті. Цей параметр використовується під час компіляції crtstuff.c; тобі не треба
використовувати його для чогось іншого.

-fverbose-asm
Додайте додаткову інформацію про коментарі в згенерований код збірки, щоб зробити його більшим
читабельний. Ця опція, як правило, корисна лише тим, кому дійсно потрібно прочитати
згенерований код збірки (можливо, під час налагодження самого компілятора).

-fno-verbose-asm, за замовчуванням, спричиняє пропуск додаткової інформації та є
корисно при порівнянні двох файлів ассемблера.

-frecord-gcc-перемикачі
Цей перемикач викликає запис командного рядка, який використовується для виклику компілятора
об’єктний файл, який створюється. Цей перемикач реалізований лише на деяких
цілі, а точний формат запису — цільовий і двійковий формат файлу
залежний, але зазвичай він має форму розділу, що містить текст ASCII. Це
перемикач пов'язаний з -fverbose-asm switch, але цей перемикач лише записує
інформацію у вихідному файлі ассемблера як коментарі, тому вона ніколи не досягає об’єкта
файл. Дивись також -grecord-gcc-перемикачі для іншого способу зберігання параметрів компілятора
об'єктний файл.

-fpic
Згенеруйте незалежний від позиції код (PIC), придатний для використання в спільній бібліотеці, якщо
підтримується для цільової машини. Такий код отримує доступ до всіх постійних адрес через a
глобальна таблиця зсуву (GOT). Динамічний завантажувач вирішує записи GOT, коли
програма запускається (динамічний завантажувач не є частиною GCC; він є частиною операційної
система). Якщо розмір GOT для пов’язаного виконуваного файлу перевищує максимальний для машини
size, ви отримаєте повідомлення про помилку від компонувальника, що вказує на це -fpic не працює; в
у цьому випадку перекомпілюйте з -fPIC замість цього. (Ці максимуми становлять 8 тис. для SPARC і 32 тис
на m68k і RS/6000. У x86 такого обмеження немає.)

Незалежний від позиції код вимагає спеціальної підтримки, тому працює лише на
певні машини. Для x86 GCC підтримує PIC для System V, але не для Sun
386i. Код, створений для IBM RS/6000, завжди не залежить від позиції.

Коли цей прапор встановлений, макроси "__pic__" і "__PIC__" визначаються як 1.

-fPIC
Якщо підтримується для цільової машини, видавати незалежний від позиції код, який підходить для
динамічне зв'язування та уникнення будь-яких обмежень на розмір глобальної таблиці зміщень. Це
Опція робить різницю на m68k, PowerPC та SPARC.

Незалежний від позиції код вимагає спеціальної підтримки, тому працює лише на
певні машини.

Коли цей прапор встановлений, макроси "__pic__" і "__PIC__" визначаються як 2.

-fpie
-fPIE
Ці варіанти схожі на -fpic та -fPIC, але згенерований код, незалежний від позиції
можуть бути пов’язані лише з виконуваними файлами. Зазвичай ці варіанти використовуються, коли - пиріг GCC
Опція використовується під час приєднання.

-fpie та -fPIE обидва визначають макроси "__pie__" і "__PIE__". Макроси мають
значення 1 для -fpie і 2 для -fPIE.

-fno-jump-tables
Не використовуйте таблиці переходів для операторів switch, навіть якщо це було б ефективніше
ніж інші стратегії генерації коду. Ця опція використовується в поєднанні з
-fpic or -fPIC для коду побудови, який є частиною динамічного компонувальника і не може
посилання на адресу таблиці переходів. Для деяких цілей таблиці стрибків не вимагають a
GOT і ця опція не потрібна.

-фіксований-Реджо
Обробіть реєстр ім Реджо як фіксований реєстр; згенерований код ніколи не повинен посилатися на
це (за винятком, можливо, як покажчика стека, покажчика кадру чи іншої фіксованої ролі).

Реджо має бути назва реєстру. Приймаються імена реєстрів залежно від машини
і визначені в макросі "REGISTER_NAMES" у файлі макросу опису машини.

Цей прапор не має негативної форми, оскільки вказує на тристоронній вибір.

-fcall-used-Реджо
Обробіть реєстр ім Реджо як доступний регістр, який забитий функцією
дзвінки. Він може бути виділений для тимчасових або змінних, які не живуть через a
дзвонити. Скомпільовані таким чином функції не зберігають і не відновлюють реєстр Реджо.

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

Цей прапор не має негативної форми, оскільки вказує на тристоронній вибір.

-fcall-saved-Реджо
Обробіть реєстр ім Реджо як доступний регістр, збережений функціями. Може бути
виділяється навіть для тимчасових або змінних, які діють під час виклику. Функції
скомпільований таким чином зберегти та відновити реєстр Реджо якщо вони ним користуються.

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

Інший тип катастрофи є результатом використання цього прапора для реєстру, в якому
значення функції можуть бути повернуті.

Цей прапор не має негативної форми, оскільки вказує на тристоронній вибір.

-fpack-struct[=n]
Якщо не вказано значення, упакуйте всі елементи конструкції разом без отворів. Коли а
вказано значення (яке має бути малою мірою двійки), пакуйте членів структури
відповідно до цього значення, що представляє максимальне вирівнювання (тобто об'єкти з
Більші вимоги до вирівнювання за замовчуванням виводяться потенційно невирівняними
наступне місце установки.

Увага! -fpack-struct switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Крім того, він створює код
неоптимальний. Використовуйте його для відповідності бінарному інтерфейсу програми, який не є стандартним.

-функції інструменту
Створення викликів інструментів для входу та виходу з функцій. Відразу після функції
входу і безпосередньо перед виходом з функції викликаються наступні функції профілювання
адреса поточної функції та місце її виклику. (На деяких платформах,
"__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);

Першим аргументом є адреса початку поточної функції, яка може бути
шукав точно в таблиці символів.

Цей інструментарій також виконується для функцій, розширених у рядку інших функцій.
Виклики профілювання вказують, де, концептуально, вводиться вбудована функція і
вийшов. Це означає, що адресні версії таких функцій повинні бути доступні. Якщо
все використання функції розширено в рядку, це може означати додаткове розширення
розміру коду. Якщо ви використовуєте "extern inline" у своєму коді C, адресована версія
такі функції повинні бути передбачені. (У будь-якому випадку це зазвичай так, але якщо ви отримаєте
пощастило, і оптимізатор завжди розширює функції вбудовані, можливо, ви отримали
без надання статичних копій.)

Функції може бути надано атрибут "no_instrument_function", у цьому випадку це
приладобудування не проводиться. Це можна використовувати, наприклад, для профілювання
перераховані вище функції, підпрограми переривання з високим пріоритетом та будь-які функції, з яких
функції профілювання не можна безпечно викликати (можливо, обробники сигналів, якщо
підпрограми профілювання генерують вихід або виділяють пам'ять).

-finstrument-functions-exclude-file-list=файл,файл, ...
Встановіть список функцій, які виключаються з приладів (див. опис
of -функції інструменту). Якщо файл, який містить визначення функції, відповідає
з одним з файл, то ця функція не буде інструментальною. Матч закінчено
підрядки: якщо файл Параметр — це підрядок імені файлу, яким він вважається
бути відповідним.

Наприклад:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

виключає будь-яку вбудовану функцію, визначену у файлах, шляхи яких містять /біт/stl or
include/sys.

Якщо з якоїсь причини ви хочете включити лист , в одному з sym, пишіть ,, Наприклад,
-finstrument-functions-exclude-file-list=',,tmp' (зверніть увагу на одинарні лапки навколо
варіант).

-instrument-functions-exclude-function-list=sym,sym, ...
Це схоже на -finstrument-functions-exclude-file-list, але цей параметр встановлює параметр
список імен функцій, які потрібно виключити з інструментів. Ім'я функції
matched – це його видиме ім’я користувача, наприклад «vector бла (константний вектор &)", ні
внутрішнє спотворене ім'я (наприклад, "_Z4blahRSt6vectorIiSaIiEE"). Матч закінчено
підрядки: якщо sym Параметр є підрядком імені функції, розглядається
бути відповідним. Для розширених ідентифікаторів C99 і C++ необхідно вказати ім’я функції
в UTF-8, не використовуючи універсальні імена символів.

-fstack-check
Згенеруйте код, щоб переконатися, що ви не виходите за межі стеку. ти
слід вказати цей прапор, якщо ви працюєте в середовищі з кількома потоками,
але вам рідко потрібно вказувати його в однопотоковому середовищі, починаючи з стека
переповнення автоматично виявляється майже у всіх системах, якщо є лише один стек.

Зауважте, що цей перемикач насправді не викликає перевірки; операційна
система або середовище виконання мови повинні зробити це. Перемикач викликає генерацію коду
переконайтеся, що вони бачать, що стек розширюється.

Ви можете додатково вказати рядковий параметр: немає означає відсутність перевірки, родової засоби
примусово використовувати перевірку старого стилю, конкретний означає використовувати найкращий метод перевірки та
еквівалентно голому -fstack-check.

Перевірка за старим стилем — це загальний механізм, який не потребує спеціальної підтримки цілі
компілятор, але має такі недоліки:

1. Змінена стратегія розподілу для великих об'єктів: вони завжди виділяються
динамічно, якщо їх розмір перевищує фіксований поріг.

2. Фіксований ліміт на розмір статичного кадру функцій: коли він доповнений a
конкретна функція, перевірка стека не є надійною, і видається попередження
компілятор.

3. Неефективність: як через модифіковану стратегію розподілу, так і через загальну
реалізацію, продуктивність коду перешкоджає.

Зауважте, що перевірка стека в старому стилі також є резервним методом для конкретний якщо ні
Цільова підтримка була додана в компілятор.

-fstack-limit-register=Реджо
-fstack-limit-symbol =sym
-fno-stack-limit
Згенеруйте код, щоб стек також не перевищував певне значення
значення регістра або адреса символу. Якщо потрібен більший стос, а
сигнал піднімається під час виконання. Для більшості цілей сигнал піднімається перед стеком
виходить за межі, тому можна зловити сигнал, не беручи спец
запобіжні заходи.

Наприклад, якщо стек починається з абсолютної адреси 0x80000000 і росте донизу,
Ви можете використовувати прапори -fstack-limit-symbol=__limit_stack та
-Wl,--defsym,__stack_limit=0x7ffe0000 щоб застосувати обмеження стеку в 128 КБ. Зауважте, що
це може працювати тільки з компонувальником GNU.

-fsplit-stack
Згенеруйте код, щоб автоматично розділити стек до його переповнення. Отриманий
програма має розривний стек, який може переповнюватися, лише якщо програма не в змозі
виділити більше пам'яті. Це найбільш корисно під час запуску потокових програм, т.к
більше не потрібно розраховувати хороший розмір стека для використання для кожного потоку. Це
наразі реалізовано лише для цільових пристроїв x86 під керуванням GNU/Linux.

Коли код компілюється з -fsplit-stack викликає код, скомпільований без -fsplit-stack, там
може бути не так багато місця в стеку для виконання останнього коду. Якщо компілювати все
код, у тому числі бібліотечний код, с -fsplit-stack це не варіант, то компонувальник може
виправити ці виклики так, щоб код компілювався без -fsplit-stack завжди має великий
стек. Підтримка цього реалізована в лінкері gold у випуску GNU binutils
2.21 і пізніше.

-випливає-підкреслення
Цей варіант і його аналог, -fno-лідинг-підкреслення, примусово змінити спосіб C
символи представлені в об'єктному файлі. Один із способів — допомогти зв’язатися зі спадщиною
код збірки.

Увага! -випливає-підкреслення switch змушує GCC генерувати код, який не є
двійковий сумісний із кодом, згенерованим без цього перемикача. Використовуйте його для відповідності a
бінарний інтерфейс програми, що не є стандартним. Не всі цілі забезпечують повну підтримку
для цього перемикача.

-ftls-модель=модель
Змініть модель локального зберігання потоку, яка буде використовуватися. The модель аргумент повинен бути одним з
глобально-динамічний, локально-динамічний, початковий-викон or локальний-викон. Зверніть увагу, що вибір є
підлягає оптимізації: компілятор може використовувати більш ефективну модель для символів ні
видно за межами блоку перекладу, або якщо -fpic не вказано в командному рядку.

За замовчуванням без -fpic is початковий-викон; з -fpic за замовчуванням глобально-динамічний.

-fvisibility=[дефолт|внутрішній|прихований|захищений]
Встановити видимість символу зображення ELF за замовчуванням на вказаний параметр --- усі символи є
позначено цим, якщо не замінено в коді. Використання цієї функції може дуже
істотно покращити час зв'язування та завантаження спільних бібліотек об'єктів, виробляти більше
оптимізований код, забезпечує майже ідеальний експорт API та запобігає зіткненням символів. це є
сильно рекомендуємо використовувати це в будь-яких спільних об'єктах, які ви розповсюджуєте.

Незважаючи на номенклатуру, дефолт завжди означає публічний; тобто доступні для зв'язування
проти ззовні спільного об'єкта. захищений та внутрішній досить марні в
використання в реальному світі, тож єдиним іншим часто використовуваним варіантом є прихований. За замовчуванням якщо
- наочність не вказано є дефолт, тобто зробити кожен символ публічним.

Гарне пояснення переваг, які надає забезпечення правильності символів ELF
наочність забезпечується «Як писати спільні бібліотеки» Ульріха Дреппера (що можна
знайдено наhttp://www.akkadia.org/drepper/>)---проте зроблено чудове рішення
За допомогою цієї опції можна позначати речі прихованими, коли за замовчуванням є загальнодоступними
за замовчуванням приховано та позначає речі загальнодоступними. Це норма для DLL в Windows і
з -fvisibility=приховано і "__attribute__ ((visibility("default")))" замість
"__declspec(dllexport)" ви отримуєте майже ідентичну семантику з ідентичним синтаксисом.
Це велика користь для тих, хто працює з кросплатформними проектами.

Для тих, хто додає підтримку видимості до існуючого коду, ви можете знайти "#pragma GCC
visibility" використання. Це працює, якщо ви додаєте оголошення, які хочете встановити
видимість для (наприклад) "#pragma GCC visibility push(hidden)" і "#pragma
GCC visibility pop". Майте на увазі, що слід переглядати видимість символу as частина of
API інтерфейс контракт і, таким чином, весь новий код завжди повинен вказувати видимість коли
це не за замовчуванням; тобто декларації лише для використання в межах місцевого DSO повинні
завжди бути явно позначено як прихований, щоб уникнути непрямого PLT
накладні витрати --- зробити це цілком зрозумілим також сприяє читанню та самодокументації
коду. Зауважте, що відповідно до вимог специфікації ISO C++ "оператор новий" і
"оператор видалення" завжди має бути видимим за замовчуванням.

Майте на увазі, що заголовки поза вашим проектом, зокрема системні заголовки і
заголовки з будь-якої іншої бібліотеки, яку ви використовуєте, можливо, не очікується компіляції
видимість, відмінну від стандартної. Можливо, вам знадобиться прямо сказати «#pragma GCC
visibility push (за замовчуванням)» перед додаванням таких заголовків.

на "зовнішні" декларації не впливає - наочність, тому коду може бути багато
перекомпільовано з -fvisibility=приховано без модифікацій. Однак це означає, що
виклики "зовнішніх" функцій без явної видимості використовують PLT, тому це більше
ефективно використовувати "__attribute ((visibility))" та/або "#pragma GCC visibility", щоб повідомити
компілятор, "зовнішні" оголошення повинні розглядатися як приховані.

Зверніть увагу, що - наочність впливає на нечіткі сутності зв'язку C++. Це означає, що для
наприклад, клас винятків, який передається між DSO, повинен бути явно позначений
з видимістю за замовчуванням, щоб type_info вузли уніфіковані між DSO.

Огляд цих методів, їх переваги та способи їх використання див
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
Цю опцію слід використовувати, якщо доступ до нестабільних бітових полів (або іншої структури
поля, хоча компілятор зазвичай шанує ці типи в будь-якому випадку) слід використовувати одиночний
доступ до ширини типу поля, вирівняного за природнім вирівнюванням, якщо це можливо.
Наприклад, цілі з відображеними в пам'яті периферійними регістрами можуть вимагати всього цього
доступ має бути шириною 16 біт; за допомогою цього прапора ви можете оголосити всі периферійні бітові поля
як "короткий без знака" (за умови, що короткий має 16 біт для цих цілей), щоб змусити GCC використовувати
16-розрядний доступ замість, можливо, більш ефективного 32-бітного доступу.

Якщо цей параметр вимкнено, компілятор використовує найефективнішу інструкцію. В
попередній приклад, це може бути 32-розрядна інструкція завантаження, навіть якщо вона має доступ
байти, які не містять жодної частини бітового поля або регістрів, відображених у пам'яті
не пов’язаний з тим, що оновлюється.

У деяких випадках, наприклад, коли атрибут "packed" застосовується до поля структури, він
може бути неможливим отримати доступ до поля за допомогою одного правильного читання або запису
вирівняно для цільової машини. У цьому випадку 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-символи, які інакше інтерпретуються як a
кінець рядка або вихід.

Команда 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-debug до
драйвер компілятора. Додаткову інформацію дивіться в документації цієї опції.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX встановлено, він визначає префікс для використання в іменах
підпрограми, що виконуються компілятором. Якщо цей префікс об’єднано, коса риска не додається
з назвою підпрограми, але ви можете вказати префікс, який закінчується косою рискою if
Ви бажаєте.

If GCC_EXEC_PREFIX не встановлено, GCC намагається знайти відповідний префікс для використання
на основі імені шляху, за допомогою якого воно викликається.

Якщо GCC не може знайти підпрограму за вказаним префіксом, він намагається знайти в
звичайні місця для підпрограми.

Значення за замовчуванням GCC_EXEC_PREFIX is префікс/lib/gcc/ де префікс є префіксом до
встановлений компілятор. У багатьох випадках префікс це значення "prefix", коли ви запустили
конфігурувати сценарій

Інші префікси, зазначені з -B мати пріоритет перед цим префіксом.

Цей префікс також використовується для пошуку файлів, таких як crt0.o які використовуються для зв’язування.

Крім того, префікс використовується незвичним чином при пошуку каталогів для пошуку
для заголовних файлів. Для кожного зі стандартних каталогів, ім'я яких зазвичай починається
з /usr/local/lib/gcc (точніше, зі значенням GCC_INCLUDE_DIR), GCC намагається
замінивши цей початок на вказаний префікс, щоб створити альтернативний каталог
ім'я. Таким чином, с -Бфу/, пошук GCC foo/бар безпосередньо перед пошуком стандарту
каталог /usr/local/lib/bar. Якщо стандартний каталог починається з configured
префікс то значення префікс замінюється на GCC_EXEC_PREFIX під час пошуку заголовка
файли.

COMPILER_PATH
Значення COMPILER_PATH — це список каталогів, розділених двокрапкою, схожий на PATH.
Якщо не вдається, GCC намагається вказати каталоги під час пошуку підпрограм
знайдіть підпрограми за допомогою GCC_EXEC_PREFIX.

LIBRARY_PATH
Значення LIBRARY_PATH — це список каталогів, розділених двокрапкою, схожий на PATH.
Коли GCC налаштовано як рідний компілятор, 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 параметри в командному рядку. Ця змінна середовища
використовується незалежно від мови попередньої обробки.

Решта змінних середовища застосовуються лише під час попередньої обробки конкретного
вказана мова. Кожен визначає список каталогів, які потрібно шукати
зазначено с -ісистема, але після будь-яких шляхів, заданих с -ісистема варіанти на
command line.

У всіх цих змінних порожній елемент інструктує компілятор шукати його поточний
робочий каталог. Порожні елементи можуть з'являтися на початку або в кінці шляху. Для
наприклад, якщо значення CPATH є ":/special/include", що має той самий ефект, що і
-Я. -Я/спеціальний/включаю.

DEPENDENCIES_OUTPUT
Якщо ця змінна встановлена, її значення вказує, як вивести залежності для Make на основі
на несистемні заголовні файли, оброблені компілятором. Системні заголовні файли є
ігнорується у виводі залежності.

Значення DEPENDENCIES_OUTPUT може бути просто ім’ям файлу, у цьому випадку правила Make
записуються в цей файл, вгадуючи цільове ім’я з назви вихідного файлу. Або
значення може мати вигляд файл мета, у цьому випадку правила записуються у файл файл
використання мета як цільове ім'я.

Іншими словами, ця змінна середовища еквівалентна об’єднанню параметрів -ММ
та -MF, з необов'язковим -MT перемикач теж.

SUNPRO_DEPENDENCIES
Ця змінна така ж, як DEPENDENCIES_OUTPUT (див. вище), крім цієї системи
заголовні файли не ігноруються, це означає -M а не -ММ. Проте
залежність від основного вхідного файлу пропущена.

Використовуйте mips64-linux-gnuabi64-gcc онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

  • 1
    DivFix + +
    DivFix + +
    DivFix++ — це ваше відео для відновлення AVI
    програмне забезпечення попереднього перегляду. Розрахований на ремонт
    і попередній перегляд файлів, які завантажуються
    з ed2k(emule), торрент, gnutella, ftp...
    Завантажте DivFix++
  • 2
    Спільнота JBoss
    Спільнота JBoss
    Проекти, керовані громадою, за участю
    найсучасніші інновації
    програми. Наш флагманський проект JBoss AS
    провідний Open Source,
    відповідає стандартам...
    Завантажте спільноту JBoss
  • 3
    Django Filer
    Django Filer
    django Filer — це програма для керування файлами
    додаток для django, що робить
    легка робота з файлами та зображеннями.
    django-filer — це програма для керування файлами
    додаток для djang...
    Завантажте Django Filer
  • 4
    xCAT
    xCAT
    Extreme Cluster Administration Toolkit.
    xCAT — це масштабоване керування кластером
    і інструмент забезпечення, який забезпечує
    керування обладнанням, виявлення та ОС
    дисковий/ді...
    Завантажте xCAT
  • 5
    Псі
    Псі
    Psi — це потужний міжплатформний XMPP
    клієнт, розроблений для досвідчених користувачів.
    Є збірки, доступні для MS
    Windows, GNU/Linux і macOS.. Аудиторія:
    Кінцеві користувачі...
    Завантажити Psi
  • 6
    Blobby Volley 2
    Blobby Volley 2
    Офіційне продовження знаменитого
    Аркадна гра Blobby Volley 1.x..
    Аудиторія: кінцеві користувачі/комп’ютер. Користувач
    інтерфейс: OpenGL, SDL. Програмування
    Мова: C++, Lua. C...
    Завантажити Blobby Volley 2
  • Детальніше »

Команди Linux

Ad