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

Ad


Значок OnWorks

g++-4.7 – Інтернет у хмарі

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

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

ПРОГРАМА:

ІМ'Я


gcc - компілятор проекту 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 формат і так далі. Більшість із них мають як позитивні, так і негативні
форми; негативна форма -ффу був би -fno-foo. Цей посібник документує лише один із
ці дві форми, незалежно від того, яка з них не є за замовчуванням.

ВАРІАНТИ


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

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

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

C + + Language Опції
-fabi-версія=n -fno-контроль доступу -fcheck-новий -fconserve-space
-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 -fstats -ftemplate-depth=n
-fno-threadsafe-statics -запобіжник-cxa-atexit -fno-слабий -nostdinc++ -fno-default-inline
-fvisibility-inlines-hidden -fvisibility-ms-compat -Вабі -Wconversion-null
-Wctor-dtor-privacy -Wdelete-non-virtual-dtor -Звуження - Ні, крім
-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 -freplace-objc-класи -fzero-посилання
-gen-decl -Wassign-перехоплення -Протокол Wno -Селектор -Підборник-матч
-Wunddeclared-селектор

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

попередження Опції
-fsyntax-only -fmax-errors=n - педантичний -педантичні помилки -w -Векстра -Стінка
-Водреса -Waggregate-повернення -Межі війни -Wno-атрибути
-Wno-вбудований-макро-перевизначення -Wc++-сумісний -Wc++11-compat -Wcast-align -Wcast-як
-Wchar-індекси -Взабитий -Коментар -Wперетворення -Wcoverage-невідповідність -Wno-cpp
-Wno-застарілий -Wno-deprecated-declarations -Wdisabled-optimization -Wno-div-by-zero
-Двійне просування - Пусте тіло -Венум-порівняй -Wno-endif-мітки - Помилка -Помилка=*
-Wфатальні помилки -Wfloat-рівний - W формат -Wформат=2 -Wno-format-contains-nul
-Wno-format-extra-args -Wformat-нелітеральний -Wformat-безпека -Wformat-y2k
-Wframe-більший-ніж=довжина -Wno-free-nonheap-object -Wjump-misses-init
-Проігноровані-кваліфікатори - Прихований -Оголошення функції Wimplicit -Невідомий-інт
-Winit-self - Winline -Wmoybe-неініціалізований -Wno-int-to-pointer-cast
-Wno-invalid-offsetof -Winvalid-pch -Більше ніж=довжина -Wunsafe-loop-optimizations
-Wlogical-op -Довго-довго -Wmain -Wmoybe-неініціалізований -Брекети
-Wmissing-field-ініціалізатори -Wmissing-format-attribute -Wmissing-include-dirs
-Wno-бризговик -Wno-мультисимвольний -Ненульовий -Без переповнення - Струни неперевершеної довжини -Упаковано
-Wpacked-bitfield-compat -Wpadded -Дужки -Wpedantic-ms-формат
-Wno-pedantic-ms-format -Wpointer-ариф -Wno-pointer-to-int-cast -Недостатньо-деклс
-Повернення -Wsequence-point - Тінь -Wsign-порівняти -Wsign-перетворення
-Wstack-протектор -Wstack-usage=довжина -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-переповнення -Wstrict-overflow=n -Wsuggest-attribute=[чистий|сопзЬ|noreturn]
-Вимикач -Wswitch-за замовчуванням -Wwwitch-enum -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 -fdbg-cnt-список -fdbg-cnt=counter-
перелік цінностей -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-tree-vcg -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-mudflap[-n]
-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-vrp[-n] -ftree-vectoriz-verbose=n -fdump-tree-storeccp[-n]
-fdump-final-insns=файл -fcompare-debug[=вибирає] -fcompare-debug-second
-feliminate-dwarf2-dups -feliminate-unused-debug-types
-feliminate-unused-debug-symbols -femit-class-debug-always -придатний-вид-проходити
-придатний-вид-проходити=діапазон-список -fdebug-types-section -fmem-звіт -fpre-ipa-mem-звіт
-fpost-ipa-mem-report -fprofile-arcs -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+ -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 -час[=файл]

Оптимізація Опції
-falign-functions[=n] -falign-jumps[=n] -falign-labels[=n] -falign-loops[=n]
-фасоціативно-мат -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девіртуалізувати -fdse -страшно-вставляючи -фіпа-шра -дорогі оптимізації
-ffat-lto-об'єкти -швидка математика -фінітна-математична -флоат-магазин
-fexcess-precision=стиль -поширювати вперед -ffp-контракт=стиль -ffunction-секції
-fgcse -fgcse-після перезавантаження -fgcse-las -fgcse-lm -fgraphite-ідентичність -fgcse-sm
-fif-перетворення -fif-перетворення2 -findirect-inlining -finline-функції
-finline-функції-викликані-один раз -finline-limit=n -finline-small-functions -fipa-cp
-fipa-cp-клон -fipa-matrix-reorg -фіпа-пта -фіпа-профіль -fipa-чистий-конст
-фіпа-довідка -fira-algorithm=алгоритм -фіра-регіон=регіон -фіра-петля-тиск
-fno-ira-share-save-slots -fno-ira-share-spill-slots -fira-verbose=n -півопти
-fkeep-inline-functions -fkeep-static-conts -флоп-блок -розплющити
-шлюз-розв'язка -floop-strip-mine -floop-parallize-all -flto
-flto-рівень стиснення -flto-розділ=ALG -flto-звіт -fmerge-all-constants
-fmerge-константи -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-інваріанти
fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline
-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-register-move
-foptimize-sibling-calls -fчасткове вбудовування -fpeel-loops -fpredictive-commoning
-fprefetch-loop-масиви -fprofile-correction -fprofile-dir=шлях -fprofile-generate
-fprofile-generate=шлях -fprofile-використання -fprofile-use=шлях -fprofile-values
-частотно-мат -вільно - Fregmove -реєстри імен -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-insns
-fschedule-insns2 -fsection-анкери -вибіркове планування -fselective-scheduling2
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -fstack-протектор -fstack-protector-all -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-parallelize-loops=n
-Free-pre -ftree-partial-pre -ftree-pta -ftree-reassoc -Free-раковина -ftree-sra
-перетворення з трьома перемикачами -ftree-tail-merge -ftree-ter -ftree-vect-loop-версія
-ftree-векторизувати -ftree-vrp - за раз -закрутити всі петлі -закрутки-петлі
-funsafe-loop-optimizations -funsafe-math-optimizations -перемикачі-петлі
-fvariable-expansion-in-unroller -fvect-кошт-модель -fvpt -fweb -f ціла програма -fwpa
-fuse-ld=Компонувальник -плагін-запобіжник --парам ім'я=значення -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препроцесор варіант

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

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

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

машина Залежний Опції
AAArch64 Опції -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=традиційний -березень=ім'я
-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-Реджо

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
-mwords-little-endian -mfloat-abi=ім'я -mfpe -mfp16-format=ім'я -mthumb-interwork
-mno-thumb-interwork -mcpu=ім'я -березень=ім'я -mfpu=ім'я -mstructure-size-boundary=n
-mabort-on-noreturn -mlong-дзвінки -mno-long-cales -msingle-pic-base
-mno-single-pic-base -mpic-register=Реджо -mnop-fun-dllimport -mcirrus-fix-invalid-insns
-mno-cirrus-fix-invalid-insns -mpoke-назва-функції -mthumb -марм -mtpcs-фрейм
-mtpcs-leaf-frame -mcaller-super-interworking -mcallee-супер-взаємодія -mtp=ім'я
-mtls-dialect=діалект -mword-переміщення -mfix-cortex-m3-ldrd -муніципальний доступ
-mneon-for-64bits

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

Чорношкірий Опції -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 -мальфа-ас -mgas -миее
-міее-з-неточним -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=час

Грудень Альфа/VMS Опції -mvms-коди повернення -mdebug-main=префікс -mmalloc64

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 Опції - розслабитися -мх -РС -мн -м'ята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-big-switch -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 -статичний -нитки

i386 та x86-64 Опції -mtune=тип процесора -березень=тип процесора -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 -маес -mpclmul
-mfsgsbase -мрдрнд -mf16c -mfma -msse4a -m3dnow -mpopcnt -мабм -mbmi -мтбм -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mthreads -mno-align-stringops -minline-all-stringops
-minline-stringops-динамічно -mstringop-strategy=ALG -mpush-args
-accumulate-outgoing-args -m128bit-long-double -m96bit-long-double -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 -mlarge-data-threshold=Num -msse2avx
-mfentry -m8bit-idiv -mavx256-split-unaligned-load -mavx256-split-unaligned-store

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

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

ІА-64/ВМС Опції -mvms-коди повернення -mdebug-main=префікс -mmalloc64

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
-mxl-mode-додаток-модель

MIPS Опції -ТО -EB -березень=арка -mtune=арка -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=ABI -mabicalls -мно-абікали
-mshared -мно-спільний -mplt -мно-плт -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float -msingle-float -mdouble-float -mdsp -мно-дсп
-mdspr2 -mno-dspr2 -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 -ммад -мно-божевільний
-змішаний-божевільний -мно-злитий-мадд -nocpp -mfix-24k -mno-fix-24k -mfix-r4000
-mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=функц -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

ПДП-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

RS / 6000 та PowerPC Опції -mcpu=тип процесора -mtune=тип процесора -mcmodel=код-модель - повноваження
-мно-сила -mpower2 -мно-сила2 -mpowerpc -mpowerpc64 -mno-powerpc -мальтівець
-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
-mnew-мнемотехніка -мнемотехніка -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

RX Опції -m64bit-подвійники -m32bit-подвійники -fpu -nofpu -mcpu= -big-endian-data
-mlittle-endian-data -msmall-data -msim -мно-сім -mas100-синтаксис -mno-as100-синтаксис
- розслабитися -mmax-constant-size= -mint-register= -мпід -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

Рахунок Опції -меб -мел -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-символи -msoft-atomic -mbranch-cost=Num -mcbranchdi -mcmpeqdi -змішаний-божевільний
-mpend-cmove

Solaris 2 Опції -нечистий текст -мно-нечистий-текст -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-невирівняні-подвійники -mv8plus -mno-v8plus -mvis -мно-віс -mvis2 -мно-вис2
-mvis3 -мно-вис3 -mfmaf -mno-fmaf -mpopc -мно-попк -mfix-at697f

СПУ Опції -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

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 - великий перемикач

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

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

x86-64 Опції Див. Параметри i386 і x86-64.

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
-забавні столики -fasynchronous-wind-tables -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-модель=модель -ftrapv
-fwrapv -fbounds-перевірка - наочність -fstrict-volatile-bitfields

Опції Управління Дитина 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
буде gdb --args Cc1 ....

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

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

-fdump-ada-spec[-струнка]
Для C і C++ вихідних файлів і файлів включення створіть відповідні специфікації 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, .h та .i файли як вихідні файли C++ замість вихідних файлів C, якщо -x is
використовується, і автоматично вказує посилання на бібліотеку C++. Ця програма також є
корисно під час попередньої компіляції заголовного файлу 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. Зауважте, що цей стандарт ще не повністю підтримується; побачити
<http://gcc.gnu.org/gcc-4.7/c99status.html> для отримання додаткової інформації. Імена c9x
та iso9899:199x є застарілими.

c11
c1x
ISO9899:2011
ISO C11, редакція стандарту ISO C 2011 року. Підтримка неповна і
експериментальний. Ім'я c1x застаріло.

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

gnu99
gnu9x
Діалект GNU ISO C99. Коли ISO C99 буде повністю реалізовано в GCC, це буде
стати за замовчуванням. Ім'я gnu9x застаріло.

gnu11
gnu1x
Діалект GNU ISO C11. Підтримка є неповною та експериментальною. Ім'я gnu1x
застаріло.

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

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

c ++ 11
Стандарт ISO C++ 2011 року з поправками. Підтримка C++11 все ще залишається
експериментальний і може змінитися несумісним чином у майбутніх випусках.

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

-fgnu89-inline
Опція -fgnu89-inline наказує GCC використовувати традиційну семантику GNU для "inline"
функціонує в режимі C99.
Цей параметр приймається та ігнорується GCC версіями 4.1.3 до, але не включно
4.3. У версіях GCC 4.3 і пізніших це змінює поведінку GCC в режимі C99. Використання
ця опція приблизно еквівалентна додаванню атрибута функції "gnu_inline" до всіх
вбудовані функції.

Опція -fno-gnu89-inline явно вказує GCC використовувати семантику C99 для
"inline" у режимі C99 або gnu99 (тобто він визначає поведінку за замовчуванням). Це
Опція вперше підтримувалася в GCC 4.3. Цей параметр не підтримується в -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-хостинг.

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

-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;
};

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

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

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

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

-no-integrated-cpp
Виконує компіляцію за два проходи: попередню обробку та компіляцію. Цей варіант дозволяє
користувач надав "cc1", "cc1plus" або "cc1obj" через -B варіант. Користувач надав
Крок компіляції може потім додати додатковий етап попередньої обробки після звичайного
попередньої обробки, але перед компіляцією. За замовчуванням використовується інтегрований cpp
(внутрішній cpp)

Семантика цього параметра зміниться, якщо об’єднати «cc1», «cc1plus» і «cc1obj».

- традиційний
-традиційний-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 незалежно від вашої мови
Програма входить. Наприклад, ви можете зібрати файл "firstClass.C" таким чином:

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

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

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

-fabi-версія=n
Використовуйте версію n C++ ABI. Версія 2 є першою версією C++ ABI
з'явився в G++ 3.4. Версія 1 – це версія C++ ABI, яка вперше з’явилася
G++ 3.2. Версія 0 завжди буде версією, яка найбільше відповідає C++
Специфікація ABI. Таким чином, ABI, отриманий за допомогою версії 0, зміниться як ABI
помилки виправлені.

За замовчуванням є версія 2.

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

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

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

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

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

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

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

-fconserve-space
Помістіть неініціалізовані або ініціалізовані під час виконання глобальні змінні в загальний сегмент, як
C робить. Це заощаджує місце у виконуваному файлі за рахунок відсутності діагностики дублікатів
визначення. Якщо ви компілюєте з цим прапором, і ваша програма таємничим крахом
після завершення "main()" ви можете мати об'єкт, який знищується двічі
оскільки два визначення були об’єднані.

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

-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++ і попередніх версіях G++
4.1 завжди працював так. Однак у ISO C++ друга функція, якої немає
оголошені в охоплюючій області, можна знайти лише за допомогою пошуку в залежності від аргументу.
Ця опція змушує друзів вводити, як вони були в попередніх випусках.

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

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

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

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

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

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

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

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

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

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

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

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

-fstats
Надсилайте статистичні дані про обробку інтерфейсу в кінці компіляції. Це
інформація, як правило, корисна лише для команди розробників G++.

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

-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 для різного визначення типів з однаковою назвою.

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

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

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

-fno-default-inline
Не припускайте вбудований для функцій, визначених всередині області видимості класу.
Зауважте, що ці функції будуть мати зв'язок, як вбудовані функції; вони просто не будуть
бути вбудованим за замовчуванням.

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

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

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

· Шаблон з нетиповим параметром шаблону еталонного типу зіпсовано
неправильно:

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

Це зафіксовано в -fabi-версія=3.

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

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

Відомі несумісності в -fabi-версія=1 включати:

· Неправильна обробка tail-padding для бітових полів. G++ може спробувати запакувати дані
в той самий байт, що й базовий клас. Наприклад:

struct A { віртуальна пустота f(); int f1 : 1; };
struct B : public A { int f2 : 1; };

У цьому випадку G++ помістить "B::f2" в той самий байт, що й "A::f1"; інші компілятори
не буде. Ви можете уникнути цієї проблеми, явно доповнивши "A", щоб її розмір
є кратним розміру байтів на вашій платформі; це призведе до G++ та інших
компілятори до макета "B" ідентично.

· Неправильне використання tail-padding для віртуальних баз. G++ не використовує хвіст
заповнення під час розкладки віртуальних баз. Наприклад:

struct A { віртуальна пустота f(); char c1; };
struct B { B(); char c2; };
struct C : публічний A, публічний віртуальний B {};

У цьому випадку G++ не поміщатиме "B" у заповнення хвоста для "A"; інший
компілятори будуть. Ви можете уникнути цієї проблеми, явно доповнивши "A", щоб її
розмір кратний його вирівнюванню (ігноруючи віртуальні базові класи); що буде
змушують G++ та інші компілятори макетувати "C" ідентично.

· Неправильна обробка бітових полів із заявленою шириною, більшою за ширину
базові типи, коли бітові поля з'являються в об'єднанні. Наприклад:

об'єднання U { int i : 4096; };

Припускаючи, що "int" не має 4096 біт, G++ зробить об'єднання занадто малим
за кількістю бітів у "int".

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

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

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

структура C : публічна B, публічна A {};

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

· Назви функцій шаблону, типи яких включають "typename" або шаблон шаблону
параметри можуть бути зіпсовані неправильно.

шаблон
void f(ім'я типу Q::X) {}

шаблон клас Q>
void f(назва типу Q ::X) {}

Примірники цих шаблонів можуть бути зіпсовані неправильно.

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

· Для SYSV/x86-64 при проходженні об'єднання з довгим подвійним воно змінюється на перехід
пам'ять, як зазначено в psABI. Наприклад:

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

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

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

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

-Звуження (лише C++ та Objective-C++)
Попереджати, коли всередині відбувається перетворення звуження, заборонене C++11 { }, напр

int i = { 2.2 }; // помилка: звуження від подвійного до int

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

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

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

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

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

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

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

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

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

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

· Пункт 12: Віддавайте перевагу ініціалізації, ніж присвоєнню в конструкторах.

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

· Пункт 15: Нехай "operator=" повертає посилання на *це.

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

Також попереджайте про порушення наведених нижче вказівок щодо стилю від Скотта Мейерса більше
Ефективний C + + книга:

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

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

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

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

-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++ використовується приведення до непустотного типу старого стилю (Стиль).
Актори нового стилю (динамічна передача, 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++ намагалися б зберегти беззнаковість, але стандарт вимагає виконання
поточна поведінка.

структура A {
оператор int ();
Оператор A& = (int);
};

головний ()
{
А а, б;
a = b;
}

У цьому прикладі G++ синтезує значення за замовчуванням A& оператор = (конст A&);, тоді як спереду
використовуватиме визначений користувачем оператор =.

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

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

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

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

Зауважте, що оскільки Objective-C є розширенням мови C, компіляції Objective-C
може також використовувати параметри, специфічні для інтерфейсу C (наприклад, -Традиційний). Точно так же,
Компіляції 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("...")" незалежно від параметрів командного рядка.

-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, що описує найбільшу структуру, яка передається за значенням, якщо така є.

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

-fmessage-length=n
Спробуйте відформатувати повідомлення про помилки так, щоб вони містилися в рядках приблизно n символів.
за замовчуванням 72 символи для г ++ і 0 для решти передніх кінців, які підтримуються
GCC. Якщо n дорівнює нулю, тоді перенесення рядків не виконуватиметься; з'явиться кожне повідомлення про помилку
на одному рядку.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- педантичний
Видавати всі попередження, які вимагають суворі стандарти 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
діалекти Сі включають всі функції, які компілятор підтримує за допомогою даної опції, і
нема про що попереджати.)

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

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

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

-Водреса -Межі війни (тільки з -О2) -Wc++11-compat -Wchar-індекси
-Венум-порівняй (у C/Objc; це ввімкнено за замовчуванням у C++) -Невідомий-інт (С і
Тільки Objective-C) -Оголошення функції Wimplicit (лише C і Objective-C) -Коментар
- W формат -Wmain (тільки для C/ObjC і якщо -автономний) -Wmoybe-неініціалізований
-Брекети -Ненульовий -Дужки -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 * радіус * радіус;
}

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

- W формат
Перевірте виклики «printf» та «scanf» тощо, щоб переконатися, що наведені аргументи
мають типи, відповідні вказаному рядку формату, і що перетворення
зазначений у рядку формату має сенс. Сюди входять стандартні функції та
інші, визначені атрибутами формату, в "printf", "scanf", "strftime" і
"strfmon" (розширення X/Open, не в стандарті C) сімейства (або інші цільові
конкретні сім'ї). Які функції перевіряються без атрибутів формату
вказано залежить від вибраної стандартної версії та таких перевірок функцій
без вказаного атрибута вимкнено -автономний or -fno-вбудований.

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

З - W формат також перевіряє аргументи нульового формату для кількох функцій, - W формат
також передбачає -Ненульовий.

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

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

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

-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
вказує, що дозволені формати нульової довжини.

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

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

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

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

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

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

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

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

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

-Невідомий-інт (лише 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
Попередьте, якщо тип основний є підозрілим. основний має бути функцією із зовнішнім
зв'язування, повертаючи 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 видасть попередження, коли цей прапор стане
вказано. Щоб усунути попередження, додайте явні дужки навколо внутрішнього «якщо»
твердження, тому немає жодного способу, щоб "else" належати до вкладеного "if". The
отриманий код буде виглядати так:

{
якщо)
{
якщо (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++.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Якщо ви хочете попередити про код, який використовує неініціалізоване значення змінної 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=n, з n=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
Попереджайте про випадки, які є сумнівними та яких легко уникнути. Наприклад: "x +
1 > х"; с -fstrict-переповнення, компілятор спростить це до 1. Цей рівень
of -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"), якщо це не може довести, що функція
повертається нормально. Функція повертається нормально, якщо вона не містить нескінченності
цикл і не повертається ненормально шляхом викиду, виклику "abort()" або захоплення. Це
аналіз вимагає опції -fipa-чистий-конст, який за замовчуванням увімкнено в -O та
вище. Більш високі рівні оптимізації підвищують точність аналізу.

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

-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 розуміє, але ігнорує, оскільки # не відображається як
перший символ у рядку. Це також пропонує вам приховати директиви, як #прагма
не розуміє традиційний C, зробивши відступ. Деякі традиційні
реалізації не визнають #еліф, тому пропонується уникати його взагалі.

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

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

· 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 і не підтримувався версіями GCC до GCC 3.0.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-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. Це попередження
включається -Звуження і увімкнено за допомогою -Стінка.

-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 or vfork. Це попередження також є
включена за -Векстра.

-Wперетворення
Попереджати про неявні конверсії, які можуть змінити значення. Це включає конверсії
між дійсним і цілим числом, наприклад "abs (x)", коли "x" є "подвійним"; конверсії між
зі знаком і без знаку, наприклад "unsigned ui = -1"; і перетворення в менші типи, наприклад
"sqrtf (M_PI)". Не попереджайте про явні приведення, як-от "abs ((int) x)" і "ui =
(без знаку) -1", або якщо значення не змінюється перетворенням, як у "abs (2.0)".
Попередження про перетворення між цілими числами зі знаком і без знака можна вимкнути
використання -Wno-sign-перетворення.

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

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

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

- Пусте тіло
Попереджати, якщо в an if, ще or do в той час як заяву. Це попередження
також увімкнено за допомогою -Векстра.

-Венум-порівняй
Попереджати про порівняння значень різних перерахованих типів. У 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перетворення.

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

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

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

-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)
Попереджати, якщо глобальна функція визначена без попереднього оголошення прототипу. Це
попередження видається, навіть якщо саме визначення містить прототип. Мета полягає в тому, щоб
виявляти глобальні функції, які не оголошені в заголовних файлах.

-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 };

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

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

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

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

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

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

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

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

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

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

-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)
Попереджати, якщо у функції зустрічається "зовнішня" декларація.

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

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

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

Обмеження на за межами може бути послаблено в майбутній версії стандарту 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. Це за замовчуванням. Щоб заблокувати попереджувальні повідомлення, використовуйте
-Wno-variadic-макроси.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-fno-debug-types-section
За замовчуванням при використанні DWARF версії 4 або вище типи DIE будуть поміщені в свої власні
розділ .debug_types замість того, щоб робити їх частиною розділу .debug_info. це є
ефективніше помістити їх в окремі розділи comdat, оскільки тоді буде компонувальник
можливість видалення дублікатів. Але не всі споживачі DWARF підтримують розділи .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 (якщо він підтримується). Це
формат, який використовується DBX на IRIX 6. Значення версія може бути 2, 3 або 4; в
версія за замовчуванням 2.

Зауважте, що з версією 2 DWARF деякі порти вимагають і завжди використовуватимуть деякі не-
конфліктуючих розширень 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, ніж вибрана
-гном-версія.

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

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

Цей варіант є детальною версією -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-звіт
Змушує компілятор друкувати деякі статистичні дані про постійне виділення пам’яті, коли він
закінчує.

-fpre-ipa-mem-звіт
-fpost-ipa-mem-report
Змушує компілятор друкувати деяку статистику про постійне виділення пам’яті перед або
після міжпроцедурної оптимізації.

-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-вид-проходити=діапазон-список
Це набір параметрів налагодження, які використовуються для явного вимкнення/включення
оптимізація проходить. Для користувачів компілятора звичайні параметри включення/вимкнення проходів
слід використовувати замість цього.

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

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

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

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

*<-fenable-rtl-проходити>
*<-fenable-rtl-проходити=діапазон-список>
Увімкнути rtl pass проходити, Побачити -fdisable-rtl для опису аргументу опції та
приклади

*<-fenable-tree-проходити>
*<-fenable-tree-проходити=діапазон-список>
Увімкнути пропуск дерева проходити, Побачити -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-проходити
Каже створювати дампи налагодження під час компіляції в часи, визначені літери, це
використовується для налагодження проходів компілятора на основі 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-regmove
Дамп після проходу переміщення реєстру.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 та -fdump-rtl-sched2 увімкнути дамп після основного блоку
перепустки розкладу.

-fdump-rtl-див
Дамп після видалення розширення знака.

-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-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 анотація

-дв Для кожного з інших вказаних файлів дампу (-fdump-rtl-проходити), дамп а
подання графіка потоку керування, придатного для перегляду за допомогою VCG до
file.pass.vcg.

-dx Просто згенеруйте RTL для функції замість її компіляції. Зазвичай використовується з
-fdump-rtl-expand.

-fdump-noaddr
Під час виконання дампів налагодження придушіть вихід адреси. Це робить його більш здійсненним
використовуйте diff для налагоджувальних дампів для викликів компілятора з різними бінарними файлами компілятора
та/або різні місця початку тексту / bss / data / heap / stack / dso.

-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-перемикання-опції
Контролювати дампування на різних етапах обробки проміжного дерева мови до
файл. Ім’я файлу генерується шляхом додавання суфікса перемикача до
ім’я вихідного файлу, і файл створюється в тому самому каталозі, що й вихідний файл.
Якщо -опції використовується форма, опції це список - розділені параметри, які контролюють
деталі смітника. Не всі параметри застосовні до всіх дампів; ті, які є
не має значення, буде проігноровано. Доступні наступні варіанти

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

ім'я
Якщо "DECL_ASSEMBLER_NAME" встановлено для даного декл, використовуйте це в дампі
замість "DECL_NAME". Його основне використання - це простота використання в зворотному порядку
зіпсовані імена у файлі збірки.

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

сировина Надрукуйте необроблене представлення дерева. За замовчуванням дерева надруковано в красивому вигляді
С-подібне представлення.

деталі
Увімкнути детальніші дампи (не враховується кожним варіантом дампу).

статистика
Увімкнути скидання різної статистики про проход (не враховується кожним дампом
варіант).

Блоки
Увімкнути відображення базових меж блоку (вимкнено в необроблених дампах).

vops
Увімкнути відображення віртуальних операндів для кожного оператора.

lineno
Увімкнути відображення номерів рядків для операторів.

UID Увімкнути показ унікального ідентифікатора ("DECL_UID") для кожної змінної.

докладний
Увімкнути відображення дампу дерева для кожного оператора.

eh Увімкнути показ номера регіону EH, що містить кожну заяву.

scev
Увімкнути показ деталей аналізу скалярної еволюції.

всі Увімкніть усі параметри, крім сировина, стрункий, докладний та lineno.

Можливі такі звалища дерев:

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

оптимізований
Дамп все-таки оптимізація на основі дерева, до file.optimized.

Gimple
Дампуйте кожну функцію до та після переходу для полегшення у файл. Файл
назва вноситься шляхом додавання .gimple до імені вихідного файлу.

cfg Дампуйте графік потоку керування для кожної функції у файл. Ім'я файлу створюється
додавання .cfg до імені вихідного файлу.

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

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 до імені вихідного файлу.

всі Увімкніть усі доступні дампи дерев за допомогою прапорців, наданих у цій опції.

-ftree-vectoriz-verbose=n
Цей параметр керує об’ємом налагоджувальних результатів, які друкує векторізатор. Це
інформація записується зі стандартною помилкою, якщо -fdump-дерево-все or -fdump-tree-vect
вказано, у цьому випадку він виводиться до звичайного файлу списку дампу, .vect. Форум
n=0 діагностична інформація не повідомляється. Якщо n=1 векторізатор повідомляє про кожен цикл
які були векторизовані, і загальна кількість циклів, які були векторизовані. Якщо n=2
Vectorizer також повідомляє про невекторизовані цикли, які пройшли першу фазу аналізу
(vect_analyze_loop_form) - тобто злічений, внутрішній, одиничний bb, одиничний вхід/вихід
петлі. Це той самий рівень багатослівності -fdump-tree-vect-stats використовує. Вищий
Рівні детальності означають, що для кожного циклу повідомляється більше інформації, або те саме
кількість інформації, що повідомляється для додаткових циклів: if n=3, модель вартості векторизатора
повідомляється інформація. Якщо n=4, інформація, пов’язана з вирівнюванням, додається до
звіти. Якщо n=5, інформація, пов’язана із посиланнями на дані (наприклад, залежності пам’яті, пам’ять
access-patterns) додається до звітів. Якщо n=6, векторізатор повідомляє також про не
векторизовані більшість внутрішніх циклів, які не пройшли першу фазу аналізу (тобто можуть не пройти
бути рахунковим або мати складний потік керування). Якщо n=7, повідомляє векторізатор
також невекторизовані вкладені цикли. Якщо n=8, інформація, пов’язана з SLP, додається до
звіти. Для n=9, вся інформація, яку векторізатор генерує під час свого аналізу
і повідомляється про трансформацію. Це той самий рівень багатослівності
-fdump-tree-vect-details використовує.

-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-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 будується.)

-feliminate-unused-debug-types
Зазвичай, під час створення виводу DWARF2, GCC видає інформацію про налагодження для всіх
типи, оголошені в одиниці компіляції, незалежно від того, є вони насправді чи ні
використовується в цьому компіляційному блоці. Іноді це корисно, наприклад, якщо в налагоджувачі,
ви хочете привести значення до типу, який насправді не використовується у вашій програмі (але є
оголошено). Однак частіше це призводить до значної втрати простору.
За допомогою цього параметра GCC уникає виведення символів налагодження для таких типів
ніде не використовується у вихідному файлі, який компілюється.

Опції Що Контроль Оптимізація
Ці параметри керують різними видами оптимізації.

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

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

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

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

Більшість оптимізацій увімкнено, лише якщо -O рівень встановлюється в командному рядку. Інакше
вони вимкнені, навіть якщо вказано окремі прапорці оптимізації.

Залежно від цілі та того, як GCC був налаштований, дещо інший набір
оптимізацію можна ввімкнути на кожному -O рівня, ніж перераховані тут. Ви можете викликати GCC
з -Q --help=оптимизатори щоб дізнатися точний набір оптимізацій, які ввімкнено на
кожен рівень.

-O
-О1 Оптимізація. Оптимізація компіляції займає трохи більше часу і набагато більше пам’яті
велика функція.

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

-O вмикає такі прапорці оптимізації:

-fauto-inc-dec -fcompare-elim -fcprop-реєстри -fdce -fdefer-поп -fзатримка-гілка
-fdse -fguess-гіл-ймовірність -fif-перетворення2 -fif-перетворення -fipa-чистий-конст
-фіпа-профіль -фіпа-довідка -fmerge-константи -fsplit-wide-types -ftree-bit-ccp
-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-forwprop -безкоштовно-безкоштовно -ftree-phiprop -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девіртуалізувати -дорогі оптимізації -fgcse
-fgcse-lm -finline-small-functions -findirect-inlining -фіпа-шра
-foptimize-sibling-calls -fчасткове вбудовування -fpeephole2 - Fregmove -freorder-блоки
-freorder-функції -frerun-cse-після-циклу -fsched-міжблок -fsched-spec
-fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-переповнення
-перетворення з трьома перемикачами -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-векторизувати, -ftree-partial-pre та -fipa-cp-клон Варіанти.

-О0 Скоротіть час компіляції та змусьте налагодження дати очікувані результати. Це
за замовчуванням.

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

-Ос вимикає такі прапорці оптимізації: -falign-функції -falign-стрибки
-Falign-loops -falign-етикетки -freorder-блоки -freorder-blocks-and-partition
-fprefetch-loop-масиви -ftree-vect-loop-версія

-Швидко
Нехтуйте суворим дотриманням стандартів. -Швидко дозволяє все -О3 оптимізації. Це також
дозволяє оптимізації, які не дійсні для всіх стандартних програм. Це
включається -швидка математика і специфічні для Fortran -фно-захисні парени та -fstack-масиви.

Якщо ви використовуєте кілька -O варіанти, з номерами рівнів або без них, останній такий варіант
той, який ефективний.

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

Наведені нижче параметри керують конкретними оптимізаціями. Вони або активуються за допомогою -O
варіанти або пов’язані з такими, які є. Ви можете використовувати наступні прапори в рідкісних
випадки, коли бажана «точна настройка» оптимізації.

-fno-default-inline
Не робіть функції-члени вбудованими за замовчуванням лише тому, що вони визначені всередині
область дії класу (тільки C++). Інакше, коли ви вкажете -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"
контролює, чи підтримує цільова машина цей прапор.

Починаючи з GCC версії 4.6, налаштування за замовчуванням (якщо не оптимізовано за розміром) для
Цілі 32-розрядних Linux x86 і 32-розрядних Darwin x86 змінено на
-fomit-кадр-покажчик. За замовчуванням можна повернутися до -fno-omit-frame-pointer by
налаштування GCC за допомогою --enable-frame-pointer налаштувати параметр.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-foptimize-sibling-calls
Оптимізуйте однотипні та хвостові рекурсивні виклики.

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

За замовчуванням - -fbranch-count-reg.

-fno-функція-cse
Не розміщуйте адреси функцій в регістрах; зробіть кожну інструкцію, яка викликає a
константна функція містить адресу функції явно.

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

За замовчуванням - -ffunction-cse

-fno-zero-initialized-in-bss
Якщо ціль підтримує розділ BSS, GCC за замовчуванням розміщує змінні, які є
ініціалізується на нуль у BSS. Це може заощадити місце в отриманому коді.

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

За замовчуванням - -fzero-ініціалізовано-в-bss.

-фбризковик -fmudflapth -fmudflapir
Для інтерфейсів, які це підтримують (C і C++), інструментуйте всі ризиковані покажчики/масиви
операції розіменування, деякі стандартні бібліотечні рядкові/кучі функції та деякі інші
пов'язані конструкції з тестами діапазону/валідності. Модулі мають бути таким чином обладнані
несприйнятливий до переповнення буфера, недійсного використання купи та деяких інших класів C/C++
помилки програмування. Прилади покладаються на окрему бібліотеку часу виконання
(libmudflap), який буде пов’язано з програмою if -фбризковик надається під час посилання.
Поведінка інструментованої програми під час виконання контролюється MUDFLAP_OPTIONS
змінна середовища. Перегляньте параметри "env MUDFLAP_OPTIONS=-help a.out".

Скористайтесь -fmudflapth замість -фбризковик компілювати та зв’язати, якщо ваша програма багато-
різьбовий. Використовуйте -fmudflapir, На додаток до -фбризковик or -fmudflapth, Якщо
прилади повинні ігнорувати читання покажчика. Це створює менше інструментів (і
тому швидше виконання) і все ще забезпечує певний захист від прямої пам'яті
пошкоджує запис, але дозволяє помилково прочитаним даним поширюватися в програмі.

-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
копіювати/зберігати в циклі.

Увімкнено за замовчуванням, коли ввімкнено gcse.

-fgcse-sm
Коли -fgcse-sm увімкнено, після глобального спільного запускається проходження магазину
усунення підвиразів. Цей перехід намагатиметься вивести магазини з циклів. Коли
використовується разом з -fgcse-lm, цикли, що містять послідовність завантаження/збереження, можуть бути
змінено на навантаження перед циклом і збереження після циклу.

Не ввімкнено на жодному рівні оптимізації.

-fgcse-las
Коли -fgcse-las увімкнено, глобальне загальне видалення підвиразів проходить
усуває надлишкові навантаження, які надходять після зберігання в одне й те саме місце пам’яті (обидва
часткове та повне звільнення).

Не ввімкнено на жодному рівні оптимізації.

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

-funsafe-loop-optimizations
Якщо вказано, оптимізатор циклу вважатиме, що індекси циклу не переповнюються, і це
цикли з умовою нетривіального виходу не є нескінченними. Це дозволяє отримати більш широкий діапазон
оптимізації циклу, навіть якщо сам оптимізатор циклу не може довести, що ці
припущення справедливі. Використання -Wunsafe-loop-optimizations, компілятор попередить вас
якщо він знайде такий цикл.

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

Увімкнено на рівнях -О2, -О3, -Ос.

-fauto-inc-dec
Комбінуйте збільшення або зменшення адрес з доступом до пам’яті. Цей пропуск є
завжди пропускав архітектури, які не мають інструкцій для підтримки цього.
Увімкнено за замовчуванням о -O і вище на архітектурах, які це підтримують.

-fdce
Виконайте видалення мертвого коду (DCE) на RTL. Увімкнено за замовчуванням о -O і вище.

-fdse
Виконайте ліквідацію мертвих магазинів (DSE) на RTL. Увімкнено за замовчуванням о -O і вище.

-fif-перетворення
Спроба перетворити умовні стрибки в еквіваленти без гілок. Сюди входить використання
умовних ходів, мін, максимум, інструкції встановлення прапорців та абс, а також деякі трюки
за стандартною арифметикою. Використання умовного виконання на фішках там, де воно є
доступний контролюється за допомогою "if-conversion2".

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fif-перетворення2
Використовуйте умовне виконання (якщо доступне) для перетворення умовних переходів
еквіваленти без галузей.

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fdelete-null-pointer-checks
Припустимо, що програми не можуть безпечно розіменовувати нульові покажчики, і що немає коду чи даних
елемент знаходиться там. Це дає змогу прості постійні оптимізації згортання взагалі
рівні оптимізації. Крім того, інші проходи оптимізації в GCC використовують цей прапор
контроль глобального аналізу потоків даних, який усуває марні перевірки на нульові покажчики;
вони припускають, що якщо покажчик перевіряється після того, як він уже розіменований, він
не може бути нульовим.

Однак зауважте, що в деяких середовищах це припущення не відповідає дійсності. Використовуйте
-fno-delete-null-pointer-checks щоб вимкнути цю оптимізацію для програм, які залежать
на таку поведінку.

Деякі цілі, особливо вбудовані, вимикають цю опцію на всіх рівнях. Інакше
він увімкнений на всіх рівнях: -О0, -О1, -О2, -О3, -Ос. Перепустки, які використовують інформацію
включаються незалежно на різних рівнях оптимізації.

-fдевіртуалізувати
Спроба перетворити виклики у віртуальні функції на прямі виклики. Це робиться обидва
всередині процедури та міжпроцедурно як частина непрямого вбудовування
("-findirect-inlining") і міжпроцедурне поширення константи (-fipa-cp). Увімкнено
на рівнях -О2, -О3, -Ос.

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

Увімкнено на рівнях -О2, -О3, -Ос.

-вільно
Спробуйте видалити зайві інструкції розширення. Це особливо корисно для
архітектура x86-64, яка неявно розширюється до нуля в 64-бітних регістрах після
запис до їх нижньої 32-розрядної половини.

Увімкнено для x86 на рівнях -О2, -О3.

-foptimize-register-move
- Fregmove
Спробуйте перепризначити номери регістрів в інструкціях переміщення та як операнди інших
прості інструкції, щоб максимізувати кількість прив'язування реєстрів. Це
особливо корисно на машинах з двооперандними інструкціями.

примітки - Fregmove та -foptimize-register-move та ж оптимізація.

Увімкнено на рівнях -О2, -О3, -Ос.

-fira-algorithm=алгоритм
Використовуйте вказаний алгоритм фарбування для інтегрованого розподільника регістрів. The
алгоритм аргумент може бути пріоритет, який визначає пріоритетне забарвлення Чоу, або CB,
який визначає забарвлення Чайтіна-Бріггса. Забарвлення Чайтіна-Бріггса не реалізовано
для всіх архітектур, але для тих цілей, які її підтримують, це значення за замовчуванням
тому що він генерує кращий код.

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

всі Використовуйте всі цикли як області розміщення регістрів. Це може дати найкращі результати для
машини з невеликим та/або неправильним набором регістрів.

змішаний
Використовуйте всі цикли, окрім циклів з невеликим тиском у регістрі, як області. Це
value зазвичай дає найкращі результати в більшості випадків і для більшості архітектур, і
увімкнено за замовчуванням під час компіляції з оптимізацією для швидкості (-O, -О2, ...).

один Використовуйте всі функції як єдиний регіон. Зазвичай це призводить до найменшого коду
розмір і ввімкнено за замовчуванням для -Ос or -О0.

-фіра-петля-тиск
Використовуйте IRA для оцінки тиску регістра в циклах для прийняття рішень щодо переміщення інваріантів циклу.
Цей параметр зазвичай призводить до генерації швидшого та меншого коду на машинах з
великі файли регістрів (>= 32 регістри), але це може сповільнити роботу компілятора.

Цей параметр увімкнено на рівні -О3 для деяких цілей.

-fno-ira-share-save-slots
Вимкніть спільне використання слотів стека, які використовуються для збереження використаних жорстких регістрів
дзвінок. Кожен жорсткий регістр отримує окремий слот стека, і, як результат, стек функцій
рамки більші.

-fno-ira-share-spill-slots
Вимкнути спільний доступ до слотів стека, виділених для псевдореєстрів. Кожен псевдореєстр
що не отримує жорсткий регістр, отримує окремий слот стека, і як результат функцію
стекові рамки більші.

-fira-verbose=n
Контролюйте детальність файлу дампа для інтегрованого розподільника регістрів. The
значення за замовчуванням дорівнює 5. Якщо значення n більше або дорівнює 10, вихідний дамп надсилається
до stderr, використовуючи той самий формат, що й n мінус 10.

-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, який є кандидатом на передчасне видалення з черги зупинених insn. Це
діє лише під час другого проходу планування, і тільки якщо
-fsched-stalled-insns використовується. -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 is
включено.

-fsel-sched-pipelining-outer-loops
Під час вибору конвеєрних циклів під час вибіркового планування також конвейерні зовнішні цикли. Це
опція не діє доки -fsel-sched-pipelining увімкнено.

-fshrink-wrap
Функція Emit виступає лише перед частинами функції, які цього потребують, а не в
верхня частина функції. Цей прапор увімкнено за замовчуванням в -O і вище.

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

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

Увімкнено на рівнях -О2, -О3, -Ос.

-fcombine-stack-adjustments
Відстежує коригування стеку (натискання та вибухання) та посилання на пам’ять стека, а потім намагається
знайти способи їх поєднання.

Увімкнено за замовчуванням о -О1 і вище.

-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 і вище.

-ftree-copy-prop
Виконайте копіювання на деревах. Цей пропуск усуває непотрібні операції копіювання.
Цей прапор увімкнено за замовчуванням в -O і вище.

-fipa-чистий-конст
Дізнайтеся, які функції є чистими чи постійними. Увімкнено за замовчуванням о -O і вище.

-фіпа-довідка
Дізнайтеся, які статичні змінні не екрануються, не можуть уникнути блоку компіляції.
Увімкнено за замовчуванням о -O і вище.

-фіпа-пта
Виконайте міжпроцедурний аналіз покажчиків та міжпроцедурну модифікацію та
довідковий аналіз. Цей параметр може призвести до надмірного використання пам’яті та часу компіляції
великі одиниці компіляції. Він не включений за замовчуванням на жодному рівні оптимізації.

-фіпа-профіль
Виконайте міжпроцедурне поширення профілю. Функції викликаються тільки з холоду
функції позначені як холодні. Також функції, що виконуються один раз (наприклад, "холодний",
«noreturn», статичні конструктори або деструктори). Холодні функції і
Частини функцій, які виконуються один раз, оптимізуються за розміром. Увімкнено
за замовчуванням на -O і вище.

-fipa-cp
Виконайте міжпроцедурне поширення константи. Ця оптимізація аналізує програму
щоб визначити, коли значення, передані функціям, є константами, а потім оптимізувати
відповідно. Ця оптимізація може істотно підвищити продуктивність, якщо
додаток має константи, передані функціям. Цей прапорець увімкнено за замовчуванням в
-О2, -Ос та -О3.

-fipa-cp-клон
Виконайте клонування функції, щоб посилити поширення міжпроцедурної константи. Коли
увімкнено, міжпроцедурне поширення константи виконуватиме клонування функції, коли
видиму ззовні функцію можна викликати з постійними аргументами. Тому що це
оптимізація може створити кілька копій функцій, вона може значно збільшитися
розмір коду (див --парам ipcp-unit-growth=значення). Цей прапор увімкнено за замовчуванням в
-О3.

-fipa-matrix-reorg
Виконайте сплющення та транспонування матриці. Вирівнювання матриці намагається замінити an
m-вимірна матриця з її еквівалентною n-вимірною матрицею, де n < m. Це
зменшує рівень опосередкованості, необхідного для доступу до елементів матриці. The
Друга оптимізація - це транспонування матриці, яка намагається змінити порядок
розміри матриці, щоб покращити локальність кешу. Обидві оптимізації потребують
-f ціла програма прапор. Транспонування ввімкнено, лише якщо інформація профілю є
в наявності.

-Free-раковина
Виконуйте рух вперед по деревах. Цей прапор увімкнено за замовчуванням в -O та
вище.

-ftree-bit-ccp
Виконайте розріджене розповсюдження константи умовного біта на деревах та розповсюджуйте покажчик
інформація про вирівнювання. Цей перехід працює лише з локальними скалярними змінними і є
увімкнено за замовчуванням на -O і вище. Це вимагає цього -ftree-ccp активовано

-ftree-ccp
Виконайте розріджене умовне постійне поширення (CCP) на деревах. Тільки цей пропуск
працює з локальними скалярними змінними і вмикається за замовчуванням на -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 має бути налаштований --with-ppl та --with-cloog до
увімкнути інфраструктуру перетворення циклу Graphite.

-шлюз-розв'язка
Виконайте перетворення циклів обміну на циклах. Зміна двох вкладених циклів
перемикає внутрішній і зовнішній цикли. Наприклад, заданий цикл, наприклад:

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 --with-ppl
та --with-cloog щоб увімкнути інфраструктуру перетворення циклу Graphite.

-floop-strip-mine
Виконуйте перетворення видобутку циклів на петлях. Видобуток смуги розбиває цикл на
два вкладених цикли. Зовнішня петля має кроки, рівні розміру смужки і внутрішню
петля має кроки вихідної петлі всередині смужки. Довжину смужки можна змінювати
використання loop-block-tile-size параметр. Наприклад, заданий цикл, наприклад:

DO I = 1, N
A(I) = A(I) + C
ENDDO

майнінг смугового циклу перетворить цикл так, ніби користувач написав:

DO II = 1, N, 51
DO I = II, хв (II + 50, N)
A(I) = A(I) + C
ENDDO
ENDDO

Ця оптимізація стосується всіх мов, які підтримує GCC, і не обмежується ними
Fortran. Щоб використовувати це перетворення коду, потрібно налаштувати GCC --with-ppl
та --with-cloog щоб увімкнути інфраструктуру перетворення циклу 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 --with-ppl
та --with-cloog щоб увімкнути інфраструктуру перетворення циклу Graphite.

-fgraphite-ідентичність
Увімкнути перетворення ідентичності для графіту. Для кожного SCoP ми створюємо
багатогранне представлення та перетворіть його назад у Gimple. Використання -fgraphite-ідентичність
ми можемо перевірити витрати або переваги трансформації GIMPLE -> GRAPHITE -> GIMPLE.
Деякі мінімальні оптимізації також виконуються генератором коду CLooG, як індекс
розщеплення та усунення мертвого коду в циклах.

-розплющити
Видаляє структуру вкладення циклу: перетворює гніздо циклу в один цикл. Це
трансформація може бути корисною як вмикаюче перетворення для векторизації та
розпаралелювання. Ця функція є експериментальною. Щоб використовувати це перетворення коду, GCC
має бути налаштовано з --with-ppl та --with-cloog щоб увімкнути графітовий цикл
трансформаційна інфраструктура.

-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 окремо від
один одного, так що вони, швидше за все, містять очікувані значення в a
сеанс налагодження. Це було за замовчуванням у версіях GCC, старіших за 4.7.

-ftree-coalesce-vars
Скажіть пропуску copyrename (див -ftree-copyrename) спробувати об’єднати невеликих користувачів-
також визначені змінні, а не лише тимчасові елементи компілятора. Це може серйозно обмежити
можливість налагодження оптимізованої програми, скомпільованої з -fno-var-tracking-assignments.
У запереченій формі цей прапор запобігає об’єднанню SSA змінних користувача, у тому числі
вбудовані. Цей параметр увімкнено за замовчуванням.

-ftree-ter
Виконайте тимчасову заміну експресії під час фази SSA->normal. Неодружений
тимчасові елементи use/single def замінюються в місці їх використання на їх визначення
вираз. Це призводить до не-GIMPLE коду, але дає розширювачам набагато більше
складні дерева для роботи, що призведе до кращого генерування RTL. Це увімкнено за допомогою
за замовчуванням на -O і вище.

-ftree-векторизувати
Виконайте векторизацію циклів на деревах. Цей прапорець увімкнено за замовчуванням в -О3.

-ftree-slp-vectorize
Виконайте базову блокову векторизацію на деревах. Цей прапор увімкнено за замовчуванням в -О3 та
коли -ftree-векторизувати активовано

-ftree-vect-loop-версія
Виконуйте циклізацію версій, виконуючи векторизацію циклу на деревах. Коли з’являється петля
можна векторизувати, за винятком того, що неможливо визначити вирівнювання даних або залежність даних
під час компіляції генеруються векторизовані та невекторизовані версії циклу
разом із перевірками під час виконання на вирівнювання чи залежність, щоб контролювати, яка версія є
виконано. Цей параметр увімкнено за замовчуванням, крім рівня -Ос де він відключений.

-fvect-кошт-модель
Увімкнути модель вартості для векторизації.

-ftree-vrp
Виконайте поширення діапазону значень на деревах. Це схоже на постійне поширення
pass, але замість значень поширюються діапазони значень. Це дозволяє
оптимізатори для видалення непотрібних перевірок діапазону, таких як перевірки прив’язаності до масиву та нульовий покажчик
чеки. Це ввімкнено за замовчуванням на -О2 і вище. Видалення перевірки нульового покажчика
виконується лише якщо -fdelete-null-pointer-checks активовано

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

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

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

-fsplit-ivs-in-unroller
Дозволяє виразити значення індукційних змінних у наступних ітераціях
розгорнутий цикл із використанням значення на першій ітерації. Це порушує тривалу залежність
ланцюжків, що покращує ефективність планування проходів.

Поєднання -fweb і CSE часто достатньо для отримання того ж ефекту. Однак
у випадках, коли тіло циклу є складнішим, ніж один базовий блок, це не так
надійний. Він також взагалі не працює на деяких архітектурах через
обмеження в пропуску 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, для функцій із визначеним користувачем атрибутом розділу та на будь-якому
архітектура, яка не підтримує іменовані розділи.

-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" стає статичними функціями і фактично оптимізується
більш агресивно за допомогою міжпроцедурних оптимізаторів. Якщо золото використовується як плагін компонувальника,
Атрибути "externally_visible" автоматично додаються до функцій (ще не змінні
через струм золото проблема), доступ до яких здійснюється за межами об’єктів LTO відповідно до
файл резолюції, створений золото. Для інших компонувальників, які не можуть генерувати дозвіл
файл, явні атрибути "externally_visible" все ще необхідні. Поки цей варіант
еквівалентно правильному використанню ключового слова static для програм, що складаються з a
один файл у поєднанні з опцією -flto цей прапор можна використовувати для компіляції багатьох
програми меншого масштабу, оскільки функції та змінні стають локальними для цілого
комбінований блок компіляції, а не для окремого вихідного файлу.

Цей варіант має на увазі -fцілий файл для програм Fortran.

-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.

Єдине важливе, про що слід пам’ятати, це те, що ввімкнути оптимізацію часу з’єднання
-flto прапор потрібно передати як команді компіляції, так і команді посилання.

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

Зауважте, що коли файл компілюється з -flto, згенерований об’єктний файл більше ніж
звичайний об'єктний файл, оскільки він містить байт-коди GIMPLE і звичайний кінцевий код.
Це означає, що об’єктні файли з інформацією LTO можуть бути пов’язані як звичайний об’єкт
файли; якщо -flto не передається компоновщику, ніякої міжпроцедурної оптимізації не відбувається
застосовано.

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

gcc -c -O0 -flto foo.c
gcc -c -o0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o

Це створює окремі об’єктні файли з неоптимізованим кодом ассемблера, але
отриманий двійковий файл myprog оптимізовано на -О3. Якщо замість цього кінцевий двійковий файл
створений без -flto, То myprog не оптимізовано.

При створенні остаточного двійкового файлу с -flto, GCC застосовує лише оптимізацію часу з’єднання
до тих файлів, які містять байт-код. Таким чином, ви можете змішувати та поєднувати об’єктні файли
і бібліотеки з байт-кодами GIMPLE і кінцевим об'єктним кодом. GCC вибирає автоматично
які файли оптимізувати в режимі LTO і які файли зв’язувати без подальшого
обробка

Існують деякі прапори генерації коду, які зберігаються GCC під час генерації байт-кодів, як
їх потрібно використовувати на останньому етапі посилання. На даний момент наступні варіанти
зберігаються у файлах байт-коду GIMPLE: -fPIC, -fзагальний і все -m цільові прапори.

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

Якщо LTO зустрічає об’єкти зі зв’язуванням C, оголошеними з несумісними типами, окремо
одиниці перекладу, які повинні бути пов’язані між собою (невизначена поведінка відповідно до ISO C99
6.2.7), може бути виданий нефатальний діагноз. Поведінка все ще не визначена під час виконання
часу.

Ще одна особливість LTO полягає в тому, що можна застосовувати міжпроцедурні оптимізації
на файли, написані різними мовами. Для цього потрібна підтримка на мовному фронті
кінець. Наразі інтерфейси C, C++ і Fortran здатні видавати GIMPLE
байт-кодами, тому щось на зразок цього має працювати:

gcc -c -flto foo.c
g ++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

Зверніть увагу, що остаточне посилання закінчено г ++ щоб отримати бібліотеки часу виконання C++ і
-lgfortran додається, щоб отримати бібліотеки часу виконання Fortran. Загалом при змішуванні
мовами в режимі LTO, ви повинні використовувати ті самі параметри команди посилання, що й під час змішування
мови у звичайній (не LTO) компіляції; все, що вам потрібно додати, це -flto для всіх
команди компіляції та зв'язування.

Скажімо, якщо об’єктні файли, що містять байт-код GIMPLE, зберігаються в архіві бібліотеки
libfoo.a, їх можна витягти та використати у посиланні LTO, якщо ви використовуєте a
лінкер з підтримкою плагінів. Щоб увімкнути цю функцію, скористайтеся прапорцем -плагін-запобіжник
під час посилання:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

Якщо ввімкнено плагін компонувальника, компонувальник витягує необхідні файли GIMPLE
libfoo.a і передає їх до поточного GCC, щоб зробити їх частиною агрегованого
Зображення GIMPLE для оптимізації.

Якщо ви не використовуєте компоновщик з підтримкою плагінів і/або не вмикаєте компонувальник
плагін, потім об’єкти всередині libfoo.a витягуються та зв’язуються, як зазвичай, але вони
не брати участі в процесі оптимізації LTO.

Оптимізація часу зв'язку не вимагає наявності всієї програми для роботи.
Якщо програма не вимагає експорту символів, можна об’єднати
-flto та -f ціла програма щоб дозволити міжпроцедурним оптимізаторам використовувати більше
агресивні припущення, які можуть призвести до покращення можливостей оптимізації. Використання
-f ціла програма не потрібен, коли плагін компонувальника активний (див -плагін-запобіжник).

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

Оптимізація часу зв'язку погано працює з генерацією налагоджувальної інформації.
Об'єднання -flto з -g наразі є експериментальним і, як очікується, буде виробляти неправильне
результати.

Якщо вказати необов’язковий n, оптимізація та генерація коду, що виконується під час посилання
виконується паралельно з використанням n паралельні роботи за допомогою встановленого зробити програми.
Змінна середовища ЗРОБІТЬ може використовуватися для заміни використовуваної програми. За замовчуванням
значення для n є 1.

Ви також можете вказати -flto=сервер роботи використовувати для визначення режим сервера завдань GNU make
кількість паралельних робіт. Це корисно, коли Makefile, що викликає GCC, уже є
виконується паралельно. Ви повинні додати а + до командного рецепту в батьківському
Makefile, щоб це працювало. Ця опція, ймовірно, працює лише в тому випадку, якщо ЗРОБІТЬ є виробником GNU.

Цей параметр вимкнено за замовчуванням

-flto-розділ=ALG
Вкажіть алгоритм розподілу, який використовується оптимізатором часу зв’язку. Значення є
або "1to1", щоб вказати розділення, що віддзеркалює вихідні файли, або
"збалансований", щоб вказати поділ на однакові за розміром шматки (коли це можливо).
Визначення «none» як алгоритм повністю вимикає розділення та потокову передачу. The
значення за замовчуванням «збалансований».

-flto-compression-level=n
Цей параметр визначає рівень стиснення, що використовується для написання мови середнього рівня
до об’єктних файлів LTO і має значення лише в поєднанні з режимом LTO (-flto).
Допустимі значення: від 0 (без стиснення) до 9 (максимальне стиснення). Цінності поза цим
діапазон обмежені до 0 або 9. Якщо параметр не вказано, значення за замовчуванням збалансовано
використовується налаштування стиснення.

-flto-звіт
Друкує звіт із внутрішніми деталями про роботу оптимізатора часу зв’язку. The
зміст цього звіту відрізняється від версії до версії. Це має бути корисним для GCC
розробників під час обробки об’єктних файлів у режимі LTO (через -flto).

Вимкнено за умовчанням.

-плагін-запобіжник
Дозволяє використовувати плагін компонувальника під час оптимізації часу з’єднання. Цей варіант залежить
про підтримку плагінів у компонувальнику, який доступний у золотому кольорі або в GNU ld 2.21 або
новіший.

Цей параметр дозволяє витягувати об’єктні файли з байт-кодом GIMPLE з бібліотеки
архіви. Це покращує якість оптимізації, відкриваючи більше коду за посиланням-
оптимізатор часу. Ця інформація визначає, до яких символів можна отримати зовнішній доступ
(за об'єктом, що не є LTO, або під час динамічного зв'язування). Покращення якості коду в результаті
двійкові файли (і спільні бібліотеки, які використовують приховану видимість) подібні до
"-fwhole-program". Побачити -flto для опису впливу цього прапора та способів
використай це.

Цей параметр увімкнено за замовчуванням, якщо підтримка LTO в GCC увімкнена і GCC був
налаштований для використання з компонувальником, який підтримує плагіни (GNU ld 2.21 або новішої або золотої).

-ffat-lto-об'єкти
Об’єкти Fat LTO – це об’єктні файли, які містять як проміжну мову, так і мову
об'єктний код. Це робить їх придатними як для зв’язування LTO, так і для звичайного зв’язування. Це
Опція ефективна лише при компіляції з -flto і ігнорується під час посилання.

-fno-fat-lto-Objects покращує час компіляції порівняно зі звичайним LTO, але вимагає
повний набір інструментів, щоб знати про LTO. Для цього потрібен компоновщик з підтримкою плагіна компонувальника
для базової функціональності. Крім того, nm, ar і ranlib повинні підтримувати компонувальник
плагіни, що дозволяють створювати повнофункціональне середовище збірки (здатне створювати статичні
бібліотеки тощо).

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

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

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

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-запобіжник-ld=золото
Використовувати золото компонувальник замість стандартного компонувальника.

-fuse-ld=bfd
Використовувати ld.bfd компонувальник замість стандартного компонувальника.

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

Увімкнено на рівнях -O, -О2, -О3, -Ос.

-fprofile-correction
Можуть бути профілі, зібрані за допомогою інструментального двійкового файлу для багатопоточних програм
непостійний через пропущені оновлення лічильника. Якщо вказано цю опцію, GCC буде
використовувати евристики, щоб виправити або згладити такі невідповідності. За замовчуванням GCC буде
видавати повідомлення про помилку при виявленні невідповідного профілю.

-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=шлях
Увімкнути оптимізацію, спрямовану на зворотний зв’язок профілю, і оптимізація, як правило, прибуткова
доступний лише відгук про профіль.

Увімкнено такі параметри: "-fbranch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"

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

If шлях вказано, GCC перегляне шлях щоб знайти дані зворотного зв’язку профілю
файли. Побачити -fprofile-dir.

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

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

Ця опція запобігає небажаній надмірній точності на таких машинах, як 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-використання.

-fvpt
Якщо поєднується з -fprofile-arcs, він наказує компілятору додати код для збору
відомості про значення виразів.

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

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

Увімкнено за замовчуванням за допомогою -закрутки-петлі та -fpeel-loops.

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

Увімкнено за допомогою -fprofile-використання.

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

Увімкнено за допомогою -fprofile-використання.

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

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

Увімкнено за допомогою -fprofile-використання.

-fmove-loop-інваріанти
Вмикає інваріантний цикл руху в оптимізаторі циклу RTL. Увімкнено на рівні
-О1

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

-ffunction-секції
-fdata-розділи
Розмістіть кожну функцію або елемент даних у власний розділ вихідного файлу, якщо це цільовий елемент
підтримує довільні розділи. Ім'я функції або ім'я елемента даних
визначає назву розділу у вихідному файлі.

Використовуйте ці параметри в системах, де компонувальник може виконувати оптимізацію для покращення
місцевість посилання в просторі інструкцій. Більшість систем використовують об'єкт ELF
формат і процесори SPARC під керуванням Solaris 2 мають компонувальники з такими оптимізаціями.
У майбутньому AIX може мати ці оптимізації.

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

-fbranch-target-load-optimize
Виконайте оптимізацію навантаження цільового регістра гілки перед прологом/епілогом.
Використання цільових регістрів зазвичай може бути відкрито лише під час перезавантаження, таким чином, підйому
завантаження з циклів і виконання міжблочного планування потребує окремої оптимізації
прохід.

-fbranch-target-load-optimize2
Виконайте оптимізацію навантаження цільового регістра гілки після прологу/епілогу.

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

-fstack-протектор
Випускайте додатковий код, щоб перевірити переповнення буфера, наприклад, атаки, що руйнують стек. Це
здійснюється шляхом додавання захисної змінної до функцій з уразливими об’єктами. Це
включає функції, які викликають alloca, і функції з буферами більше 8 байт.
Захисники ініціалізуються, коли вводиться функція, а потім перевіряються, коли
виходить із функції. Якщо захисна перевірка не вдається, друкується повідомлення про помилку та програма
виходи.

ПРИМІТКА. В Ubuntu 6.10 і пізніших версіях цей параметр увімкнено за замовчуванням для C, C++,
ObjC, ObjC++, якщо немає жодного з -fno-стек-протектор, -nostdlib, ні -автономний він має
знайдено.

-fstack-protector-all
Люблю -fstack-протектор за винятком того, що всі функції захищені.

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

Наприклад, реалізація наступної функції "foo":

static int a, b, c;
int foo (void) { return a + b + c; }

зазвичай обчислює адреси всіх трьох змінних, але якщо ви його компілюєте
з -fsection-анкери, він отримає доступ до змінних із загальної точки прив’язки
замість цього. Ефект подібний до наступного псевдокоду (який не є дійсним 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.

великі функції-insns
Межа, що визначає дійсно великі функції. Для функцій, що перевищують цю межу
після вбудовування вбудовування обмежується --парам велика функція зростання, це
параметр корисний насамперед, щоб уникнути екстремального часу компіляції, викликаного не-
лінійні алгоритми, які використовуються бек-ендом. Значення за замовчуванням — 2700.

велика функція зростання
Визначає максимальне зростання великої функції, викликане вбудовуванням у відсотках. The
Значення за замовчуванням — 100, що обмежує зростання великої функції в 2.0 рази більше від початкового
розмір.

великий підрозділ-insns
Обмеження, що визначає велику одиницю перекладу. Зростання, викликане вбудовуванням одиниць
більше цієї межі обмежено --парам вбудований зростання. Для невеликих одиниць
це може бути занадто жорстким (розглянемо одиницю, що складається з функції A, яка є вбудованою і
B, який просто викликає A тричі. Якщо B є малим відносно A, зростання одиниці
становить 300\%, і все ж таке вставлення є дуже розумним. Для дуже великих одиниць, що складаються з
невеликі нерозбірні функції, однак для цього необхідна загальна межа зростання одиниці
уникнути експоненційного вибуху розміру коду. Таким чином, для менших одиниць розмір
збільшилася до --парам великий підрозділ-insns перед застосуванням --парам вбудований зростання.
За замовчуванням – 10000

вбудований зростання
Вказує максимальне загальне зростання одиниці компіляції, викликане вбудовуванням. The
Значення за замовчуванням — 30, що обмежує зростання одиниці в 1.3 рази від початкового розміру.

ipcp-unit-growth
Вказує максимальне загальне зростання одиниці компіляції, викликане міжпроцедурними
постійне поширення. Значенням за замовчуванням є 10, що обмежує зростання одиниці до 1.1
разів більше початкового розміру.

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

big-stack-frame-growth
Визначає максимальне зростання кадрів великого стека, викликане вбудовуванням у відсотках.
Значенням за замовчуванням є 1000, що обмежує зростання кадру великого стека в 11 разів
оригінальний розмір.

max-inline-insns-рекурсивний
max-inline-insns-recursive-auto
Вказує максимальну кількість інструкцій поза лінійною копією саморекурсивної вбудованої
функція може перерости в, виконуючи рекурсивне вбудовування.

Для функцій, оголошених inline --парам max-inline-insns-рекурсивний береться до уваги
рахунок. Для функції, не оголошеної вбудованою, рекурсивне вбудовування відбувається лише тоді, коли
-finline-функції (входить до -О3) увімкнено і --парам max-inline-insns-
рекурсивно-автоматично використовується. Значення за замовчуванням — 450.

max-inline-recursive-depth
max-inline-recursive-depth-auto
Вказує максимальну глибину рекурсії, яку використовує рекурсивне вбудовування.

Для функцій, оголошених inline --парам max-inline-recursive-depth береться до уваги
рахунок. Для функції, не оголошеної вбудованою, рекурсивне вбудовування відбувається лише тоді, коли
-finline-функції (входить до -О3) увімкнено і --парам max-inline-recursive-
глибина-авто використовується. Значення за замовчуванням — 8.

min-inline-recursive-probability
Рекурсивне вбудовування вигідно лише для функції з глибокою рекурсією
середній і може зашкодити функції з невеликою глибиною рекурсії за рахунок збільшення
передайте розмір або складність тіла функції іншим оптимізаторам.

Коли доступний зворотній зв’язок профілю (див -fprofile-generate) фактична рекурсія
глибину можна вгадати з імовірності того, що функція буде рекурсувати через даний виклик
вираз. Цей параметр обмежує вбудовування лише викликом виразу who
ймовірність перевищує заданий поріг (у відсотках). Значення за замовчуванням – 10.

ранній інлайнінг-insns
Укажіть зростання, яке може досягти ранній інлайнер. Фактично це збільшує кількість
вбудовування для коду, що має великий штраф абстракції. Значення за замовчуванням – 10.

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

comdat-sharing-probability
comdat-sharing-probability
Імовірність (у відсотках), що вбудована функція C++ з видимістю comdat буде
спільне для кількох компіляційних одиниць. Значення за замовчуванням – 20.

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-fully-oled-insns
Максимальна кількість insns повністю відклеєної петлі.

максимальний час повного очищення
Максимальна кількість ітерацій циклу, яка підходить для повного пілінгу.

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

max-unswitch-insns
Максимальна кількість insns неперемкненого циклу.

максимальний рівень відключення
Максимальна кількість відгалужень, які не перемикаються в одному циклі.

lim-дорого
Мінімальна вартість дорогого виразу в циклі інваріантного руху.

iv-розглянути-всі-кандидати-пов'язані
Зв’язана з кількістю кандидатів на індукційні змінні нижче, ніж усі кандидати
розглядаються для кожного використання в оптимізації індукційної змінної. Тільки найбільше
відповідні кандидати розглядаються, якщо є більше кандидатів, щоб уникнути
квадратична часова складність.

iv-max-considered-use
Оптимізація змінної індукції відмовляється від циклів, які містять більше індукції
змінне використання.

iv-always-prune-can-set-bound
Якщо кількість кандидатів у наборі менше цього значення, ми завжди намагаємося
видалити непотрібні iv з набору під час його оптимізації, коли додається новий iv
до набору.

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
Максимальна кількість перевірок під час виконання, які можна виконати під час виконання циклу
версій для вирівнювання у векторізаторі. Дивіться параметр ftree-vect-loop-version
для отримання додаткової інформації.

vect-max-version-for-alias-checks
Максимальна кількість перевірок під час виконання, які можна виконати під час виконання циклу
керування версіями для псевдоніма у векторізаторі. Дивіться параметр ftree-vect-loop-version для
більше інформації.

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

hot-bb-count-fraction
Виберіть частку від максимальної кількості повторів основного блоку в програмі
даний базовий блок потрібно вважати гарячим.

hot-bb-frequency-fraction
Виберіть частку частоти виконання базового блоку введення
Функція даного базового блоку повинна вважатися гарячою.

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

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

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 - вимкнути
розширення регіону, N - зробити щонайбільше N ітерацій. Значення за замовчуванням – 0.

max-sched-insn-conflict-delay
Максимальна затримка конфлікту для insn, яка розглядається для спекулятивного руху.
Значення за замовчуванням - 3.

sched-spec-prob-cutoff
Мінімальна ймовірність успіху спекуляцій (у відсотках), тому спекулятивна
insn буде заплановано. Значення за замовчуванням – 40.

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.

ліміт цілочисельної частки
Малі цілі константи можуть використовувати спільну структуру даних, зменшуючи компілятор
використання пам'яті та збільшення її швидкості. Це встановлює максимальне значення спільного доступу
ціла константа. Значення за замовчуванням – 256.

min-virtual-mappings
Вказує мінімальну кількість віртуальних зіставлень у інкрементному засобі оновлення SSA
який має бути зареєстрований, щоб ініціювати евристику віртуальних відображень, визначену
співвідношення віртуальних відображень. Значення за замовчуванням – 100.

співвідношення віртуальних відображень
Якщо кількість віртуальних відображень більше, ніж число
віртуальних символів, які потрібно оновити, то інкрементальний засіб оновлення SSA перемикається на a
повне оновлення для цих символів. Коефіцієнт за замовчуванням дорівнює 3.

ssp-буфер-розмір
Мінімальний розмір буферів (тобто масивів), які будуть розбиті стек
захист, коли -fstack-захист використовується.

За замовчуванням до Ubuntu 10.10 було "8". Зараз це "4", щоб збільшити
кількість функцій, захищених захистом стека.

max-jump-thread-duplication-stmts
Максимальна кількість операторів, дозволених у блоці, яку потрібно продублювати, коли
стрибки нарізки.

max-fields-for-field-sensitive
Максимальна кількість полів у структурі, яку ми будемо обробляти з урахуванням поля
під час аналізу покажчика. За замовчуванням – нуль для -O0, а -O1 і 100 для -Os,
-O2 і -O3.

затримка попередньої вибірки
Оцініть середню кількість інструкцій, які виконуються перед попередньою вибіркою
закінчується. Відстань, яку ми попередньо вибираємо, пропорційна цій константі.
Збільшення цієї кількості також може призвести до попередньої завантаження менше потоків (див
одночасні попередні вибірки).

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

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.

ira-max-loops-num
IRA за замовчуванням використовує розподіл регіональних реєстрів. Якщо функція містить більше
циклів, ніж число, задане цим параметром, лише не більше заданої кількості
найбільш часто виконувані цикли утворюють регіони для розміщення регіональних реєстрів.
Значення параметра за замовчуванням — 100.

ira-max-conflict-table-size
Хоча IRA використовує складний алгоритм для стиснення таблиці конфліктів,
таблиця все ще може вимагати надмірного обсягу пам'яті для величезних функцій. Якщо
Таблиця конфліктів для функції може бути більше розміру в МБ, зазначеного цим
параметр, розподільник регістрів замість цього використовує швидший, простіший і менший
якісний алгоритм, який не вимагає побудови таблиці конфліктів псевдореєстрів.
Значення параметра за замовчуванням — 2000.

ira-loop-reserved-regs
IRA можна використовувати для оцінки більш точного тиску регістра в циклах прийняття рішень
для переміщення інваріантів циклу (див -О3). Зарезервована кількість доступних реєстрів
деякі інші цілі дає цей параметр. Значення за замовчуванням
Параметр дорівнює 2, що є мінімальною кількістю регістрів, необхідних типовому
інструкції. Це значення є найкращим, знайденим у численних експериментах.

loop-invariant-max-bbs-in-loop
Інваріантний рух циклу може бути дуже дорогим як під час компіляції, так і в
обсяг необхідної пам'яті під час компіляції, з дуже великими циклами. Петлі з більше
базові блоки, ніж цей параметр, не матимуть циклічної інваріантної оптимізації руху
виконано на них. Значення параметра за замовчуванням становить 1000 для -O1 і 10000
для -O2 і вище.

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-фактор росту
разів більше розміру вихідного параметра покажчика.

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 ітерація.

ipa-cp-value-list-size
IPA-CP намагається відстежити всі можливі значення та типи, передані функції
параметр, щоб поширити їх і виконати девіртуалізацію. ipa-cp-value-
розмір списку – максимальна кількість значень і типів, які він зберігає на один формаль
параметр функції.

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. Ця опція ввімкнена за замовчуванням, якщо вона не встановлена ​​неявно
-fmemory-model= варіант.

дозволити-зберігати-дані гонки
Дозвольте оптимізаторам запроваджувати нові перегони даних у магазинах. Встановіть 1, щоб дозволити,
інакше до 0. Ця опція ввімкнена за замовчуванням, якщо вона не встановлена ​​неявно
-fmemory-model= варіант.

дозволити-упаковані-завантаження-перегони даних
Дозвольте оптимізаторам запроваджувати нові перегони даних для завантажених даних. Встановіть 1 до
дозволити, інакше до 0. Ця опція ввімкнена за замовчуванням, якщо вона не встановлена
-fmemory-model= варіант.

дозволити-упаковані-зберігати-дані гонки
Дозвольте оптимізаторам запроваджувати нові гонки даних у сховищах упакованих даних. Встановіть 1 до
дозволити, інакше до 0. Ця опція ввімкнена за замовчуванням, якщо вона не встановлена
-fmemory-model= варіант.

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

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

Опції Управління Препроцесор
Ці параметри керують препроцесором C, який запускається на кожному вихідному файлі C перед фактичним
складання.

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

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

-Xпрепроцесор варіант
Проходити варіант як опція для препроцесора. Ви можете використовувати це для забезпечення системи-
конкретні параметри препроцесора, які GCC не знає, як розпізнати.

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

-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-ідентифікатори
Приймайте універсальні імена символів в ідентифікаторах. Цей варіант є експериментальним; в
майбутньої версії GCC, вона буде ввімкнена за замовчуванням для C99 і C++.

-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.

-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 Якщо використовується будь-який з цих параметрів, то компонувальник не запускається, а імена об’єктних файлів
не слід використовувати як аргументи.

-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 -нові за замовчуванням використовується.

-нові за замовчуванням
Не використовуйте стандартні системні бібліотеки під час підключення. Лише вказані вами бібліотеки
будуть передані компоновщику, параметри, що вказують підключення системних бібліотек, наприклад
як "-static-libgcc" або "-shared-libgcc", буде проігноровано. Стандартні файли запуску
використовуються нормально, якщо -nostartfiles використовується. Компілятор може генерувати виклики до
"memcmp", "memset", "memcpy" і "memmove". Ці записи зазвичай вирішуються за допомогою
записи в libc. Ці точки входу повинні забезпечуватися через якийсь інший механізм
коли ця опція вказана.

-nostdlib
Не використовуйте стандартні файли запуску системи або бібліотеки під час підключення. Немає запуску
файли і лише вказані вами бібліотеки будуть передані компоновщику, параметри
вказуючи зв'язок системних бібліотек, наприклад "-static-libgcc" або
"-shared-libgcc" буде проігноровано. Компілятор може генерувати виклики "memcmp",
"memset", "memcpy" і "memmove". Ці записи зазвичай вирішуються записами в
libc. При цьому ці точки входу повинні забезпечуватися через якийсь інший механізм
опція вказана.

Одна зі стандартних бібліотек, яку ми обійшли -nostdlib та -нові за замовчуванням is libgcc.a, то
бібліотека внутрішніх підпрограм, які GCC використовує для подолання недоліків окремих
машини або спеціальні потреби для деяких мов.

У більшості випадків потрібно libgcc.a навіть якщо ви хочете уникнути інших стандартних бібліотек.
Іншими словами, коли ви вказуєте -nostdlib or -нові за замовчуванням ви повинні зазвичай
вкажіть -lgcc також. Це гарантує, що у вас немає невирішених посилань на
внутрішні підпрограми бібліотеки GCC. (Наприклад, __основний, що використовується для забезпечення 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
за замовчуванням. Це дозволяє виняткам поширюватися через такі спільні бібліотеки,
без витрат на переміщення під час завантаження бібліотеки.

Однак, якщо бібліотека або основний виконуваний файл повинні викидати або перехоплювати винятки, ви
має зв’язати його за допомогою драйвера G++ або GCJ, відповідно до мов, що використовуються в
програмі або за допомогою параметра -shared-libgcc, щоб він був пов’язаний із спільним
libgcc.

-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 кілька разів з різними символами для примусового завантаження
додаткові бібліотечні модулі.

Опції та цінності Каталог Пошук
Ці параметри визначають каталоги для пошуку файлів заголовків, бібліотек і частин
компілятора:

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

Якщо стандартна система включає в себе каталог, або каталог, зазначений з -ісистема, Є
також зазначено с -I, -I опція буде проігнорована. Каталог все одно буде
шукали, але як системний каталог у його нормальному положенні в системі включають ланцюжок.
Це робиться для того, щоб процедура GCC виправляла помилкові заголовки системи та порядок
для директиви include_next не змінюються випадково. Якщо вам справді потрібно
змінити порядок пошуку системних каталогів, скористайтеся -ностдинк та / або -ісистема
Варіанти.

-iplugindir=реж
Налаштуйте каталог для пошуку плагінів, які передаються -fplugin=ім'я замість
-fplugin=шлях/ім'я.тому. Ця опція не призначена для використання користувачем, а лише
пройшов повз водія.

- цитатареж
Додайте каталог реж до заголовка списку каталогів для пошуку
файли лише для випадку #включати "файл"; їх не шукають #включати <файл>,
інакше так само -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 буде працювати, але бібліотечний аспект не працюватиме.

-Я- Цей параметр не підтримується. Будь ласка, використовуйте - цитата замість цього для -I каталогів раніше
-Я- і видаліть -Я-. Будь-які каталоги, які ви вказали з -I варіанти перед
-Я- параметри шукаються лише для випадку #включати "файл"; їх не обшукують
та цінності #включати <файл>.

Якщо додаткові каталоги вказані з -I варіанти після -Я-Ці
каталоги шукаються для всіх #включати директиви. (Звичайно всі -I каталоги
використовуються таким чином.)

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

-Я- не перешкоджає використанню стандартних системних каталогів для заголовних файлів.
Таким чином, -Я- та -ностдинк є незалежними.

Уточнення Мета машина та компілятор версія
Звичайним способом запуску GCC є запуск виконуваного файлу, який викликається ПКУабо машина-gcc коли хрест-
складання, або машина-gcc-версія щоб запустити версію, відмінну від тієї, що була встановлена
останній.

апаратні засоби моделі та Конфігурації
Кожен тип цільової машини може мати власні спеціальні параметри, починаючи з -m, вибирати
серед різних апаратних моделей або конфігурацій --- наприклад, 68010 проти 68020, плаваючий
співпроцесор або немає. Одну встановлену версію компілятора можна компілювати для будь-якої моделі
або конфігурації, відповідно до вказаних параметрів.

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

Адаптєва Богоявлення Опції

Ці -m визначені параметри для Adapteva Epiphany:

-mhalf-reg-файл
Не виділяйте жодного регістра в діапазоні "r32"...r63". Це дозволяє виконувати код
апаратні варіанти, у яких відсутні ці регістри.

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

-mbranch-cost=Num
Приблизно встановіть вартість гілок Num «прості» інструкції. Ця вартість становить лише а
евристичний і не гарантує отримання послідовних результатів у всіх випусках.

-mcmove
Увімкнути генерацію умовних ходів.

-mnops=Num
випускати Num nops перед кожною іншою згенерованою інструкцією.

-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, тому використовуйте ці інструкції для прямих викликів. За замовчуванням
is -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, що робить завантаження невеликим негативним
константи та певні бітові маски швидше. Допустимі значення для reg: r43 і r63,
які вказують використовувати цей регістр як фіксований регістр, і немає, що означає, що ні
для цього використовується реєстр. За замовчуванням є -m1reg-немає.

AAArch64 Опції

Ці параметри визначені для реалізацій AArch64:

-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
змінні.

-березень=ім'я
Вкажіть назву цільової архітектури, необов’язково з одним або кількома суфіксами
модифікатори функцій. Цей варіант має форму -березень=арка{+[немає]особливість}*, де
тільки значення для арка is ARMV8-A. Можливі значення для особливість задокументовані в
підрозділ нижче.

Якщо вказано конфліктні модифікатори ознак, використовується крайній правий елемент.

GCC використовує це ім’я, щоб визначити, які інструкції він може видавати під час генерації
код збірки. Цей параметр можна використовувати разом із або замість нього -mcpu=
варіант.

-mcpu=ім'я
Вкажіть назву цільового процесора, за бажанням із суфіксом однієї чи кількох функцій
модифікатори. Цей варіант має форму -mcpu=центральний процесор{+[немає]особливість}*, де це можливо
значення для центральний процесор він має родової, великий. Можливі значення для особливість задокументовані в
підрозділ нижче.

Якщо вказано конфліктні модифікатори ознак, використовується крайній правий елемент.

GCC використовує це ім’я, щоб визначити, які інструкції він може видавати під час генерації
код збірки.

-mtune=ім'я
Вкажіть назву процесора, для якого потрібно налаштувати продуктивність. Код буде налаштований
ніби цільовий процесор був типу, зазначеного в цьому параметрі, але все ще використовується
інструкції, сумісні з цільовим процесором, визначеним a -mcpu= варіант. Це
Опція не може бути суфіксована модифікаторами функцій.

- марш та -mcpu модифікатори функцій

Модифікатори функцій, які використовуються з - марш та -mcpu може бути одним із таких:

крипто
Увімкнути розширення Crypto. Це означає, що розширений SIMD увімкнено.

fp Увімкнути інструкції з плаваючою комою.

simd
Увімкніть розширені інструкції SIMD. Це означає, що інструкції з плаваючою комою є
увімкнено. Це значення за замовчуванням для всіх поточних можливих значень параметрів - марш та
-mcpu=.

ARM Опції

Ці -m параметри визначені для архітектури Advanced RISC Machines (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
Запобігайте зміні порядку інструкцій у пролозі функції або злиття
ці інструкції з інструкціями в тілі функції. Це означає, що все
функції починатимуться з розпізнаваного набору інструкцій (або фактично однієї з a
вибір із невеликого набору різних прологів функцій), і ця інформація може бути
використовується для визначення місцезнаходження функцій start if всередині виконуваного фрагмента коду. За замовчуванням
is -msched-пролог.

-mfloat-abi=ім'я
Визначає, який ABI з плаваючою комою використовувати. Допустимі значення: м'який, softfp та
жорсткий.

Уточнення м'який змушує GCC генерувати вихідні дані, що містять виклики бібліотеки для floating-
точкові операції. softfp дозволяє генерувати код з використанням апаратної плаваючої коми
інструкції, але все ще використовує конвенції про виклики soft-float. жорсткий дозволяє
генерування інструкцій з плаваючою комою та використання специфічних для FPU умов викликів.

Значення за замовчуванням залежить від конкретної цільової конфігурації. Зверніть увагу, що жорсткий поплавок
і soft-float ABI несумісні з посиланням; ви повинні скомпілювати всю вашу програму з
той самий ABI і зв'язок із сумісним набором бібліотек.

-mlittle-endian
Згенеруйте код для процесора, що працює в режимі малого байта. Це значення за замовчуванням для
всі стандартні конфігурації.

-big-endian
Створення коду для процесора, що працює в режимі big-endian; за замовчуванням – компілювати
код для процесора з малим кінцем.

-mwords-little-endian
Цей параметр застосовується лише під час генерації коду для процесорів з великим порядком. Згенерувати
код для порядку слів з маленьким байтом, але з великим порядком байтів. Тобто байт
порядок форми 32107654. Примітка: цю опцію слід використовувати лише в разі потреби
сумісність з кодом для процесорів ARM з великим порядком, створеним версіями
компілятор до 2.8. Ця опція зараз не підтримується.

-березень=ім'я
Це визначає назву цільової архітектури 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, iwmmxt, iwmmxt2, ep9312.

-березня = рідний змушує компілятор автоматично визначати архітектуру збірки
комп'ютер. Наразі ця функція підтримується лише в 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,
кора-a15, кора головного мозку-r4, кора головного мозку-r4f, кора головного мозку-r5, кора-m4, кора-m3, кора-m1,
кора-m0, xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, FA606TE, FA626TE, fmp626,
FA726TE.

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

-mtune = рідний змушує компілятор автоматично визначати ЦП комп’ютера збірки. В
в даний час ця функція підтримується лише в Linux, і не всі архітектури
визнаний. Якщо автоматичне визначення невдало, ця опція не діє.

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

Допустимі назви для цієї опції такі ж, як і для -mtune.

-mcpu=загальний-арка також допустимо і еквівалентно -березень=арка
-mtune=загальний-арка, Побачити -mtune для отримання додаткової інформації.

-mcpu = рідний змушує компілятор автоматично визначати ЦП комп’ютера збірки. В
в даний час ця функція підтримується лише в Linux, і не всі архітектури
визнаний. Якщо автоматичне визначення невдало, ця опція не діє.

-mfpu=ім'я
-mfpe=номер
-mfp=номер
Це визначає, яке обладнання з плаваючою комою (або апаратна емуляція) доступне
ціль. Допустимі назви: fpa, fpe2, fpe3, індивідуаліст, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, VFPV3-D16-FP16, vfpv3xd, vfpv3xd-fp16, неоновий, неон-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 та neon-vfpv4. -mfp та -mfpe є синонімами до -mfpu=fpeномер, Для
сумісність зі старими версіями GCC.

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-мегабайтної адресації
діапазон версії інструкції виклику підпрограми на основі зміщення.

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

Ця функція не ввімкнена за замовчуванням. Уточнення -mno-long-cales відновить
поведінка за замовчуванням, а також розміщення викликів функцій у межах a #прагма
long_calls_off директива. Зауважте, що ці перемикачі не впливають на роботу компілятора
генерує код для обробки викликів функцій за допомогою покажчиків функцій.

-msingle-pic-base
Розглядайте регістр, який використовується для адресації PIC, як доступний лише для читання, а не завантажуйте його в файл
пролог для кожної функції. За ініціалізацію цього відповідає система виконання
зареєструвати з відповідним значенням перед початком виконання.

-mpic-register=Реджо
Вкажіть регістр, який буде використовуватися для PIC-адресації. За замовчуванням є R10, якщо стек-
перевірка увімкнена, коли використовується R9.

-mcirrus-fix-invalid-insns
Вставте NOP в потік інструкцій до, щоб обійти проблеми з
недійсні комбінації інструкцій Maverick. Ця опція дійсна, лише якщо
-mcpu=ep9312 була використана опція, щоб увімкнути створення інструкцій для Cirrus
Співпроцесор Maverick з плаваючою комою. Цей параметр не включений за замовчуванням, оскільки
проблема присутня лише в старих реалізаціях Maverick. За замовчуванням можна повторно
увімкнено за допомогою -mno-cirrus-fix-invalid-insns перемикач.

-mpoke-назва-функції
Напишіть назву кожної функції в текстовий розділ безпосередньо перед функцією
пролог. Згенерований код подібний до цього:

t0
.ascii "arm_poke_function_name", 0
.вирівняти
t1
.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=діалект
Вкажіть діалект для доступу до локального сховища потоку. Два діалекти
підтримується --- гну та 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, а також увімкнено для всіх інших архітектур. Якщо
неузгоджений доступ не ввімкнено, тоді будуть доступні слова в упакованих структурах даних
по байту.

Атрибут ARM "Tag_CPU_unaligned_access" буде встановлений у згенерованому об'єктному файлі
на true або false, залежно від налаштування цієї опції. Якщо не вирівняні
доступ увімкнено, то символ препроцесора "__ARM_FEATURE_UNALIGNED" також буде
визначений.

-mneon-for-64bits
Дозволяє використовувати Neon для обробки скалярних 64-бітних операцій. За замовчуванням це вимкнено
оскільки вартість переміщення даних з основних регістрів до Neon висока.

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{}= "ata6289", "attiny13", "attiny13a", "attiny2313",
"attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
"attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45", "attiny461",
"attiny461a", "attiny48", "attiny84", "attiny84a", "attiny85", "attiny861",
"attiny861a", "attiny87", "attiny88", "at86rf401".

"avr3"
"Класичні" пристрої з програмною пам'яттю від 16@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{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
«Розширені» пристрої з програмною пам’яттю до 8@tie{}КіБ. mcu@краватка{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "atmega8hva", "atmega8515",
"atmega8535", "atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1",
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
«Розширені» пристрої з програмною пам’яттю від 16@tie{}KiB до 64@tie{}KiB.
mcu@tie{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
«Розширені» пристрої з 128@tie{}КіБ пам’яті програм. mcu@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287".

"avr6"
"Розширені" пристрої з 3-байтовим ПК, тобто з програмою понад 128@tie{}КіБ
пам'ять. mcu@tie{}= "atmega2560", "atmega2561".

"avrxmega2"
Пристрої "XMEGA" з програмною пам'яттю понад 8@tie{}КіБ і до 64@tie{}КіБ.
mcu@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".

"avrxmega4"
Пристрої "XMEGA" з більш ніж 64@tie{}KiB і до 128@tie{}KiB програми
пам'ять. mcu@tie{}= "atxmega64a3", "atxmega64d3".

"avrxmega5"
Пристрої "XMEGA" з більш ніж 64@tie{}KiB і до 128@tie{}KiB програми
пам’яті та більше ніж 64@tie{}КіБ оперативної пам’яті. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Пристрої "XMEGA" з програмною пам'яттю понад 128@tie{}КіБ. mcu@краватка{}=
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
Пристрої "XMEGA" з програмною пам'яттю понад 128@tie{}КіБ і більше
64@tie{}КіБ оперативної пам’яті. mcu@tie{}= "atxmega128a1", "atxmega128a1u".

"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, але призводить до менших розмірів
розмір коду.

-mno-переривання
Згенерований код несумісний з апаратними перериваннями. Розмір коду менший.

- розслабитися
Спробуйте замінити "CALL" відповідно. Інструкція «JMP» за допомогою коротшої «RCALL» відповідно. "RJMP"
інструкція, якщо є. Налаштування "-mrelax" просто додає параметр "--relax" до
командний рядок компоновщика під час виклику компоновщика.

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

Якщо потрібні заглушки компоновщика, необхідно ввімкнути розслаблення, дивіться розділ «EIND» і
заглушки лінкера нижче.

-mкороткі дзвінки
Ця опція застаріла і буде вилучена в GCC 4.8. Дивіться "-mrelax" для а
заміна.

Використовуйте інструкції "RCALL"/"RJMP" навіть на пристроях із програмою 16@tie{}KiB або більше
пам’яті, тобто на пристроях, які мають інструкції «CALL» і «JMP».

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

Ця опція використовується внутрішньо компілятором для вибору та створення мультиліб
архітектури "avr2" і "avr25". Ці архітектури поєднують пристрої з і без
"SPH". Для будь-якого параметра, відмінного від "-mmcu=avr2" або "-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{}бітів покажчика стека.

"EIND" і пристрої з більш ніж 128 Кібайт Flash

Вказівники в реалізації мають ширину 16@tie{}бітів. Адреса функції або мітки
представлений у вигляді адреси слова, щоб непрямі переходи та виклики могли націлюватися на будь-який код
адреса в діапазоні 64@tie{}Кі слів.

Щоб полегшити непрямий перехід на пристрої з понад 128@tie{}Кі байт
пам'яті програми, існує спеціальний регістр функції під назвою "EIND", який служить як
найбільш значуща частина цільової адреси, коли є інструкції "EICALL" або "EIJMP".
використаний

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

· Компілятор ніколи не встановлює "EIND".

· Компілятор неявно використовує "EIND" в інструкціях "EICALL"/"EIJMP" або може прочитати
"EIND" безпосередньо, щоб імітувати непрямий виклик/стрибок за допомогою "RET"
інструкція.

· Компілятор припускає, що "EIND" ніколи не змінюється під час коду запуску або під час
додаток. Зокрема, "EIND" не зберігається/відновлюється у функції чи переривання
рутинна служба пролог/епілог.

· Для непрямих викликів функцій і обчислюваного goto генерує компонувальник заглушки. Заглушки
іноді також називаються стрибками батути. Таким чином, непрямий виклик/перехід переходить до
така заглушка. Заглушка містить прямий перехід на потрібну адресу.

· Розслаблення компоновщика має бути увімкнено, щоб компонувальник генерував заглушки
правильно вся ситуація. Дивіться параметр компілятора "-mrelax" і параметр linler
«--розслабитися». Існують кутові випадки, коли компонувальник повинен генерувати заглушки, але
переривання без розслаблення та без корисного повідомлення про помилку.

· Сценарій компонувальника за замовчуванням упорядкований для коду з "EIND = 0". Якщо передбачається код
щоб працювати з налаштуванням з "EIND != 0", потрібно використовувати спеціальний скрипт компоновника, щоб
щоб розмістити розділи, назва яких починається на ".trampolines", у сегмент де
"EIND" вказує на.

· Код запуску з libgcc ніколи не встановлює "EIND". Зверніть увагу, що код запуску є змішаним
коду з libgcc і AVR-LibC. Щоб дізнатися про вплив AVR-LibC на "EIND", див. AVR-
посібник користувача LibC ("http://nongnu.org/avr-libc/user-manual/»).

· Для певного користувача коду запуску законно встановлювати "EIND" раніше, наприклад, до
засоби ініціалізації, розташовані в розділі ".init3". Такий код виконується до
загальний код запуску, який ініціалізує 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{KiB} не підтримується GCC для цілей AVR. Якщо ви використовуєте
вбудований ассемблер для читання з місць за межами 16-розрядного діапазону адрес і зміни
одного з регістрів "RAMP", ви повинні скинути його на нуль після доступу.

AVR Вбудовані макроси

GCC визначає кілька вбудованих макросів, щоб код користувача міг перевірити наявність або
відсутність особливостей. Майже будь-який з наступних вбудованих макросів виводиться з пристрою
можливостей і, таким чином, запускається параметром командного рядка "-mmcu=".

Ще більше вбудованих макросів для AVR див AVR Названий адреса Приміщення та AVR Вбудований
Функції.

"__AVR_ARCH__"
Вбудований макрос, який розв’язується до десяткового числа, що ідентифікує архітектуру та
залежить від "-mmcu=mcu" варіант. Можливі значення:

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

та цінності mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7" відповідно. Якщо mcu
вказує пристрій, цей вбудований макрос встановлюється відповідним чином. Наприклад, с
"-mmcu=atmega8" макросу буде визначено 4.

"__AVR_Пристрій__"
Налаштування "-mmcu=пристрій" визначає цей вбудований макрос, який відображає назву пристрою.
Наприклад, "-mmcu=atmega8" визначає вбудований макрос "__AVR_ATmega8__",
"-mmcu=attiny261a" визначає "__AVR_ATtiny261A__" тощо.

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

If пристрій цей макрос не є пристроєм, а лише архітектурою ядра, як-от "avr51".
не визначається.

"__AVR_XMEGA__"
Пристрій/архітектура належить до сімейства пристроїв XMEGA.

"__AVR_HAVE_ELPM__"
Пристрій має інструкцію «ELPM».

"__AVR_HAVE_ELPMX__"
Пристрій має «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{}КіБ програмної пам’яті, і якщо «-mshort-calls» не встановлено.

"__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-stack".

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
Пристрій має спеціальний регістр функцій SPH (висока частина покажчика стека).
8-бітовий покажчик стека, відповідно. На визначення цих макросів впливає
"-mmcu=", а у випадках "-mmcu=avr2" і "-mmcu=avr25" також за допомогою "-msp8".

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Пристрій має регістр спеціальних функцій "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
відповідно.

"__НІ_ПРЕРІВ__"
Цей макрос відображає параметр командного рядка "-mno-interrupts".

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Деякі пристрої AVR (AT90S8515, ATmega103) не повинні пропускати 32-розрядні інструкції через
апаратна помилка. Інструкції пропуску: "SBRS", "SBRC", "SBIS", "SBIC" і "CPSE".
Другий макрос визначається, лише якщо також встановлено "__AVR_HAVE_JMP_CALL__".

"__AVR_SFR_OFFSET__=зміщення"
Інструкції, які можуть звертатися до регістрів спеціальних функцій введення-виводу безпосередньо, наприклад "IN",
"OUT", "SBI" і т. д. можуть використовувати іншу адресу, наче адресована інструкцією до
доступ до оперативної пам’яті, як-от «LD» або «STS». Це зміщення залежить від архітектури пристрою та має
віднімається від адреси оперативної пам’яті, щоб отримати відповідну адресу вводу/виводу@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. Необов’язковий огляд вказує
кремнієва версія цільового процесора Blackfin. Будь-які обхідні шляхи, доступні для
буде ввімкнено цільову силіконову ревізію. Якщо огляд is ніхто, обхідних шляхів немає
увімкнено. Якщо огляд is будь-який, усі обхідні шляхи для цільового процесора будуть
увімкнено. Макрос "__SILICON_REVISION__" визначається двома шістнадцятковими цифрами
що представляють головне та другорядне числа в силіконовій редакції. Якщо огляд is
ніхто, "__SILICON_REVISION__" не визначено. Якщо огляд is будь-який,
"__SILICON_REVISION__" визначено як 0xffff. Якщо це необов'язково огляд НЕ
GCC припускає останню відому силіконову версію цільового Blackfin
процесор.

Підтримка bf561 є неповним. Для bf561, Визначено лише макрос процесора.
Без цієї опції, bf532 за замовчуванням використовується як процесор. Відповідний
попередньо визначені макроси процесора для центральний процесор має бути визначено. І для bfin-ельф ланцюжок інструментів,
це призводить до того, що апаратний BSP, наданий libgloss, буде пов'язаний у if -msim НЕ
дано.

-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, Одномісний
Використовується прикладна/двоядерна модель програмування. У цій моделі основна функція
Ядро B має називатися як coreb_main. Якщо він використовується з -mcorea or -mcoreb, один
Використовується прикладна модель програмування на ядро. Якщо цей параметр не використовується, одиночний
використовується базова модель прикладного програмування.

-mcorea
Створіть окрему програму для Core A BF561, використовуючи одну програму на ядро
модель програмування. Для підтримки Core A будуть використовуватися правильні стартові файли та сценарії посилань.
Цей параметр визначає "__BFIN_COREA". Його необхідно використовувати з - багатоядерний.

-mcoreb
Створіть окрему програму для Core B BF561, використовуючи одну програму на ядро
модель програмування. Для підтримки Core B будуть використовуватися правильні стартові файли та сценарії посилань.
Цей параметр визначає "__BFIN_COREB". Коли використовується цей параметр, має бути coreb_main
використовується замість основного. Його необхідно використовувати з - багатоядерний.

-msdram
Створіть окрему програму для SDRAM. Будуть правильні стартові файли та скрипти посилань
використовується для розміщення програми в SDRAM. Завантажувач повинен ініціалізувати SDRAM перед завантаженням
додаток у SDRAM. Цей параметр визначає "__BFIN_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, .далеко
та .конст.

-msdata=все
Помістіть усі дані, а не лише невеликі об’єкти, у розділи, зарезервовані для малих даних, і
використовуйте адресацію щодо регістру «B14» для доступу до них.

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

КРІС Опції

Ці параметри визначені спеціально для портів 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, сумісну з симулятором. Застосовується до ельфа
тільки компілятор.

-м'ята32
Виберіть тип цілого числа як 32-бітну ширину.

-mbit-ops
Генерує інструкції sbit/cbit для маніпуляцій з бітами.

-mdata-model=модель
Виберіть модель даних. Вибір для модель він має близько, далеко or середа. середа є за замовчуванням.
Тим не менш, далеко є недійсним, якщо вибрано параметр -mcr16c, оскільки архітектура CR16C ні
підтримка далекої моделі даних.

Дарвін Опції

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

FSF GCC on Darwin не створює «жирні» об'єктні файли; він створить об’єктний файл для
єдина архітектура, для якої він був створений. GCC від Apple щодо Дарвіна дійсно створює
"жирні" файли, якщо їх декілька -арх використовуються варіанти; це робиться за допомогою компілятора або
компонувальник кілька разів і об’єднання результатів разом з ліпо.

Підтип створеного файлу (наприклад PPC7400 or PPC970 or i686) визначається
прапори, які вказують ISA, на який націлено GCC, наприклад -mcpu or - марш,
-force_cpusubtype_ALL параметр можна використовувати, щоб змінити це.

Інструменти Дарвіна відрізняються за своєю поведінкою, коли вони представлені з невідповідністю ISA. The
монтажник, as, дозволить використовувати лише інструкції, які дійсні для підтипу
файл, який він створює, тому ви не можете помістити 64-розрядні інструкції в a PPC750 файл об’єкта.
Компонувальник для спільних бібліотек, /usr/bin/libtool, не вийде і надрукує помилку, якщо запитають
щоб створити спільну бібліотеку з менш обмеженим підтипом, ніж її вхідні файли (for
приклад, намагаючись поставити a PPC970 об'єктний файл у a PPC7400 бібліотека). Лінкер для
виконувані файли, ld, тихо надасть виконуваному файлу найбільш обмежувальний підтип з усіх
його вхідні файли.

-Fреж
Додайте каталог фреймворку реж до початку списку довідників для пошуку
для заголовних файлів. Ці каталоги чергуються з каталогами, зазначеними в -I
і скануються в порядку зліва направо.

Каталог фреймворків — це каталог із фреймворками. Рамка - це а
каталог з a "Заголовки" та / або "PrivateHeaders" каталогу, що міститься безпосередньо в ньому
що закінчується на ".framework". Ім'я фреймворка - це ім'я цього каталогу
за винятком ".framework". Заголовки, пов’язані з фреймворком, знаходяться в одному з
ці два каталоги, с "Заголовки" обшукується першим. Підрамник - це a
каталог фреймворку, який знаходиться у фреймворку «Рамки» каталог. Включає з
Заголовки subframework можуть з’являтися лише в заголовку фреймворка, який містить файл
subframework, або в заголовку підрамки. Два підфреймворка є рідними, якщо
вони відбуваються в однакових рамках. Підфреймворк не повинен мати те саме ім'я, що і a
рамки, буде видано попередження, якщо це буде порушено. Наразі підрамник
не може мати підфреймворків, у майбутньому механізм може бути розширений для підтримки
це Стандартні рамки можна знайти в "/Система/Бібліотека/Фреймворки" та
"/Бібліотека/Фреймворки". Приклад включення виглядає як "#include ",
де Рамки позначає назву фреймворку, а header.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-cxa-atexit, -fno-виключення, -fno-non-call-exceptions, -fapple-kext, -fno-слабий
та -fno-rtti де це застосовно. Цей режим також встановлюється -mno-altivec, -msoft-float,
-fno-вбудований та -mlong-гілка для цілей PowerPC.

-mone-byte-bool
Замінити значення за замовчуванням для бул так що sizeof(bool)==1. За замовчуванням sizeof(bool) is 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 створить динамічну бібліотеку замість виконуваного файлу
при зв'язуванні, використовуючи Дарвін 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 буде звик
виконувати операції з плаваючою комою. Хіба що їх замінять підпрограми, які емулюють
операції з плаваючою комою або скомпільовані таким чином, щоб викликати такі емуляції
підпрограм, ці підпрограми будуть виконувати операції з плаваючою комою. Якщо ви компілюєте
для альфа-версії без операцій з плаваючою комою ви повинні переконатися, що бібліотека є
побудований так, щоб їх не називати.

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

-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 у функції
пролог згенерованого файлу збірки. У DEC Unix це має такий ефект
Математичні підпрограми бібліотеки, що відповідають IEEE, будуть пов’язані.

-mbuild-константи
Зазвичай GCC перевіряє 32- або 64-розрядну цілу константу, щоб побачити, чи може вона її створити
з менших констант у двох-трьох інструкціях. Якщо він не може, він виведе файл
константу як литерал і генерувати код для завантаження його з сегмента даних під час виконання.

Використовуйте цей параметр, щоб вимагати створення GCC всі цілі константи з використанням коду, навіть якщо
потрібно більше інструкцій (максимум шість).

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

-мальфа-ас
-mgas
Виберіть, чи потрібно генерувати код, який збирається асемблером, наданим постачальником
(-мальфа-ас) або асемблером GNU -mgas.

-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.

Грудень Альфа/VMS Опції

Ці -m визначені параметри для реалізацій DEC Alpha/VMS:

-mvms-коди повернення
Повернути коди умов VMS з main. За замовчуванням повертається умова стилю POSIX
(наприклад, коди помилок).

-mdebug-main=префікс
Позначте першу процедуру, назва якої починається з префікс як основна рутина для
налагоджувач.

-mmalloc64
За замовчуванням 64-розрядні процедури виділення пам’яті.

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-байтової межі, вставивши nops у попередній пакет.
Цей параметр діє лише тоді, коли ввімкнено пакування VLIW. Це не створює нового
пакети; він просто додає нуль до існуючих.

-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. Цей перемикач необхідно використовувати з -РС.

-м'ята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 налаштувати параметр, 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. Цей варіант
встановлює прапори як для препроцесора, так і для компонувальника.

Intel 386 та AMD x86-64 Опції

Ці -m параметри визначені для сімейства комп’ютерів i386 і x86-64:

-mtune=тип процесора
Налаштуйтеся на тип процесора все, що стосується згенерованого коду, крім ABI
і набір доступних інструкцій. Вибір для тип процесора є:

родової
Створюйте код, оптимізований для найпоширеніших процесорів IA32/AMD64/EM64T. Якщо ви
знати ЦП, на якому буде виконуватися ваш код, то вам слід використовувати відповідний
-mtune варіант замість -mtune=загальний. Але, якщо ви не знаєте, який саме процесор
користувачі вашої програми, то вам слід скористатися цією опцією.

Оскільки нові процесори розгортаються на ринку, поведінка цього параметра
зміниться. Тому, якщо ви оновлюєте GCC до новішої версії, код
згенерований параметр зміниться, щоб відобразити процесори, які були найпоширенішими, коли
ця версія GCC була випущена.

Немає ніякого -march=загальний варіант, тому що - марш вказує набір інструкцій
компілятор може використовувати, і немає загального набору інструкцій, застосовного до всіх
процесори. У контрасті, -mtune вказує на процесор (або, у цьому випадку,
колекція процесорів), для яких оптимізовано код.

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

i386
Оригінальний процесор Intel i386.

i486
Процесор Intel i486. (Для цього чіпа не реалізовано планування.)

i586, Пентіум
Процесор Intel Pentium без підтримки MMX.

pentium-mmx
Процесор Intel PentiumMMX на основі ядра Pentium з підтримкою набору інструкцій MMX.

Pentiumpro
Процесор Intel PentiumPro.

i686
Те саме, що і «загальний», але якщо використовується як параметр «марш», набір інструкцій PentiumPro
буде використовуватися, тому код працюватиме на всіх мікросхемах сімейства i686.

pentium2
Процесор Intel Pentium2 на основі ядра PentiumPro з підтримкою набору інструкцій MMX.

pentium3, pentium3m
Процесор Intel Pentium3 на основі ядра PentiumPro з набором інструкцій MMX і SSE
support.

пентіум-м
Низькопотужна версія процесора Intel Pentium3 з набором інструкцій MMX, SSE та SSE2
підтримка. Використовується ноутбуками Centrino.

pentium4, pentium4m
Процесор Intel Pentium4 з підтримкою набору інструкцій MMX, SSE та SSE2.

Прескотт
Покращена версія процесора Intel Pentium4 з інструкцією MMX, SSE, SSE2 і SSE3
встановити підтримку.

нокона
Покращена версія процесора Intel Pentium4 з 64-розрядними розширеннями, MMX, SSE, SSE2 і
Підтримка набору інструкцій SSE3.

ядро2
Процесор Intel Core2 з 64-розрядними розширеннями, інструкцією MMX, SSE, SSE2, SSE3 і SSSE3
встановити підтримку.

corei7
Процесор Intel Core i7 з 64-розрядними розширеннями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 та
Підтримка набору інструкцій SSE4.2.

corei7-avx
Процесор Intel Core i7 з 64-розрядними розширеннями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Підтримка набору інструкцій SSE4.2, AVX, AES і PCLMUL.

core-avx-i
Процесор Intel Core з 64-розрядними розширеннями, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Підтримка набору інструкцій SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND і F16C.

атом
Процесор Intel Atom з 64-розрядними розширеннями, інструкцією MMX, SSE, SSE2, SSE3 і SSSE3
встановити підтримку.

k6 Процесор AMD K6 з підтримкою набору інструкцій MMX.

k6-2, k6-3
Покращені версії процесора AMD K6 з MMX і 3DNow! підтримка набору інструкцій.

атлон, атлон-тберд
Процесор AMD Athlon з MMX, 3dNOW!, покращений 3DNow! та інструкції попередньої вибірки SSE
support.

атлон-4, athlon-xp, атлон-мп
Покращений процесор AMD Athlon з MMX, 3DNow!, покращений 3DNow! та повна інструкція SSE
встановити підтримку.

k8, оптерон, athlon64, athlon-fx
Процесори на основі ядра AMD K8 з підтримкою набору інструкцій x86-64. (Це перевершує MMX,
SSE, SSE2, 3DNow!, покращений 3DNow! і 64-розрядні розширення набору інструкцій.)

k8-sse3, opteron-sse3, athlon64-sse3
Покращені версії k8, opteron і athlon64 з підтримкою набору інструкцій SSE3.

amdfam10, Барселона
10-ядерні процесори сімейства AMD з підтримкою набору інструкцій x86-64. (Це
супернабори MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, покращений 3DNow!, ABM і 64-розрядна версія
розширення набору інструкцій.)

bdver1
15-ядерні процесори сімейства AMD з підтримкою набору інструкцій 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, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM і 64-розрядні розширення набору інструкцій.)

btver1
14-ядерні процесори сімейства AMD з підтримкою набору інструкцій x86-64. (Це
супернабори MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM і 64-розрядний набір інструкцій
розширення.)

Winchip-c6
Процесор IDT Winchip C6, який працює так само, як i486 з додатковим набором інструкцій MMX
support.

лебідка2
IDT Winchip2 CPU, що працює так само, як i486 з додатковими MMX і 3DNow!
підтримка набору інструкцій.

c3 Через C3 CPU з MMX і 3DNow! підтримка набору інструкцій. (Немає розкладу
реалізовано для цього чіпа.)

c3-2
Через C3-2 CPU з підтримкою набору інструкцій MMX і SSE. (Немає розкладу
реалізовано для цього чіпа.)

геоде
Вбудований процесор AMD з MMX і 3DNow! підтримка набору інструкцій.

При виборі конкретного тип процесора сплануватиме все належним чином для цього
конкретного чіпа, компілятор не генеруватиме код, який не виконується на
Тип машини за замовчуванням без -березень=тип процесора використовується варіант. Наприклад, якщо
Тоді GCC налаштовано для i686-pc-linux-gnu -mtune=pentium4 згенерує код, який
налаштований на Pentium4, але все одно працюватиме на машинах i686.

-березень=тип процесора
Створіть інструкції для типу машини тип процесора. Вибір для тип процесора є
те саме, що і для -mtune. Більше того, уточнюючи -березень=тип процесора мається на увазі -mtune=тип процесора.

-mcpu=тип процесора
Застарілий синонім до -mtune.

-mfpmath=блок
Створити арифметику з плаваючою комою для вибраної одиниці блок. Вибір для блок є:

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

Це вибір за замовчуванням для компілятора i386.

ESS Використовуйте скалярні інструкції з плаваючою комою, наявні в наборі інструкцій SSE. Це
Набір інструкцій підтримується Pentium3 і новішими мікросхемами, в лінійці AMD
Чіпи Athlon-4, Athlon-xp і Athlon-mp. Попередня версія інструкції SSE
набір підтримує лише арифметику одинарної точності, отже, подвійний і розширений-
точна арифметика все ще виконується за допомогою 387. Пізніша версія, доступна лише в
Pentium4 і майбутні чіпи AMD x86-64 підтримують арифметику подвійної точності
теж.

Для компілятора i386 потрібно використовувати -березень=тип процесора, -мссе or -msse2 перемикачі
щоб увімкнути розширення SSE та зробити цю опцію ефективною. Для компілятора x86-64,
ці розширення ввімкнені за замовчуванням.

Отриманий код має бути значно швидшим у більшості випадків і
уникнути проблем числової нестабільності коду 387, але може порушити деякі існуючі
код, який очікує, що тимчасові файли становлять 80 біт.

Це вибір за замовчуванням для компілятора x86-64.

sse,387
sse+387
обидва
Спробуйте використати обидва набори інструкцій одночасно. Це фактично вдвічі більше
кількість доступних регістрів і на мікросхемах з окремими виконавчими блоками на 387
і SSE - ресурси виконання. Використовуйте цю опцію з обережністю, оскільки вона залишається
експериментальний, оскільки розподільник регістрів GCC не моделює окремо
функціональні одиниці добре, що призводить до нестабільної роботи.

-masm=діалект
Виведіть інструкції asm за допомогою select діалект. Підтримувані варіанти Intel or 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. Вкажіть цей параметр, щоб уникнути створення цих інструкцій. Цей варіант є
за замовчуванням у FreeBSD, OpenBSD і NetBSD. Ця опція замінюється, коли - марш
вказує, що цільовий процесор завжди матиме FPU, а отже, інструкція не буде
потрібна емуляція. Починаючи з версії 2.6.1, ці інструкції не створюються, якщо ви
також використовуйте -funsafe-math-optimizations перемикач.

-злоякісний-подвійний
-mno-align-double
Контролюйте, чи GCC вирівнює змінні "double", "long double" та "long long" на a
межа з двох слів або межа з одного слова. Вирівнювання "подвійних" змінних за двома словами
boundary створює код, який виконується дещо швидше на a Пентіум за рахунок більшого
пам'ять.

На x86-64, -злоякісний-подвійний увімкнено за замовчуванням.

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

-m96bit-long-double
-m128bit-long-double
Ці перемикачі керують розміром типу «довгий подвійний». Двійковий файл програми i386
інтерфейс визначає розмір 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". Тому вони
не буде бінарно сумісним з масивами або структурами в коді, зібраному без цього
перемикач.

-mlarge-data-threshold=номер
Коли -mcmodel=середній вказано, дані більше ніж поріг розміщуються у великих
розділ даних. Це значення має бути однаковим для всіх об’єктів, пов’язаних із двійковим файлом
і за замовчуванням 65535.

-mrtd
Використовуйте іншу конвенцію про виклик функцій, в якій функції, які приймають фіксований
кількість аргументів повертається з "ret" Num інструкція, яка висуває свої аргументи
під час повернення. Це зберігає одну інструкцію в абоненті, оскільки в цьому немає потреби
наведіть туди аргументи.

Ви можете вказати, що окрема функція викликається з цією послідовністю викликів
атрибут функції 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
Перевирівняти стек при вході. На Intel x86 -mstackrealign згенерується параметр
альтернативний пролог та епілог, які за потреби перебудовують стек часу виконання.
Це підтримує змішування застарілих кодів, які зберігають 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 байт. Ви повинні побудувати всі модулі з -mpreferred-stack-boundary=3,
включаючи будь-які бібліотеки. Це включає системні бібліотеки та модулі запуску.

-mincoming-stack-boundary=Num
Припустимо, що вхідний стек вирівняний за 2, піднятим до Num межа байта. Якщо
-mincoming-stack-boundary не вказано, той, який визначено
-mpreferred-stack-boundary буде використовуватися.

У Pentium і PentiumPro значення "double" і "long double" мають бути вирівняні з
8-байтовий кордон (див -злоякісний-подвійний) або зазнають значної продуктивності під час виконання
штрафні санкції. У Pentium III тип даних розширення SIMD (SSE) "__m128" може
не працює належним чином, якщо він не вирівняний по 16 байтам.

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

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

-мммх
-mno-mmx
-мссе
-мно-се
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-маес
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-мрдрнд
-мно-рдрнд
-mf16c
-mno-f16c
-mfma
-мно-фма
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-мабм
-мно-абм
-mbmi
-mbmi2
-мно-бмі
-mno-bmi2
-mlzcnt
-mno-lzcnt
-мтбм
-мно-тбм
Ці перемикачі дозволяють або вимикають використання інструкцій у MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT або 3DNow!
розширені набори інструкцій. Ці розширення також доступні як вбудовані
функції: див X86 Вбудований Функції, щоб дізнатися більше про ввімкнені функції та
вимкнено цими перемикачами.

Щоб інструкції SSE/SSE2 генерувалися автоматично з коду з плаваючою комою (як
на відміну від 387 інструкцій), див -mfpmath=sse.

GCC притискає інструкції SSEx, коли -mavx використовується. Замість цього він генерує новий AVX
інструкції або еквівалентність AVX для всіх інструкцій SSEx, якщо це необхідно.

Ці параметри дозволять GCC використовувати ці розширені інструкції в згенерованому коді,
навіть без -mfpmath=sse. Програми, які виконують визначення ЦП під час виконання, повинні
компілювати окремі файли для кожної підтримуваної архітектури, використовуючи відповідні прапорці.
Зокрема, файл, що містить код виявлення ЦП, повинен бути скомпільований без
ці варіанти.

-mcld
Ця опція наказує GCC видавати інструкцію "cld" у пролозі функцій
які використовують рядкові інструкції. Рядкові інструкції залежать від прапора DF для вибору
між режимами автоінкременту або автодекременту. Хоча ABI визначає прапор DF до
очищається під час введення функції, деякі операційні системи порушують цю специфікацію, тому що ні
очищення прапора DF у своїх диспетчерах винятків. Обробником винятків може бути
викликається із встановленим прапором DF, що призводить до режиму неправильного напрямку під час рядка
використовуються інструкції. Цю опцію можна ввімкнути за замовчуванням для 32-розрядних цільових пристроїв x86 за допомогою
налаштування GCC за допомогою --enable-cld налаштувати параметр. Покоління "cld"
інструкції можна приховати за допомогою -мно-клд варіант компілятора в цьому випадку.

-mvzeroupper
Ця опція наказує GCC видавати інструкцію "vzeroupper" перед передачею
контроль потоку з функції, щоб мінімізувати покарання переходу AVX до SSE, а також
видалити непотрібні нуль-верхні внутрішні властивості.

-mprefer-avx128
Цей параметр наказує GCC використовувати 128-розрядні інструкції AVX замість 256-бітних AVX
інструкції в автовекторизаторі.

-mcx16
Цей параметр дозволить GCC використовувати інструкцію CMPXCHG16B у згенерованому коді.
CMPXCHG16B дозволяє виконувати атомарні операції над 128-бітовими даними з подвійним словом (або словом)
типи. Це корисно для лічильників високої роздільної здатності, які можна оновлювати кількома
процесори (або ядра). Ця інструкція генерується як частина атомарної вбудованої програми
функції: див __sync Вбудовані or __атомний Вбудовані for details.

-msahf
Цей параметр дозволить GCC використовувати інструкцію SAHF у згенерованому 64-розрядному коді. Рано
Процесори Intel з Intel 64 не підтримували інструкцій LAHF і SAHF, які підтримувалися AMD64
впровадження Pentium 4 G1 крок у грудні 2005 року. LAHF і SAHF завантажуються та зберігаються
інструкції, відповідно, для певних прапорів статусу. У 64-розрядному режимі SAHF
інструкція використовується для оптимізації вбудованих функцій "fmod", "drem" або "remainder": див.
Інше Вбудовані for details.

-mmovbe
Цей параметр дозволить GCC використовувати інструкцію movbe для реалізації "__builtin_bswap32"
і "__builtin_bswap64".

-mcrc32
Цей параметр увімкне вбудовані функції "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" і "__builtin_ia32_crc32di" для
створити машинну інструкцію crc32.

-mrecip
Цей параметр дозволить GCC використовувати інструкції RCPSS і RSQRTSS (та їх
векторизовані варіанти RCPPS і RSQRTPS) з додатковим кроком Ньютона-Рафсона до
збільшити точність замість DIVSS і SQRTSS (та їх векторизованих варіантів) для
аргументи з плаваючою комою з одинарною точністю. Ці інструкції генеруються лише тоді, коли
-funsafe-math-optimizations вмикається разом з -тільки кінцева математика та
-fno-trapping-math. Зауважте, що в той час як пропускна здатність послідовності вища за
пропускна здатність невзаємної команди, точність послідовності може бути
зменшено до 2 ulp (тобто обернене значення 1.0 дорівнює 0.99999994).

Зверніть увагу, що GCC реалізує "1.0f/sqrtf(х)" з точки зору RSQRTSS (або RSQRTPS) вже с
-швидка математика (або наведена вище комбінація параметрів) і не потрібна -mrecip.

Також зверніть увагу, що GCC випускає наведену вище послідовність з додатковим кроком Ньютона-Рафсона для
векторизований одиночний поділ і векторизований "sqrtf(х)" вже з -швидка математика
(або наведена вище комбінація параметрів) і не потрібна -mrecip.

-mrecip=вибирати
Цей параметр дозволяє контролювати, які інструкції взаємної оцінки можуть використовуватися. вибирати
- це список опцій, розділених комами, перед яким може стояти символ "!" інвертувати
параметр: "все": увімкнути всі інструкції щодо оцінки, "за замовчуванням": увімкнути за замовчуванням
інструкції, еквівалент -mrecip, "none": вимкнути всі інструкції щодо оцінки,
еквівалентно -мно-рецепт, "div": увімкнути апроксимацію для скалярного поділу,
"vec-div": увімкнути апроксимацію для векторизованого поділу, "sqrt": увімкнути
апроксимація для скалярного квадратного кореня, "vec-sqrt": увімкніть наближення для
векторизований квадратний корінь.

Наприклад, -mrecip=все,!sqrt дозволило б усі взаємні наближення,
крім квадратного кореня.

-mveclibabi=тип
Визначає тип ABI, який використовуватиметься для векторізації внутрішніх елементів за допомогою зовнішньої бібліотеки.
Підтримувані типи: "svml" для короткої векторної математичної бібліотеки Intel і "acml" для
Стиль інтерфейсу бібліотеки математичного ядра AMD. GCC наразі надсилатиме виклики до
"vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102", "vmldPow2", "vmldTanh2",
"vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2", "vmldSinh2", "vmldSin2",
"vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2",
"vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104", "vmlsPow4", "vmlsTanh4",
"vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
"vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4" і "vmlsAcos4" для
відповідний тип функції, коли -mveclibabi=svml використовується і "__vrd2_sin",
"__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
"__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f",
"__vrs4_log10f" і "__vrs4_powf" для відповідного типу функції, коли
-mveclibabi=acml використовується. Обидва -ftree-векторизувати та -funsafe-math-optimizations мати
бути увімкненим. Сумісну бібліотеку SVML або ACML ABI потрібно вказати за посиланням
часу.

-mabi=ім'я
Згенеруйте код для вказаної конвенції про виклик. Допустимі значення: sysv та цінності
ABI, що використовується в GNU/Linux та інших системах і ms для Microsoft ABI. За замовчуванням
полягає у використанні Microsoft ABI для націлювання на 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
Підтримка потокобезпечної обробки винятків Mingw32. Код, який покладається на потокобезпечний
Обробка винятків повинна скомпілювати та зв’язати весь код з -mthreads варіант. Коли
компіляція, -mthreads визначає -D_MT; під час зв'язування він посилається в спеціальному помічнику потоку
бібліотека - lmingwthrd який очищає дані обробки винятків кожного потоку.

-mno-align-stringops
Не вирівнюйте призначення операцій із вбудованим рядком. Цей перемикач зменшує розмір коду
і покращує продуктивність, якщо місце призначення вже вирівняно, але GCC ні
знати про це.

-minline-all-stringops
За замовчуванням GCC вбудовує рядкові операції лише тоді, коли відомо, що це місце призначення
вирівняно щонайменше за 4-байтовою межею. Це дозволяє більше вбудовувати, збільшити розмір коду,
але може покращити продуктивність коду, що залежить від швидкого memcpy, strlen та memset for
короткі довжини.

-minline-stringops-динамічно
Для рядкових операцій невідомого розміру використовуйте перевірки під час виконання з вбудованим кодом для small
блоки та бібліотека викликають великі блоки.

-mstringop-strategy=ALG
Перезапис внутрішньої евристики прийняття рішень щодо конкретного алгоритму на вбудований рядок
операція з. Допустимі значення: "rep_byte", "rep_4byte", "rep_8byte" для
розширення за допомогою префікса i386 "rep" заданого розміру, "byte_loop", "loop",
"unrolled_loop" для розширення вбудованого циклу, "libcall" для постійного розширення бібліотеки
дзвінок.

-momit-leaf-frame-pointer
Не зберігайте покажчик кадру в регістрі для листових функцій. Це дозволяє уникнути
інструкції для збереження, налаштування та відновлення покажчиків кадрів і створює додатковий регістр
доступний у функціях листа. Варіант -fomit-кадр-покажчик знімає рамку
покажчик для всіх функцій, що може ускладнити налагодження.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Контролює, чи можна отримати доступ до змінних TLS зі зміщеннями від сегмента TLS
регістр (%gs для 32-розрядного, %fs для 64-розрядного), або чи має бути базовий покажчик потоку
додано. Чи є це законним чи ні, залежить від операційної системи та чи вона
відображає сегмент, щоб охопити всю область TLS.

Для систем, які використовують GNU libc, за замовчуванням увімкнено.

-msse2avx
-mno-sse2avx
Вкажіть, що асемблер повинен кодувати інструкції SSE з префіксом VEX. Варіант
-mavx вмикає це за замовчуванням.

-mfentry
-мно-фентрі
Якщо профілювання активне -стор поставте виклик лічильника профілювання перед прологом. Примітка: увімкнено
архітектури x86 атрибут "ms_hook_prologue" на даний момент неможливий
-mfentry та -стор.

-m8bit-idiv
-mno-8bit-idiv
На деяких процесорах, таких як Intel Atom, 8-розрядне ціле беззнакове ділення набагато швидше, ніж
32-розрядне/64-розрядне ціле ділення. Цей параметр створює перевірку часу виконання. Якщо обидва
ділене і дільник знаходяться в діапазоні від 0 до 255, 8-бітове ціле беззнакове ділення є
використовується замість 32-розрядного/64-розрядного цілого поділу.

-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
Розділіть 32-байтове невирівняне завантаження та збереження.

Ці -m перемикачі підтримуються на додаток до перерахованого вище на процесорах AMD x86-64 в
64-розрядні середовища.

-м32
-м64
-mx32
Згенеруйте код для 32-розрядного або 64-розрядного середовища. The -м32 параметр встановлює int, long і
вказує на 32 біти і генерує код, який працює на будь-якій системі i386. The -м64 варіант
встановлює int на 32 біти та long і вказівник на 64 біти та генерує код для AMD
архітектура x86-64. The -mx32 Параметр встановлює int, long і вказівник на 32 біти і
генерує код для архітектури AMD x86-64. Тільки для Дарвіна -м64 варіант поворотів
з -fno-pic та -mdynamic-no-pic Варіанти.

-мно-червона-зона
Не використовуйте так звану червону зону для коду 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 середовищ.

i386 та x86-64 Windows Опції

Ці додаткові параметри доступні для цілей Windows:

-mconsole
Ця опція доступна для цілей Cygwin і MinGW. Він визначає, що консоль
програма має бути створена шляхом вказівки компоновщику встановити заголовок 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. У ньому вказується, що типовий
Попередньо визначені макроси Windows мають бути встановлені в препроцесорі, але не впливають
вибір бібліотеки часу виконання/код запуску.

-mwindows
Ця опція доступна для цілей Cygwin і MinGW. Він визначає, що графічний інтерфейс
програма має бути згенерована шляхом вказівки компоновщику встановити заголовок PE
відповідний тип підсистеми.

-fno-set-stack-executable
Ця опція доступна для цілей MinGW. Він визначає, що виконуваний прапор для
стек, який використовується вкладеними функціями, не встановлено. Це необхідно для запуску бінарних файлів
режим ядра Windows, оскільки є API user32, який використовується для встановлення виконуваного файлу
привілеї, недоступний.

-mpe-aligned-commons
Ця опція доступна для цілей Cygwin і MinGW. У ньому вказується, що GNU
розширення до формату файлу PE, що дозволяє правильне вирівнювання COMMON змінних
слід використовувати при генерації коду. Він буде ввімкнено за замовчуванням, якщо GCC виявить
що цільовий асемблер, знайдений під час налаштування, підтримує цю функцію.

Дивіться також під i386 та x86-64 Опції для стандартних варіантів.

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
Не генеруйте (або робіть) код асемблера для інформації про налагодження номера рядка DWARF2. Це
може бути корисним, коли не використовується ассемблер GNU.

- борошнисті стоп-біти
-mno-early-stop-bits
Дозвольте розмістити стоп-біти раніше, ніж безпосередньо перед інструкцією that
спрацював стоп-біт. Це може покращити планування інструкцій, але не завжди
роби це.

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який розподільник регістрів не може використовувати. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-mtls-size=tls-розмір
Вкажіть бітовий розмір негайних зміщень TLS. Допустимі значення: 14, 22 і 64.

-mtune=тип процесора
Налаштуйте планування інструкцій для конкретного ЦП, дійсними значеннями є itanium,
itanium1, merced, itanium2 і mckinley.

-milp32
-mlp64
Згенеруйте код для 32-розрядного або 64-розрядного середовища. 32-розрядне середовище встановлює int,
long і вказівник на 32 біти. 64-розрядне середовище встановлює значення int на 32 біти та long і
покажчик на 64 біта. Це спеціальні позначки HP-UX.

-mno-sched-br-data-spec
-msched-br-спец.даних
(Вимкнути/Увімкнути) спекулятивне планування даних перед перезавантаженням. Це призведе до
створення інструкцій ld.a та відповідних інструкцій перевірки (ld.c /
chk.a). За замовчуванням — «вимкнути».

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis)Увімкнути спекулятивне планування даних після перезавантаження. Це призведе до генерації
інструкцій ld.a та відповідних інструкцій перевірки (ld.c / chk.a). The
за замовчуванням — «увімкнути».

-Мно-Шед-Контроль
-msched-control-spec
(Вимкнути/Увімкнути) контроль спекулятивного планування. Ця функція доступна лише під час
планування регіону (тобто перед перезавантаженням). Це призведе до створення ld.s
інструкції та відповідні інструкції перевірки chk.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' в групі інструкцій. В іншому випадку обмежте
є "м'яким", що означає, що ми віддаємо перевагу операціям без пам'яті, коли буде досягнуто обмеження, але
може все ще планувати операції з пам'яттю.

ІА-64/ВМС Опції

Ці -m визначені параметри для реалізацій IA-64/VMS:

-mvms-коди повернення
Повернути коди умов VMS з main. За замовчуванням повертається умова стилю POSIX
(наприклад, коди помилок).

-mdebug-main=префікс
Позначте першу процедуру, назва якої починається з префікс як основна рутина для
налагоджувач.

-mmalloc64
За замовчуванням 64-розрядні процедури виділення пам’яті.

LM32 Опції

Ці -m параметри визначені для архітектури Lattice Mico32:

-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 використовуватиме під час коду
покоління. Ці псевдореєстри будуть використовуватися як справжні регістри, тому існує a
компроміс між здатністю GCC вмістити код у доступні регістри та
зниження продуктивності використання пам'яті замість регістрів. Зверніть увагу, що всі модулі в a
програма повинна бути скомпільована з тим же значенням для цього параметра. Через це ти
не можна використовувати цю опцію зі стандартними бібліотеками часу виконання, створеними 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=немає
Вимкніть використання невеликої області даних. Змінні будуть поміщені в одну з .дані, 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.
Команда арка у цьому макросі є одним із - марш аргументи, наведені вище.

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

-mcpu=центральний процесор
Згенеруйте код для конкретного процесора M680x0 або ColdFire. M680x0 центральний процесорє:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 та процесор32. ColdFire центральний процесорs
наведені в таблиці нижче, яка також класифікує процесори на сімейства:

Сім'я: -mcpu аргументація
51 : 51 51ac 51cn 51em 51qe
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 також визначає макрос __марх__ при налаштуванні на мікроархітектуру 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-size.

-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 як базовий регістр, і є a
Обмеження 128 байт для розділу ".based".

-бітопс
Вмикає інструкції з бітової операції - біт тест ("btstm"), набір ("bsetm"), очищення
("bclrm"), invert ("bnotm") і test-and-set ("tas").

-mc=ім'я
Вибирає, до якого розділу будуть розміщені константні дані. ім'я може бути "крихітним", "поруч" або
«далеко».

-mclip
Вмикає інструкцію «кліп». Зауважте, що "-mclip" не корисний, якщо ви також не можете
надайте "-mminmax".

-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 це сумісність
код. Приклад значень 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
Використовуйте відносні розділи GP sdata/sbss.

-mxl-множення-високий
Використовуйте вказівки множення на високе значення для високої частини множення 32x32.

-mxl-float-convert
Використовуйте апаратні інструкції перетворення з плаваючою комою.

-mxl-float-sqrt
Використовуйте апаратну інструкцію квадратного кореня з плаваючою комою.

-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, mips64 та mips64r2. Назви процесорів: 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, 74 кк, 74KF2_1, 74KF1_1, 74KF3_2, 1004 кк, 1004KF2_1,
1004KF1_1, loongson2e, loongson2f, loongson3a, M4K, октеон, октеон+, октеон2, Оріон,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 та xlr. Особлива цінність від-абі вибирає найбільш сумісний
архітектуру для вибраного ABI (тобто, mips1 для 32-розрядних ABI і mips3 для 64 біт
ABI).

Нативні набори інструментів Linux/GNU та IRIX також підтримують цю цінність рідний, який вибирає
найкращий варіант архітектури для хост-процесора. -березня = рідний не має ефекту, якщо 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, Де Foo це капіталізована вартість _MIPS_ARCH, Наприклад,
-березень=r2000 встановить _MIPS_ARCH до "r2000" і визначте макрос _MIPS_ARCH_R2000.

Зауважте, що _MIPS_ARCH макрос використовує імена процесора, наведені вище. Іншими словами,
він матиме повний префікс і не буде скорочувати 000 as k, У випадку з-
ABI, макрос називає вирішену архітектуру (або "mips1" or "mips3"). Воно називає
архітектура за замовчуванням, коли немає - марш надається варіант.

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

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

-mtune визначає макроси _MIPS_TUNE та _MIPS_TUNE_Foo, які працюють так само, як
- марш описані вище.

-mips1
Дорівнює -march=mips1.

-mips2
Дорівнює -march=mips2.

-mips3
Дорівнює -march=mips3.

-mips4
Дорівнює -march=mips4.

-mips32
Дорівнює -march=mips32.

-mips32r2
Дорівнює -march=mips32r2.

-mips64
Дорівнює -march=mips64.

-mips64r2
Дорівнює -march=mips64r2.

-mips16
-mno-mips16
Генерувати (не генерувати) код MIPS16. Якщо GCC націлений на MIPS32 або MIPS64
архітектури, він буде використовувати MIPS16e ASE.

Генерацією коду MIPS16 також можна керувати на основі кожної функції за допомогою
атрибути "mips16" і "nomips16".

-mflip-mips16
Згенеруйте код MIPS16 для змінних функцій. Ця опція передбачена для регресії
тестування генерації змішаного коду MIPS16/не-MIPS16 і не призначений для звичайного
використовувати при компіляції коду користувача.

-minterlink-mips16
-mno-interlink-mips16
Вимагайте (не вимагайте), щоб код, який не є MIPS16, був сумісним із посиланням із кодом MIPS16.

Наприклад, не-MIPS16 код не може перейти безпосередньо до коду MIPS16; він повинен або використовувати a
виклик або непрямий стрибок. -minterlink-mips16 тому вимикає прямі стрибки, якщо
GCC знає, що мета стрибка не MIPS16.

-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.

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

-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 біти.

-mhard-float
Використовуйте інструкції співпроцесора з плаваючою комою.

-msoft-float
Не використовуйте інструкції співпроцесора з плаваючою комою. Реалізація з плаваючою комою
обчислення з використанням викликів бібліотеки.

-msingle-float
Припустимо, що співпроцесор з плаваючою комою підтримує лише операції одинарної точності.

-mdouble-float
Припустимо, що співпроцесор з плаваючою комою підтримує операції подвійної точності. Це
є типовим.

-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 мається на увазі -неповноцінний-неодружений.

- ммт
-мно-мт
Використовуйте (не використовуйте) інструкції MT Multithreading.

-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 та цінності
подробиці

За умовчанням -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()" для нетривіальних переміщень блоків. За замовчуванням
is -mno-memcpy, що дозволяє GCC вставляти більшість копій постійного розміру.

-mlong-дзвінки
-mno-long-cales
Вимкніть (не вимикайте) використання інструкції «jal». Виклик функцій за допомогою "jal"
є більш ефективним, але вимагає, щоб абонент і абонент мали однакові 256 мегабайт
сегмент.

Цей параметр не впливає на код abicalls. За замовчуванням є -mno-long-cales.

-ммад
-мно-божевільний
Увімкнути (вимкнути) використання інструкцій "mad", "madu" і "mul", як передбачено
R4650 ISA.

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

Коли використовуються інструкції множення-нагромадження, обчислюється проміжний добуток
з нескінченною точністю і не підпадає під дію FCSR Flush to Zero bit. Це може бути
небажано за деяких обставин.

-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-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 or __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()" скомпільовано.

Цей параметр за замовчуванням має значення "-mno-synci", але значення за замовчуванням можна змінити, налаштувавши
з "--with-synci".

Під час компіляції коду для однопроцесорних систем, як правило, безпечно використовувати "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__.

ПДП-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
Визначає тип апаратної підтримки множення, яка буде використовуватися. За замовчуванням є
"none", який використовує функції програмного множення. Параметр "g13" призначений для
апаратне множення/розділ периферійних пристроїв лише на цілях RL78/G13. Параметр "rl78".
призначений для стандартного апаратного множення, визначеного в посібнику з програмного забезпечення RL78.

IBM RS / 6000 та PowerPC Опції

Ці -m параметри визначені для IBM RS/6000 і PowerPC:

- повноваження
-мно-сила
-mpower2
-мно-сила2
-mpowerpc
-mno-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 підтримує дві пов'язані архітектури набору інструкцій для RS/6000 і PowerPC.
Команда ПОТУЖНІСТЬ набір інструкцій – це інструкції, які підтримуються річки використовуваний набір мікросхем
в оригінальних системах RS/6000 і PowerPC Набір інструкцій є архітектурою
мікропроцесори Freescale MPC5xx, MPC6xx, MPC8xx і IBM 4xx, 6xx і
наступні мікропроцесори.

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

Ви використовуєте ці параметри, щоб визначити, які інструкції доступні на вашому процесорі
використовують. Значення за замовчуванням цих параметрів визначається під час налаштування GCC.
Визначення -mcpu=тип_процесора перекриває специфікацію цих параметрів. ми
рекомендуємо використовувати -mcpu=тип_процесора варіант, а не перераховані вище варіанти.

Команда - повноваження Опція дозволяє GCC генерувати інструкції, які можна знайти лише в
архітектуру POWER і використовувати регістр MQ. Уточнення -mpower2 мається на увазі Потужності та
також дозволяє GCC генерувати інструкції, які присутні в архітектурі POWER2
але не оригінальна архітектура POWER.

Команда -mpowerpc Опція дозволяє GCC генерувати інструкції, які можна знайти лише в
32-розрядна підмножина архітектури PowerPC. Уточнення -mpowerpc-gpopt мається на увазі
-mpowerpc а також дозволяє GCC використовувати додаткові інструкції архітектури PowerPC
група загального призначення, включаючи квадратний корінь з плаваючою комою. Уточнення
-mpowerpc-gfxopt мається на увазі -mpowerpc а також дозволяє 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.

Якщо вказати обидва -мно-сила та -mno-powerpc, GCC використовуватиме лише інструкції в
загальна підмножина обох архітектур плюс деякі спеціальні виклики спільного режиму AIX, і
не використовуватиме регістр MQ. Вказавши обидва - повноваження та -mpowerpc дозволяє GCC
використовувати будь-яку інструкцію з будь-якої архітектури та дозволити використання регістру MQ;
вкажіть це для Motorola MPC601.

-mnew-мнемотехніка
-мнемотехніка
Виберіть, які мнемоніки використовувати в згенерованому коді асемблера. З -mnew-мнемотехніка,
GCC використовує мнемоніку ассемблера, визначену для архітектури PowerPC. З
-мнемотехніка він використовує мнемоніку асемблера, визначену для архітектури POWER.
Інструкції, визначені лише в одній архітектурі, мають лише одну мнемоніку; GCC використовує це
мнемонічний, незалежно від того, який із цих варіантів вказано.

GCC за замовчуванням використовує мнемоніку, що відповідає архітектурі, що використовується. Уточнення
-mcpu=тип_процесора іноді перекриває значення цих параметрів. Хіба що ви будуєте
крос-компілятор, зазвичай ви також не повинні вказувати -mnew-мнемотехніка or
-мнемотехніка, але замість цього слід прийняти значення за замовчуванням.

-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, ec603e, G3, G4, G5, велетень, влада, power2, power3, power4, power5,
потужність 5+, power6, потужність 6x, power7, загальний, живлення ПК, powerpc64, річки, річки1, річки2, csr,
та rs64.

-mcpu=загальний вибирає повністю загальний процесор. Код, згенерований за цією опцією
працюватиме на будь-якому процесорі POWER або PowerPC. GCC використовуватиме лише інструкції в
загальна підмножина обох архітектур, і не використовуватиме регістр MQ. GCC припускає a
загальна модель процесора для планування.

-mcpu=потужність, -mcpu=потужність2, -mcpu=powerpc та -mcpu = powerpc64 вкажіть загальну POWER,
POWER2, ​​чистий 32-розрядний PowerPC (тобто не MPC601) і 64-розрядна архітектура PowerPC
типи машин із відповідною загальною моделлю процесора, що передбачається для планування
цілей.

Інші параметри визначають конкретний процесор. Код, згенерований відповідно до цих параметрів
буде працювати найкраще на цьому процесорі, і може взагалі не працювати на інших.

Команда -mcpu параметри автоматично вмикають або вимикають такі параметри:

-мальтівець -mfprnd -mhard-float -mmfcrf - множинні -mnew-мнемотехніка -mpopcntb
-mpopcntd - повноваження -mpower2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-float -mdouble-float -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx

Конкретні параметри, встановлені для будь-якого конкретного ЦП, будуть відрізнятися в різних версіях компілятора,
залежно від того, яке налаштування створює оптимальний код для цього ЦП; це не так
обов'язково відображати реальні можливості обладнання. Якщо ви бажаєте встановити
індивідуальний параметр до певного значення, ви можете вказати його після -mcpu варіант
як -mcpu=970 -mno-altivec.

На AIX, -мальтівець та -mpowerpc64 параметри не вмикаються та не вимкнені -mcpu
наразі, оскільки AIX не має повної підтримки цих параметрів. Ви можете
все одно вмикайте або вимикайте їх окремо, якщо ви впевнені, що це працюватиме у вашому
довкілля.

-mtune=тип_процесора
Встановіть параметри планування інструкцій для типу машини тип_процесора, але не встановлюйте
тип архітектури, використання реєстру або вибір мнемоніки, як -mcpu=тип_процесора
б. Ті самі значення для тип_процесора використовуються для -mtune що стосується -mcpu. Якщо обидва є
якщо зазначено, згенерований код використовуватиме архітектуру, регістри та набір мнемонік
by -mcpu, але параметри планування, встановлені за допомогою -mtune.

-mcmodel=мала
Згенеруйте код PowerPC64 для невеликої моделі: TOC обмежено 64 КБ.

-mcmodel=середній
Згенеруйте код PowerPC64 для середньої моделі: TOC та інші статичні дані можуть бути підвищені
загальним розміром 4G.

-mcmodel=великий
Згенеруйте код PowerPC64 для великої моделі: TOC може мати розмір до 4G. Інший
дані та код обмежені лише 64-бітовим адресним простором.

-мальтівець
-mno-altivec
Згенеруйте код, який використовує (не використовує) інструкції AltiVec, а також увімкніть використання
вбудованих функцій, які забезпечують більш прямий доступ до набору інструкцій AltiVec.
Можливо, вам також знадобиться встановити -mabi=altivec щоб налаштувати поточний ABI за допомогою AltiVec ABI
удосконалення.

-mvrsave
-мно-врсаве
Генеруйте інструкції VRSAVE під час генерації коду AltiVec.

-mgen-cell-microcode
Створення інструкцій мікрокоду клітинки

-mwarn-cell-microcode
Попередження, коли буде випущена інструкція мікрокоду клітинки. Приклад клітини
інструкція мікрокоду є змінним зсувом.

-msecure-plt
Згенеруйте код, який дозволяє ld і ld.so створювати виконувані файли та спільні бібліотеки
невиконані розділи .plt і .got. Це параметр PowerPC 32-розрядний SYSV ABI.

-mbss-plt
Згенеруйте код, який використовує розділ BSS .plt, який заповнює ld.so, і вимагає .plt і
.got розділи, які є як для запису, так і для виконання. Це 32-розрядний SYSV PowerPC
Варіант ABI.

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

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

-mspe
-мно-спе
Цей перемикач вмикає або вимикає генерацію інструкцій SPE simd.

- утруднений
-мнопарні
Цей перемикач вмикає або вимикає створення інструкцій PAIRED simd.

-mspe=так ні
Цей параметр не підтримується. Використовуйте -mspe та -мно-спе замість цього.

-mvsx
-mno-vsx
Створення коду, який використовує (не використовує) векторні/скалярні (VSX) інструкції, а також
дозволити використання вбудованих функцій, які забезпечують більш прямий доступ до VSX
набір інструкцій.

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

Аргумент так or один дозволяє використовувати одинарну точність з плаваючою комою
операції.

Аргумент подвійний дозволяє використовувати одинарну та подвійну точність з плаваючою комою
операції.

Аргумент немає вимикає операції з плаваючою комою в регістрах загального призначення.

Наразі ця опція доступна лише на MPC854x.

-м32
-м64
Створення коду для 32-розрядних або 64-розрядних середовищ Darwin і SVR4 (включаючи
GNU/Linux). 32-розрядне середовище встановлює int, long і покажчик на 32 біти і
генерує код, який працює на будь-якому варіанті PowerPC. 64-розрядне середовище встановлює int
32 біти та 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 та
-mpowerpc, В той час -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 (дорівнює
-mssingle-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 буде використана під час другого
перепустка на розклад. Аргумент схема приймає одне з таких значень: немає: Не треба
вставити nops. майданчик: блокноти з номерами будь-якої групи відправлення, у якій є вільні місця для видачі,
відповідно до групування планувальника. regroup_exact: Вставте nops, щоб примусити дорого
залежні іннси на окремі групи. Вставте рівно стільки кнопок, скільки потрібно для примусу
insn до нової групи, відповідно до оціненої угруповання процесора. номер: Вставити
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.

-mabi=spe
Розширте поточний ABI за допомогою розширень SPE ABI. Це не змінює ABI за замовчуванням,
замість цього він додає розширення SPE ABI до поточного ABI.

-mabi=no-spe
Вимкніть розширення Booke SPE ABI для поточного ABI.

-mabi=ibmlongdouble
Змініть поточний ABI, щоб використовувати IBM розширеної точності long double. Це PowerPC
32-розрядний варіант SYSV ABI.

-mabi=ieeelongdouble
Змініть поточний ABI, щоб використовувати IEEE розширеної точності long double. Це PowerPC
32-розрядний варіант ABI для Linux.

-мпрототип
-мно-прототип
У системі 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-байтовим
boundary, функція "__eabi" викликається з "main", щоб налаштувати середовище eabi,
і -msdata Опція може використовувати як "r2", так і "r13", щоб вказувати на два окремих невеликих даних
області. Вибір -мно-еабі означає, що стек вирівняний за 16-байтовою межею, do
не викликати функцію ініціалізації з "main", а -msdata буде використовуватися лише варіант
"r13", щоб вказати на одну невелику область даних. The -меабі опція ввімкнена за замовчуванням, якщо ви
налаштовано GCC за допомогою одного з powerpc*-*-eabi* Варіанти.

-msdata=eabi
У системі V.4 і вбудованих системах PowerPC поставте невеликий ініціалізований глобальний і
статичні дані в .sdata2 розділ, на який вказує регістр "r2". Покладіть дрібні
ініціалізовані глобальні та статичні дані, що не є константою .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 помістіть усі ініціалізовані глобальні та статичні дані в файл .дані
розділі та всі неініціалізовані дані в .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 віддасть перевагу першій адресі та згенерує a
«bl callee», якщо інструкція PPC «bl» надійде безпосередньо до абонента; інакше,
компонувальник генерує "bl L42" для виклику "острів гілок". «Острів гілок» є
додається до тіла функції, що викликає; він обчислює повну 32-бітну адресу
абонента і стрибає до нього.

У системах Mach-O (Darwin) цей параметр спрямовує випромінювання компілятора на клей для
кожен прямий виклик, і лінкер Дарвіна вирішує, використовувати його чи відкинути.

У майбутньому ми можемо змусити GCC ігнорувати всі специфікації longcall, коли компонувальник
відомо, що утворює клей.

-mtls-маркери
-mno-tls-маркери
Позначте (не позначайте) виклики "__tls_get_addr" з переміщенням із зазначенням функції
аргумент. Переміщення дозволяє ld надійно асоціювати виклик функції з аргументом
інструкції з налаштування оптимізації TLS, що, у свою чергу, дозволяє gcc краще планувати
послідовність.

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

-mrecip
-мно-рецепт
Цей параметр дозволить GCC використовувати взаємну оцінку та взаємний квадратний корінь
оціночні інструкції з додатковими кроками Ньютона-Рафсона для підвищення точності
замість того, щоб робити ділення або квадратний корінь і ділення для аргументів з плаваючою комою. ти
слід використовувати -швидка математика варіант при використанні -mrecip (або принаймні
-funsafe-math-optimizations, -тільки кінцева математика, -частотно-мат та
-fno-trapping-math). Зауважте, що в той час як пропускна здатність послідовності, як правило, є
вище, ніж пропускна здатність невзаємної команди, точність
послідовність може бути зменшена до 2 ulp (тобто обернене значення 1.0 дорівнює 0.99999994)
для зворотних квадратних коренів.

-mrecip=вибирати
Цей параметр дозволяє контролювати, які інструкції взаємної оцінки можуть використовуватися. вибирати
- це список опцій, розділених комами, перед яким може стояти символ "!" інвертувати
параметр: "все": увімкнути всі інструкції щодо оцінки, "за замовчуванням": увімкнути за замовчуванням
інструкції, еквівалент -mrecip, "none": вимкнути всі інструкції щодо оцінки,
еквівалентно -мно-рецепт; "div": увімкнути інструкції взаємної апроксимації для
як одинарної, так і подвійної точності; "divf": увімкнути взаємне значення одинарної точності
інструкції з наближення; "divd": увімкнути взаємну подвійну точність
інструкції з наближення; "rsqrt": увімкнути наближення зворотного квадратного кореня
інструкції як одинарної, так і подвійної точності; "rsqrtf": увімкніть одиночний-
точні інструкції щодо апроксимації зворотного квадратного кореня; "rsqrtd": увімкніть
інструкції щодо апроксимації зворотного квадратного кореня подвійної точності;

Наприклад, -mrecip=все,!rsqrtd дозволить зробити всю взаємну оцінку
інструкції, крім інструкцій "FRSQRTE", "XSRSQRTEDP" і "XVRSQRTEDP"
які обробляють обчислення зворотного квадратного кореня подвійної точності.

-mrecip-точність
-мно-рецепт-точність
Припустимо (не припускаємо), що інструкції щодо взаємної оцінки забезпечують вищу -
точні оцінки, ніж це передбачено PowerPC ABI. Вибір -mcpu=потужність6 or
-mcpu=потужність7 автоматично вибирає -mrecip-точність. Квадрат подвійної точності
інструкції кореневої оцінки не генеруються за замовчуванням на низькоточних машинах,
оскільки вони не надають оцінку, яка сходиться після трьох кроків.

-mveclibabi=тип
Визначає тип ABI, який використовуватиметься для векторізації внутрішніх елементів за допомогою зовнішньої бібліотеки.
Єдиним типом, який підтримується на даний момент, є "масовий", який вказує на використання IBM
Бібліотеки підсистеми математичного прискорення (MASS) для використання векторизації внутрішніх елементів
зовнішні бібліотеки. GCC наразі надсилатиме виклики "acosd2", "acosf4", "acoshd2",
"acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4", "atan2d2", "atan2f4", "atand2",
"atanf4", "atanhd2", "atanhf4", "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2",
"coshf4", "erfcd2", "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
"expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4", "log10d2",
"log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4", "logd2", "logf4", "powd2",
"powf4", "sind2", "sinf4", "sinhd2", "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4",
"tanhd2" і "tanhf4" під час генерації коду для power7. Обидва -ftree-векторизувати та
-funsafe-math-optimizations повинні бути включені. Бібліотеки МАС повинні бути
вказано під час посилання.

-мфриз
-мно-фриз
Генерувати (не генерувати) інструкцію "friz", коли -funsafe-math-optimizations
Опція використовується для оптимізації округлення значень з плаваючою комою до 64-розрядного цілого і
повернутися до плаваючої коми. Інструкція "friz" не повертає те саме значення, якщо
Число з плаваючою комою завелике, щоб поміститися в ціле число.

-mpointers-to-nested-functions
-mno-вказівники-вкладені-функції
Згенеруйте (не генеруйте) код для завантаження регістра статичного ланцюга (r11) коли
виклик через покажчик в AIX і 64-розрядних системах Linux, де вказівник на функцію
вказує на 3-слівний дескриптор, що вказує адресу функції, значення TOC, яке потрібно завантажити
реєструвати r2, і статичне значення ланцюга, яке буде завантажено в регістр r11,
-mpointers-to-nested-functions увімкнено за замовчуванням. Ви не зможете передзвонити
покажчики на вкладені функції або покажчики на функції, скомпільовані іншими мовами, які
використовуйте статичний ланцюг, якщо ви використовуєте -mno-вказівники-вкладені-функції.

-msave-toc-indirect
-mno-save-toc-indirect
Згенеруйте (не генеруйте) код, щоб зберегти значення TOC у зарезервованої позиції стека
у пролозі функції, якщо функція викликає через покажчик на AIX та 64-розрядних
Системи Linux. Якщо значення TOC не збережено в пролозі, воно зберігається безпосередньо перед цим
виклик через покажчик. The -mno-save-toc-indirect параметр за замовчуванням.

RX Опції

Ці параметри командного рядка визначені для цілей RX:

-m64bit-подвійники
-m32bit-подвійники
Зробіть тип даних "подвійний" 64 біт (-m64bit-подвійники) або 32 біти (-m32bit-подвійники)
за розміром. За замовчуванням є -m32bit-подвійники. примітки Апаратне забезпечення RX з плаваючою комою працює лише
на 32-бітові значення, тому за замовчуванням є -m32bit-подвійники.

-fpu
-nofpu
Вмикає (-fpu) або вимикає (-nofpu) використання апаратного забезпечення RX з плаваючою комою. The
за замовчуванням увімкнено для RX600 серії та вимкнено для RX200 серії.

Інструкції з плаваючою комою будуть створені лише для 32-розрядних значень із плаваючою комою
однак, якщо -m64bit-подвійники використовується, то апаратного забезпечення FPU не буде
використовується для подвійних.

примітки Якщо -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 та -мпід вказуються в командному рядку.

За замовчуванням ця функція не ввімкнена. За замовчуванням можна відновити за допомогою -мно-під
параметр командного рядка.

Примітка: Загальний параметр командного рядка 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 is
якщо зазначено, компілятор генерує апаратні інструкції з десятковою плаваючою комою. Це
є типовим для -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. При створенні коду скористайтеся інструкціями, доступними на
z/Архітектура, за замовчуванням є -березень=z900. В іншому випадку, за замовчуванням -марш=g5.

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

-mtpf-trace
-mno-tpf-trace
Згенеруйте код, який додає (не додає) специфічні гілки ОС TPF для відстеження підпрограм
в операційній системі. Цей параметр вимкнено за замовчуванням, навіть під час компіляції для
ОС TPF.

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

-mwarn-framesize=розмір кадру
Видавати попередження, якщо поточна функція перевищує заданий розмір кадру. Тому що це є
перевірка під час компіляції, це не повинно бути справжньою проблемою під час виконання програми. Це
призначений для визначення функцій, які, швидше за все, викликають переповнення стека. це є
корисно для використання в середовищі з обмеженим розміром стека, наприклад, ядро ​​Linux.

-mwarn-динамічний стек
Видавати попередження, якщо функція викликає alloca або використовує масиви динамічного розміру. Це
загалом погана ідея з обмеженим розміром стека.

-mstack-guard=стек-охоронець
-mstack-size=розмір стопки
Якщо ці параметри передбачені, сервер s390 видає додаткові інструкції в файлі
Пролог функції, який запускає пастку, якщо розмір стека дорівнює стек-охоронець байт вище
розмір стопки (Пам’ятайте, що стек на s390 росте вниз). Якщо стек-охоронець
Опція опускається найменша потужність на 2 більша за розмір кадру скомпільованого
обрана функція. Ці параметри призначені для використання для налагодження стека
проблеми з переповненням. Додатково випромінюваний код викликає лише невеликі накладні витрати і
тому може також використовуватися у виробничих системах без більшої продуктивності
деградація. Наведені значення мають бути точними степенями 2 і розмір стопки повинен бути
більше стек-охоронець не перевищуючи 64 тис. Щоб бути ефективним, доп
код робить припущення, що стек починається з адреси, вирівняної за значенням
дається розмір стопки, стек-охоронець опцію можна використовувати лише разом із
розмір стопки.

Рахунок Опції

Ці параметри визначені для реалізацій 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.

-m4a-nofpu
Згенеруйте код для SH4al-dsp або для SH4a таким чином, щоб з плаваючою комою
одиниця не використовується.

-m4a-лише одиночний
Згенеруйте код для SH4a таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

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

-m4a
Згенеруйте код для SH4a.

-m4al
Такий же, як -m4a-nofpu, за винятком того, що він неявно проходить -dsp до асемблера. GCC
на даний момент не створює жодних інструкцій DSP.

-мб Скомпілювати код для процесора в режимі big-endian.

-мл Скомпілювати код для процесора в режимі малого байта.

-mdalign
Вирівняти подвоєння за 64-бітними межами. Зауважте, що це змінює конвенції викликів,
і, таким чином, деякі функції зі стандартної бібліотеки C не працюватимуть, якщо ви не перекомпілюєте
це спочатку з -mdalign.

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

- велика таблиця
Використовуйте 32-бітові зміщення в таблицях "перемикання". За замовчуванням використовуються 16-бітові зміщення.

-бітопс
Увімкнути використання інструкцій маніпуляції бітами на SH2A.

-mfmovd
Увімкніть використання інструкції «fmovd». Перевірте -mdalign для обмежень вирівнювання.

-мхітачі
Дотримуйтесь умов дзвінків, визначених Renesas.

-мренеси
Дотримуйтесь умов дзвінків, визначених Renesas.

-мно-ренеси
Дотримуйтесь умов викликів, визначених для GCC до конвенцій Renesas
були доступні. Цей параметр є за замовчуванням для всіх цілей ланцюжка інструментів SH.

-mnomacsave
Позначте регістр "MAC" як заблокований виклик, навіть якщо -мхітачі дається.

-миее
-мно-іее
Контролюйте відповідність IEEE порівнянь з плаваючою комою, що впливає на обробку
випадків, коли результат порівняння не впорядкований. За замовчуванням -миее is
неявно ввімкнено. Якщо -фінітна-математична увімкнено -мно-іее встановлюється неявно,
що призводить до швидшого порівняння з плаваючою комою, більший-рівний і менший-рівний. The
Параметри implcit можна змінити, вказавши будь-яке -миее or -мно-іее.

-minline-ic_invalidate
Вбудований код для скасування записів кешу інструкцій після налаштування вкладеної функції
батути. Ця опція не діє, якщо -musermode діють і вибрано
Опція генерації коду (наприклад, -m4) не дозволяє використовувати інструкцію icbi. Якщо
вибраний параметр генерації коду не дозволяє використовувати інструкцію icbi,
і -musermode не діє, вбудований код буде маніпулювати інструкцією
кешувати масив адрес безпосередньо з асоціативним записом. Це не тільки вимагає
привілейований режим, але він також не вийде, якщо рядок кешу було відображено через TLB
і стала невідображеною.

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

-mpadstruct
Ця опція не підтримується. Він доповнює структури до 4 байтів, тобто
несумісний з SH ABI.

-msoft-atomic
Створення атомних послідовностей програмного забезпечення gUSA, сумісного з GNU/Linux для вбудованого атома
функції. Згенеровані атомні послідовності потребують підтримки від переривання /
код обробки винятків системи і підходять лише для одноядерних систем.
Вони не працюватимуть належним чином на багатоядерних системах. Цей параметр увімкнено за допомогою
за замовчуванням, якщо цільовим є "sh-*-linux*". Щоб дізнатися більше про атомарний вбудований
функції див __атомний Вбудовані.

-mspace
Оптимізуйте простір замість швидкості. Мається на увазі -Ос.

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

- режим користувача
Не генеруйте код лише в привілейованому режимі; має на увазі -mno-inline-ic_invalidate, якщо
вбудований код не працюватиме в режимі користувача. Це значення за замовчуванням, якщо ціль є
"sh-*-linux*".

-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. Вказати це для цілей, які не мають подвійного
прецизійний FPU за замовчуванням має значення "call-div1".

дзвінок стіл
Викликає бібліотечну функцію, яка використовує таблицю пошуку для малих дільників і
Інструкція "div1" з розрізненням регістру для більших дільників. Ділення на нуль
обчислює невизначений результат і не захоплює. Це значення за замовчуванням для SH4.
Вказати це для цілей, які не мають інструкцій динамічного зсуву
за замовчуванням "call-div1".

Якщо стратегія поділу не вказана, буде вибрана стратегія за замовчуванням
на основі поточної цілі. Для SH2A стратегією за замовчуванням є використання "divs" і
інструкції "divu" замість викликів функцій бібліотеки.

-accumulate-outgoing-args
Один раз зарезервуйте місце для вихідних аргументів у пролозі функції, а не навколо
кожен дзвінок. Як правило, це вигідно для продуктивності та розміру. Також необхідний для розслаблення
щоб уникнути зміни фрейму стека навколо умовного коду.

-mdivsi3_libfunc=ім'я
Встановіть назву функції бібліотеки, яка використовується для 32-розрядного ділення зі знаком ім'я, це
впливають лише на ім’я, яке використовується в стратегіях виклику та inv:call, а також
компілятор все одно очікуватиме тих самих наборів вводу/виводу/захищених регістрів, як якщо б
цієї опції не було.

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який розподільник регістрів не може використовувати. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

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

-індексована адресація
Увімкнути використання режиму індексованої адресації для SHmedia32/SHcompact. Це тільки
безпечно, якщо апаратне забезпечення та/або ОС реалізують 32-розрядну семантику обертання для індексованого
режим адресації. Архітектура дозволяє реалізувати процесори з 64-розрядними
MMU, який ОС може використовувати для отримання 32-розрядної адресації, але без поточного обладнання
реалізація підтримує цей або будь-який інший спосіб зробити режим індексованої адресації безпечним
для використання в 32-розрядній ABI за замовчуванням -mno-індексована-адресація.

-mgettrcost=номер
Встановіть передбачувану вартість для інструкції gettr номер. За замовчуванням 2 if
-mpt-виправлено діє, 100 в іншому випадку.

-mpt-виправлено
Припустимо, що інструкції pt* не перехоплюють. Це, як правило, створить краще розклад
код, але небезпечний на поточному обладнанні. Поточне визначення архітектури говорить
що ptabs і ptrel пастку, коли ціль anded з 3 дорівнює 3. Це має
ненавмисний ефект, який робить небезпечним планування ptabs / ptrel перед гілкою або
підняти його з петлі. Наприклад, __do_global_ctors, частина libgcc, яка працює
конструктори під час запуску програми, викликає функції у списку, розділеному -1.
З опцією -mpt-fixed, ptabs буде виконано перед тестуванням на -1. Це
означає, що всі конструктори будуть запускатися трохи швидше, але коли цикл дійде до кінця
в кінці списку програма завершує роботу, оскільки ptabs завантажує -1 у ціль
зареєструвати. Оскільки цей параметр небезпечний для будь-якого обладнання, що реалізує поточний
специфікації архітектури, за замовчуванням -mno-pt-fixed. Якщо користувач не вкаже a
питома вартість с -mgettrcost, -mno-pt-fixed також має на увазі -mgettrcost=100; це
перешкоджає виділенню регістрів, використовуючи цільові регістри для зберігання звичайних цілих чисел.

-minvalid-символи
Припустимо, що символи можуть бути недійсними. Звичайні символи функцій, згенеровані компілятором
завжди буде дійсним для завантаження з movi/shori/ptabs або movi/shori/ptrel, але з
трюки асемблера та/або компонувальника можна генерувати символи, які викликають
ptabs / ptrel для захоплення. Цей варіант має значення лише тоді, коли -mno-pt-фіксований В
ефект. Тоді це запобіжить перехресний базовий блок CSE, підйом і більшість планування
символьні навантаження. За замовчуванням є -mno-invalid-symbols.

-mbranch-cost=Num
Припустимо Num бути витратою на інструкцію філії. Більші числа зроблять
компілятор намагається створити більше коду без розгалужень, якщо це можливо. Якщо не вказано
значення вибирається залежно від типу процесора, для якого компілюється.

-mcbranchdi
Увімкніть шаблон інструкцій "cbranchdi4".

-mcmpeqdi
Видавати шаблон інструкцій "cmpeqdi_t", навіть якщо -mcbranchdi діє.

-змішаний-божевільний
Дозволити використання інструкції "fmac" (множення та накопичення з плаваючою комою), якщо
тип процесора це підтримує. Увімкнення цієї опції може генерувати код, який створює
різні числові результати з плаваючою комою порівняно зі суворою арифметикою IEEE 754.

-mpend-cmove
Віддавайте перевагу умовним розгалуженням з нульовим зміщенням для інструкції умовного переміщення
візерунки. Це може призвести до прискорення коду на процесорі SH4.

Solaris 2 Опції

Ці -m Параметри підтримуються в Solaris 2:

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

-нечистий текст пригнічує "переміщення залишаються проти розподілених, але не для запису
розділи" повідомлення про помилку компонувальника. Однак необхідні переміщення призведуть до копіювання
on-write, а спільний об’єкт фактично не використовується між процесами. Замість
використання -нечистий текст, ви повинні скомпілювати весь вихідний код з -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-faster-structs
-mfaster-structs
з -mfaster-structs, компілятор припускає, що структури повинні мати 8 байт
вирівнювання. Це дозволяє використовувати пари інструкцій "ldd" і "std" для копій
у присвоєнні структури замість вдвічі більшої кількості пар "ld" і "st". Однак,
використання цього зміненого вирівнювання безпосередньо порушує SPARC ABI. Таким чином, це задумано
тільки для використання на цілях, де розробник визнає, що їх результуючий код
не буде безпосередньо відповідати правилам ABI.

-mcpu=тип_процесора
Встановіть набір інструкцій, набір регістрів і параметри планування команд
тип машини тип_процесора. Підтримувані значення для тип_процесора він має v7, кипарис, v8, супершпарк,
гіперспарк, Леон, спаркліт, f930, f934, sparclite86x, іскорка, tsc701, v9,
ультраспарк, ultrasparc3, Ніагара, ніагара2, ніагара3 та ніагара4.

Нативні інструменти Solaris і GNU/Linux також підтримують цю цінність рідний, який вибирає
найкращий варіант архітектури для хост-процесора. -mcpu = рідний не має ефекту, якщо
GCC не розпізнає процесор.

Параметри планування інструкцій за замовчуванням використовуються для значень, які вибирають
архітектура, а не реалізація. Це такі v7, v8, спаркліт, іскорка, v9.

Ось список кожної підтримуваної архітектури та її реалізацій.

v7 кипарис

v8 supersparc, hypersparc, leon

спаркліт
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=тип_процесора, але єдиний
корисними значеннями є ті, які вибирають конкретну реалізацію ЦП. Ті
кипарис, супершпарк, гіперспарк, Леон, 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.

-mpopc
-мно-попк
з -mpopc, GCC генерує код, який використовує переваги сукупності UltraSPARC
інструкція з підрахунку. За замовчуванням є -mpopc під час націлювання на процесор, який підтримує таке
інструкції, такі як Ніагара-2 і пізніші.

-mfmaf
-mno-fmaf
з -mfmaf, GCC генерує код, який використовує переваги UltraSPARC Fused Multiply-
Додайте розширення з плаваючою комою. За замовчуванням є -mfmaf при націленні на процесор, що
підтримує такі інструкції, як Niagara-3 і новіші.

-mfix-at697f
Увімкнути документований обхідний шлях для єдиної помилки процесора Atmel AT697F
(що відповідає помилці №13 процесора AT697E).

Ці -m Опції підтримуються на додаток до вищезазначених для процесорів SPARC-V9 у 64-розрядній версії
середовища:

-м32
-м64
Згенеруйте код для 32-розрядного або 64-розрядного середовища. 32-розрядне середовище встановлює int,
long і вказівник на 32 біти. 64-розрядне середовище встановлює значення int на 32 біти та long і
покажчик на 64 біта.

-mcmodel=який
Встановіть для моделі коду одну з

медлоу
Модель середнього/низького коду: 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, не можна змінювати
щодо завантажень і сховищ пам'яті, до якої здійснюється доступ. Зазвичай користувачі
вирішити цю проблему за допомогою ключового слова volatile, але це може призвести до неефективного коду
в місцях, де, як відомо, пам'ять не змінюється. Замість того, щоб позначати пам’ять як
volatile ми розглядаємо інструкції DMA як потенційно впливають на всю пам'ять. З
-munsafe-dma користувачі повинні використовувати ключове слово volatile для захисту доступу до пам'яті.

-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:

-mcpu=ім'я
Вибирає тип ЦП, який буде цільовим. Наразі підтримується єдиний тип tilegx.

-м32
-м64
Згенеруйте код для 32-розрядного або 64-розрядного середовища. 32-розрядне середовище встановлює int,
long і вказівник на 32 біти. 64-розрядне середовище встановлює значення int на 32 біти та long і
покажчик на 64 біта.

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.

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

-mapp-regs
Ця опція призведе до використання r2 і r5 в коді, згенерованому компілятором.
Це налаштування за замовчуванням.

-mno-app-regs
Ця опція призведе до того, що r2 і r5 будуть розглядатися як фіксовані регістри.

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

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

-mv850e1
Вкажіть, що цільовим процесором є V850E1. Константи препроцесора
__v850e1__ та __v850e__ буде визначено, якщо буде використано цю опцію.

-mv850es
Вкажіть, що цільовим процесором є V850ES. Це псевдонім для -mv850e1
варіант.

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

Якщо ні -mv850 ні -mv850e ні -mv850e1 ні -mv850e2 ні -mv850e2v3 визначені
тоді буде вибрано цільовий процесор за замовчуванням та відповідний __v850*__ препроцесор
константа буде визначена.

Константи препроцесора __v850 та __v851__ завжди визначені, незалежно від яких
варіант процесора є цільовим.

-mdisable-call
Ця опція пригнічує генерацію інструкції CALLT для v850e, v850e1,
v850e2 і v850e2v3 архітектури v850. За замовчуванням є
-mno-disable-call що дозволяє використовувати інструкцію CALLT.

VAX Опції

Ці -m параметри визначені для VAX:

-мунікс
Не виводьте певні інструкції переходу ("aobleq" і так далі), які ассемблер Unix
оскільки VAX не може працювати на великій відстані.

-мгну
Виведіть ці інструкції переходу, припустивши, що ви збираєтеся за допомогою
Асемблер GNU.

-мг Вивести код для чисел із плаваючою комою у форматі G замість D-формату.

VxWorks Опції

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

-mrtp
GCC може генерувати код як для ядер VxWorks, так і для процесів реального часу (RTP). Це
опція перемикається від першого до другого. Він також визначає макрос препроцесора
"__RTP__".

-нестатичні
Зв’яжіть виконуваний файл RTP зі спільними бібліотеками, а не зі статичними бібліотеками. The
опції -статичний та - поділилися також може використовуватися для RTP; -статичний є типовим.

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

-Xbind-ледачий
Увімкнути відкладене прив’язування викликів функцій. Цей параметр еквівалентний -Вл,-з, зараз і
визначено для сумісності з Diab.

-Xbind-зараз
Вимкнути відкладене прив’язування викликів функцій. Цей параметр є за замовчуванням і визначено для
сумісність з Diab.

x86-64 Опції

Вони перераховані під

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,
який розміщує літерали в окремому розділі вихідного файлу. Це дозволяє
літеральний пул для розміщення в ОЗП/ПЗУ даних, і це також дозволяє компонувальнику об’єднуватися
об’єднання літералів із окремих об’єктних файлів для видалення зайвих літералів та покращення коду
розмір. З -mtext-section-literals, літерали перемежовуються в текстовому розділі
щоб тримати їх якомога ближче до своїх посилань. Це може знадобитися
для великих файлів складання.

-mtarget-align
-mno-target-align
Коли цей параметр увімкнено, GCC інструктує асемблеру автоматично вирівнювати
інструкції щодо зменшення штрафів за гілки за рахунок деякої щільності коду. The
асемблер намагається розширити інструкції щільності, щоб вирівняти цілі гілок та
інструкції за інструкціями виклику. Якщо попереднього сейфа недостатньо
інструкції щільності для вирівнювання цілі, розширення не виконуватиметься. За замовчуванням є
-mtarget-align. Ці параметри не впливають на лікування автовирівнювання
інструкції на кшталт "LOOP", які асемблер завжди вирівнює, або шляхом розширення
інструкції щільності або вставляючи інструкції без операції.

-довгі дзвінки
-мно-довгі дзвінки
Коли цей параметр увімкнено, GCC інструктує асемблеру транслювати прямі виклики
непрямі виклики, якщо він не може визначити, що ціль прямого виклику знаходиться в
діапазон, дозволений інструкцією виклику. Цей переклад зазвичай відбувається для дзвінків до
функції в інших вихідних файлах. Зокрема, асемблер перекладає прямий
Інструкція «CALL» у «L32R», за якою слідує інструкція «CALLX». За замовчуванням є
-мно-довгі дзвінки. Цю опцію слід використовувати в програмах, де це може викликати виклик
потенційно бути поза зоною дії. Ця опція реалізована на асемблері, а не в
компілятора, тому код ассемблера, згенерований GCC, все одно буде показувати прямий виклик
інструкції --- подивіться на розібраний об'єктний код, щоб побачити фактичні інструкції.
Зауважте, що асемблер використовуватиме непрямий виклик для кожного міжфайлового виклику, а не тільки
ті, які дійсно будуть поза зоною дії.

zSeries Опції

Вони перераховані під

Опції та цінності код Покоління Умовні
Ці незалежні від машини параметри керують умовами інтерфейсу, які використовуються в коді
покоління

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

-fbounds-перевірка
Для інтерфейсів, які це підтримують, створіть додатковий код, щоб перевірити, чи використовувалися індекси
масиви доступу знаходяться в межах оголошеного діапазону. Наразі це підтримується лише
Інтерфейси Java та Fortran, де цей параметр за замовчуванням має значення true та false
відповідно.

-ftrapv
Цей параметр генерує пастки для переповнення зі знаком при додаванні, відніманні,
операції множення.

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

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

-fnon-call-exceptions
Створіть код, який дозволяє інструкціям захоплення генерувати винятки. Зауважте, що це
вимагає підтримки для конкретної платформи, яка існує не скрізь. Крім того,
це тільки дозволяє захоплення інструкції для створення винятків, тобто посилання на пам'ять або
інструкції з плаваючою комою. Він не дозволяє викидати винятки з довільних
обробники сигналів, такі як "SIGALRM".

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

-fasynchronous-wind-tables
Створіть таблицю розгортання у форматі dwarf2, якщо це підтримується цільовою машиною. Стіл є
точний на кожній межі команди, тому його можна використовувати для розгортання стека
асинхронні події (наприклад, налагоджувач або збирач сміття).

-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 бути коротка непідписаний Int замість
за замовчуванням для цілі. Ця опція корисна для створення програм для виконання
ВИНО.

Увага! -fshort-wchar switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-fno-загальний
У коді C контролює розміщення неініціалізованих глобальних змінних. Компілятори Unix C
традиційно допускали кілька визначень таких змінних у різних
одиниці компіляції шляхом розміщення змінних у загальний блок. Така поведінка
визначено -fзагальний, і є за замовчуванням для GCC для більшості цілей. З іншої сторони,
ISO C не вимагає такої поведінки, а на деяких цілях може містити швидкість або код
обмеження розміру на змінні посилання. The -fno-загальний параметр визначає, що
компілятор повинен помістити неініціалізовані глобальні змінні в розділ даних об'єкта
файл, а не генерувати їх як загальні блоки. Це призводить до того, що якщо
одна і та ж змінна оголошується (без "extern") у двох різних компіляціях
отримати помилку множинного визначення, коли ви їх пов’язуєте. У цьому випадку необхідно компілювати
з -fзагальний замість цього. Компіляція з -fno-загальний корисно для цілей, для яких він
забезпечує кращу продуктивність, або якщо ви хочете переконатися, що програма працюватиме далі
інші системи, які завжди обробляють оголошення неініціалізованих змінних таким чином.

-fno-ідентифікатор
Ігноруйте #ідент Директиви.

-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. 386 не має такої межі.)

Незалежний від позиції код вимагає спеціальної підтримки, тому працює лише на
певні машини. Для 386 GCC підтримує PIC для System V, але не для Sun
386i. Код, створений для IBM RS/6000, завжди не залежить від позиції.

Коли цей прапор встановлений, макроси "__pic__" і "__PIC__" визначаються як 1.

-fPIC
Якщо підтримується для цільової машини, видавати незалежний від позиції код, який підходить для
динамічне зв'язування та уникнення будь-яких обмежень на розмір глобальної таблиці зміщень. Це
Опція робить різницю на m68k, PowerPC та SPARC.

Незалежний від позиції код вимагає спеціальної підтримки, тому працює лише на
певні машини.

Коли цей прапор встановлений, макроси "__pic__" і "__PIC__" визначаються як 2.

-fpie
-fPIE
Ці варіанти схожі на -fpic та -fPIC, але згенерований код, незалежний від позиції
можуть бути пов’язані лише з виконуваними файлами. Зазвичай ці варіанти використовуються, коли - пиріг 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);

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

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

Функції може бути надано атрибут "no_instrument_function", у цьому випадку це
приладобудування проводитися не буде. Це можна використовувати, наприклад, для профілювання
перераховані вище функції, підпрограми переривання з високим пріоритетом та будь-які функції, з яких
функції профілювання не можна безпечно викликати (можливо, обробники сигналів, якщо
підпрограми профілювання генерують вихід або виділяють пам'ять).

-finstrument-functions-exclude-file-list=файл,файл, ...
Встановіть список функцій, які виключаються з приладів (див. опис
з «функцій-інструментів»). Якщо файл, який містить визначення функції, відповідає
з одним з файл, то ця функція не буде інструментальною. Матч закінчено
підрядки: якщо файл Параметр — це підрядок імені файлу, яким він вважається
бути відповідним.

Наприклад:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

виключатиме будь-яку вбудовану функцію, визначену у файлах, шляхи яких містять "/bits/stl"
або "include/sys".

Якщо з якоїсь причини ви хочете включити букву ',' в одну з sym, напишіть ','. Для
наприклад, "-finstrument-functions-exclude-file-list=',,tmp'" (зверніть увагу на одинарні лапки
навколо варіанту).

-instrument-functions-exclude-function-list=sym,sym, ...
Це схоже на "-finstrument-functions-exclude-file-list", але цей параметр встановлюється
список імен функцій, які потрібно виключити з інструментів. Ім'я функції до
be matched - це його видиме для користувача ім'я, наприклад "vector бла (константний вектор &)",
не внутрішнє спотворене ім'я (наприклад, "_Z4blahRSt6vectorIiSaIiEE"). Матч завершено
на підрядках: якщо sym Параметр — це підрядок імені функції
вважається збігом. Для розширених ідентифікаторів C99 і C++ — ім’я функції
має бути подано в UTF-8, не використовуючи універсальні імена символів.

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

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

Ви можете додатково вказати рядковий параметр: "no" означає відсутність перевірки, "generic"
означає примусово використовувати перевірку старого стилю, "конкретна" означає використання найкращої перевірки
метод і еквівалентний голому -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
Згенеруйте код, щоб автоматично розділити стек до його переповнення. Отриманий
програма має розривний стек, який може переповнюватися, лише якщо програма не в змозі
виділити більше пам'яті. Це найбільш корисно під час запуску потокових програм, т.к
більше не потрібно розраховувати хороший розмір стека для використання для кожного потоку. Це
наразі реалізовано лише для серверів i386 і x86_64, які працюють під керуванням GNU/Linux.

Коли код компілюється з -fsplit-stack викликає код, скомпільований без -fsplit-stack, там
може бути не так багато місця в стеку для виконання останнього коду. Якщо компілювати все
код, у тому числі бібліотечний код, с -fsplit-stack це не варіант, то компонувальник може
виправити ці виклики так, щоб код компілювався без -fsplit-stack завжди має великий
стек. Підтримка цього реалізована в лінкері gold у випуску GNU binutils
2.21 і пізніше.

-випливає-підкреслення
Цей варіант і його аналог, -fno-лідинг-підкреслення, примусово змінити спосіб C
символи представлені в об'єктному файлі. Один із способів — допомогти зв’язатися зі спадщиною
код збірки.

Увага! -випливає-підкреслення switch змушує GCC генерувати код, який не є
двійковий сумісний із кодом, згенерованим без цього перемикача. Використовуйте його для відповідності a
бінарний інтерфейс програми, що не є стандартним. Не всі цілі забезпечують повну підтримку
для цього перемикача.

-ftls-модель=модель
Змініть модель локального зберігання потоку, яка буде використовуватися. The модель аргумент повинен бути одним з
"global-dynamic", "local-dynamic", "initial-exec" або "local-exec".

За замовчуванням без -fpic є "initial-exec"; з -fpic за замовчуванням
«глобально-динамічний».

-fvisibility=за замовчуванням|внутрішній|прихований|захищений
Встановіть видимість символу зображення ELF за замовчуванням на вказану опцію – усі символи будуть
бути позначено цим, якщо не замінено в коді. Використання цієї функції може дуже
істотно покращити час зв'язування та завантаження спільних бібліотек об'єктів, виробляти більше
оптимізований код, забезпечує майже ідеальний експорт API та запобігає зіткненням символів. це є
сильно рекомендуємо використовувати це в будь-яких спільних об'єктах, які ви розповсюджуєте.

Незважаючи на номенклатуру, «за замовчуванням» завжди означає публічний; тобто доступні для зв'язування
проти ззовні спільного об'єкта. «захищений» і «внутрішній» досить марні
у реальному світі, тому єдиний інший часто використовуваний параметр буде «прихованим». The
за замовчуванням якщо - наочність не вказано є "за замовчуванням", тобто створювати кожен символ
public ---це викликає таку ж поведінку, як і попередні версії GCC.

Гарне пояснення переваг, які надає забезпечення правильності символів ELF
наочність забезпечується «Як писати спільні бібліотеки» Ульріха Дреппера (що можна
знайдено наhttp://people.redhat.com/~drepper/>)---проте зроблено чудове рішення
За допомогою цієї опції можна позначати речі прихованими, коли за замовчуванням є загальнодоступними
за замовчуванням приховано та позначає речі загальнодоступними. Це норма для DLL в Windows і
з -fvisibility=приховано і "__attribute__ ((visibility("default")))" замість
"__declspec(dllexport)" ви отримуєте майже ідентичну семантику з ідентичним синтаксисом.
Це велика користь для тих, хто працює з кросплатформними проектами.

Для тих, хто додає підтримку видимості до існуючого коду, ви можете знайти #прагма GCC
видимість використання. Це працює, якщо ви додаєте оголошення, які хочете встановити
видимість для з (наприклад) #прагма GCC видимість натиснути (прихований) та #прагма GCC
видимість поп. Майте на увазі, що слід переглядати видимість символу as частина of
API інтерфейс контракт і, таким чином, весь новий код завжди повинен вказувати видимість, коли він
не є за замовчуванням; тобто декларації лише для використання в межах місцевого DSO повинні завжди
бути явно позначено як прихований, щоб уникнути накладних витрат на опосередкованість PLT --- зробити це
абсолютно зрозумілий також сприяє читанню та самодокументації коду. Зауважте, що
у зв’язку з вимогами специфікації ISO C++, оператор new та оператор видалити необхідно
завжди мати видимість за замовчуванням.

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

зовнішній декларації не зачіпаються - наочність, тому коду може бути багато
перекомпільовано з -fvisibility=приховано без модифікацій. Однак це означає, що
дзвінки на зовнішній функції без явної видимості використовуватимуть PLT, тому це більше
ефективний у використанні __атрибут ((видимість)) та / або #прагма GCC видимість розповісти
компілятор який зовнішній декларації слід розглядати як приховані.

Зверніть увагу, що - наочність впливає на нечіткі сутності зв'язку C++. Це означає, що для
наприклад, клас винятків, який буде переданий між DSO, має бути явно
позначено видимістю за замовчуванням, щоб type_info вузли будуть уніфіковані між
DSO.

Огляд цих методів, їх переваги та способи їх використання див
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
Цю опцію слід використовувати, якщо доступ до нестабільних бітових полів (або іншої структури
поля, хоча компілятор зазвичай шанує ці типи в будь-якому випадку) слід використовувати одиночний
доступ до ширини типу поля, вирівняного за природнім вирівнюванням, якщо це можливо.
Наприклад, цілі з відображеними в пам'яті периферійними регістрами можуть вимагати всього цього
доступ має бути шириною 16 біт; за допомогою цього прапора користувач може оголосити всі периферійні розрядні
поля як "короткі без знака" (припускаючи, що короткий має 16 біт для цих цілей), щоб примусово GCC
використовувати 16-бітовий доступ замість, можливо, більш ефективного 32-бітного доступу.

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

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

Значення за замовчуванням цієї опції визначається бінарним інтерфейсом програми для
цільовий процесор.

НАВКОЛИШНЄ СЕРЕДОВИЩЕ


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

Зауважте, що ви також можете вказати місця для пошуку за допомогою таких параметрів, як -B, -I та -L.
Вони мають пріоритет над місцями, заданими за допомогою змінних середовища, які, у свою чергу
мають пріоритет над тими, які визначені конфігурацією GCC.

МОВА
LC_CTYPE
LC_MESSAGES
LC_ALL
Ці змінні середовища керують тим, як GCC використовує інформацію про локалізацію
що дозволяє GCC працювати з різними національними конвенціями. GCC перевіряє локаль
категорії LC_CTYPE та LC_MESSAGES якщо він був налаштований на це. Ці локалі
категорії можна встановити на будь-яке значення, яке підтримується вашою інсталяцією. Типове значення
en_GB.UTF-8 для англійської мови у Великобританії, закодованої в UTF-8.

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

Команда 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 а не -ММ. Проте
залежність від основного вхідного файлу пропущена.

Використовуйте g++-4.7 онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

  • 1
    turkdevops
    turkdevops
    TurkDevOps a ?k kaynak yaz?l?m
    geli?tirici topluluklar? Команда DevTurks
    Taraf?ndan desteklenmektedir..
    Особливості:https://github.com/turkdevopshttps://turkdevops.g...
    Завантажити turkdevops
  • 2
    asammdf
    asammdf
    *asammdf* — це швидкий синтаксичний аналізатор Python і
    редактор для ASAM (Асоціація для
    Стандартизація автоматизації та
    Вимірювальні системи) MDF / MF4
    (Формат даних вимірювань...
    Завантажити asammdf
  • 3
    LAME (Хромий не є кодером MP3)
    LAME (Хромий не є кодером MP3)
    LAME — це навчальний інструмент для використання
    щоб дізнатися про кодування MP3. The
    Метою проекту LAME є покращення
    психоакустика, якість і швидкість
    депутата...
    Завантажити LAME (Lame Aint an MP3 Encoder)
  • 4
    wxPython
    wxPython
    Набір модулів розширення Python, які
    загорнути кросплатформні класи графічного інтерфейсу
    wxWidgets.. Аудиторія: розробники. Користувач
    інтерфейс: X Window System (X11), Win32 ...
    Завантажте wxPython
  • 5
    packfilemanager
    packfilemanager
    Це файловий менеджер пакету Total War
    проект, починаючи з версії 1.7. А
    короткий вступ до Warscape
    модифікація: ...
    Завантажте пакетний менеджер файлів
  • 6
    IPerf2
    IPerf2
    Інструмент для вимірювання мережевого трафіку
    Продуктивність TCP і UDP з метриками
    навколо пропускної здатності та затримки. The
    цілі включають підтримання активної
    iperf тріска...
    Завантажити IPerf2
  • Детальніше »

Команди Linux

Ad