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

Ad


Значок OnWorks

aarch64-linux-gnu-g++-4.8 - онлайн у хмарі

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

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

ПРОГРАМА:

ІМ'Я


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

СИНТАКСИС


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

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

ОПИС


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

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

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

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

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

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

ВАРІАНТИ


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

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

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

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

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

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

попередження Опції
-fsyntax-only -fmax-errors=n -Педантичний -педантичні помилки -w -Векстра -Стінка
-Водреса -Waggregate-повернення - Оптимізація Waggressive-loop -Межі війни
-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-include-dirs -Wno-бризговик -Wno-мультисимвольний
-Ненульовий -Без переповнення - Струни неперевершеної довжини -Упаковано -Wpacked-bitfield-compat
-Wpadded -Дужки -Wpedantic-ms-формат -Wno-pedantic-ms-format -Wpointer-ариф
-Wno-pointer-to-int-cast -Недостатньо-деклс -Wno-return-local-addr -Повернення
-Wsequence-point - Тінь -Wsign-порівняти -Wsign-перетворення
-Wsizeof-pointer-memaccess -Wstack-протектор -Wstack-usage=довжина -Wstrict-aliasing
-Wstrict-aliasing=n -Wstrict-переповнення -Wstrict-overflow=n
-Wsuggest-attribute=[чистий|сопзЬ|noreturn|формат] -Wmissing-format-attribute -Вимикач
-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 -fsanitize=стиль -fdbg-cnt-список
-fdbg-cnt=список зустрічних значень -fdisable-ipa-pass_name -fdisable-rtl-pass_name
-fdisable-rtl-пропускне ім'я=діапазон-список -fdisable-tree-pass_name -fdisable-tree-передати-
ім'я=діапазон-список -fdump-noaddr -fdump-ненумерований -fdump-ненумеровані-посилання
-fdump-блок перекладу[-n] -fdump-ієрархія класів[-n] -fdump-ipa-все
-fdump-ipa-cgraph -fdump-ipa-inline -fdump-pass -fdump-статистика -fdump-дерево-все
-fdump-дерево-оригінал[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-дерево-псевдонім
-fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n]
-fdump-tree-dce[-n] -fdump-tree-gimple[-сирий] -fdump-tree-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 -fno-eliminate-unused-debug-types
-feliminate-unused-debug-symbols -femit-class-debug-always -придатний-вид-проходити
-придатний-вид-проходити=діапазон-список -fdebug-types-section -fmem-звіт-wpa -fmem-звіт
-fpre-ipa-mem-звіт -fpost-ipa-mem-report -fprofile-arcs -fopt-info
-fopt-info-опції[=файл] -frandom-seed=рядок -fsched-verbose=n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-usage -ftest-покриття
-ftime-звіт -fvar-відстеження -fvar-tracking-assignments
-fvar-tracking-assignments-toggle -g -gрівень -gtoggle -gcoff -гном-версія -ggdb
-grecord-gcc-перемикачі -gno-record-gcc-перемикачі -gstabs -gstabs+ -гстрик-карлик
-гно-строгий-карлик -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map=старий=new -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detailed[=спец-список] -p -стор
-print-file-name=бібліотека -print-libgcc-ім'я файлу -print-multi-каталог
-print-multi-lib -print-multi-os-каталог -print-prog-name=програма
-print-search-dirs -Q -print-sysroot -print-sysroot-headers-suffix -зберігати темп
-save-temps=cwd -save-temps=obj -час[=файл]

Оптимізація Опції
-faggressive-loop-optimizations -falign-functions[=n] -falign-jumps[=n]
-falign-labels[=n] -falign-loops[=n] -фасоціативно-мат -fauto-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 -fhoist-суміжні-вантажі -fif-перетворення -fif-перетворення2
-findirect-inlining -finline-функції -finline-функції-викликані-один раз -finline-limit=n
-finline-small-functions -fipa-cp -fipa-cp-клон -фіпа-пта -фіпа-профіль
-fipa-чистий-конст -фіпа-довідка -fira-algorithm=алгоритм -фіра-регіон=регіон
-fira-таль-напір -фіра-петля-тиск -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose=n -півопти -fkeep-inline-functions
-fkeep-static-conts -флоп-блок -шлюз-розв'язка -floop-strip-mine
-floop-nest-optimize -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-звіт -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-slsr
-ftree-sra -перетворення з трьома перемикачами -ftree-tail-merge -ftree-ter -ftree-векторизувати
-ftree-vrp - за раз -закрутити всі петлі -закрутки-петлі
-funsafe-loop-optimizations -funsafe-math-optimizations -перемикачі-петлі
-fvariable-expansion-in-unroller -fvect-кошт-модель -fvpt -fweb -f ціла програма -fwpa
-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препроцесор варіант -no-integrated-cpp

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

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

Каталог Опції
-Bпрефікс -Iреж -iplugindir=реж - цитатареж -Lреж -специфікації=файл -Я- --sysroot=реж
--no-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=традиційний
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -березень=ім'я -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=ім'я -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 -mpoke-назва-функції
-mthumb -марм -mtpcs-фрейм -mtpcs-leaf-frame -mcaller-super-interworking
-mcallee-супер-взаємодія -mtp=ім'я -mtls-dialect=діалект -mword-переміщення
-mfix-cortex-m3-ldrd -муніципальний доступ -mneon-for-64bits -mrestrict-it

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

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

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

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

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

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

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

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

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

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

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

HPPA Опції -березень=архітектурного типу - великий перемикач -mdisable-fpregs
-mdisable-indexing -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld
-mfixed-range=реєстр-діапазон -mjump-in-delay -mlinker-opt -mlong-дзвінки
-mlong-load-store -mno-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 -mrtm -mlwp -mthreads -mno-align-stringops
-minline-all-stringops -minline-stringops-динамічно -mstringop-strategy=ALG
-mpush-args -accumulate-outgoing-args -m128bit-long-double -m96bit-long-double
-млонг-подвійний-64 -млонг-подвійний-80 -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

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

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

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

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

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

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

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

MIPS Опції -ТО -EB -березень=арка -mtune=арка -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -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 -mno-float -msingle-float -mdouble-float -mdsp
-мно-дсп -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -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

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

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

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

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

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

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

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-невирівняні-подвійники - режим користувача -mno-режим користувача -mv8plus -mno-v8plus -mvis
-мно-віс -mvis2 -мно-вис2 -mvis3 -мно-вис3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -мно-попк -mfix-at697f -mfix-ut699

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

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

ПЛИТКА-Gx Опції -mcpu=центральний процесор -м32 -м64 -mcmodel=код-модель

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

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

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

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

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

Опції Управління Дитина of Вихід
Компіляція може включати до чотирьох етапів: попередню обробку, власне компіляцію, складання та
посилання, завжди в такому порядку. GCC здатний попередньо обробляти та компілювати декілька
файли або в кілька вхідних файлів ассемблера, або в один вхідний файл асемблера; тоді
кожен вхідний файл ассемблера створює об'єктний файл, а зв'язування об'єднує весь об'єкт
файли (щойно скомпільовані та вказані як вхідні дані) у виконуваний файл.

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

файл.c
Вихідний код C, який необхідно попередньо обробити.

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

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

файл.m
Вихідний код Objective-C. Зауважте, що ви повинні зв’язатися з libobjc бібліотека, щоб зробити ан
Робота програми Objective-C.

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

файл.mm
файл.M
Вихідний код Objective-C++. Зверніть увагу, що ви повинні зв’язатися з libobjc бібліотеку зробити
програма Objective-C++. Зауважте, що .M відноситься до буквальної великої букви М.

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

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

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

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

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

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

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

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

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

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

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

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

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

файл.d
D файл вихідного коду.

файл.di
D файл коду інтерфейсу.

файл.dd
D файл коду документації.

файл.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
Ада
d
f77 f77-cpp-вхід f95 f95-cpp-вхід
go
Ява

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Однак використання ПКУ не додає бібліотеку C++. г ++ це програма, яка викликає GCC і
автоматично визначає зв'язування з бібліотекою C++. Це лікує .c, .h та .i файли як
Вихідні файли C++ замість вихідних файлів C, якщо -x використовується. Ця програма також корисна
під час попередньої компіляції заголовного файлу C з a .h розширення для використання в компіляціях C++. Увімкнено
багато систем, г ++ також встановлюється з назвою C ++.

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

Опції Управління C Діалект
Наступні параметри керують діалектом C (або мов, похідних від C, таких як C++,
Objective-C і Objective-C++), які компілятор приймає:

-ансі
У режимі C це еквівалентно -std=c90. У режимі C++ це еквівалентно
-std=c++98.

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

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

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

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

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

-std =
Визначте мовний стандарт. Наразі ця опція підтримується лише тоді, коли
компіляція C або C++.

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

Необхідно вказати значення цієї опції; можливі значення

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

ISO9899:199409
ISO C90 із змінами в поправці 1.

c99
c9x
ISO9899:1999
iso9899:199x
ISO C99. Зауважте, що цей стандарт ще не повністю підтримується; побачити
<http://gcc.gnu.org/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
c ++ 03
Стандарт ISO C++ 1998 року плюс технічні виправлення 2003 року та деякі додаткові
звіти про дефекти. Такий же, як -ансі для коду C++.

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

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

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

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

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

-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
відповідність) передбачає -триграфи.

- традиційний
-традиційний-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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-ftemplate-backtrace-limit=n
Встановіть максимальну кількість приміток щодо створення шаблону для одного попередження або помилки
до n. Значення за замовчуванням – 10.

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

-fno-threadsafe-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", щоб його розмір був a
кратний розміру байтів на вашій платформі; це змушує G++ та інші компілятори
викладіть «В» ідентично.

· Неправильне використання 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;
};

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

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

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

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

#define __STDC_FORMAT_MACROS
#включати
#включати

int main () {
int64_t i64 = 123;
printf("Мій int64: %"PRId64"\n", i64);
}

У цьому випадку «PRId64» розглядається як окремий маркер попередньої обробки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-fno-diagnostics-show-caret
За замовчуванням кожна діагностика включає вихідний рядок і символ '^'
із зазначенням стовпчика. Цей параметр пригнічує цю інформацію.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-Wmissing-include-dirs (лише C, C++, Objective-C і Objective-C++)
Попереджати, якщо наданий користувачем каталог включення не існує.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-Вимикач
Попереджати кожного разу, коли оператор "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=3.

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

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

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

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

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

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

-Wstrict-overflow=2
Також попереджаємо про інші випадки, коли порівняння спрощено до константи. Для
приклад: "абс (x) >= 0". Це можна спростити лише тоді, коли -fstrict-переповнення В
ефект, оскільки "abs (INT_MIN)" переповнюється до "INT_MIN", що менше нуля.
-Wstrict-переповнення (без рівня) те саме, що -Wstrict-overflow=2.

-Wstrict-overflow=3
Також попереджаємо про інші випадки, коли порівняння спрощено. Наприклад: "x + 1
> 1" спрощується до "x > 0".

-Wstrict-overflow=4
Також попереджаємо про інші спрощення, не охоплені вищевказаними випадками. Для
приклад: "(x * 10) / 5" спрощено до "x * 2".

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

-Wsuggest-attribute=[чистий|сопзЬ|noreturn|формат]
Попереджати про випадки, коли додавання атрибута може бути корисним. Атрибути на даний момент
підтримувані, наведені нижче.

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

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

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

-Межі війни
Ця опція активна лише тоді, коли -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++ компілятор попереджає, якщо локальна змінна затінює явне значення
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)
При використанні в поєднанні з - W формат та - педантичний без розширень GNU, це
Параметр вимикає попередження про не-ISO специфікатори ширини формату "printf" / "scanf".
"I32", "I64" і "I" використовуються для цільових пристроїв Windows, які залежать від середовища виконання MS.

-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", те саме
тип, базовий клас або посилання на них. Попередження про перетворення між підписаними
а цілі числа без знака вимкнені за замовчуванням у C++, якщо -Wsign-перетворення is
явно ввімкнено.

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

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

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

- Пусте тіло
Попереджати, якщо в 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перетворення.

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

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

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

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

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

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

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

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

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

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

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

void foo (bar) {}

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

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

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

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

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

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

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

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

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

-Wno-успадкований-змінний-ктор
Придушити попередження про використання конструкторів, що успадковують C++11, коли базовий клас
успадкований від має змінний конструктор 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-макроси.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-fdebug-types-section
При використанні DWARF версії 4 або вище, типи DIE можна вставити в свої власні
розділ ".debug_types" замість того, щоб робити їх частиною розділу ".debug_info". Це
ефективніше помістити їх в окремі розділи comdat, оскільки компонувальник може тоді
видалити дублікати. Але ще не всі споживачі DWARF підтримують розділи ".debug_types".
а для деяких об'єктів ".debug_types" виробляє більший, а не менший налагодження
інформація.

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

-gcoff
Надайте інформацію про налагодження у форматі COFF (якщо це підтримується). Це
формат, використовуваний SDB на більшості систем System V до версії System V 4.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-fsanitize=адреса
Увімкніть AddressSanitizer, швидкий детектор помилок пам’яті. Інструкції з доступу до пам'яті
буде оснащено інструментами для виявлення помилок за межами та використання після вільних. Побачити
<http://code.google.com/p/address-sanitizer/> для більш детальної інформації.

-fsanitize=потік
Увімкніть ThreadSanitizer, швидкий детектор перегонів даних. Будуть інструкції доступу до пам'яті
обладнаний для виявлення помилок у перегонах даних. Побачити
<http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> для більш детальної інформації.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-fdebug-prefix-map=старий=new
При компіляції файлів у каталозі старий, записати інформацію про налагодження, що описує їх як
in new замість цього.

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

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

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

-Q Змушує компілятор друкувати назву кожної функції під час її компіляції та друкувати деякі
статистику кожного проходу після його завершення.

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

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

-fmem-звіт-wpa
Змушує компілятор друкувати деяку статистику про постійне виділення пам’яті для WPA
тільки фаза.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ось кілька прикладів, які показують використання цих параметрів.

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

-dлітери
-fdump-rtl-проходити
-fdump-rtl-проходити=ім'я файлу
Каже створювати дампи налагодження під час компіляції в часи, визначені літери, це
використовується для налагодження проходів компілятора на основі RTL. Імена файлів для більшості
дампи створюються шляхом додавання номера проходу та слова до ім'я дампу, А
файли створюються в каталозі вихідного файлу. У випадку =ім'я файлу варіант
дамп виводиться на заданий файл замість пронумерованих файлів дампу. Примітка
що номер пропуску обчислюється статично, коли перепустки реєструються в перепустці
менеджер. При цьому нумерація не пов'язана з динамічним порядком виконання
проходить. Зокрема, пропуск, встановлений плагіном, може мати номер більше 200 навіть
якщо вона виконана досить рано. ім'я дампу генерується з імені вихідного файлу,
якщо вказано явно, і він не є виконуваним файлом, інакше це базове ім'я
вихідний файл. Ці перемикачі можуть мати різний ефект, коли -E використовується для
попередня обробка.

Дампи налагодження можна ввімкнути за допомогою a -fdump-rtl перемикач чи щось інше -d варіант літери. Тут
можливі літери для використання в проходити та літерита їх значення:

-fdump-rtl-alignments
Дамп після обчислення вирівнювань гілок.

-fdump-rtl-asmcons
Дамп після виправлення операторів rtl, які мають незадоволені обмеження входу/виходу.

-fdump-rtl-auto_inc_dec
Дамп після виявлення автоматичного включення. Цей пропуск працює лише на архітектурах, які
мати інструкції автоматичного включення або автоматичного розвантаження.

-fdump-rtl-бар'єри
Викиньте після очищення інструкції з шлагбаума.

-fdump-rtl-bbpart
Скидайте після розділення гарячих і холодних базових блоків.

-fdump-rtl-bbro
Дамп після зміни порядку блоку.

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

-fdump-rtl-bypass
Обхід дампу після переходу та оптимізація потоку керування.

-fdump-rtl-combine
Дамп після проходу комбінації інструкцій RTL.

-fdump-rtl-compgotos
Дамп після дублювання обчислених goto.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2 та -fdump-rtl-ce3 увімкнути скидання після трьох
якщо перетворення пройде.

-fdump-rtl-cprop_hardreg
Дамп після поширення копії жорсткого реєстру.

-fdump-rtl-csa
Дамп після об’єднання налаштувань стека.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 та -fdump-rtl-cse2 увімкнути скидання після двох загальних
видалення підвиразів проходить.

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

-fdump-rtl-dbr
Дамп після відкладеного планування відділення.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 та -fdump-rtl-dce2 увімкнути демпінг після двох мертвих магазинів
ліквідація проходить.

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

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

-fdump-rtl-expand
Дамп після генерації RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 та -fdump-rtl-fwprop2 увімкнути скидання після двох вперед
поширення проходить.

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

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

-fdump-rtl-initivals
Дамп після обчислення наборів початкових значень.

-fdump-rtl-into_cfglayout
Дамп після перетворення в режим cfglayout.

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

-fdump-rtl-стрибок
Дамп після другої оптимізації стрибка.

-fdump-rtl-loop2
-fdump-rtl-loop2 вмикає дамп після завершення оптимізації циклу rtl.

-fdump-rtl-mach
Дамп після виконання машинозалежного проходу реорганізації, якщо цей прохід
існує

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

-fdump-rtl-rnreg
Дамп після перенумерації реєстру.

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

-fdump-rtl-peephole2
Скидайте після проходу вічка.

-fdump-rtl-postreload
Дамп після оптимізації після перезавантаження.

-fdump-rtl-pro_and_epilogue
Дамп після створення прологів та епілогів функції.

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

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

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

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

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

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

Під час скидання RTL друкуйте RTL у тонкому (згорнутому) вигляді замість стандартного
LISP-подібне представлення.

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

деталі
Увімкнути детальніші дампи (не враховується кожним параметром дампу). Також включають
інформація з оптимізації проходить.

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

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

графік
Для кожного з інших вказаних файлів дампу (-fdump-rtl-проходити), дамп а
представлення графіка потоку керування, придатного для перегляду за допомогою GraphViz to
file.passid.pass.dot. Кожна функція у файлі добре надрукована як підграф,
щоб GraphViz міг відобразити їх усі в одному сюжеті.

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

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

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

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

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

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

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

оптимізований
Увімкнути відображення інформації про оптимізацію (доступно лише на певних проходах).

пропущений
Увімкнути відображення пропущеної інформації про оптимізацію (доступно лише під час певних проходів).

ноти
Увімкнути іншу детальну інформацію про оптимізацію (доступно лише на певних проходах).

=ім'я файлу
Замість автоматичного іменованого файлу дампа виведіть у вказане ім’я файлу. Файл
Імена stdout та stderr обробляються спеціально і вважаються вже відкритими
стандартні потоки. Наприклад,

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr file.c

виводить дамп векторизатора foo.dump, тоді як ПРЕДВАРИТЕЛЬНИЙ дамп виводиться на stderr.
Якщо для одного проходу вказано два конфліктуючі імена файлів дампу, то останнє
параметр замінює попередній.

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

оптальний
Увімкніть усі параметри оптимізації, тобто оптимізований, пропущений та увагу.

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

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

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

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

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

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

сонячна піврічна складова Дамп інформації, пов’язаної з SSA, у файл. Ім'я файлу створюється шляхом додавання .ssa
до імені вихідного файлу.

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

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

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

попередньо Висипати дерева після часткового усунення надмірності. Ім'я файлу створюється
додавання .pre до імені вихідного файлу.

частоти Викидайте дерева після повного усунення надмірності. Ім'я файлу створюється шляхом додавання
.фр до імені вихідного файлу.

copyprop
Скидайте дерева після копіювання. Ім'я файлу створюється шляхом додавання .copyprop
до імені вихідного файлу.

store_copyprop
Кидайте дерева після копіювання в магазині. Ім'я файлу створюється шляхом додавання
.store_copyprop до імені вихідного файлу.

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

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

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

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

подарунок Дамп кожної функції після застосування оптимізації дерева домінанта. Ім'я файлу
зроблено шляхом додавання .dom до імені вихідного файлу.

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

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

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

copyrename
Дамп кожної функції після застосування оптимізації перейменування копії. Ім'я файлу
зроблено шляхом додавання .copyrename до імені вихідного файлу.

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

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

слп Дамп кожної функції після застосування векторизації базових блоків. Ім'я файлу
зроблено шляхом додавання .slp до імені вихідного файлу.

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

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

-fopt-info
-fopt-info-опції
-fopt-info-опції=ім'я файлу
Керує дампами оптимізації з різних проходів оптимізації. Якщо -опції форма є
б / в, опції це список - окремі параметри, щоб вибрати деталі дампу та
оптимізації. Якщо опції не вказано, за замовчуванням всі для деталей і оптальний
для груп оптимізації. Якщо ім'я файлу не вказано, за замовчуванням stderr. Примітка
що вихід ім'я файлу буде перезаписано у випадку кількох одиниць перекладу. Якщо
бажаний комбінований вихід з кількох одиниць перекладу, stderr слід використовувати
замість цього.

Варіанти можна розділити на дві групи: 1) варіанти, що описують багатослівність
дамп і 2) параметри, що описують, які оптимізації слід включити. Варіанти
з обох груп можна вільно змішувати, оскільки вони не перекриваються. Однак у разі
будь-яких конфліктів, останні параметри замінюють попередні параметри в командному рядку.
Хоча приймаються кілька опцій -fopt-info, лише один з них може мати =ім'я файлу.
Якщо вказано інші імена файлів, усі, крім першого, ігноруються.

Докладність дампу має наступні параметри

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

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

gcc -O2 -ftree-vectorize -fopt-info-vec-missed

надрукує інформацію про втрачені можливості оптимізації від векторізації
передає stderr.

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

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

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

ipa Увімкнути дампи з усіх міжпроцедурних оптимізацій.

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

вбудований
Увімкнути дампи з усіх вбудованих оптимізацій.

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

Наприклад,

gcc -O3 -fopt-info-missed=missed.all

виводить звіт про пропущену оптимізацію з усіх проходів до пропустив.все.

Як інший приклад,

gcc -O3 -fopt-info-inline-optimized-missed=inline.txt

виведе інформацію про пропущені оптимізації, а також про оптимізовані розташування з
вся підкладка переходить у inline.txt.

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

gcc -O3 -fopt-info

Зверніть увагу, що -fopt-info-vec-missed поводиться так само, як -fopt-info-missed-vec.

Як інший приклад розглянемо

gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

Тут два вихідних назви файлів vec.miss та петля.опт конфліктують, оскільки лише один
вихідний файл дозволений. У цьому випадку діє лише перший варіант і
наступні параметри ігноруються. Таким чином тільки vec.miss виробляється який cotains
скидає з векторизатора про втрачені можливості.

-ftree-vectoriz-verbose=n
Ця опція не підтримується і реалізується в термінах -fopt-info. Будь ласка, використовуйте
-fopt-info-вид форму замість цього де вид є одним із дійсних параметрів opt-info. Це
друкує додаткову інформацію про оптимізацію. Для n=0 діагностичної інформації немає
повідомили. Якщо n=1 векторізатор повідомляє кожен цикл, який був векторизований, і підсумок
кількість циклів, які були векторизовані. Якщо n=2 векторізатор повідомляє про розташування, які
не можна було векторизувати і причини тих. Для будь-яких вищих рівнів багатослівності все
повідомляється інформація про аналіз та перетворення з векторізатора.

Зверніть увагу, що інформація, виведена шляхом -ftree-vectorizator-verbose варіант надсилається до
stderr. Якщо еквівалентна форма -fopt-info-опції=ім'я файлу використовується, то вихід є
відправлений у ім'я файлу замість цього.

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

-fno-eliminate-unused-debug-types
Зазвичай, створюючи вихід DWARF 2, 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-slsr
-ftree-sra -ftree-pta -ftree-ter - за раз

-O також включається -fomit-кадр-покажчик на машинах, де це не заважає
з налагодженням.

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

-О2 вмикає всі прапорці оптимізації, зазначені в -O. Він також включає наступне
прапорці оптимізації: -fthread-стрибки -falign-функції -falign-стрибки -Falign-loops
-falign-етикетки -fcaller-зберігає -фкросстрибки -fcse-folow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -fдевіртуалізувати -дорогі оптимізації -fgcse
-fgcse-lm -fhoist-суміжні-вантажі -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-векторизувати, -fvect-кошт-модель, -ftree-partial-pre та -fipa-cp-клон Варіанти.

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

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

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

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

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

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

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

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

-fno-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-розрядні GNU/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 вмикає цю опцію за замовчуванням. Якщо ви хочете змусити компілятор перевірити, чи a
на змінну посилається, незалежно від того, увімкнена чи ні оптимізація, use
-fno-keep-static-conts варіант.

-fmerge-константи
Спроба об’єднати ідентичні константи (рядкові константи та константи з плаваючою комою)
через одиниці компіляції.

Цей параметр є стандартним для оптимізованої компіляції, якщо асемблер і компонувальник
підтримайте це. Використовуйте -fno-merge-constants гальмувати цю поведінку.

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

-fmerge-all-constants
Спробуйте об’єднати ідентичні константи та ідентичні змінні.

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

-fmodulo-sched
Виконайте планування swing за модулем безпосередньо перед першим проходом планування. Це
pass розглядає внутрішні цикли і змінює порядок їх інструкцій, накладаючи різні
ітерацій.

-fmodulo-sched-allow-regmoves
Виконуйте більш агресивне модульне планування на основі SMS з дозволеними переміщеннями в реєстрі. За
встановлення цього прапора певні краї антизалежностей видаляються, що ініціює
генерування reg-ходів на основі аналізу життєвого діапазону. Цей варіант ефективний
тільки з -fmodulo-sched включений.

-fno-branch-count-reg
Не використовуйте інструкції «зменшення та розгалуження» в регістрі підрахунку, а замість цього
генерувати послідовність інструкцій, які зменшують регістр, порівнюють його з
нуль, потім розгалужується на основі результату. Ця опція має значення лише на
архітектури, які підтримують такі інструкції, до яких належать x86, PowerPC, IA-64 і
S/390.

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

Увімкнено за замовчуванням, коли -fgcse активовано

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-fзатримка-гілка
Якщо це підтримується для цільової машини, спробуйте змінити порядок інструкцій для використання
Слоти інструкцій доступні після відкладених інструкцій переходу.

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

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

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

-fschedule-insns2
Як і в -fschedule-insns, але вимагає додаткового проходження планування інструкцій
після розміщення реєстру. Це особливо корисно на машинах з a
відносно невелика кількість регістрів і де інструкції завантаження пам'яті займають більше ніж
один цикл.

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

-fno-sched-interblock
Не плануйте інструкції між основними блоками. Зазвичай це ввімкнено за замовчуванням
при плануванні перед виділенням регістру, тобто з -fschedule-insns або, по крайней -О2 or
вище.

-fno-sched-spec
Не допускайте спекулятивного руху інструкцій без завантаження. Зазвичай це вмикається за допомогою
за замовчуванням при плануванні перед виділенням регістра, тобто з -fschedule-insns або, по крайней
-О2 або вище.

-fsched-тиск
Увімкнути чутливе до тиску регістр планування insn перед виділенням регістра. Це
має сенс лише тоді, коли планування до ввімкнення виділення регістрів, тобто з
-fschedule-insns або, по крайней -О2 або вище. Використання цієї опції може покращити згенерований
коду та зменшити його розмір, запобігаючи збільшення тиску в регістрі понад число
наявних жорстких реєстрів та наступних розливів у розподілі реєстрів.

-fsched-spec-load
Дозволити спекулятивний рух деяких інструкцій завантаження. Це має сенс лише тоді, коли
планування перед виділенням регістру, тобто з -fschedule-insns або, по крайней -О2 або вище.

-fsched-spec-load-dangerous
Дозволити спекулятивний рух більшої кількості інструкцій завантаження. Це має сенс лише тоді, коли
планування перед виділенням регістру, тобто з -fschedule-insns або, по крайней -О2 або вище.

-fsched-stalled-insns
-fsched-stalled-insns=n
Визначте, скільки insns (якщо такі є) можна передчасно перемістити з черги зупинених
insns у готовий список під час другого проходу планування. -fno-sched-stalled-insns
означає, що жодні заклади не переміщуються передчасно, -fsched-stalled-insns=0 значить немає
обмеження кількості закладів у черзі, які можна передчасно перемістити. -fsched-stalled-insns
без значення еквівалентно -fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
Визначте, скільки груп (циклів) insn перевіряється на залежність від зупинки insn
що є кандидатом на передчасне вилучення з черги глухих закладів. Це має
ефект лише під час другого проходу планування, і тільки якщо -fsched-stalled-insns is
використаний -fno-sched-stalled-insns-dep еквівалентна -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep без значення еквівалентно
-fsched-stalled-insns-dep=1.

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

Це має сенс лише при плануванні після виділення регістру, тобто з
-fschedule-insns2 або, по крайней -О2 або вище.

-fsched-group-euristic
Увімкніть групову евристику в планувальнику. Ця евристика сприяє інструкції
що належить до групи розкладу. Це ввімкнено за замовчуванням під час планування
увімкнено, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2 або вище.

-fsched-critical-path-euristic
Увімкніть евристики критичного шляху в планувальнику. Ця евристичність сприяє
інструкції на критичному шляху. Це ввімкнено за замовчуванням під час планування
увімкнено, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2 або вище.

-fsched-spec-insn-евристичний
Увімкніть евристику спекулятивних інструкцій у планувальнику. Ця евристичність сприяє
спекулятивні інструкції з більшою слабкістю залежності. Це ввімкнено за замовчуванням
коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2
або вище.

-fsched-rank-euristic
Увімкніть евристичний рейтинг у планувальнику. Ця евристика сприяє інструкції
належність до базового блоку з більшим розміром або частотою. Це ввімкнено за замовчуванням
коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2
або вище.

-fsched-last-insn-евристичний
Увімкніть евристику останньої інструкції в планувальнику. Ця евристика сприяє
інструкція, яка менш залежить від останнього запланованого інструкції. Це ввімкнено
за замовчуванням, коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2
або, по крайней -О2 або вище.

-fsched-dep-count-euristic
Увімкніть евристику залежного підрахунку в планувальнику. Ця евристика сприяє
інструкція, яка містить більше інструкцій залежно від неї. Це ввімкнено за замовчуванням
коли ввімкнено планування, тобто з -fschedule-insns or -fschedule-insns2 або, по крайней -О2
або вище.

-freschedule-modulo-scheduled-loops
Модульне планування виконується перед традиційним плануванням. Якщо цикл за модулем
за розкладом, пізніші проходи за розкладом можуть змінити його розклад. Використовуйте цю опцію, щоб
контролювати таку поведінку.

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

-fselective-scheduling2
Плануйте інструкції за допомогою алгоритму вибіркового планування. Вибіркове планування
замість другого проходу планувальника.

-fsel-sched-pipelining
Увімкнути програмну конвеєрію внутрішніх циклів під час вибіркового планування. Це
опція не має ефекту, якщо одна з -вибіркове планування or -fselective-scheduling2
увімкнено.

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

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

-fhoist-суміжні-вантажі
Спекулятивно підняти вантажі з обох гілок if-then-else, якщо вантажі від
суміжні розташування в одній структурі і цільова архітектура має умовну
інструкція переміщення. Цей прапор увімкнено за замовчуванням в -О2 і вище.

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

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

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

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

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

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

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

-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

loop strip mining перетворює цикл так, ніби він був написаний:

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

-floop-nest-optimize
Увімкнути оптимізатор гнізд циклів на основі ISL. Це загальний оптимізатор гнізд циклів
на алгоритмах оптимізації Плутона. Він обчислює структуру циклу, оптимізовану для
локальність даних і паралельність. Цей варіант є експериментальним.

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

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

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

-fvect-cost-model=модель
Змінити модель вартості, яка використовується для векторизації. The модель аргумент повинен бути одним з
«необмежений», «динамічний» або «дешевий». З «необмеженою» моделлю векторизований код-
шлях вважається прибутковим, тоді як з "динамічною" моделлю перевірка часу виконання буде
охороняти векторизований код-шлях, щоб увімкнути його лише для кількості ітерацій, яка, ймовірно, буде
виконуватися швидше, ніж при виконанні початкового скалярного циклу. «Дешева» модель буде
вимкнути векторизацію циклів, наприклад, там, де це було б занадто дорого
через необхідні перевірки під час виконання на залежність або вирівнювання даних, але в іншому випадку дорівнює
до «динамічної» моделі. Модель вартості за замовчуванням залежить від інших прапорів оптимізації
і є «динамічним», або «дешевим».

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

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

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

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

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

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

Ця оптимізація ввімкнена за замовчуванням.

-fvariable-expansion-in-unroller
За допомогою цієї опції компілятор створює кілька копій деяких локальних змінних, коли
розгортання циклу, що може призвести до кращого коду.

-fчасткове вбудовування
Вбудовані частини функцій. Цей параметр має будь-який ефект лише тоді, коли є саме вбудовування
увімкнено -finline-функції or -finline-small-functions Варіанти.

Увімкнено на рівні -О2.

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

Цей параметр увімкнено на рівні -О3.

-fprefetch-loop-масиви
Якщо це підтримується цільовою машиною, згенеруйте інструкції для попереднього отримання пам’яті
покращити продуктивність циклів, які звертаються до великих масивів.

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

Вимкнено на рівні -Ос.

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

-фглаз увімкнено за замовчуванням. -fpeephole2 увімкнено на рівнях -О2, -О3, -Ос.

-fno-guess-гілки-ймовірність
Не вгадайте ймовірності гілок за допомогою евристики.

GCC використовує евристики для вгадування ймовірностей гілок, якщо вони не надані
зворотний зв'язок щодо профілю (-fprofile-arcs). Ці евристики засновані на потоці керування
графік. Якщо деякі ймовірності гілок задані __builtin_expect, А потім
евристики використовуються для вгадування ймовірностей гілок для решти потоку керування
графік, беручи __builtin_expect інформація до уваги. Взаємодії між
евристики і __builtin_expect може бути складним, а в деяких випадках може бути корисним
відключити евристику, щоб впливати __builtin_expect простіше
зрозуміти

За замовчуванням - -fguess-гіл-ймовірність на рівнях -O, -О2, -О3, -Ос.

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

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

-freorder-blocks-and-partition
На додаток до зміни порядку основних блоків у скомпільованій функції, щоб зменшити
кількість взятих гілок, розбиває гарячі та холодні опорні блоки на окремі секції
файлів збірки та файлів .o, щоб покращити роботу сторінок та локальності кешу.

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

-freorder-функції
Змініть порядок функцій в об’єктному файлі, щоб покращити локальність коду. Це
реалізовано за допомогою спеціальних підрозділів ".text.hot" для найбільш часто виконуваних
функції та ".text.unlikely" для малоймовірно виконаних функцій. Перезамовлення виконується
компонувальник, тому формат об’єктного файлу повинен підтримувати іменовані розділи, а компоновщик має розміщувати
їх розумним чином.

Також має бути доступний зворотній зв’язок профілю, щоб цей параметр був ефективним. Побачити
-fprofile-arcs for details.

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

-fstrict-aliasing
Дозвольте компілятору прийняти найсуворіші правила псевдонімів, застосовні до мови
компілюється. Для C (і C++) це активує оптимізацію на основі типу
вирази. Зокрема, передбачається, що об’єкт одного типу ніколи не перебуває в
ту саму адресу, що й об’єкт іншого типу, за винятком випадків, коли типи майже однакові.
Наприклад, "unsigned int" може псевдонім "int", але не "void*" або "double". А
тип символу може бути псевдонімом будь-якого іншого типу.

Зверніть особливу увагу на такий код:

союз a_union {
int i;
подвійний d;
};

int f() {
союз a_union t;
td = 3.0;
повернути ti;
}

Практика читання від іншого члена профспілки, ніж останній
Письмо (так званий "type-punning") є поширеним. Навіть з -fstrict-aliasing, тип-
каламбур дозволяється, якщо доступ до пам'яті здійснюється через тип об'єднання. Отже,
код вище працює, як очікувалося. Однак цей код може не:

int f() {
союз a_union t;
int* ip;
td = 3.0;
ip = &t.i;
повернення *ip;
}

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

int f() {
подвійне d = 3.0;
return ((union a_union *) &d)->i;
}

Команда -fstrict-aliasing параметр увімкнено на рівнях -О2, -О3, -Ос.

-fstrict-переповнення
Дозвольте компілятору прийняти строгі правила переповнення зі знаком, залежно від мови
компілюється. Для C (і C++) це означає переповнення при виконанні арифметики з
signed numbers не визначено, а це означає, що компілятор може припустити, що це не так
відбутися. Це дозволяє здійснювати різноманітні оптимізації. Наприклад, компілятор припускає, що
вираз на кшталт "i + 10 > i" завжди істинний для знака "i". Це припущення є
дійсний, лише якщо підписане переповнення не визначено, оскільки вираз хибний, якщо "i + 10"
переповнення при використанні арифметики двоїчного доповнення. Коли ця опція діє будь-який
спробуйте визначити, чи має бути записана операція над переповненнями знакових чисел
обережно, щоб не викликати переповнення.

Ця опція також дозволяє компілятору припустити строгу семантику вказівника: якщо a
вказівник на об’єкт, якщо додавання зміщення до цього вказівника не створює покажчика
до того самого об’єкта додавання не визначено. Це дозволяє компілятору зробити висновок
що "p + u > p" завжди істинно для вказівника "p" і цілого беззнакового числа "u". Це
припущення дійсне лише тому, що обертання покажчика не визначено, як і вираз
false, якщо "p + u" переповнюється за допомогою арифметики двоїчного доповнення.

Див. Також -fwrapv варіант. Використання -fwrapv означає, що ціле переповнення зі знаком є
повністю визначений: він обгортає. Коли -fwrapv використовується, різниці між ними немає
-fstrict-переповнення та -fno-strict-overflow для цілих чисел. З -fwrapv певні види
переповнення дозволено. Наприклад, якщо компілятор отримує переповнення під час виконання
арифметика для констант, переповнене значення все ще можна використовувати з -fwrapv, Але не
інакше.

Команда -fstrict-переповнення параметр увімкнено на рівнях -О2, -О3, -Ос.

-falign-функції
-falign-functions=n
Вирівняйте початок функцій із наступним степенем двох, більшим за n, пропускаючи до n
байтів. Наприклад, -falign-functions=32 вирівнює функції до наступних 32-байт
межа, але -falign-functions=24 вирівнюється до наступної 32-байтової межі, лише якщо це
можна зробити, пропустивши 23 байти або менше.

-fno-align-функції та -falign-functions=1 є еквівалентними і означають, що функції
не вирівняні.

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

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням.

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

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

-fno-align-labels та -falign-labels=1 є еквівалентними і означають, що мітки не є
вирівняні.

If -Falign-loops or -falign-стрибки застосовні й більші за це значення
замість них використовуються їхні значення.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням, що дуже ймовірно
бути 1, що означає відсутність вирівнювання.

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

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

-fno-align-loops та -falign-петля = 1 є еквівалентними і означають, що цикли ні
вирівняні.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням.

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

-falign-стрибки
-falign-jumps=n
Вирівняйте цілі розгалужень за межею ступеня двох, для цілей гілок, де цілі
можна досягти, лише стрибнувши, пропустивши до n байти, як -falign-функції, в
у цьому випадку не потрібно виконувати фіктивні операції.

-fno-align-jumps та -falign-jumps=1 є еквівалентними і означають, що цикли ні
вирівняні.

If n не вказано або дорівнює нулю, використовуйте машинно-залежне за замовчуванням.

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

- за раз
Цей параметр залишено з міркувань сумісності. - за раз не має ефекту, поки
-fno-одиниця-за-раз мається на увазі -fno-toplevel-reorder та -fno-секція-анкери.

Увімкнено за замовчуванням.

-fno-toplevel-reorder
Не змінюйте порядок функцій верхнього рівня, змінних і операторів "asm". Виведіть їх
у тому самому порядку, у якому вони відображаються у вхідному файлі. Коли використовується ця опція,
статичні змінні без посилання не видаляються. Цей параметр призначений для підтримки
існуючий код, який ґрунтується на певному порядку. Для нового коду краще використовувати
атрибути.

Увімкнено на рівні -О0. Якщо вимкнено явно, це також означає -fno-секція-анкери,
який інакше увімкнено на -О0 на деяких цілях.

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

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

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

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

-flto[=n]
Цей параметр запускає стандартний оптимізатор часу зв’язку. При виклику з вихідним кодом it
генерує GIMPLE (одне з внутрішніх представлень GCC) і записує його до спеціального ELF
розділи в об’єктному файлі. Коли об’єктні файли пов’язані разом, усі
тіла функцій зчитуються з цих розділів ELF і створюються так, ніби вони були
частина тієї ж одиниці перекладу.

Щоб використовувати оптимізатор часу зв’язку, -flto необхідно вказати під час компіляції та під час
остаточне посилання. Наприклад:

gcc -c -O2 -flto foo.c
gcc -c -o2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

Перші два виклики GCC зберігають представлення байт-коду GIMPLE у спец
Всередині секції ELF foo.o та бар.о. Остаточний виклик читає байт-код GIMPLE
від foo.o та бар.о, об’єднує два файли в єдине внутрішнє зображення та компілює
результат як зазвичай. Оскільки обидва foo.o та бар.о об’єднані в одне зображення, це
змушує всі міжпроцедурні аналізи та оптимізації в GCC працювати по всьому
два файли, як ніби вони є одним. Це означає, наприклад, що inliner є
можливість вбудовувати функції в бар.о в функції в foo.o і навпаки.

Інший (простіший) спосіб увімкнути оптимізацію часу зв’язку:

gcc -o myprog -flto -O2 foo.c bar.c

Вище генерується байт-код для foo.c та бар.ц, об’єднує їх разом в єдине ціле
Представлення GIMPLE та оптимізує їх, як зазвичай, для виробництва myprog.

Єдине важливе, про що слід пам’ятати, це те, що ввімкнути оптимізацію часу з’єднання
-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", щоб вказати розділення, що віддзеркалює вихідні файли, або
"збалансований", щоб вказати розділення на однакові за розміром шматки (за можливості) або
"max", щоб створити новий розділ для кожного символу, де це можливо. Вказавши «жоден» як
алгоритм повністю вимикає розділення та потокову передачу. Значенням за замовчуванням є
«збалансований». Хоча "1to1" можна використовувати як обхідний шлях для різного впорядкування коду
проблем, "max" розділення призначене лише для внутрішнього тестування.

-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 необхідно підтримувати компонувальник
плагіни, що дозволяють створювати повнофункціональне середовище збірки (здатне створювати статичні
бібліотеки тощо). GCC надає gcc-ar, gcc-nm, gcc-ranlib обгортки для передачі
правильні варіанти цих інструментів. З нежирним LTO make-файли потрібно змінити для використання
Ними.

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

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

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

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

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

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

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

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

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

-fprofile-dir=шлях
Встановіть каталог для пошуку файлів даних профілю шлях. Цей варіант
впливає лише на дані профілю, створені за допомогою -fprofile-generate, -ftest-покриття,
-fprofile-arcs і використовується -fprofile-використання та -fгілля-ймовірності та пов’язані з цим
варіанти. Можна використовувати як абсолютні, так і відносні шляхи. За замовчуванням GCC використовує
поточний каталог як шлях, таким чином файл даних профілю з’являється в тому ж каталозі, що й
об'єктний файл.

-fprofile-generate
-fprofile-generate=шлях
Увімкнути параметри, які зазвичай використовуються для інструментальних програм, щоб створити корисний профіль
для подальшої перекомпіляції з оптимізацією на основі зворотного зв'язку профілю. Ви повинні використовувати
-fprofile-generate як під час компіляції, так і під час зв'язування вашої програми.

Увімкнено такі параметри: «-fprofile-arcs», «-fprofile-values», «-fvpt».

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

-fprofile-використання
-fprofile-use=шлях
Увімкнути оптимізацію, спрямовану на зворотний зв’язок профілю, і оптимізація, як правило, прибуткова
доступний лише відгук про профіль.

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

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

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

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

int foo (недійсний)
{
зареєструвати int *xr = &x;
return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Не всі цілі підтримують цю опцію.

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

Назви конкретних параметрів і значення значень прив'язані до
внутрішні елементи компілятора, і можуть бути змінені без попередження в майбутньому
Релізи

У кожному випадку значення є цілим числом. Допустимі варіанти для ім'я є:

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

max-crossjump-края
Максимальна кількість вхідних країв, які потрібно враховувати для перехресного стрибка. Алгоритм
використаний -фкросстрибки дорівнює O(N^2) у кількості ребер, що надходять до кожного блоку.
Збільшення значень означає більш агресивну оптимізацію, що скорочує час компіляції
збільшується з, ймовірно, невеликим покращенням розміру виконуваного файлу.

min-crossjump-insns
Мінімальна кількість інструкцій, яка повинна бути зіставлена ​​в кінці двох блоків
перед виконанням на них крос-стрибків. Це значення ігнорується у випадку
де всі інструкції в блоці, з якого здійснюється перехресний перехід, збігаються. The
значення за замовчуванням 5.

max-grow-copy-bb-insns
Максимальний коефіцієнт розширення розміру коду при копіюванні базових блоків замість
стрибки. Розширення відноситься до інструкції переходу. Значення за замовчуванням
8.

max-goto-duplication-insns
Максимальна кількість інструкцій для дублювання в блок, який переходить до a
обчислений goto. Щоб уникнути поведінки O(N^2) під час кількох проходів, GCC розраховує
обчислював goto на початку процесу компіляції і дефакторизував їх лише пізніше
можливо. Лише обчислені стрибки в кінці основного блоку з не більше ніж максимальним
goto-duplication-insns не розкладаються. Значення за замовчуванням – 8.

max-delay-slot-insn-search
Максимальна кількість інструкцій, які слід враховувати під час пошуку інструкції
заповнити слот затримки. Якщо більше цієї довільної кількості інструкцій
шукали, економія часу від заповнення слоту затримки мінімальна, тому зупиніться
пошук. Збільшення значень означає більш агресивну оптимізацію, що робить
збільшується час компіляції з, ймовірно, невеликим покращенням часу виконання.

max-delay-slot-live-search
Під час спроби заповнити слоти затримки слід враховувати максимальну кількість інструкцій
під час пошуку блоку з дійсною інформацією реального реєстру. Збільшення цього
довільно вибране значення означає більш агресивну оптимізацію, збільшення
час складання. Цей параметр слід видалити, коли є код слота затримки
переписано для підтримки графіка потоку керування.

max-gcse-пам'ять
Приблизний максимальний обсяг пам’яті, який можна виділити для виконання
глобальна оптимізація загальних підвиразів. Якщо пам'яті більше ніж
вказано необхідне, оптимізація не виконана.

max-gcse-insertion-ratio
Якщо відношення вставок виразів до видалень більше, ніж це значення для
будь-який вираз, то RTL PRE вставляє або видаляє вираз і таким чином залишає
частково надлишкові обчислення в потоці інструкцій. Значенням за замовчуванням є
20.

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

max-modulo-backtrack-спроби
Максимальна кількість спроб повернення, яку планувальник повинен зробити за модулем
планування циклу. Більші значення можуть експоненціально збільшити час компіляції.

max-inline-insns-single
Кілька параметрів контролюють вбудоване дерево, яке використовується в GCC. Це число встановлює
максимальна кількість інструкцій (враховується у внутрішньому представленні GCC) в a
єдина функція, яку вбудоване дерево розглядає для вбудовування. Це тільки впливає
функції, оголошені вбудовані, і методи, реалізовані в оголошенні класу (C++).
Значення за замовчуванням - 400.

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

inline-min-speedup
Коли очікуване покращення продуктивності часу виконання абонента + абонента перевищує це
threshold (у прецентах), функція може бути вбудована незалежно від обмеження на
--парам max-inline-insns-single та --парам max-inline-insns-auto.

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

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

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

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

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

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

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

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

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

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

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

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

Коли доступний зворотній зв’язок профілю (див -fprofile-generate) фактична рекурсія
глибину можна вгадати з ймовірності того, що функція рекурсує через даний виклик
вираз. Цей параметр обмежує вбудовування лише викликом виразів, чий
ймовірність перевищує заданий поріг (у відсотках). Значення за замовчуванням – 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-peel-гілки
Максимальна кількість гілок на гарячому шляху через очищену послідовність.

max-fully-oled-insns
Максимальна кількість insns повністю відклеєної петлі.

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

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

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

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

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

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

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

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

scev-max-expr-size
Зв’язано з розміром виразів, що використовуються в аналізаторі скалярних еволюцій. Великий
вирази сповільнюють аналізатор.

scev-max-expr-complexity
Зв'язано зі складністю виразів в аналізаторі скалярних еволюцій.
Складні вирази сповільнюють роботу аналізатора.

омега-макс-вари
Максимальна кількість змінних у системі обмежень Omega. Значення за замовчуванням
є 128.

омега-макс-гек
Максимальна кількість нерівностей в системі обмежень Омега. За замовчуванням
значення дорівнює 256.

омега-макс-екв
Максимальна кількість рівностей у системі обмежень Омега. Значення за замовчуванням
є 128.

omega-max-wild-cards
Максимальна кількість змінних підстановки, яку може вставити розв’язувач Omega.
Значення за замовчуванням - 18.

розмір хеш-таблиці омега
Розмір хеш-таблиці в вирішувачі Omega. Значення за замовчуванням — 550.

омега-макс-клавіші
Максимальна кількість ключів, використовуваних вирішувачем Omega. Значення за замовчуванням – 500.

омега-усунення зайвих обмежень
Якщо встановлено значення 1, використовуйте дорогі методи для усунення всіх зайвих обмежень. The
значення за замовчуванням 0.

vect-max-version-for-alignment-checks
Максимальна кількість перевірок під час виконання, які можна виконати під час виконання циклу
версій для вирівнювання у векторізаторі.

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

vect-max-peeling-for-alignment
Максимальна кількість відколів циклу для покращення вирівнювання доступу для векторизатора. Значення
-1 означає «без обмежень».

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

hot-bb-count-ws-permille
Основний підрахунок профілю блоку вважається гарячим, якщо він сприяє заданому
пропуск (тобто 0...1000) всього профільованого виконання.

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

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

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

align-loop-ітерації
Цикл, який, як очікується, виконуватиме принаймні вибрану кількість ітерацій, вирівнюється.

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

Команда tracer-dynamic-coverage-feedback використовується лише тоді, коли є зворотній зв’язок профілю
доступний. Реальних профілів (на відміну від статично оцінених) багато
менш збалансований, завдяки чому порогове значення має більше значення.

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

tracer-min-branch-ratio
Зупинити зворотне зростання, коли зворотна ймовірність кращого краю менша за цю
поріг (у відсотках).

tracer-min-branch-ratio
tracer-min-branch-rate-feedback
Зупинити зростання вперед, якщо найкраща межа має ймовірність нижчу за цей поріг.

Аналогічно до tracer-dynamic-coverage присутні два значення, одне для компіляції
для зворотного зв'язку профілю та один для компіляції без. Значення для компіляції
з профілем зворотний зв'язок має бути більш консервативним (вищим), щоб зробити
трасуючий ефект ефективний.

max-cse-path-length
Максимальна кількість базових блоків на шляху, що розглядається CSE. За замовчуванням – 10.

max-cse-insns
Максимальна кількість інструкцій, які CSE обробляє перед очищенням. За замовчуванням є
1000.

ggc-min-expand
GCC використовує збирач сміття для керування власним розподілом пам'яті. Цей параметр
визначає мінімальний відсоток, на який має бути купа збирача сміття
дозволено розширюватися між колекціями. Налаштування цього може покращити швидкість компіляції;
це не впливає на генерацію коду.

За замовчуванням – 30% + 70% * (ОЗУ/1 Гб) з верхньою межею 100%, коли ОЗУ >= 1 Гб.
Якщо «getrlimit» доступний, поняття «RAM» є найменшим із фактичної RAM і
"RLIMIT_DATA" або "RLIMIT_AS". Якщо GCC не може обчислити оперативну пам’ять на певному
платформи, використовується нижня межа 30%. Встановлення цього параметра і ggc-min-
купа до нуля спричиняє повне збирання при кожній нагоді. Це
надзвичайно повільний, але може бути корисним для налагодження.

ggc-min-heapsize
Мінімальний розмір купи збирача сміття, перш ніж він почне збирати
сміття. Перше збирання відбувається після того, як купа розширюється на ggc-min-expand%
За ggc-min-heapsize. Знову ж таки, налаштування може покращити швидкість компіляції та
не впливає на генерацію коду.

За замовчуванням є менший з RAM/8, RLIMIT_RSS або обмеження, яке намагається забезпечити
що RLIMIT_DATA або RLIMIT_AS не перевищено, але з нижньою межею 4096
(чотири мегабайти) і верхня межа 131072 (128 мегабайт). Якщо GCC не в змозі
для обчислення оперативної пам’яті на певній платформі використовується нижня межа. Налаштування цього
параметр дуже великий ефективно відключає збір сміття. Налаштування цього
параметр і ggc-min-expand до нуля спричиняє повне збирання на кожному
можливість.

max-reload-search-insns
Максимальна кількість перезавантажень інструкцій має бути еквівалентною
зареєструвати. Збільшення значень означає більш агресивну оптимізацію, що робить
збільшується час компіляції з, ймовірно, трохи кращою продуктивністю. За замовчуванням
значення дорівнює 100.

max-cselib-memory-locations
Cselib має враховувати максимальну кількість місць пам’яті.
Збільшення значень означає більш агресивну оптимізацію, що скорочує час компіляції
збільшитися з, ймовірно, трохи кращою продуктивністю. Значення за замовчуванням – 500.

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

Команда reorder-block-duplicate-feedback використовується лише тоді, коли є зворотній зв’язок профілю
доступний. Його можна встановити на вищі значення, ніж reorder-block-duplicate з
інформація про гарячі точки більш точна.

max-sched-ready-insns
Максимальна кількість інструкцій, готових до видачі, має планувальник
розглянути в будь-який момент під час першого проходу планування. Збільшення значень
означають більш ретельний пошук, завдяки чому час компіляції збільшується на ймовірно
мало користі. Значення за замовчуванням – 100.

max-sched-region-blocks
Максимальна кількість блоків у регіоні, які розглядаються для міжблоку
планування. Значення за замовчуванням – 10.

max-pipeline-region-blocks
Максимальна кількість блоків у регіоні, які розглядаються для конвеєрної конвеєрної системи
вибірковий планувальник. Значення за замовчуванням – 15.

max-sched-region-insns
Максимальна кількість insns в регіоні, що розглядається для міжблоку
планування. Значення за замовчуванням – 100.

max-pipeline-region-insns
Максимальна кількість insns в регіоні, що розглядається для конвеєра в
вибірковий планувальник. Значення за замовчуванням – 200.

min-spec-prob
Мінімальна ймовірність (у відсотках) досягнення вихідного блоку для міжблоку
спекулятивне планування. Значення за замовчуванням — 40.

max-sched-extend-regions-iters
Максимальна кількість ітерацій через CFG для розширення регіонів. Значення 0 (
за замовчуванням) вимикає розширення регіону.

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

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

sched-spec-state-edge-prob-cutoff
Мінімальна ймовірність, яку має мати грань, щоб планувальник зберегти свій стан
через нього. Значення за замовчуванням – 10.

sched-mem-true-dep-cost
Мінімальна відстань (у циклах ЦП) між збереженням і завантаженням, націленим на ту саму пам'ять
місця розташування. Значення за замовчуванням – 1.

selsched-max-lookahead
Максимальний розмір вікна попереднього перегляду вибіркового планування. Це глибина
пошуку доступних інструкцій. Значення за замовчуванням – 50.

selsched-max-sched-times
Максимальна кількість разів, коли інструкція планується під час вибіркового
планування. Це обмеження на кількість ітерацій, через які
інструкція може бути конвеєрною. Значення за замовчуванням – 2.

selsched-max-insns-to-rename
Максимальна кількість найкращих інструкцій у готовому списку, які розглядаються
перейменування в селективному планувальнику. Значення за замовчуванням – 2.

sms-min-sc
Мінімальне значення кількості етапів, яке генерує планувальник swing modulo. The
значення за замовчуванням 2.

max-last-value-rtl
Максимальний розмір, що вимірюється як кількість RTL, які можна записати у виразі
в комбінаторі для псевдорегістра як останнього відомого значення цього регістра. The
за замовчуванням - 10000.

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

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

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

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

max-fields-for-field-sensitive
Максимальна кількість полів у структурі, що обробляється чутливим до поля способом
аналіз покажчиків. За замовчуванням дорівнює нулю для -О0 та -О1, і 100 для -Ос, -О2 та
-О3.

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

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

l1-кеш-ряд-розмір
Розмір рядка кешу в кеші L1, в байтах.

l1-розмір кешу
Розмір кешу L1, в кілобайтах.

l2-розмір кешу
Розмір кешу L2, в кілобайтах.

відношення min-insn-to-prefetch-rate
Мінімальне співвідношення між кількістю інструкцій і кількістю попередніх вибірок
щоб увімкнути попередню вибірку в циклі.

відношення prefetch-min-insn-to-mem
Мінімальне співвідношення між кількістю інструкцій і кількістю пам'яті
посилання, щоб увімкнути попередню вибірку в циклі.

використання канонічних типів
Чи повинен компілятор використовувати систему "канонічних" типів. За замовчуванням це
завжди має бути 1, що використовує більш ефективний внутрішній механізм для порівняння
типи в C++ і Objective-C++. Однак, якщо в системі канонічних типів є помилки
спричиняючи помилки компіляції, встановіть це значення на 0, щоб вимкнути канонічні типи.

switch-conversion-max-branch-ratio
Перетворення ініціалізації перемикача відмовляється створювати масиви, більші ніж
switch-conversion-max-branch-ratio помножена на кількість гілок в комутаторі.

максимальна часткова-анти-довжина
Максимальна довжина часткового античного набору, обчислена під час часткового дерева
оптимізація усунення надмірності (-Free-pre) при оптимізації на -О3 і вище.
Для деяких видів вихідного коду розширене усунення часткової надмірності
оптимізація може втекти, споживаючи всю доступну пам'ять на хості
машина. Цей параметр встановлює обмеження на довжину обчислюваних наборів,
що запобігає втечі. Встановлення значення 0 для цього параметра
дозволяє встановити необмежену довжину.

sccvn-max-scc-size
Максимальний розмір сильно зв'язаного компонента (SCC) під час обробки SCCVN. Якщо
ця межа досягнута, обробка SCCVN для всієї функції не виконується і
оптимізації залежно від нього вимкнено. Максимальний розмір SCC за замовчуванням становить
10000.

sccvn-max-alias-queries-per-access
Максимальна кількість запитів псевдоніма-оракула, які ми виконуємо під час пошуку надмірностей
для вантажів і магазинів. Якщо це обмеження досягнуто, пошук припиняється, а завантаження або
магазин не вважається зайвим. Кількість запитів визначається алгоритмічно
обмежена кількістю сховищ на всіх шляхах від завантаження до запису функції.
За замовчуванням максимальна кількість запитів становить 1000.

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

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

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

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

loop-max-datarefs-for-datadeps
Побудова залежностей даних коштує дорого для дуже великих циклів. Цей параметр
обмежує кількість посилань на дані в циклах, які розглядаються для даних
аналіз залежності. Ці великі цикли не обробляються за допомогою оптимізації
циклічні залежності даних. Значення за замовчуванням – 1000.

max-vartrack-size
Встановлює максимальну кількість слотів хеш-таблиці для використання під час потоку даних відстеження змінних
аналіз будь-якої функції. Якщо цей ліміт перевищено зі змінним відстеженням на
призначення увімкнено, аналіз для цієї функції повторюється без нього, після
видалення всіх налагоджувальних insns з функції. Якщо ліміт перевищено навіть без
debug insns, аналіз відстеження змінних параметрів повністю вимкнено для функції.
Установлення параметра на нуль робить його необмеженим.

max-vartrack-expr-depth
Встановлює максимальну кількість рівнів рекурсії під час спроби відобразити імена змінних або
налагоджувати тимчасові значення виразів. Це замінює час компіляції на більше
повна інформація про налагодження. Якщо для цього параметра встановлено занадто низький рівень, значення виразів
доступний і може бути представлений в налагоджувальної інформації, може в кінцевому підсумку не використовуватися;
встановлення цього вище може дозволити компілятору знайти більш складне налагодження
виразів, але час компіляції та використання пам’яті може зрости. За замовчуванням – 12.

min-nondebug-insn-uid
Використовуйте uids, починаючи з цього параметра, для nondebug insns. Діапазон нижче
Параметр зарезервований виключно для налагоджувальних insns, створених
-fvar-tracking-assignments, але debug insns можуть отримати (не перекриваються) uid вище
якщо зарезервований діапазон вичерпано.

ipa-sra-ptr-фактор росту
IPA-SRA замінює покажчик на агрегат лише одним або кількома новими параметрами
коли їх сукупний розмір менший або дорівнює ipa-sra-ptr-фактор росту разів
розмір вихідного параметра покажчика.

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

sched-pressure-algorithm
Виберіть між двома доступними реалізаціями -fsched-тиск. Алгоритм 1
є оригінальною реалізацією і, швидше за все, запобігти вказівкам
переупорядковується. Алгоритм 2 був розроблений як компроміс між
відносно консервативний підхід за алгоритмом 1 і досить агресивний
підхід, використаний планувальником за замовчуванням. Він більшою мірою покладається на наявність a
звичайний реєстровий файл і точні класи тиску в регістрі. Побачити haifa-sched.c
у джерелах GCC для більш детальної інформації.

Вибір за замовчуванням залежить від цілі.

max-slsr-can-scan
Встановіть максимальну кількість наявних кандидатів, які будуть розглянуті під час пошуку
основа для нового кандидата прямолінійного зменшення сили.

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

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

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

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

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

-no-integrated-cpp
Виконайте попередню обробку як окремий прохід перед компіляцією. За замовчуванням виконується GCC
попередня обробка як невід'ємна частина токенізації та синтаксичного аналізу вхідних даних. Якщо цей варіант
надається відповідна мовна передня частина (Cc1, cc1plusабо cc1obj для C, C++,
і Objective-C, відповідно) замість цього викликається двічі, один раз лише для попередньої обробки
і один раз для фактичної компіляції попередньо обробленого введення. Ця опція може бути корисною
в поєднанні з -B or -обгортка параметри для визначення альтернативного препроцесора або
виконати додаткову обробку джерела програми між звичайною попередньою обробкою і
складання.

-D ім'я
Попередньо визначити ім'я як макрос, з визначенням 1.

-D ім'я=визначення
Вміст визначення маркуються та обробляються так, ніби вони з’явилися під час
третій етап перекладу в а #визначити директива. Зокрема, визначення буде
скорочено за допомогою вбудованих символів нового рядка.

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

Якщо ви хочете визначити функціональний макрос у командному рядку, напишіть його аргумент
список з оточуючими дужками перед знаком рівності (якщо є). Дужки є
значуще для більшості оболонок, тому вам потрібно буде процитувати параметр. З sh та CSH,
-D'ім'я(аргументи...)=визначення' працює.

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

-U ім'я
Скасуйте будь-яке попереднє визначення ім'я, вбудований або забезпечений a -D варіант.

-undef
Не встановлюйте заздалегідь жодні макроси, специфічні для системи чи GCC. Стандарт наперед визначений
макроси залишаються визначеними.

-I реж
Додайте каталог реж до списку каталогів для пошуку заголовних файлів.
Довідники за ім -I шукаються до того, як стандартна система включає каталоги.
Якщо каталог реж є стандартним системним каталогом включення, параметр ігнорується
переконайтеся, що порядок пошуку за замовчуванням для системних каталогів і спеціальний режим
системних заголовків не переможеться. Якщо реж починається з "=", потім "=" буде
замінено на префікс sysroot; побачити --sysroot та -isysroot.

-o файл
Записати вихід до файл. Це те саме, що вказувати файл як другий не варіант
аргумент до cpp. ПКУ має іншу інтерпретацію другого аргументу без варіантів,
тому ви повинні використовувати -o щоб вказати вихідний файл.

-Стінка
Вмикає всі додаткові попередження, які є бажаними для звичайного коду. На даний момент це
is -Коментар, -Втриграфи, -Wmultichar і попередження про цілочисельне просування, що спричиняє a
зміна знака у виразах "#if". Зауважте, що багато попереджень препроцесора
увімкнені за замовчуванням і не мають можливості керувати ними.

-Коментар
-W коментарі
Попереджати щоразу, коли послідовність коментарів-початків /* з'являється в а /* коментар або будь-коли a
зворотний слеш-новий рядок з’являється в a // коментар. (Обидві форми мають однаковий ефект.)

-Втриграфи
Більшість триграфів у коментарях не можуть вплинути на зміст програми. Однак а
триграф, який утворює екранований новий рядок (??/ в кінці рядка) can, by
зміни місця початку або кінця коментаря. Тому лише триграфи, які б утворювали
екрановані символи нового рядка створюють попередження всередині коментаря.

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

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

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

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

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

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

#якщо визначено_макро_викликає_попередження
#endif

-Етикетки Wendif
Попереджати, коли an #else або #endif після них текст. Зазвичай це відбувається в
код форми

#якщо FOO
...
#інше FOO
...
#endif FOO

Друге і третє «FOO» мають бути в коментарях, але часто їх немає в старих програмах.
Це попередження ввімкнено за замовчуванням.

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

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

-w Вимкнути всі попередження, включаючи ті, які GNU CPP видає за замовчуванням.

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

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

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

Якщо не вказано явно (з -MT or -MQ), ім'я об'єктного файлу складається з
ім'я вихідного файлу з будь-яким суфіксом замінено суфіксом об'єктного файлу та будь-яким
провідні частини каталогу видалено. Якщо включено багато файлів, то правило таке
розділити на кілька рядків за допомогою \-новий рядок. Правило не має команд.

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

Проходження -M для водія має на увазі -E, і пригнічує попередження з неявним -w.

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

Це означає, що вибір кутових дужок або подвійних лапок в an #включати
Директива сама по собі не визначає, чи буде цей заголовок відображатися в -ММ
вихід залежностей. Це незначна зміна семантики порівняно з GCC версії 3.0 і
раніше.

-MF файл
При використанні з -M or -ММ, визначає файл для запису залежностей. Якщо ні -MF
надається комутатор, препроцесор надсилає правила туди, куди він надсилав би
попередньо оброблений вихід.

При використанні з параметрами драйвера -MD or -ММД, -MF перевизначає залежність за замовчуванням
вихідний файл.

-МГ У поєднанні з таким варіантом, як -M запит на створення залежностей, -МГ передбачає
відсутні заголовні файли створюються файлами і додає їх до списку залежностей без
викликаючи помилку. Ім'я файлу залежності береться безпосередньо з "#include"
директиву без передавання шляху. -МГ також пригнічує попередньо оброблений вихід, як a
відсутність заголовного файлу робить це марним.

Ця функція використовується для автоматичного оновлення make-файлів.

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

Це типовий вихід:

test.o: test.c test.h

test.h:

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

An -MT параметр встановить цільовий рядок, який ви вкажете. Якщо хочеш
кількох цілей, ви можете вказати їх як один аргумент -MT, або використовуйте декілька
-MT Варіанти.

Наприклад, -MT '$(objpfx)foo.o' може дати

$(objpfx)foo.o: foo.c

-MQ мета
Такий же, як -MT, але він цитує будь-які символи, які є особливими для Make.
-MQ '$(objpfx)foo.o' дає

$$(objpfx)foo.o: foo.c

Ціль за замовчуванням автоматично вводиться в лапки, як якщо б вона була задана разом -MQ.

-MD -MD еквівалентна -M -MF файл, крім цього -E не мається на увазі. Водій
визначає файл на основі того, чи є an -o надається варіант. Якщо так, драйвер використовує його
аргумент, але з суфіксом of .d, інакше він приймає назву вхідного файлу,
видаляє всі компоненти каталогу та суфікс і застосовує a .d суфікс.

If -MD використовується разом з -E, будь-який -o Перемикач розуміється для вказівки
вихідний файл залежностей, але якщо використовується без нього -E, кожен -o розуміється як вказівка ​​a
цільовий об'єктний файл.

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

-ММД
Люблю -MD за винятком згадки лише файлів заголовків користувача, а не системних файлів заголовків.

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

-fpch-попередній процес
Цей параметр дозволяє використовувати попередньо скомпільований заголовок разом із -E. У нього вставляється спец
"#pragma", "#pragma GCC pch_preprocess "ім'я файлу"" у виводі позначити місце
де було знайдено попередньо скомпільований заголовок, і його ім'я файлу. Коли -fпопередньо оброблено В
використання, GCC розпізнає цю "#pragma" і завантажує PCH.

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

Ви не повинні писати цю «#pragma» у власному коді, але редагувати її можна безпечно
ім'я файлу, якщо файл PCH доступний в іншому місці. Ім’я файлу може бути
абсолютне або може бути відносно поточного каталогу GCC.

-x c
-x C ++
-x Objective-C
-x асемблер із cpp
Вкажіть вихідну мову: C, C++, Objective-C або асемблера. Це не має нічого спільного
з відповідністю стандартам або розширеннями; він просто вибирає базовий синтаксис
очікувати. Якщо ви не вкажете жодного з цих параметрів, cpp виведе мову з файлу
розширення вихідного файлу: .c, . CC, .mабо .S. Деякі інші поширені розширення для
C++ і ассемблер також розпізнаються. Якщо cpp не розпізнає розширення, воно
розглядатиме файл як C; це найбільш загальний режим.

Примітка: Попередні версії cpp приймалися a -язик варіант, який вибрав обидва
мови та рівня відповідності стандартам. Цю опцію вилучено, тому що
це конфліктує з -l варіант.

-std =standard
-ансі
Вкажіть стандарт, якому повинен відповідати код. Наразі CPP знає про C
і стандарти C++; інші можуть бути додані в майбутньому.

standard може бути одним із:

"c90"
"c89"
"iso9899:1990"
Стандарт ISO C з 1990 року. c90 є звичайним скороченням для цієї версії
стандарт.

Команда -ансі опція еквівалентна -std=c90.

"iso9899:199409"
Стандарт C 1990 року зі змінами 1994 року.

"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
Переглянутий стандарт ISO C, опублікований у грудні 1999 року. До публікації це
був відомий як C9X.

"iso9899:2011"
"c11"
"c1x"
Переглянутий стандарт ISO C, опублікований у грудні 2011 року. До публікації це
був відомий як C1X.

"gnu90"
"gnu89"
Стандарт C 1990 року плюс розширення GNU. Це значення за замовчуванням.

"gnu99"
"gnu9x"
Стандарт C 1999 року плюс розширення GNU.

"gnu11"
"gnu1x"
Стандарт C 2011 року плюс розширення GNU.

"c++98"
Стандарт ISO C++ 1998 року з поправками.

"gnu++98"
Такий же як і -std=c++98 плюс розширення GNU. Це значення за замовчуванням для коду C++.

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

Крім того, -Я- забороняє використання каталогу поточного каталогу файлів як
перший каталог пошуку для "#include"файл"". Цей параметр не підтримується.

-ностдинк
Не шукайте заголовні файли в стандартних системних каталогах. Тільки каталоги
ви вказали з -I параметри (і каталог поточного файлу, якщо
відповідні) розшукуються.

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

-включати файл
Процес файл ніби "#include "file"" з'явився як перший рядок основного джерела
файл. Однак перший каталог шукав файл чи працює препроцесор
каталог замість of каталог, що містить основний вихідний файл. Якщо не знайдено
там він шукається в решті ланцюга пошуку "#include "..."" як
Normal.

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

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

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

-ідірафтер реж
Пошук реж для заголовних файлів, але зробіть це після всі каталоги, зазначені в -I і
стандартні системні каталоги вичерпані. реж розглядається як система включає
каталог. Якщо реж починається з "=", потім "=" буде замінено на sysroot
префікс; побачити --sysroot та -isysroot.

-іпрефікс префікс
Вказувати префікс як префікс для наступних -iз префіксом варіанти. Якщо префікс
представляє каталог, ви повинні включити final /.

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

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

-мультиліб реж
Скористайтесь реж як підкаталог каталогу, що містить цільові заголовки C++.

-ісистема реж
Пошук реж для заголовних файлів після всіх каталогів, зазначених у -I але перед
стандартні системні каталоги. Позначте його як системний каталог, щоб він отримав те саме
спеціальний режим, який застосовується до стандартних системних каталогів. Якщо реж починається
за допомогою "=", тоді "=" буде замінено префіксом sysroot; побачити --sysroot та
-isysroot.

- цитата реж
Пошук реж лише для заголовних файлів, запитуваних із "#include"файл""; вони не
шукав "#includeфайл>", перед усіма каталогами, зазначеними в -I і перед
стандартні системні каталоги. Якщо реж починається з "=", потім "=" буде замінено на
префікс sysroot; побачити --sysroot та -isysroot.

-fdirectives-only
Під час попередньої обробки обробляйте директиви, але не розгортайте макроси.

Поведінка опції залежить від -E та -fпопередньо оброблено Варіанти.

з -E, попередня обробка обмежується обробкою таких директив, як "#define",
"#ifdef" і "#error". Інші операції препроцесора, такі як розширення макросу та
перетворення триграфа не виконуються. Крім того, -dD варіант неявно
включений.

з -fпопередньо оброблено, попереднє визначення командного рядка та більшості вбудованих макросів
інвалід. Обробляються макроси, такі як "__LINE__", які залежать від контексту
нормально. Це дозволяє компілювати файли, попередньо оброблені за допомогою «-E
-fdirectives-only".

З обома -E та -fпопередньо оброблено, правила для -fпопередньо оброблено мати пріоритет. Це
дозволяє повну попередню обробку файлів, попередньо оброблених за допомогою «-E
-fdirectives-only".

-fdollars-in-identifiers
Прийняти $ в ідентифікаторах.

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

-fno-canonical-system-headers
Під час попередньої обробки не скорочуйте шляхи системних заголовків за допомогою канонікалізації.

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

-fпопередньо оброблено є неявним, якщо вхідний файл має одне з розширень .i, .ii or .mi.
Це розширення, які GCC використовує для попередньо оброблених файлів, створених за допомогою -зберігати темп.

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

-fdebug-cpp
Цей параметр корисний лише для налагодження GCC. При використанні з -E, скидає налагодження
інформація про карти розташування. Кожному маркеру у виводі передує дамп
карті, до якої належить його місцезнаходження. Дамп карти, що містить місцезнаходження маркера
було б:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"М": ;"E": ,"loc": }

При використанні без -E, ця опція не діє.

-ftrack-макророзширення[=рівень]
Відстежуйте розташування маркерів у макророзширеннях. Це дозволяє компілятору випромінювати
діагностика поточного стека розширення макросів, коли виникає помилка компіляції
макророзширення. Використання цієї опції споживає препроцесор і компілятор
більше пам'яті. The рівень Параметр можна використовувати для вибору рівня точності маркера
відстеження розташування, що зменшує споживання пам'яті, якщо це необхідно. Значення 0 of
рівень деактивує цю опцію, як ніби ні -ftrack-макророзширення був присутній на
командний рядок. Значення 1 відстежує розташування маркерів у деградованому режимі заради
мінімальні витрати на пам'ять. У цьому режимі всі токени, отримані в результаті розширення an
аргумент функціонального макросу мають те саме розташування. Значення 2 відстежує маркери
локації повністю. Це значення найбільше потребує пам’яті. Коли надається ця опція
немає аргументу, значення параметра за замовчуванням таке 2.

Зауважте, що -ftrack-macro-expansion=2 активовано за замовчуванням.

-fexec-charset=набір
Встановити набір символів виконання, який використовується для рядкових і символьних констант. За замовчуванням
це UTF-8. набір може бути будь-яке кодування, яке підтримується системною бібліотекою "iconv".
рутина.

-fwide-exec-charset =набір
Встановити широкий набір символів виконання, який використовується для широкого рядка та символьних констант.
За замовчуванням є UTF-32 або UTF-16, залежно від того, що відповідає ширині "wchar_t". Як
з -fexec-charset, набір може бути будь-яке кодування, яке підтримується системним "iconv"
бібліотечна рутина; однак у вас виникнуть проблеми з кодуваннями, які не підходять
саме в "wchar_t".

-finput-charset=набір
Встановити вхідний набір символів, який використовується для перекладу з набору символів введення
файл у вихідний набір символів, який використовується GCC. Якщо мова не вказана, або GCC
не можна отримати цю інформацію з локалі, за замовчуванням є UTF-8. Це може бути
перевизначено місцевим стандартом або цим параметром командного рядка. Наразі команда
Параметр рядка має пріоритет, якщо є конфлікт. набір може бути будь-яке кодування
підтримується системною бібліотечною процедурою "iconv".

-fworking-каталог
Увімкнути генерацію лінійних маркерів у виводі препроцесора, що дозволить компілятору
знати поточний робочий каталог на момент попередньої обробки. Коли ця опція є
увімкнено, препроцесор видаватиме після початкового маркера другий маркер
з поточним робочим каталогом, за яким слідують дві косі риски. GCC скористається цим
каталог, якщо він присутній у попередньо обробленому вводі, як каталог, створений як
поточний робочий каталог у деяких форматах налагоджувальної інформації. Цей варіант є
неявно ввімкнено, якщо ввімкнено інформацію про налагодження, але це можна заблокувати за допомогою
заперечену форму -fno-робочий-каталог, Якщо -P прапор присутній у команді
line, ця опція не має ефекту, оскільки жодні директиви "#line" не випускаються.

-fno-show-column
Не друкуйте номери стовпців у діагностиці. Це може знадобитися, якщо проводиться діагностика
сканується програмою, яка не розуміє номерів стовпців, наприклад
dejagnu.

-A присудок=відповідь
Складіть твердження з присудком присудок і відповісти відповідь. Ця форма є
віддає перевагу старшій формі -A присудок(відповідь), який досі підтримується, оскільки він
не використовує спеціальні символи оболонки.

-A -присудок=відповідь
Скасуйте твердження з присудком присудок і відповісти відповідь.

-dCHARS
ЧИСЛИ є послідовністю одного або кількох із наступних символів, і не має бути таким
передує пробіл. Інші символи інтерпретуються власне компілятором або
зарезервовані для майбутніх версій GCC, і тому ігноруються. Якщо вказати
персонажів, поведінка яких конфліктує, результат не визначено.

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

торкніться foo.h; cpp -dM foo.h

покаже всі заздалегідь визначені макроси.

Якщо ви використовуєте -дМ без того -E варіант -дМ трактується як синонім до
-fdump-rtl-mach.

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

N Люблю D, але видавати лише імена макросів, а не їх розширення.

I Вихід #включати директиви на додаток до результату попередньої обробки.

U Люблю D за винятком лише макросів, які розгортаються або чия визначеність перевіряється
у директивах препроцесора виводяться; вихід відкладається до використання або
тест макросу; і #undef директиви також виводяться для перевірених макросів, але
на той час не визначено.

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

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

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

-CC Не відкидайте коментарі, в тому числі під час розширення макросу. Це схоже -C, За винятком
що коментарі, що містяться в макросах, також передаються до вихідного файлу де
макрос розгорнутий.

Крім побічних ефектів -C варіант, -CC Параметр викликає всі C++-стилі
коментарі всередині макросу, які будуть перетворені в коментарі в стилі C. Це потрібно для запобігання згодом
використання цього макросу від ненавмисного коментування залишку вихідного рядка.

Команда -CC Параметр зазвичай використовується для підтримки коментарів lint.

-традиційний-cpp
Спробуйте наслідувати поведінку старомодних препроцесорів C, на відміну від ISO C
препроцесори.

-триграфи
Обробити триграфічні послідовності. Це трисимвольні послідовності, всі починаються з
??, які визначені ISO C як поодинокі символи. Наприклад, ??/ стенди
та цінності \, так '??/n' є символьною константою для нового рядка. За замовчуванням GCC ігнорує
триграфи, але в стандартних режимах він перетворює їх. Див -стандартний та -ансі
Варіанти.

Дев'ять триграфів та їх заміни

Триграф: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Заміна: [ ] { } # \ ^ | ~

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

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

-v Детальний режим. Роздрукуйте номер версії GNU CPP на початку виконання та
повідомити остаточну форму шляху включення.

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

-версія
-- версія
Роздрукуйте номер версії GNU CPP. За допомогою однієї тире перейдіть до попередньої обробки як зазвичай.
З двома рисками негайно вийдіть.

Проходження Опції до Асемблер
Ви можете передати параметри асемблеру.

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

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

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

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

ім'я файлу-об'єкта
Ім’я файлу, яке не закінчується на спеціальний розпізнаний суфікс, вважається ім’ям an
об'єктний файл або бібліотека. (Об’єктні файли відрізняються від бібліотек компоновщиком
відповідно до вмісту файлу.) Якщо зв'язування виконано, ці об'єктні файли використовуються як
вхід до компоновщика.

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

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

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

-статичний-лібазан
Коли -fsanitize=адреса Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти лібасан. Якщо лібасан доступна як спільна бібліотека, і
-статичний параметр не використовується, то це посилання на спільну версію лібасан.
Команда -статичний-лібазан параметр спрямовує драйвер GCC на посилання лібасан статично, без
обов'язково статично зв'язуючи інші бібліотеки.

-статичний-лібцан
Коли -fsanitize=потік Опція використовується для зв'язування програми, драйвера GCC
автоматично посилається проти лібцан. Якщо лібцан доступна як спільна бібліотека, і
-статичний параметр не використовується, то це посилання на спільну версію лібцан.
Команда -статичний-лібцан параметр спрямовує драйвер GCC на посилання лібцан статично, без
обов'язково статично зв'язуючи інші бібліотеки.

-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 все ще працює, але бібліотечний аспект ні.

--no-sysroot-суфікс
Для деяких цілей суфікс додається до кореневого каталогу, зазначеного з --sysroot,
залежно від інших використаних параметрів, щоб, наприклад, можна було знайти заголовки в
dir/suffix/usr/include замість dir/usr/include. Ця опція вимикає додавання
такого суфікса.

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

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

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

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

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

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

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

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

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Увімкніть або вимкніть обхідний шлях для помилки ARM Cortex-A53 під номером 835769. Це
буде включати вставку інструкції NOP між інструкціями пам'яті та 64-бітними
інструкції множення-нагромадження цілого числа.

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

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

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

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

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

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

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

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

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

crc Увімкнути розширення CRC.

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

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

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

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

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

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

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

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

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

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

-mno-soft-cmpsf
Для порівняння з плаваючою комою з одинарною точністю випустіть інструкцію «fsub» та перевірте
прапори. Це швидше, ніж порівняння програмного забезпечення, але може отримати неправильні результати
у присутності NaNs, або коли порівнюються два різних малих числа так, що
їх різниця обчислюється як нуль. За замовчуванням є -msoft-cmpsf, Яка використовує
повільніше, але IEEE-сумісне порівняння програмного забезпечення.

-mstack-offset=Num
Встановіть зміщення між верхньою частиною стека та вказівником стека. Наприклад, значення 8
означає, що вісім байтів у діапазоні "sp+0...sp+7" можуть використовуватися функціями листка
без виділення стека. Цінності, крім 8 or 16 не перевірені і навряд чи
працювати. Зауважте також, що ця опція змінює ABI; складання програми з a
відмінне зміщення стека, ніж бібліотеки, з якими були скомпільовані, зазвичай не так
працювати. Цей параметр може бути корисним, якщо ви хочете оцінити, чи є інший зміщення стека
дасть вам кращий код, але фактично використовувати інше зміщення стека для створення
робочих програм, рекомендується налаштувати ланцюг інструментів з відповідними
--with-stack-offset=Num варіант.

-mno-round-найближчий
Зробіть планувальник припущенням, що для режиму округлення встановлено усечення. The
за замовчуванням -mround-найближчий.

-mlong-дзвінки
Якщо в атрибуті не вказано інше, припустимо, що всі виклики можуть бути поза межами
діапазон зміщення інструкцій "b" / "bl", а отже, завантажити адресу функції
в реєстр перед виконанням (інакше прямого) виклику. Це значення за замовчуванням.

-mкороткі дзвінки
Якщо в атрибуті не вказано інше, припустимо, що всі прямі виклики знаходяться в діапазоні
інструкцій "b" / "bl", тому використовуйте ці інструкції для прямих викликів. The
за замовчуванням -mlong-дзвінки.

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

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

режим можна встановити одне з таких значень:

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

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

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

Int Це режим, який використовується для виконання цілих обчислень у FPU, наприклад цілого числа
множити, або цілочисельне множити-накопичувати.

За замовчуванням - -mfp-mode=абонент

-мноспліт-лохи
-мно-постинк
-мно-постмодифікувати
Налаштування генерації коду, які вимикають, відповідно, розділення 32-бітових завантажень,
генерування адрес після інкременту та генерування адрес після модифікації. The
за замовчуванням є msplit-lohi, -mpost-inc та -mpost-змінити.

-mnovec-подвійний
Змініть бажаний режим SIMD на режим SIM. За замовчуванням є -mvect-подвійний, Яка використовує
Режим DI як бажаний режим SIMD.

-max-vect-align=Num
Максимальне вирівнювання для типів векторного режиму SIMD. Num може бути 4 або 8. За замовчуванням є
8. Зверніть увагу, що це зміна ABI, незважаючи на те, що багато інтерфейсів бібліотечних функцій є такими
не впливає, якщо вони не використовують векторні режими SIMD у місцях, які впливають на розмір та/або
вирівнювання відповідних типів.

-msplit-vecmove-early
Розділений вектор переміщується на переміщення одного слова перед перезавантаженням. Теоретично це може дати
краще розподіляти реєстри, але поки що, здається, зазвичай все було навпаки.

-m1reg-Реджо
Вкажіть регістр для збереження константи -1, що робить завантаження невеликим негативним
константи та певні бітові маски швидше. Допустимі значення для Реджо він має r43 та r63,
які визначають використання цього регістру як фіксованого регістра, і ніхто, що означає, що ні
для цього використовується реєстр. За замовчуванням є -m1reg-немає.

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
Запобігайте зміні порядку інструкцій у пролозі функції або злиття
ці інструкції з інструкціями в тілі функції. Це означає, що все
функції починаються з розпізнаваного набору інструкцій (або фактично однієї на вибір
з невеликого набору різних прологів функцій), і цю інформацію можна використовувати для
знайти початок функцій всередині виконуваного фрагмента коду. За замовчуванням є
-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 ARMV8-A, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.

-march=armv8-a+crc дозволяє генерувати код для архітектури ARMv8-A разом з
додаткові розширення CRC32.

-березня = рідний змушує компілятор автоматично визначати архітектуру збірки
комп'ютер. Наразі ця функція підтримується лише в GNU/Linux, і не у всіх
архітектури визнані. Якщо автоматичне визначення не вдалось, параметр не має
ефект

-mtune=ім'я
Цей параметр визначає назву цільового процесора ARM, для якого GCC має налаштуватися
продуктивність коду. Для деяких реалізацій ARM може бути краща продуктивність
отримані за допомогою цієї опції. Допустимі назви: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, рука 7 м, arm7d, arm7dm, ARM7DI, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, рука710т, рука720т, рука740т, міцна рука, сильна рука110, сильна рука1100,
сильна рука1110, arm8, arm810, arm9, arm9e, arm920, рука920т, рука922т, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, рука940т, arm9tdmi, arm10tdmi, рука1020т, arm1026ej-s,
arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, ARM1176JZF-S, кора-a5, кора-a7, кора-a8, кора-a9,
кора-a15, кора-a53, кора головного мозку-r4, кора головного мозку-r4f, кора головного мозку-r5, кора головного мозку-r7, кора-m4,
кора-m3, кора-m1, кора-m0, кора-m0plus, marvell-pj4, xscale, iwmmxt, iwmmxt2,
ep9312, fa526, fa626, FA606TE, FA626TE, fmp626, FA726TE.

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

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

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

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

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

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

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

If -msoft-float вказано, це визначає формат значень з плаваючою комою.

Якщо вибране обладнання з плаваючою комою включає розширення NEON (наприклад -mfpu=неоновий),
зверніть увагу, що операції з плаваючою комою не генеруються шляхом автоматичної векторизації GCC
якщо не -funsafe-math-optimizations також уточнюється. Це тому, що обладнання NEON
не повністю реалізує стандарт IEEE 754 для арифметики з плаваючою комою (в
певні деноральні значення розглядаються як нульові), тому використання інструкцій NEON може
призводять до втрати точності.

-mfp16-format=ім'я
Вкажіть формат типу "__fp16" з плаваючою комою з напівточністю. Допустимі
імена є ніхто, тобто та альтернатива; за замовчуванням ніхто, у цьому випадку "__fp16"
тип не визначений.

-mstructure-size-boundary=n
Розміри всіх конструкцій і об’єднань округляються до кратного числа
біти, встановлені цією опцією. Допустимі значення: 8, 32 і 64. Значення за замовчуванням
різниться для різних ланцюжків інструментів. Для цільового ланцюга інструментів COFF значенням за замовчуванням є
8. Значення 64 допускається лише в тому випадку, якщо базовий ABI підтримує його.

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

-mabort-on-noreturn
Згенеруйте виклик функції "abort" в кінці функції "noreturn". це є
виконується, якщо функція намагається повернути.

-mlong-дзвінки
-mno-long-cales
Вказує компілятору виконувати виклики функцій, спочатку завантажуючи адресу
функцію в регістр, а потім виконати виклик підпрограми для цього регістра. Це
комутатор потрібен, якщо цільова функція знаходиться за межами 64-мегабайтної адресації
діапазон версії інструкції виклику підпрограми на основі зміщення.

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

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

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

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

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

t0
.ascii "arm_poke_function_name", 0
.вирівняти
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, №4

Виконуючи зворотне трасування стека, код може перевірити значення "pc", що зберігається в "fp +
0". Якщо функція трасування дивиться на розташування "pc - 12", а верхні 8 бітів
set, то ми знаємо, що безпосередньо перед цим є ім'я функції
розташування та має довжину "((pc[-3]) & 0xff000000)".

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

-mtpcs-фрейм
Згенеруйте кадр стека, який відповідає стандарту виклику процедури Thumb для
всі функції, які не є листовими. (Листкова функція - це функція, яка не викликає жодної іншої
функції.) За замовчуванням є -mno-tpcs-frame.

-mtpcs-leaf-frame
Згенеруйте кадр стека, який відповідає стандарту виклику процедури Thumb для
всі функції листка. (Лукова функція - це функція, яка не викликає жодних інших функцій.)
За замовчуванням - -mno-apcs-leaf-frame.

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

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

-mtp=ім'я
Вкажіть модель доступу для покажчика локального сховища потоку. Дійсними є моделі
м'який, який генерує виклики "__aeabi_read_tp", cp15, який отримує потік
вказівник безпосередньо з "cp15" (підтримується архітектурою arm6k), і автоматичний, Яка
використовує найкращий доступний метод для вибраного процесора. Налаштування за замовчуванням
автоматичний.

-mtls-dialect=діалект
Вкажіть діалект для доступу до локального сховища потоку. Два діалектs є
підтримується---гну та gnu2, гну діалект вибирає оригінальну схему GNU для
підтримка локальних і глобальних динамічних моделей TLS. The gnu2 діалект вибирає GNU
схема дескриптора, яка забезпечує кращу продуктивність для спільних бібліотек. GNU
Схема дескриптора сумісна з оригінальною схемою, але вимагає нової
підтримка асемблера, компонувальника та бібліотеки. Початкова та локальна моделі exec TLS є
ця опція не впливає і завжди використовує оригінальну схему.

-mword-переміщення
Згенеруйте абсолютні переміщення лише для значень розміру зі словом (тобто R_ARM_ABS32). Це
увімкнено за замовчуванням для цільових пристроїв (uClinux, SymbianOS), де завантажувач часу виконання нав’язує
це обмеження та коли -fpic or -fPIC вказано.

-mfix-cortex-m3-ldrd
Деякі ядра Cortex-M3 можуть викликати пошкодження даних, коли інструкції "ldrd" з
використовуються регістри призначення та бази, що перекриваються. Цей параметр дозволяє уникнути генерації
ці інструкції. Цей параметр увімкнено за замовчуванням, коли -mcpu=кортекс-m3 is
вказано.

-муніципальний доступ
-mno-unaligned-access
Вмикає (або вимикає) читання та запис 16- і 32-розрядних значень з адрес
які не вирівняні за 16 або 32 бітами. За замовчуванням неузгоджений доступ вимкнено для всіх
попередній ARMv6 і всі архітектури ARMv6-M, а також увімкнено для всіх інших архітектур. Якщо
неузгоджений доступ не ввімкнено, тоді будуть доступні слова в упакованих структурах даних
по байту.

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

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

-mrestrict-it
Обмежує генерацію IT-блоків, щоб відповідати правилам ARMv8. IT-блоки можуть
містять лише одну 16-бітну інструкцію з вибраного набору інструкцій. Це
Параметр увімкнено за замовчуванням для режиму Thumb ARMv8.

AVR Опції

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

-mmcu=mcu
Вкажіть архітектуру набору інструкцій Atmel AVR (ISA) або тип MCU.

За замовчуванням для цієї опції є@tie{}"avr2".

GCC підтримує такі пристрої AVR та ISA:

"avr2"
"Класичні" пристрої з програмною пам'яттю до 8@tie{}КіБ. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
"Класичні" пристрої з програмною пам'яттю до 8@tie{}КіБ і з "MOVW"
інструкція. mcu@tie{}= "ata5272", "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{}= "ata5505", "atmega16u2", "atmega32u2",
"atmega8u2", "attiny1634", "attiny167", "at90usb162", "at90usb82".

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

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

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

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

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

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

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

"avrxmega6"
Пристрої "XMEGA" з програмною пам'яттю понад 128@tie{}КіБ. mcu@краватка{}=
"atmxt540s", "atmxt540sreva", "atxmega128a3", "atxmega128a3u", "atxmega128b1",
"atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4", "atxmega192a3",
"atxmega192a3u", "atxmega192c3", "atxmega192d3", "atxmega256a3", "atxmega256a3b",
"atxmega256a3bu", "atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3",
"atxmega384d3".

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

"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» і
заглушки лінкера нижче.

-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{}бітів покажчика стека.

-Waddr-space-convert
Попереджають про перетворення між адресними просторами в тому випадку, коли отримана адреса
простір не міститься у вхідному адресному просторі.

"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{}КіБ програмної пам’яті.

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

The optional огляд визначає кремнієву редакцію цільового Blackfin
процесор. Увімкнено будь-які обхідні шляхи, доступні для цільової силіконової версії.
If огляд is ніхто, обхідні шляхи не ввімкнені. Якщо огляд is будь-якийВсі
увімкнено обхідні шляхи для цільового процесора. Макрос "__SILICON_REVISION__".
визначається двома шістнадцятковими цифрами, що представляють головне та другорядне числа в
ревізія кремнію. Якщо огляд is ніхто, "__SILICON_REVISION__" не визначено.
If огляд is будь-який, "__SILICON_REVISION__" визначено як 0xffff. Якщо це
необов'язковий огляд не використовується, GCC припускає останню відому силіконову версію
цільовий процесор Blackfin.

GCC визначає макрос препроцесора для вказаного центральний процесор. Для bfin-ельф ланцюжок інструментів,
цей параметр призводить до того, що апаратний BSP, наданий libgloss, буде пов’язаний у if -msim is
не дано.

Без цієї опції, bf532 за замовчуванням використовується як процесор.

Зауважте, що підтримка для bf561 є неповним. Для bf561, є лише макрос препроцесора
визначений.

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

-momit-leaf-frame-pointer
Не зберігайте покажчик кадру в регістрі для листових функцій. Це дозволяє уникнути
інструкції для збереження, налаштування та відновлення покажчиків кадрів і створює додатковий регістр
доступний у функціях листа. Варіант -fomit-кадр-покажчик знімає рамку
покажчик для всіх функцій, що може ускладнити налагодження.

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

-mno-specld-аномалія
Не генеруйте зайвий код, щоб запобігти спекулятивним навантаженням.

-mcsync-аномалія
Якщо ввімкнено, компілятор гарантує, що згенерований код не містить CSYNC або
Інструкції SSYNC занадто швидко після умовних розгалужень. Якщо використовується ця опція,
"__WORKAROUND_SPECULATIVE_SYNCS" визначено.

-mno-csync-аномалія
Не генеруйте додатковий код, щоб запобігти появі інструкцій CSYNC або SSYNC
незабаром після умовної гілки.

-mlow-64k
Коли ввімкнено, компілятор може вільно використовувати знання, що цілий
Програма вміщається в низькі 64 КБ пам'яті.

-mno-low-64k
Припустимо, що програма довільно велика. Це значення за замовчуванням.

-mstack-check-l1
Виконайте перевірку стека, використовуючи інформацію, поміщену uClinux в пам’ять L1
ядро

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

-mno-id-shared-library
Створіть код, який не передбачає використання спільних бібліотек на основі ідентифікатора. Це
за замовчуванням.

-mleaf-id-shared-library
Згенеруйте код, який підтримує спільні бібліотеки за допомогою методу ID бібліотеки, але припускає
що ця бібліотека або виконуваний файл не буде пов’язуватися з іншими спільними бібліотеками ідентифікаторів.
Це дозволяє компілятору використовувати швидший код для переходів і викликів.

-mno-leaf-id-shared-library
Не думайте, що компілюваний код не буде зв’язуватися з жодними спільними бібліотеками ідентифікаторів.
Більш повільний код генерується для insns переходу та виклику.

-mshared-library-id=n
Вказує ідентифікаційний номер спільної бібліотеки на основі ідентифікатора, що компілюється.
Зазначення значення 0 генерує більш компактний код; вказуючи інші значення сил
виділення цього номера поточній бібліотеці, але більше не простору або часу-
ефективніше, ніж пропускати цей варіант.

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

-mno-sep-data
Створіть код, який передбачає, що сегмент даних слідує за текстовим сегментом. Це
за замовчуванням.

-mlong-дзвінки
-mno-long-cales
Вказує компілятору виконувати виклики функцій, спочатку завантажуючи адресу
функцію в регістр, а потім виконати виклик підпрограми для цього регістра. Це
комутатор потрібен, якщо цільова функція знаходиться за межами 24-бітового діапазону адресації
зміщена версія інструкції виклику підпрограми.

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

-mfast-fp
Посилання на швидку бібліотеку з плаваючою комою. Ця бібліотека розслабляє IEEE
правила стандарту з плаваючою комою для перевірки введених даних щодо не-число (NAN), у
інтерес до виконання.

-minline-plt
Увімкнути вбудовування записів PLT у викликах функцій до невідомих функцій
зв’язати локально. Без цього ефекту немає -mfdpic.

- багатоядерний
Створіть окрему програму для багатоядерних процесорів Blackfin. Цей варіант викликає
правильні стартові файли та сценарії посилань, які підтримують багатоядерність, які будуть використовуватися, а також визначає
макрос "__BFIN_MULTICORE". Його можна використовувати тільки з -mcpu=bf561[-огляд].

Цей параметр можна використовувати з -mcorea or -mcoreb, який вибирає одну програму-
модель програмування на ядро. Без -mcorea or -mcoreb,
Використовується одно-додаткова/двоядерна модель програмування. У цій моделі основний
функцію Core B слід назвати як "coreb_main".

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

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

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

-msdram
Створіть окрему програму для SDRAM. Використовуються правильні стартові файли та сценарії посилань
щоб помістити програму в SDRAM, і визначено макрос "__BFIN_SDRAM". The
Завантажувач повинен ініціалізувати SDRAM перед завантаженням програми.

-micplb
Припустимо, що ICPLB увімкнено під час виконання. Це впливає на певну аномалію
обхідні шляхи. Для цілей Linux за замовчуванням передбачається, що ICPLB увімкнено; для
автономні програми за замовчуванням вимкнено.

C6X Опції

-березень=ім'я
Це визначає назву цільової архітектури. GCC використовує це ім’я для визначення
які інструкції він може видавати під час генерації коду складання. Допустимі
назви: c62x, c64x, c64x+, c67x, c67x+, c674x.

-big-endian
Згенеруйте код для цілі з великим порядком.

-mlittle-endian
Згенеруйте код для цілі з малим порядком байтів. Це значення за замовчуванням.

-msim
Виберіть файли запуску та скрипт компоновника, які підходять для симулятора.

-msdata=за замовчуванням
Помістіть невеликі глобальні та статичні дані в .neardata розділ, на який вказує
реєстр «В14». Помістіть невеликі неініціалізовані глобальні та статичні дані в файл .bss розділ
який примикає до .neardata розділ. Помістіть невеликі дані лише для читання в файл .rodata
розділ. Для великих фрагментів даних використовуються відповідні розділи .fardata, .далеко
та .конст.

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

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

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

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

Дарвін Опції

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

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

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

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

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

Каталог фреймворків — це каталог із фреймворками. Рамка - це а
каталог з a Заголовки та / або PrivateHeaders каталогу, що міститься безпосередньо в ньому
закінчується .рамка. Ім'я фреймворка є ім'ям цього каталогу без урахування
.рамка. Заголовки, пов’язані з фреймворком, знаходяться в одному з цих двох
довідники, с Заголовки обшукується першим. Субфреймворк - це каркас
каталог, який знаходиться у фреймворку Frameworks каталог. Включає підрамник
заголовки можуть з’являтися лише в заголовку фреймворка, який містить підфреймворк, або
у заголовку субфреймворка. Два підфреймворка є братами і сестрами, якщо вони зустрічаються в
той самий каркас. Субфреймворк не повинен мати те саме ім'я, що і фреймворк; а
у разі порушення видається попередження. Наразі підрамник не може мати
підрамки; у майбутньому механізм може бути розширений для підтримки цього. The
стандартні рамки можна знайти в /Система/Бібліотека/Фреймворки та
/ Library / Frameworks. Приклад включення виглядає як "#include ",
де Рамки позначає назву каркаса і заголовок.h зустрічається в
PrivateHeaders or Заголовки каталог.

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

– здогадався
Видавати інформацію про налагодження для символів, які використовуються. Для формату налагодження stabs,
це дозволяє -feliminate-unused-debug-symbols. За замовчуванням увімкнено.

-gfull
Видавати інформацію про налагодження для всіх символів і типів.

-mmacosx-версія-мін=версія
Найстарішою версією MacOS X, на якій буде працювати цей виконуваний файл, є версія. Типовий
значення версія включають 10.1, 10.2 і 10.3.9.

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

-mkernel
Увімкнути режим розробки ядра. The -mkernel набори опцій -статичний, -fno-загальний,
-fno-use-cxa-atexit, -fno-виключення, -fno-non-call-exceptions, -fapple-kext,
-fno-слабий та -fno-rtti де це застосовно. Цей режим також встановлюється -mno-altivec,
-msoft-float, -fno-вбудований та -mlong-гілка для цілей PowerPC.

-mone-byte-bool
Замінити значення за замовчуванням для бул так що 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 створює динамічну бібліотеку замість виконуваного файлу when
зв’язування за допомогою Дарвіна libtool команда

-force_cpusubtype_ALL
Це призводить до того, що вихідний файл GCC має ALL підтип, замість контрольованого
-mcpu or - марш варіант.

-дозволений_клієнт ім'я_клієнта
-ім'я_клієнта
-сумісність_версія
-Поточна версія
-мертва_смуга
-файл залежностей
-dylib_файл
-dylinker_install_name
-динамічний
-список_експортованих_символів
- список файлів
-flat_простір імен
-force_flat_простір імен
-headerpad_max_install_names
-база_зображення
-у цьому
-ім'я_інсталяції
-keep_private_externs
-багатомодульний
-множення_визначено
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-нопребінд
-noseglinkedit
-pagezero_size
-передв'язка
-prebind_all_twolevel_modules
-private_bundle
-relocs_лише_читання
-сектальний
-сектооб'єкти символи
- навіщо навантажувати
-seg1addr
-сектотворити
-сектооб'єкти символи
-секторний
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_name_file
-seglinkedit
-сегпрот
-segs_read_only_addr
-segs_read_write_addr
-одномодульний
-статичний
-під_бібліотека
-суб_парасолька
-дворівневий простір імен
-парасолька
-невизначений
-список_неекспортованих_символів
-weak_reference_misparches
-що завантажено
Ці параметри передаються лінкеру Дарвіна. Довідкова сторінка Darwin Linker описує
їх детально.

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

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

-mno-soft-float
-msoft-float
Використовуйте (не використовуйте) апаратні інструкції з плаваючою комою
операції. Коли -msoft-float вказано, функціонує в libgcc.a використовуються для виконання
операції з плаваючою комою. Якщо вони не замінені підпрограмами, які емулюють
операції з плаваючою комою або скомпільовані таким чином, щоб викликати такі емуляції
підпрограм, ці підпрограми видають операції з плаваючою комою. Якщо ви збираєтесь для
Alpha без операцій з плаваючою комою, ви повинні переконатися, що бібліотека створена
щоб їм не дзвонити.

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

-mfp-reg
-mno-fp-regs
Згенеруйте код, який використовує (не використовує) набір регістрів з плаваючою комою. -mno-fp-regs
мається на увазі -msoft-float. Якщо набір регістрів з плаваючою комою не використовується, з плаваючою комою
операнди передаються в цілих регістрах, як якщо б вони були цілими числами і з плаваючою комою
результати передаються в $0 замість $f0. Це нестандартна послідовність викликів, тому
будь-яка функція з аргументом з плаваючою комою або значенням, що повертається, викликаним зібраним кодом
з -mno-fp-regs також має бути скомпільований з цим параметром.

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

-миее
Архітектура Alpha реалізує апаратне забезпечення з плаваючою комою, оптимізоване для максимуму
продуктивність. Здебільшого він відповідає стандарту IEEE з плаваючою комою. однак,
для повної відповідності необхідна допомога з програмним забезпеченням. Ця опція генерує код
повністю IEEE-сумісний код крім який неточний прапор не підтримується (див. нижче).
Якщо цей параметр увімкнено, макрос препроцесора "_IEEE_FP" визначається під час
компіляція. Отриманий код менш ефективний, але здатний правильно підтримувати
денормалізовані числа та виняткові значення IEEE, такі як не-число та плюс/мінус
нескінченність. Інші компілятори Alpha називають цю опцію -ieee_with_no_neexact.

-міее-з-неточним
Це схоже -миее крім згенерованого коду також підтримує IEEE неточний прапор.
Увімкнення цієї опції призводить до того, що згенерований код реалізує повністю сумісний IEEE
математика. На додаток до "_IEEE_FP", "_IEEE_FP_EXACT" визначається як макрос препроцесора.
У деяких альфа-реалізаціях отриманий код може виконуватися значно повільніше, ніж
код, згенерований за замовчуванням. Оскільки існує дуже мало коду, який залежить від
неточний прапор, зазвичай не слід вказувати цей параметр. Викликають інші компілятори Alpha
цей варіант -ieee_with_neexact.

-mfp-trap-mode=режим пастки
Цей параметр визначає, які пастки, пов’язані з плаваючою комою, увімкнено. Інша Альфа
компілятори називають цю опцію -fptm режим пастки. Режим пастки можна встановити на один з чотирьох
значення:

n Це налаштування за замовчуванням (звичайне). Єдині пастки, які ввімкнені, це
ті, які не можна вимкнути в програмному забезпеченні (наприклад, поділ на нульову пастку).

u На додаток до пасток, включених за допомогою n, також увімкнено уловлювачі нижнього потоку.

su Люблю u, але інструкції позначено як безпечні для завершення програмного забезпечення (див
Посібник з архітектури Alpha для деталей).

Sui Люблю su, але також увімкнено неточні пастки.

-mfp-rounding-mode=режим округлення
Вибір режиму округлення IEEE. Інші компілятори Alpha називають цю опцію -fprm
режим округлення, режим округлення може бути одним з:

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

m Округлюємо до мінус нескінченності.

c Режим рубленого округлення. Числа з плаваючою комою округлюються до нуля.

d Режим динамічного округлення. Поле в регістрі керування з плаваючою комою (fpcrСм.
Довідковий посібник з архітектури Alpha) керує діючим режимом округлення. C
бібліотека ініціалізує цей регістр для округлення до плюс нескінченності. таким чином,
якщо ваша програма не змінює файл fpcr, d відповідає округлінню до плюса
нескінченність.

-mtrap-precision=пастка-точність
В архітектурі Alpha пастки з плаваючою комою є неточними. Це означає без
програмне забезпечення неможливо відновити з плаваючої пастки та програми
виконання зазвичай потрібно припинити. GCC може генерувати код, який може допомогти
обробники пасток операційної системи для визначення точного розташування, яке викликало а
пастка з плаваючою комою. Залежно від вимог програми, різні
можна вибрати рівні точності:

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

f Точність функції. Обробник пастки може визначити функцію, яка викликала a
виняток з плаваючою комою.

i Точність інструкції. Обробник пастки може визначити точну інструкцію
викликав виняток з плаваючою комою.

Інші компілятори Alpha надають еквівалентні параметри, які називаються -scope_safe та
-resumption_safe.

-mieee-відповідний
Цей параметр позначає згенерований код як відповідний IEEE. Ви не повинні використовувати цю опцію
якщо ви також не вкажете -mtrap-precision=i і будь-який -mfp-trap-mode=su or
-mfp-trap-mode = sui. Єдиний його ефект - випускати лінію .flag 48 у функції
пролог згенерованого файлу збірки.

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

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

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

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-мно-фікс
-ммакс
-мно-макс
Вкажіть, чи повинен GCC генерувати код для використання додаткових BWX, CIX, FIX і MAX
набори інструкцій. За замовчуванням використовуються набори інструкцій, які підтримуються центральним процесором
тип, зазначений через -mcpu= опція або ЦП, на якому було побудовано GCC, якщо такого немає
вказано.

-mfloat-vax
-mfloat-ieee
Створіть код, який використовує (не використовує) арифметику VAX F і G з плаваючою комою
одинарної та подвійної точності IEEE.

-mexplicit-relocs
-mno-explicit-relocs
Старші асемблери Alpha не передбачали жодного способу генерувати переміщення символів, окрім як через
макроси асемблера. Використання цих макросів не дозволяє оптимально планувати інструкції.
GNU binutils починаючи з версії 2.12 підтримує новий синтаксис, який дозволяє компілятору
чітко позначте, які переміщення мають застосовуватися до яких інструкцій. Цей варіант є
в основному корисний для налагодження, оскільки GCC виявляє можливості асемблера, коли він
будується і відповідно встановлює значення за замовчуванням.

-msmall-data
-mlarge-data
Коли -mexplicit-relocs фактично, доступ до статичних даних здійснюється через gp-відносний
переїзди. Коли -msmall-data використовується, в них розміщуються об’єкти довжиною 8 байт або менше
a невеликий дані область (розділи ".sdata" і ".sbss") і доступ до них здійснюється через 16-бітовий
переміщення з реєстру $gp. Це обмежує розмір невеликої області даних до
64 КБ, але дозволяє отримати прямий доступ до змінних за допомогою однієї інструкції.

За замовчуванням - -mlarge-data. За допомогою цього параметра область даних обмежена трохи нижче
2 Гб. Програми, які вимагають більше 2 Гб даних, повинні використовувати "malloc" або "mmap".
розподілити дані в купі, а не в сегменті даних програми.

Під час створення коду для спільних бібліотек, -fpic мається на увазі -msmall-data та -fPIC
мається на увазі -mlarge-data.

-msmall-text
-великий текст
Коли -msmall-text використовується, компілятор припускає, що код всієї програми
(або спільна бібліотека) поміщається в 4 МБ, і, таким чином, доступний за допомогою інструкції розгалуження.
Коли -msmall-data Якщо використовується, компілятор може припустити, що всі локальні символи спільні
однакове значення $gp, і таким чином зменшується кількість інструкцій, необхідних для функції
дзвонити з 4 до 1.

За замовчуванням - -великий текст.

-mcpu=тип_процесора
Встановіть набір команд і параметри планування команд для типу машини
тип_процесора. Ви можете вказати або EV назва стилю або відповідний номер мікросхеми.
GCC підтримує параметри планування для сімейства процесорів EV4, EV5 і EV6 і
вибирає значення за замовчуванням для набору інструкцій із вказаного вами процесора. Якщо
Ви не вказуєте тип процесора, GCC за замовчуванням визначає процесор, на якому
був побудований компілятор.

Підтримувані значення для тип_процесора він має

ev4
ev45
21064
Планується як EV4 і не має розширень набору інструкцій.

ev5
21164
Планується як EV5 і не має розширень набору інструкцій.

ev56
21164a
Планується як EV5 і підтримує розширення BWX.

pca56
21164pc
21164PC
Планується як EV5 і підтримує розширення BWX і MAX.

ev6
21264
Планується як EV6 і підтримує розширення BWX, FIX і MAX.

ev67
21264a
Планується як EV6 і підтримує розширення BWX, CIX, FIX і MAX.

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

-mtune=тип_процесора
Встановіть лише параметри планування інструкцій для типу машини тип_процесора,
набір інструкцій не змінено.

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

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

Допустимі варіанти для час він має

номер
Десяткове число, що представляє тактовий цикл.

L1
L2
L3
основний
Компілятор містить оцінки кількості тактів для "типових" EV4 &
Апаратне забезпечення EV5 для кешів рівня 1, 2 і 3 (також називаються Dcache, Scache і
Bcache), а також в основну пам'ять. Зверніть увагу, що L3 дійсний лише для EV5.

FR30 Опції

Ці параметри визначені спеціально для порту FR30.

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

-мно-лсім
Припустимо, що підтримка під час виконання була надана, і тому немає необхідності включати
бібліотека симулятора (libsim.a) у командному рядку компонувальника.

LIF Опції

-mgpr-32
Використовуйте лише перші 32 регістри загального призначення.

-mgpr-64
Використовуйте всі 64 регістри загального призначення.

-mfpr-32
Використовуйте лише перші 32 регістри з плаваючою комою.

-mfpr-64
Використовуйте всі 64 регістри з плаваючою комою.

-mhard-float
Використовуйте інструкції з обладнання для операцій з плаваючою комою.

-msoft-float
Використовуйте бібліотечні підпрограми для операцій з плаваючою комою.

-malloc-cc
Динамічно розподіляти регістри коду умов.

-mfixed-cc
Не намагайтеся динамічно виділити регістри коду умов, використовуйте лише "icc0" і
"fcc0".

-mdword
Змініть ABI на використання подвійних слів insns.

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

-mподвійний
Використовуйте подвійні інструкції з плаваючою комою.

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

-ммедіа
Використовуйте інструкції зі ЗМІ.

-мно-медіа
Не використовуйте інструкції з медіа.

-ммуладд
Використовуйте інструкції множення та додавання/віднімання.

-мно-муладд
Не використовуйте інструкції множення та додавання/віднімання.

-mfdpic
Виберіть FDPIC ABI, який використовує дескриптори функцій для представлення покажчиків
функції. Без будь-яких опцій, пов’язаних із PIC/PIE, це означає -fPIE. З -fpic or
-fpie, передбачається, що записи GOT і невеликі дані знаходяться в межах 12-бітового діапазону від GOT
базова адреса; з -fPIC or -fPIE, GOT зміщення обчислюються з 32 бітами. З
bfin-ельф ціль, цей параметр передбачає -msim.

-minline-plt
Увімкнути вбудовування записів PLT у викликах функцій до невідомих функцій
зв’язати локально. Без цього ефекту немає -mfdpic. За замовчуванням увімкнено, якщо
оптимізація для швидкості та компіляція для спільних бібліотек (тобто, -fPIC or -fpic), або
коли варіант оптимізації, наприклад -О3 або вище присутній у командному рядку.

-mTLS
Припустимо великий сегмент TLS під час генерації локального коду потоку.

-mtls
Не припускайте великий сегмент TLS під час генерації локального коду потоку.

-mgprel-ro
Увімкнути використання переміщень "GPREL" в FDPIC ABI для даних, які, як відомо, знаходяться в
розділи лише для читання. Він увімкнено за замовчуванням, за винятком -fpic or -fpie: незважаючи на
це може допомогти зменшити глобальну таблицю зміщень, вона обмінює 1 інструкцію на 4. З
-fPIC or -fPIE, він обмінює 3 інструкції на 4, одну з яких може використовувати декілька
символів, і це уникає необхідності запису GOT для посилання на символ, тому це
більше шансів на перемогу. якщо це не так, -mno-gprel-ro можна використовувати для його вимкнення.

-multilib-library-pic
Посилання на бібліотеки зображень (бібліотека, а не FD). Це мається на увазі -mlibrary-pic, так само
як мимо -fPIC та -fpic без -mfdpic. Ви ніколи не повинні використовувати його явно.

-mlinked-fp
Дотримуйтесь вимоги EABI, щоб завжди створювати покажчик кадру, коли кадр стека
виділяється. Цей параметр увімкнено за замовчуванням і його можна вимкнути за допомогою
-mno-linked-fp.

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

- злоякісні мітки
Спробуйте вирівняти мітки до 8-байтової межі, вставивши NOP в попередній пакет.
Цей параметр діє лише тоді, коли ввімкнено пакування VLIW. Це не створює нового
пакети; він просто додає NOP до існуючих.

-mlibrary-pic
Згенеруйте незалежний від позиції код EABI.

-macc-4
Використовуйте лише перші чотири регістри накопичувача носія.

-macc-8
Використовуйте всі вісім регістрів накопичувача носія.

-mpack
Упакуйте інструкції VLIW.

-мно-пакет
Не пакуйте інструкції VLIW.

-мно-прапори
Не позначайте перемикачі ABI в e_flags.

-mcond-хід
Увімкнути використання вказівок умовного переміщення (за замовчуванням).

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

-mno-cond-ход
Вимкніть використання інструкцій умовного переміщення.

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

-mscc
Увімкнути використання інструкцій умовного набору (за замовчуванням).

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

-mno-scc
Вимкніть використання інструкцій умовного набору.

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

-mcond-exec
Увімкнути використання умовного виконання (за замовчуванням).

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

-mno-cond-exec
Вимкнути використання умовного виконання.

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

-mvliw-філія
Запустіть пропуск, щоб упакувати гілки в інструкції VLIW (за замовчуванням).

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

-mno-vliw-філія
Не запускайте пропуск для упаковки гілок в інструкції VLIW.

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

-mmulti-cond-exec
Увімкнути оптимізацію "&&" і "||" в умовному виконанні (за замовчуванням).

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

-mno-multi-cond-exec
Вимкнути оптимізацію «&&» та «||» в умовному виконанні.

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

-mnested-cond-exec
Увімкнути вкладені умовні оптимізації виконання (за замовчуванням).

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

-mno-nested-cond-exec
Вимкнути вкладені умовні оптимізації виконання.

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

-moptimize-membar
Цей перемикач видаляє зайві інструкції "membar" з коду, створеного компілятором.
Він включений за замовчуванням.

-mno-optimize-membar
Цей перемикач вимикає автоматичне видалення зайвих інструкцій "membar" з
згенерований код.

-mtomcat-статистика
Заставте газ роздрукувати статистику котів.

-mcpu=центральний процесор
Виберіть тип процесора, для якого потрібно генерувати код. Можливі значення frv, fr550,
кіт, fr500, fr450, fr405, fr400, fr300 та простий.

GNU / Linux Опції

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

-mglibc
Використовуйте бібліотеку GNU C. Це значення за замовчуванням, крім увімкненого *-*-linux-*uclibc* та
*-*-linux-*android* цілі.

-muclibc
Використовуйте бібліотеку uClibc C. Це увімкнено за замовчуванням *-*-linux-*uclibc* цілі.

-мбіонічний
Використовуйте бібліотеку Bionic C. Це увімкнено за замовчуванням *-*-linux-*android* цілі.

-мандоїд
Скомпілювати код, сумісний з платформою Android. Це увімкнено за замовчуванням
*-*-linux-*android* цілі.

Під час компіляції цей параметр вмикається -мбіонічний, -fPIC, -fno-виключення та -fno-rtti by
за замовчуванням. Під час підключення ця опція змушує драйвер GCC передавати параметри, специфічні для Android
до компонувальника. Нарешті, ця опція викликає макрос препроцесора "__ANDROID__".
визначений.

-tno-android-cc
Вимкнути ефекти компіляції -мандоїд, тобто не вмикати -мбіонічний, -fPIC,
-fno-виключення та -fno-rtti за замовчуванням

-tno-android-ld
Вимкнути ефекти зв’язування -мандоїд, тобто передати стандартні параметри підключення Linux до
лінкер.

H8 / 300 Опції

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

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

-мх Згенеруйте код для H8/300H.

-РС Згенеруйте код для H8S.

-мн Згенеруйте код для H8S та H8/300H у звичайному режимі. Цей перемикач необхідно використовувати
або з -мх or -РС.

-ms2600
Згенеруйте код для H8S/2600. Цей перемикач необхідно використовувати з -РС.

-mexr
Розширені регістри зберігаються в стеку перед виконанням функції з монітором
атрибут. Опція за замовчуванням -mexr. Ця опція дійсна лише для цілей H8S.

-mno-exr
Розширені регістри не зберігаються в стеку до виконання функції з монітором
атрибут. Опція за замовчуванням -mno-exr. Ця опція дійсна лише для цілей H8S.

-м'ята32
Зробіть дані "int" 32-бітовими за замовчуванням.

-злоякісний-300
На H8/300H та H8S використовуйте ті самі правила вирівнювання, що й для H8/300. За замовчуванням
для H8/300H і H8S є вирівнювання довгих і плаваючих на 4-байтових кордонах.
-злоякісний-300 змушує їх вирівняти за 2-байтовими межами. Цей варіант не має ефекту
на H8/300.

HPPA Опції

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

-березень=архітектурного типу
Згенеруйте код для вказаної архітектури. Вибір для архітектурного типу він має
1.0 для PA 1.0, 1.1 для PA 1.1, і 2.0 для процесорів PA 2.0. Звертатися до
/usr/lib/sched.models на системі HP-UX, щоб визначити правильний варіант архітектури
для вашої машини. Код, скомпільований для архітектур з нижчим номером, працює на вищих
пронумеровані архітектури, але не навпаки.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Синоніми слова -березень=1.0, -березень=1.1 та -березень=2.0 відповідно.

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

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

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

-mdisable-indexing
Заборонити компілятору використовувати режими адреси індексації. Це швидше уникає деяких
незрозумілі проблеми під час компіляції MIG-генерованого коду під MACH.

-mno-space-regs
Створіть код, який передбачає, що ціль не має проміжних регістрів. Це дозволяє GCC
генерувати швидші непрямі виклики та використовувати немасштабовані режими адреси індексу.

Такий код підходить для систем і ядер PA рівня 0.

-mfast-indirect-calls
Створіть код, який передбачає, що виклики ніколи не перетинають межі простору. Це дозволяє GCC
видавати код, який виконує швидші непрямі виклики.

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

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який не може використовувати розподільник регістрів. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-mlong-load-store
Генеруйте завантаження з 3 команд і зберігайте послідовності, як іноді вимагає HP-UX 10
компонувальник. Це еквівалентно +k опцію для компіляторів HP.

-mportable-runtime
Використовуйте конвенції портативних викликів, запропоновані HP для систем ELF.

-mgas
Дозволити використання директив асемблера, які розуміє лише GAS.

-mschedule=тип процесора
Код розкладу відповідно до обмежень для типу машини тип процесора. Вибір
та цінності тип процесора він має 700 7100, 7100LC, 7200, 7300 та 8000. Відноситься до
/usr/lib/sched.models у системі HP-UX, щоб визначити правильний варіант планування
ваша машина. Розклад за замовчуванням такий 8000.

-mlinker-opt
Увімкніть перехід оптимізації в компоновщику HP-UX. Зауважте, що це викликає символічне налагодження
неможливо. Це також викликає помилку в компонувальниках HP-UX 8 і HP-UX 9, в яких вони
видавати фіктивні повідомлення про помилки під час підключення деяких програм.

-msoft-float
Створити вихідні дані, що містять бібліотечні виклики для з плаваючою комою. Увага! необхідний
бібліотеки доступні не для всіх цілей HPPA. Зазвичай об'єкти
використовується звичайний компілятор C для машини, але це неможливо зробити безпосередньо в крос-
компіляція. Ви повинні зробити власні заходи, щоб забезпечити відповідну бібліотеку
функції для крос-компіляції.

-msoft-float змінює умову виклику у вихідному файлі; тому це лише
корисно, якщо ви компілюєте всі програми з цією опцією. Зокрема, потрібно
скласти libgcc.a, бібліотека, яка постачається з GCC, с -msoft-float для цього
працювати.

-msio
Згенеруйте попередньо визначене "_SIO" для серверного введення введення. За замовчуванням є -mwsio. Це породжує
попередньо визначає "__hp9000s700", "__hp9000s700__" і "_WSIO" для робочої станції IO.
Ці параметри доступні під HP-UX і HI-UX.

-mgnu-ld
Використовуйте параметри, характерні для GNU ld. Це минає - поділилися до ld при будівництві спільного
бібліотека. Це значення за замовчуванням, коли GCC налаштовано, явно чи неявно, за допомогою
Компонувальник GNU. Цей параметр не впливає на які ld називається; це змінює лише те, що
параметри передаються до нього ld, ld що називається визначається
--з-ld параметр configure, шлях пошуку програми GCC і, нарешті, користувач PATH.
Компонувальник, який використовується GCC, може бути надрукований за допомогою який `gcc -print-prog-name=ld`, це
Опція доступна лише на 64-розрядній HP-UX GCC, тобто налаштована з
hppa*64*-*-hpux*.

-mhp-ld
Використовуйте параметри, характерні для HP ld. Це минає -b до ld при створенні спільної бібліотеки
і проходить +Прийняти Невідповідність типу до ld за всіма посиланнями. Це значення за замовчуванням, якщо GCC є
налаштований, явно чи неявно, за допомогою компоновщика HP. Цей параметр не впливає
який ld називається; він змінює лише параметри, які йому передаються ld, ld
що називається визначається --з-ld параметр configure, пошук програми GCC
шлях і, нарешті, користувач PATH. Компонувальник, який використовується GCC, може бути надрукований за допомогою
який `gcc -print-prog-name=ld`. Ця опція доступна лише на 64-розрядній моделі HP-UX
GCC, тобто налаштований з hppa*64*-*-hpux*.

-mlong-дзвінки
Згенеруйте код, який використовує довгі послідовності викликів. Це гарантує, що дзвінок завжди доступний
щоб досягти заглушок, згенерованих компонувальником. За замовчуванням генеруються довгі виклики лише тоді, коли
відстань від місця виклику до початку функції або блоку перекладу, як
випадок може бути, перевищує попередньо визначений ліміт, встановлений типом гілки, що використовується. The
обмеження для звичайних викликів становлять 7,600,000 240,000 2.0 і XNUMX XNUMX байт відповідно для PA XNUMX
і архітектури PA 1.X. Сибвиклики завжди обмежені 240,000 XNUMX байт.

Відстані вимірюються від початку функцій при використанні
-ffunction-секції або при використанні -mgas та -mno-portable-runtime опції
разом під HP-UX з компонувальником SOM.

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

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

-munix=unix-std
Згенеруйте попередні визначення компілятора та виберіть стартовий файл для зазначеного стандарту UNIX.
Вибір для unix-std він має 93, 95 та 98. 93 підтримується всіма версіями HP-UX.
95 доступний на HP-UX 10.10 і новіших версіях. 98 доступний на HP-UX 11.11 і новіших версіях.
Значення за замовчуванням: 93 для HP-UX 10.00, 95 для HP-UX 10.10 хоча до 11.00, а 98
для HP-UX 11.11 і новіших версій.

-munix=93 надає ті самі попередні визначення, що й GCC 3.3 та 3.4. -munix=95 забезпечує
додаткові попередні визначення для "XOPEN_UNIX" і "_XOPEN_SOURCE_EXTENDED", а також початковий файл
unix95.o. -munix=98 надає додаткові попередні визначення для "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" і "_INCLUDE_XOPEN_SOURCE_500",
і стартовий файл unix98.o.

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

Бібліотечний код, який призначений для роботи з більш ніж одним стандартом UNIX, повинен перевірити,
встановити та відновити змінну __xpg4_extended_mask по мірі необхідності. Більшість програмного забезпечення GNU
не надає цієї можливості.

-nolibdld
Придушити створення параметрів посилання для пошуку libdld.sl, коли -статичний опція
зазначено на HP-UX 10 і новіших версіях.

-статичний
Реалізація HP-UX setlocale в libc залежить від libdld.sl. Там
не є архівною версією libdld.sl. Таким чином, коли -статичний вказана опція,
Для вирішення цієї залежності потрібні спеціальні параметри посилання.

На HP-UX 10 і новіших версіях драйвер GCC додає необхідні параметри для підключення
libdld.sl, коли -статичний вказана опція. Це призводить до того, що отриманий двійковий файл
бути динамічним. На 64-бітному порту компонувальники за замовчуванням генерують динамічні двійкові файли
будь який випадок. The -nolibdld параметр можна використовувати, щоб запобігти додаванню драйвера GCC
ці параметри посилань.

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

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

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

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

Вибір для тип процесора є:

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

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

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

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

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

Pentiumpro
Процесор Intel Pentium Pro.

i686
При використанні з - марш, використовується набір інструкцій Pentium Pro, тому код виконується
на всіх мікросхемах сімейства i686. При використанні з -mtune, воно має те саме значення, що й
родової.

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

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

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

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

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

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

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

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.

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

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

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

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

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

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

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

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

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

bdver1
Процесори на базі ядер сімейства AMD 15h з підтримкою набору інструкцій x86-64. (Це
супернабори FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM і 64-розрядні розширення набору інструкцій.)

bdver2
15-ядерні процесори сімейства AMD з підтримкою набору інструкцій x86-64. (Це
супернабори BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM і 64-розрядні розширення набору інструкцій.)

bdver3
15-ядерні процесори сімейства AMD з підтримкою набору інструкцій x86-64. (Це
супернабори BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM і 64-розрядні розширення набору інструкцій.

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

btver2
Процесори на основі 16-годових ядер AMD Family з підтримкою набору інструкцій x86-64. Це
включає MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX і 64-розрядні розширення набору інструкцій.

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

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

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

c3-2
ЦП VIA C3-2 (Nehemiah/C5XL) з підтримкою набору інструкцій MMX і SSE. (Немає
для цього чіпа реалізовано планування.)

геоде
Вбудований процесор AMD Geode з MMX і 3DNow! підтримка набору інструкцій.

-mtune=тип процесора
Налаштуйтеся на тип процесора все, що стосується згенерованого коду, крім ABI
і набір доступних інструкцій. При виборі конкретного тип процесора розклад
що підходить для цього конкретного чіпа, компілятор не генерує жодного коду
який не може працювати на типі машини за замовчуванням, якщо ви не використовуєте a -березень=тип процесора варіант.
Наприклад, якщо GCC налаштовано для i686-pc-linux-gnu, тоді -mtune=pentium4 генерує
код, який налаштований для Pentium 4, але все ще працює на машинах i686.

Вибір для тип процесора такі ж, як для - марш. В додаток, -mtune підтримує
додатковий вибір для тип процесора:

родової
Створюйте код, оптимізований для найпоширеніших процесорів IA32/AMD64/EM64T. Якщо ви
знати ЦП, на якому буде виконуватися ваш код, то вам слід використовувати відповідний
-mtune or - марш варіант замість -mtune=загальний. Але, якщо не знаєш
саме те, що будуть мати користувачі ЦП вашої програми, то вам слід використовувати це
варіант.

Оскільки нові процесори розгортаються на ринку, поведінка цього параметра
зміниться. Тому, якщо ви оновлюєте GCC до новішої версії, генерація коду
керований цим параметром, зміниться відповідно до найбільших процесорів
поширений на момент випуску цієї версії GCC.

Немає ніякого -march=загальний варіант, тому що - марш вказує набір інструкцій
компілятор може використовувати, і немає загального набору інструкцій, застосовного до всіх
процесори. У контрасті, -mtune вказує на процесор (або, у цьому випадку,
колекція процесорів), для яких оптимізовано код.

-mcpu=тип процесора
Застарілий синонім до -mtune.

-mfpmath=блок
Створити арифметику з плаваючою комою для вибраної одиниці блок. Вибір для блок є:

387 Використовуйте стандартний співпроцесор 387 з плаваючою комою, присутній на більшості мікросхем
і емулювали інакше. Код, скомпільований з цією опцією, працює майже скрізь.
Тимчасові результати обчислюються з 80-бітовою точністю замість точності
визначений типом, що призводить до дещо інших результатів порівняно з більшістю
інші чіпси. Побачити -флоат-магазин для більш детального опису.

Це вибір за замовчуванням для компілятора i386.

ESS Використовуйте скалярні інструкції з плаваючою комою, наявні в наборі інструкцій SSE. Це
Набір інструкцій підтримується Pentium III і новішими мікросхемами, а також в лінійці AMD
від чіпів Athlon-4, Athlon XP і Athlon MP. Попередня версія SSE
Набір інструкцій підтримує лише арифметику одинарної точності, отже, подвійний і
Арифметика розширеної точності все ще виконується за допомогою 387. Пізніша версія є
тільки в чіпах Pentium 4 і AMD x86-64, також підтримує арифметику подвійної точності.

Для компілятора i386 необхідно використовувати -березень=тип процесора, -мссе or -msse2 перемикає на
увімкніть розширення SSE та зробіть цю опцію ефективною. Для компілятора x86-64,
ці розширення ввімкнені за замовчуванням.

Отриманий код має бути значно швидшим у більшості випадків і
уникнути проблем числової нестабільності коду 387, але може порушити деякі існуючі
код, який очікує, що тимчасові файли становлять 80 біт.

Це вибір за замовчуванням для компілятора x86-64.

sse,387
sse+387
обидва
Спробуйте використати обидва набори інструкцій одночасно. Це ефективно подвоює
кількість доступних регістрів, а на мікросхемах з окремими виконавчими блоками по 387
і SSE - ресурси виконання. Використовуйте цю опцію з обережністю, оскільки вона залишається
експериментальний, оскільки розподільник регістрів GCC не моделює окремо
функціональні одиниці добре, що призводить до нестабільної роботи.

-masm=діалект
Виведіть інструкції зі складання за допомогою 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, і тому інструкція не потрібна
емулювання. Ці інструкції не створюються, якщо ви також не використовуєте
-funsafe-math-optimizations перемикач.

-злоякісний-подвійний
-mno-align-double
Контролюйте, чи GCC вирівнює змінні "double", "long double" та "long long" на a
межа з двох слів або межа з одного слова. Вирівнювання "подвійних" змінних за двома словами
boundary створює код, який працює дещо швидше на Pentium за рахунок більшого
пам'ять.

На 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". Тому їх немає
бінарно-сумісний із кодом, скомпільованим без цього перемикача.

-млонг-подвійний-64
-млонг-подвійний-80
Ці перемикачі керують розміром типу «довгий подвійний». Розмір 64 біта робить
"long double" тип еквівалентний типу "double". Це значення за замовчуванням для Bionic C
бібліотека

Увага! якщо ви перевизначите значення за замовчуванням для цільового ABI, це змінить розмір
структур і масивів, що містять змінні "long double", а також змінюють
умова про виклик функцій для функцій, які беруть "long double". Тому їх немає
бінарно-сумісний із кодом, скомпільованим без цього перемикача.

-mlarge-data-threshold=поріг
Коли -mcmodel=середній вказано, об’єкти даних більше ніж поріг розміщуються в
великий розділ даних. Це значення має бути однаковим для всіх об’єктів, до яких пов’язано
двійковий файл і за замовчуванням 65535.

-mrtd
Використовуйте іншу конвенцію про виклик функцій, в якій функції, які приймають фіксований
кількість аргументів повертається з "ret кількість" інструкція, яка висуває свої аргументи
під час повернення. Це зберігає одну інструкцію в абоненті, оскільки в цьому немає потреби
наведіть туди аргументи.

Ви можете вказати, що окрема функція викликається з цією послідовністю викликів
атрибут функції stdcall. Ви також можете перевизначити -mrtd варіант за допомогою
атрибут функції cdecl.

Увага! ця умова виклику несумісна з тим, що зазвичай використовується в Unix,
тому ви не можете використовувати його, якщо вам потрібно викликати бібліотеки, скомпільовані за допомогою компілятора Unix.

Крім того, ви повинні надати прототипи функцій для всіх функцій, які беруть змінну
кількість аргументів (включаючи «printf»); інакше для генерується неправильний код
виклики цих функцій.

Крім того, якщо ви викликаєте функцію із занадто великою кількістю, результатом буде серйозно неправильний код
аргументи. (Як правило, додаткові аргументи нешкідливо ігноруються.)

-mregparm=Num
Контролюйте, скільки регістрів використовується для передачі цілих аргументів. За замовчуванням ні
регістри використовуються для передачі аргументів, і можна використовувати щонайбільше 3 регістри. Ти можеш
керувати цією поведінкою для певної функції за допомогою атрибута function regparm.

Увага! якщо ви використовуєте цей перемикач, і Num відмінний від нуля, то ви повинні побудувати всі модулі
з тим же значенням, включаючи будь-які бібліотеки. Це включає системні бібліотеки та
модулі запуску.

-msseregparm
Використовуйте конвенції про передачу регістрів SSE для аргументів із плаваючою та подвійною величиною та значень, що повертаються.
Ви можете керувати цією поведінкою для певної функції за допомогою атрибута function
серегпарм.

Увага! якщо ви використовуєте цей перемикач, ви повинні створити всі модулі з однаковим значенням,
включаючи будь-які бібліотеки. Це включає системні бібліотеки та модулі запуску.

-mvect8-ret-in-mem
Повертати 8-байтові вектори в пам’яті замість регістрів MMX. Це увімкнено за замовчуванням
Solaris@tie{}8 і 9 і VxWorks, щоб відповідати ABI компіляторів Sun Studio до
версія 12. Пізніші версії компілятора (починаючи з Studio 12 Update@tie{}1) далі
ABI, що використовується іншими цілями x86, який є за умовчанням для Solaris@tie{}10 ​​і новіших версій.
Only використовуйте цю опцію, якщо вам потрібно залишатися сумісним із існуючим кодом, створеним
ті попередні версії компілятора або старіші версії GCC.

-mpc32
-mpc64
-mpc80
Встановіть 80387 точність з плаваючою комою на 32, 64 або 80 біт. Коли -mpc32 зазначено,
значущі результати операцій з плаваючою комою округляються до 24 біт
(одинарна точність); -mpc64 округлює значущі результати результатів з плаваючою комою
операції до 53 біт (подвійна точність) і -mpc80 округлює значущі результати
операцій з плаваючою комою до 64 біт (розширена подвійна точність), що є
за замовчуванням. Коли використовується цей параметр, виконуються операції з плаваючою комою з більш високою точністю
недоступний для програміста без явного встановлення керуючого слова FPU.

Встановлення округлення операцій з плаваючою комою на менше, ніж 80 біт за замовчуванням
швидкість деяких програм на 2% і більше. Зауважте, що деякі математичні бібліотеки припускають це
операції з плаваючою комою з розширеною точністю (80 біт) увімкнені за замовчуванням; рутини
у таких бібліотеках може зазнати значної втрати точності, як правило, через таку
називається «катастрофічне скасування», коли ця опція використовується для встановлення точності до
менша, ніж розширена точність.

-mstackrealign
Перевирівняти стек при вході. На Intel x86 -mstackrealign опція створює an
альтернативний пролог і епілог, які перебудовують стек часу виконання, якщо це необхідно. Це
підтримує змішування застарілих кодів, які зберігають 4-байтове вирівнювання стека з сучасними кодами, які
зберігайте 16-байтове вирівнювання стека для сумісності з SSE. Дивіться також атрибут
"force_align_arg_pointer", застосовний до окремих функцій.

-mpreferred-stack-boundary=Num
Спробуйте зберегти межу стека вирівняною з 2, підвищеною до Num межа байта. Якщо
-mpreferred-stack-boundary не вказано, за замовчуванням 4 (16 байт або 128 біт).

Увага! При генерації коду для архітектури x86-64 з розширеннями SSE
інвалід, -mpreferred-stack-boundary=3 можна використовувати для вирівнювання меж стека
до межі 8 байт. Оскільки x86-64 ABI вимагає вирівнювання стека 16 байт, це ABI
несумісний і призначений для використання в контрольованому середовищі, де є простір стека
важливе обмеження. Ця опція призведе до неправильного коду під час компіляції функцій
з 16-байтовим вирівнюванням стека (наприклад, функції зі стандартної бібліотеки).
з неправильним стеком. У цьому випадку інструкції SSE можуть призвести до неузгодженості пам’яті
пастки доступу. Крім того, аргументи змінних будуть оброблятися неправильно для 16 байт
вирівняні об’єкти (включаючи x87 long double і __int128), що призводить до неправильних результатів.
Ви повинні побудувати всі модулі з -mpreferred-stack-boundary=3, включаючи будь-які бібліотеки.
Це включає системні бібліотеки та модулі запуску.

-mincoming-stack-boundary=Num
Припустимо, що вхідний стек вирівняний за 2, піднятим до Num межа байта. Якщо
-mincoming-stack-boundary не вказано, той, який визначено
-mpreferred-stack-boundary використовується.

У Pentium і Pentium Pro значення "double" і "long double" мають бути вирівняні з
8-байтовий кордон (див -злоякісний-подвійний) або зазнають значної продуктивності під час виконання
штрафні санкції. У Pentium III тип даних розширення SIMD (SSE) "__m128" може
не працює належним чином, якщо він не вирівняний по 16 байтам.

Щоб забезпечити належне вирівнювання цих значень у стеку, межа стека має бути як
вирівнюється відповідно до вимог будь-якого значення, що зберігається в стеку. Далі, кожна функція
має бути згенеровано таким чином, щоб стек вирівнювався. Таким чином викликається функція
скомпільовано з вищою бажаною межею стека з функції, скомпільованої з нижчою
бажана межа стека, швидше за все, вирівнює стек. Рекомендується це
бібліотеки, які використовують зворотні виклики, завжди використовують налаштування за замовчуванням.

Це додаткове вирівнювання дійсно споживає додатковий простір у стеку і загалом збільшує код
розмір. Код, який чутливий до використання простору стека, наприклад, вбудовані системи та
ядра операційної системи, можливо, захочеться зменшити бажане вирівнювання до
-mpreferred-stack-boundary=2.

-мммх
-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
-mrtm
-мтбм
-мно-тбм
Ці перемикачі дозволяють або вимикають використання інструкцій у MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT, RTM або 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
як видалити непотрібні "zeroupper" внутрішні властивості.

-mprefer-avx128
Цей параметр наказує GCC використовувати 128-розрядні інструкції AVX замість 256-бітних AVX
інструкції в автовекторизаторі.

-mcx16
Цей параметр дозволяє GCC генерувати інструкції "CMPXCHG16B". «CMPXCHG16B» дозволяє
для атомарних операцій над 128-бітними типами даних з подвійним словом (або словом). Це
корисно для лічильників з високою роздільною здатністю, які можуть оновлюватися кількома процесорами (або
ядра). Ця інструкція генерується як частина атомарних вбудованих функцій: див
__sync Вбудовані or __атомний Вбудовані for details.

-msahf
Ця опція дозволяє генерувати інструкції «SAHF» у 64-розрядному коді. Ранній Intel
Процесори Pentium 4 з підтримкою Intel 64, до впровадження Pentium 4 G1 крок
у грудні 2005 р. не було інструкцій "LAHF" і "SAHF", які підтримувалися
AMD64. Це інструкції завантаження та збереження, відповідно, для певних прапорців стану.
У 64-розрядному режимі інструкція "SAHF" використовується для оптимізації "fmod", "drem" і
«залишок» вбудованих функцій; побачити Інше Вбудовані for details.

-mmovbe
Цей параметр дозволяє використовувати інструкцію "movbe" для реалізації "__builtin_bswap32"
і "__builtin_bswap64".

-mcrc32
Ця опція вмикає вбудовані функції "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" і "__builtin_ia32_crc32di" для
створити машинну інструкцію "crc32".

-mrecip
Ця опція дозволяє використовувати інструкції "RCPSS" і "RSQRTSS" (і їх векторизовані
варіанти "RCPPS" і "RSQRTPS") з додатковим кроком Ньютона-Рафсона для збільшення
точність замість "DIVSS" і "SQRTSS" (та їх векторизованих варіантів) для одиночного
точні аргументи з плаваючою комою. Ці інструкції генеруються лише тоді, коли
-funsafe-math-optimizations вмикається разом з -тільки кінцева математика та
-fno-trapping-math. Зауважте, що в той час як пропускна здатність послідовності вища за
пропускна здатність невзаємної команди, точність послідовності може бути
зменшено до 2 ulp (тобто обернене значення 1.0 дорівнює 0.99999994).

Зверніть увагу, що GCC реалізує "1.0f/sqrtf(х)" в термінах "RSQRTSS" (або "RSQRTPS").
з -швидка математика (або наведена вище комбінація параметрів) і не потрібна -mrecip.

Також зверніть увагу, що GCC випускає наведену вище послідовність з додатковим кроком Ньютона-Рафсона для
векторизований одиночний поділ і векторизований "sqrtf(х)" вже з -швидка математика
(або наведена вище комбінація параметрів) і не потрібна -mrecip.

-mrecip=вибирати
Цей параметр визначає, які інструкції взаємної оцінки можуть використовуватися. вибирати це
розділений комами список опцій, якому може передувати a ! щоб інвертувати параметр:

всі Увімкнути всі інструкції щодо оцінки.

дефолт
Увімкнути інструкції за замовчуванням, еквівалентні до -mrecip.

ніхто
Вимкнути всі інструкції щодо оцінки, еквівалентно -мно-рецепт.

DIV Увімкнути апроксимацію для скалярного поділу.

vec-div
Увімкнути апроксимацію для векторизованого поділу.

кв
Увімкнути апроксимацію для скалярного квадратного кореня.

vec-sqrt
Увімкнути апроксимацію для векторизованого квадратного кореня.

Так, наприклад, -mrecip=все,!sqrt дозволяє всі взаємні наближення,
крім квадратного кореня.

-mveclibabi=тип
Визначає тип ABI, який використовуватиметься для векторізації внутрішніх елементів за допомогою зовнішньої бібліотеки.
Підтримувані значення для тип він має svml для бібліотеки коротких векторів Intel і acml
для бібліотеки математичного ядра AMD. Щоб скористатися цією опцією, обидва -ftree-векторизувати та
-funsafe-math-optimizations має бути увімкнено, а також SVML або ACML ABI-сумісний
бібліотека повинна бути вказана під час посилання.

GCC наразі надсилає виклики до "vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102",
"vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2",
"vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
"vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104",
"vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4",
"vmlsSinh4", "vmlsSin4", "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4",
"vmlsAcosh4" і "vmlsAcos4" для відповідного типу функції, коли -mveclibabi=svml is
використано та "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
"__vrs4_log2f", "__vrs4_log10f" і "__vrs4_powf" для відповідного типу функції
коли -mveclibabi=acml використовується.

-mabi=ім'я
Згенеруйте код для вказаної конвенції про виклик. Допустимі значення є sysv та цінності
ABI, що використовується в GNU/Linux та інших системах, і ms для Microsoft ABI. The
за замовчуванням використовувати Microsoft ABI для націлювання на Microsoft Windows і SysV ABI
на всіх інших системах. Ви можете контролювати цю поведінку для певної функції за допомогою
атрибут функції ms_abi/sysv_abi.

-mtls-dialect=тип
Згенеруйте код для доступу до локального сховища потоку за допомогою гну or gnu2 конвенції. гну
– консервативний дефолт; gnu2 є більш ефективним, але він може додати компіляцію та запуск
вимоги часу, які не можуть бути задоволені для всіх систем.

-mpush-args
-mno-push-args
Використовуйте операції PUSH для збереження вихідних параметрів. Цей метод коротший і зазвичай
однаково швидкий, як і метод, що використовує операції SUB/MOV, і ввімкнено за замовчуванням. В деяких
випадки його вимкнення може підвищити продуктивність через покращення планування та скорочення
залежності.

-accumulate-outgoing-args
Якщо ввімкнено, обчислюється максимальна кількість місця, необхідного для вихідних аргументів
пролог функції. Це швидше на більшості сучасних процесорів через зменшення
залежностей, покращене планування та зменшене використання стека при бажаному стеку
boundary не дорівнює 2. Недоліком є ​​помітне збільшення розміру коду. Це
перемикач має на увазі -mno-push-args.

-mthreads
Підтримка потокобезпечної обробки винятків на MinGW. Програми, які покладаються на потокобезпечні
Обробка винятків повинна скомпілювати та зв’язати весь код з -mthreads варіант. Коли
компіляція, -mthreads визначає "-D_MT"; при створенні посилань він посилається в спеціальний потік
допоміжна бібліотека - lmingwthrd який очищає дані обробки винятків для кожного потоку.

-mno-align-stringops
Не вирівнюйте призначення операцій із вбудованим рядком. Цей перемикач зменшує код
розмір і покращує продуктивність у випадку, якщо призначення вже вирівняно, але GCC
не знає про це.

-minline-all-stringops
За замовчуванням GCC вбудовує рядкові операції лише тоді, коли відомо, що це місце призначення
вирівняно щонайменше за 4-байтовою межею. Це забезпечує більше вбудовування та збільшує код
розмір, але може покращити продуктивність коду, яка залежить від швидкого «memcpy», «strlen» і
«memset» для короткої довжини.

-minline-stringops-динамічно
Для рядкових операцій невідомого розміру використовуйте перевірки під час виконання з вбудованим кодом для small
блоки та бібліотека викликають великі блоки.

-mstringop-strategy=ALG
Перевизначення внутрішньої евристики прийняття рішень для конкретного алгоритму, для якого потрібно використовувати
операції вбудовування рядків. Допустимі значення для ALG є:

rep_byte
rep_4byte
rep_8byte
Розгорніть, використовуючи префікс i386 "rep" зазначеного розміру.

byte_loop
петля
unrolled_loop
Розгорніть у вбудований цикл.

libcall
Завжди використовуйте виклик бібліотеки.

-momit-leaf-frame-pointer
Не зберігайте покажчик кадру в регістрі для листових функцій. Це дозволяє уникнути
інструкції для збереження, налаштування та відновлення покажчиків кадрів і створює додатковий регістр
доступний у функціях листа. Варіант -fomit-leaf-frame-pointer знімає рамку
покажчик на функції листка, що може ускладнити налагодження.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Контролює, чи можна отримати доступ до змінних TLS зі зміщеннями від сегмента TLS
регістр (%gs для 32-розрядного, %fs для 64-розрядного), або чи має бути базовий покажчик потоку
додано. Чи є це правильним чи ні, залежить від операційної системи та чи вона
відображає сегмент, щоб охопити всю область TLS.

Для систем, які використовують бібліотеку GNU C, за замовчуванням увімкнено.

-msse2avx
-mno-sse2avx
Вкажіть, що асемблер повинен кодувати інструкції SSE з префіксом VEX. Варіант
-mavx вмикає це за замовчуванням.

-mfentry
-мно-фентрі
Якщо профілювання активне (-стор), поставте виклик лічильника профілювання перед прологом.
Примітка: на архітектурах x86 атрибут "ms_hook_prologue" неможливий у
момент для -mfentry та -стор.

-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 перемикачі підтримуються на додаток до вищезазначених на процесорах x86-64 у 64-розрядних версіях
Середовища.

-м32
-м64
-mx32
Згенеруйте код для 32-розрядного або 64-розрядного середовища. The -м32 встановлює параметри "int", "long",
і вказівник вводить до 32 біт, а також генерує код, який працює на будь-якій системі i386.

Команда -м64 параметр встановлює "int" на 32 біти, а "long" і типи вказівників на 64 біти, і
генерує код для архітектури x86-64. Для Дарвіна тільки -м64 варіант також
вимикає -fno-pic та -mdynamic-no-pic Варіанти.

Команда -mx32 Параметр встановлює типи "int", "long" і вказівники на 32 біти і генерує код
для архітектури x86-64.

-мно-червона-зона
Не використовуйте так звану «червону зону» для коду 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 Опції

Ці додаткові параметри доступні для цілей Microsoft Windows:

-mconsole
Ця опція вказує, що консольна програма має бути створена за допомогою інструкцій
компонувальник для встановлення типу підсистеми заголовка PE, необхідного для консольних програм.
Цей параметр доступний для цілей Cygwin і MinGW і ввімкнено за замовчуванням
ці цілі.

-mdll
Ця опція доступна для цілей Cygwin і MinGW. Він визначає, що DLL---a
динамічна бібліотека посилань --- має бути згенерована, що дозволить вибрати потрібну
об’єкт запуску та точка входу під час виконання.

-mnop-fun-dllimport
Ця опція доступна для цілей Cygwin і MinGW. У ньому вказується, що
Атрибут "dllimport" слід ігнорувати.

-mthread
Ця опція доступна для цілей MinGW. Він визначає, що потік, специфічний для MinGW
має бути використана підтримка.

- municode
Ця опція доступна для цілей MinGW-w64. Це викликає препроцесор "UNICODE".
макрос, який потрібно попередньо визначити, і вибирає код запуску, що підтримує Unicode.

-mwin32
Ця опція доступна для цілей Cygwin і MinGW. У ньому вказується, що типовий
Попередньо визначені макроси Microsoft Windows мають бути встановлені в препроцесорі, але цього не роблять
впливати на вибір бібліотеки часу виконання/код запуску.

-mwindows
Ця опція доступна для цілей Cygwin і MinGW. Він визначає, що графічний інтерфейс
програма має бути згенерована шляхом вказівки компоновщику встановити заголовок PE
відповідний тип підсистеми.

-fno-set-stack-executable
Ця опція доступна для цілей MinGW. Він визначає, що виконуваний прапор для
стек, який використовується вкладеними функціями, не встановлено. Це необхідно для запуску бінарних файлів
в режимі ядра Microsoft Windows, оскільки там User32 API, який використовується для встановлення
виконувані привілеї, недоступні.

-fwritable-relocation-rdata
Ця опція доступна для цілей MinGW і Cygwin. У ньому вказується, що переміщено-
дані з розділу лише для читання поміщаються в розділ .data. Це необхідно для старших
середовища виконання не підтримують модифікацію розділів .rdata для псевдопереміщення.

-mpe-aligned-commons
Ця опція доступна для цілей Cygwin і MinGW. У ньому вказується, що GNU
розширення до формату файлу PE, що дозволяє правильне вирівнювання COMMON змінних
слід використовувати при генерації коду. Він увімкнено за замовчуванням, якщо GCC виявляє, що
цільовий асемблер, знайдений під час налаштування, підтримує цю функцію.

Дивіться також під 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
Не генеруйте (або робіть) код асемблера для інформації про налагодження номера рядка DWARF 2.
Це може бути корисно, якщо не використовується ассемблер GNU.

- борошнисті стоп-біти
-mno-early-stop-bits
Дозвольте розмістити стоп-біти раніше, ніж безпосередньо перед інструкцією that
спрацював стоп-біт. Це може покращити планування інструкцій, але не завжди
роби це.

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який не може використовувати розподільник регістрів. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-mtls-size=tls-розмір
Вкажіть бітовий розмір негайних зміщень TLS. Допустимі значення: 14, 22 і 64.

-mtune=тип процесора
Налаштуйте планування інструкцій для конкретного ЦП, дійсні значення ітан,
ітан1, милосердя, ітан2 та mckinley.

-milp32
-mlp64
Згенеруйте код для 32-розрядного або 64-розрядного середовища. 32-розрядне середовище встановлює int,
long і вказівник на 32 біти. 64-розрядне середовище встановлює значення int на 32 біти та long і
покажчик на 64 біта. Це спеціальні позначки HP-UX.

-mno-sched-br-data-spec
-msched-br-спец.даних
(Вимкнути/Увімкнути) спекулятивне планування даних перед перезавантаженням. Це призводить до генерації
інструкції «ld.a» та відповідні інструкції перевірки («ld.c» / «chk.a»). The
за замовчуванням — «вимкнути».

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis)Увімкнути спекулятивне планування даних після перезавантаження. Це призводить до генерації
інструкції «ld.a» та відповідні інструкції перевірки («ld.c» / «chk.a»). The
за замовчуванням — «увімкнути».

-Мно-Шед-Контроль
-msched-control-spec
(Вимкнути/Увімкнути) контроль спекулятивного планування. Ця функція доступна лише під час
планування регіону (тобто перед перезавантаженням). Це призводить до генерації "ld.s"
інструкції та відповідні інструкції перевірки «чк.с». За замовчуванням є
'вимкнути'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis) Дозволяє спекулятивне планування інструкцій, які залежать від даних
спекулятивні навантаження перед перезавантаженням. Це ефективно тільки при -msched-br-спец.даних
увімкнено. За замовчуванням — «включити».

-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis) Дозволяє спекулятивне планування інструкцій, які залежать від даних
спекулятивні навантаження після перезавантаження. Це ефективно тільки при -msched-ar-data-spec
увімкнено. За замовчуванням — «включити».

-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis) Дозволяє спекулятивне планування інструкцій, які залежать від
контролювати спекулятивні навантаження. Це ефективно тільки при -msched-control-spec включений.
За замовчуванням — «включити».

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Якщо ввімкнено, спекулятивні інструкції вибираються для розкладу, лише якщо їх немає
інші варіанти на даний момент. Це робить використання спекуляцій на основі даних набагато ширшим
консервативний. За замовчуванням — «вимкнути».

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Якщо ввімкнено, контрольно-спекулятивні інструкції вибираються для розкладу лише за наявності
на даний момент іншого вибору немає. Це змушує використовувати контрольні спекуляції значним чином
більш консервативний. За замовчуванням — «вимкнути».

-mno-ched-count-spec-in ratical-path
-msched-count-spec-in-critical-path
Якщо ввімкнено, спекулятивні залежності враховуються під час обчислення
пріоритети інструкцій. Це робить використання спекуляцій дещо більшим
консервативний. За замовчуванням — «вимкнути».

-msched-spec-ldc
Використовуйте просту перевірку спекуляцій даних. Цей параметр увімкнено за замовчуванням.

-msched-control-spec-ldc
Використовуйте просту перевірку для контрольних спекуляцій. Цей параметр увімкнено за замовчуванням.

-msched-stop-bits-after-every-cycle
Після кожного циклу під час планування ставте стоп-біт. Цей параметр увімкнено за замовчуванням.

-msched-fp-mem-deps-zero-cost
Припустимо, що сховища і навантаження з плаваючою комою навряд чи викличуть конфлікт, коли
поміщені в ту саму групу навчання. Цей параметр вимкнено за замовчуванням.

-msel-sched-dont-check-control-spec
Створіть перевірки для контрольних спекуляцій у вибірковому плануванні. Цей прапор є
за замовчуванням вимкнено.

-msched-max-memory-insns=max-insns
Обмежте кількість insns пам’яті на групу інструкцій, надавши менший пріоритет
наступні insns пам'яті намагаються запланувати в тій самій групі інструкцій.
Часто корисно для запобігання конфліктам банку кешу. Значення за замовчуванням – 1.

-msched-max-memory-insns-hard-limit
Встановлює ліміт, визначений за msched-max-memory-insns жорстке обмеження, що забороняє більше
ніж це число в групі інструкцій. В іншому випадку межа «м’яка», тобто
що при досягненні ліміту перевага надається операціям без пам’яті, а з пам’яттю
операції все ще можуть бути заплановані.

LM32 Опції

Ці -m параметри визначені для архітектури LatticeMico32:

-barrel-shift-enabled
Увімкнути інструкції щодо зміни бочки.

-mdivid-увімкнено
Увімкнути інструкції ділення та модуля.

-mmultiply-увімкнено
Увімкнути інструкції множення.

-msign-extend-enabled
Увімкнути інструкції щодо розширення знака.

-з підтримкою muser
Увімкнути визначені користувачем інструкції.

M32C Опції

-mcpu=ім'я
Виберіть ЦП, для якого буде створено код. ім'я може бути одним із r8c для R8C/Tiny
серія, m16c для серії M16C (до /60), м32 см для серії M16C/80, або m32c
для серії M32C/80.

-msim
Вказує, що програма буде запущена на симуляторі. Це викликає альтернативу
Бібліотека часу виконання, яку потрібно підключити, яка підтримує, наприклад, файловий ввод-вивод. Ви не повинні
використовуйте цю опцію під час створення програм, які працюватимуть на реальному обладнанні; ти повинен
надайте власну бібліотеку часу виконання для будь-яких необхідних функцій введення-виводу.

-memregs=номер
Вказує кількість псевдореєстрів на основі пам’яті, які GCC використовує під час генерації коду.
Ці псевдореєстри використовуються як справжні регістри, тому між ними існує компроміс
Здатність GCC вмістити код у доступні регістри та зниження продуктивності
використання пам'яті замість регістрів. Зверніть увагу, що всі модулі в програмі повинні бути
скомпільовано з тим самим значенням для цього параметра. Через це ви не повинні використовувати це
варіант із стандартними бібліотеками часу виконання GCC.

M32R/D Опції

Ці -m визначені параметри для архітектур Renesas M32R/D:

-m32r2
Згенеруйте код для M32R/2.

-m32rx
Згенеруйте код для M32R/X.

-m32r
Згенеруйте код для M32R. Це значення за замовчуванням.

-mmodel=мала
Припустимо, що всі об’єкти живуть у нижчих 16 МБ пам’яті (щоб їх адреси були
завантажено інструкцією "ld24") і припустимо, що всі підпрограми доступні за допомогою
інструкція «бл». Це значення за замовчуванням.

Адресність конкретного об’єкта можна встановити за допомогою атрибута «модель».

-mmodel=середній
Припустимо, що об’єкти можуть бути в будь-якому місці 32-бітового адресного простору (компілятор створює
інструкції "seth/add3" для завантаження їхніх адрес) і припустимо, що всі підпрограми є такими
доступний за допомогою інструкції "bl".

-mmodel=великий
Припустимо, що об’єкти можуть бути в будь-якому місці 32-бітового адресного простору (компілятор створює
інструкції "seth/add3" для завантаження їхніх адрес) і припускати, що підпрограми можуть бути не такими
доступний за допомогою інструкції "bl" (компілятор генерує набагато повільніше
послідовність інструкцій "seth/add3/jl").

-msdata=немає
Вимкніть використання невеликої області даних. Змінні поміщаються в одну з .дані, .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 51ag 51cn 51em 51JE 51jf 51jg 51jm 51mm 51qe 51qm
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485

-mcpu=центральний процесор перевизначає -березень=арка if арка сумісний з центральний процесор. Інші комбінації
-mcpu та - марш відхиляються.

GCC визначає макрос __mcf_cpu_центральний процесор коли ціль ColdFire центральний процесор вибрано. Це також
визначає __mcf_family_сім'я, де значення сім'я наведено в таблиці вище.

-mtune=мелодія
Налаштуйте код для певної мікроархітектури в межах обмежень, встановлених - марш
та -mcpu. Мікроархітектури M680x0: 68000, 68010, 68020, 68030, 68040,
68060 та процесор32. Мікроархітектури ColdFire: cfv1, cfv2, cfv3, cfv4 та
cfv4e.

Vous використання aussi можете оплатити -mtune=68020-40 для коду, який має працювати відносно добре на 68020,
68030 і 68040 цілей. -mtune=68020-60 схожий, але включає 68060 цілей як
добре. Ці два параметри вибирають ті самі рішення щодо налаштування, що й -m68020-40 та -m68020-60
відповідно.

GCC визначає макроси __mcарка та __mcарка__ при налаштуванні на архітектуру 680x0
арка. Це також визначає mcарка хіба що -ансі або не-GNU -стандартний використовується варіант.
Якщо GCC налаштовується на діапазон архітектур, вибраних -mtune=68020-40 or
-mtune=68020-60, він визначає макроси для кожної архітектури в діапазоні.

GCC також визначає макрос __марх__ при налаштуванні на мікроархітектуру ColdFire
арх, Де арх є одним із аргументів, наведених вище.

-м68000
-mc68000
Згенерувати вихідні дані для 68000. Це значення за замовчуванням, коли компілятор налаштовано для
Системи на базі 68000. Це еквівалентно -березень=68000.

Використовуйте цю опцію для мікроконтролерів з ядром 68000 або EC000, включаючи 68008,
68302, 68306, 68307, 68322, 68328 та 68356.

-м68010
Згенерувати вихідні дані для 68010. Це значення за замовчуванням, коли компілятор налаштовано для
Системи на базі 68010. Це еквівалентно -березень=68010.

-м68020
-mc68020
Згенерувати вихідні дані для 68020. Це значення за замовчуванням, коли компілятор налаштовано для
Системи на базі 68020. Це еквівалентно -березень=68020.

-м68030
Згенерувати вихідні дані для 68030. Це значення за замовчуванням, коли компілятор налаштовано для
Системи на базі 68030. Це еквівалентно -березень=68030.

-м68040
Згенерувати вихідні дані для 68040. Це значення за замовчуванням, коли компілятор налаштовано для
Системи на базі 68040. Це еквівалентно -березень=68040.

Цей параметр забороняє використання інструкцій 68881/68882, які повинні емулювати
програмне забезпечення на 68040. Використовуйте цей параметр, якщо ваш 68040 не має коду для емуляції
ці інструкції.

-м68060
Згенерувати вихідні дані для 68060. Це значення за замовчуванням, коли компілятор налаштовано для
Системи на базі 68060. Це еквівалентно -березень=68060.

Цей параметр забороняє використання інструкцій 68020 і 68881/68882, які необхідно
емульовано програмним забезпеченням на 68060. Використовуйте цей параметр, якщо ваш 68060 не має коду
наслідувати цим інструкціям.

-mcpu32
Згенеруйте вихід для CPU32. Це значення за замовчуванням, коли компілятор налаштовано для
Системи на базі CPU32. Це еквівалентно -march=cpu32.

Використовуйте цю опцію для мікроконтролерів з ядром CPU32 або CPU32+, включаючи 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 і 68360.

-м5200
Створення вихідних даних для CPU 520X ColdFire. Це значення за замовчуванням, коли компілятор
налаштовано для систем на базі 520X. Це еквівалентно -mcpu=5206, і є зараз
відхилено на користь цього варіанту.

Використовуйте цю опцію для мікроконтролера з ядром 5200, включаючи MCF5202, MCF5203,
MCF5204 і MCF5206.

-m5206e
Створення вихідних даних для CPU 5206e ColdFire. Тепер цей параметр не підтримується на користь
еквівалент -mcpu=5206e.

-m528x
Створення вихідних даних для члена сімейства ColdFire 528X. Варіант зараз
відмінено на користь еквіваленту -mcpu=528x.

-м5307
Згенеруйте вихідні дані для процесора ColdFire 5307. Тепер цей параметр не підтримується на користь
еквівалент -mcpu=5307.

-м5407
Згенеруйте вихідні дані для процесора ColdFire 5407. Тепер цей параметр не підтримується на користь
еквівалент -mcpu=5407.

-mcfv4e
Створення вихідних даних для процесора сімейства ColdFire V4e (наприклад, 547x/548x). Це включає використання
апаратні інструкції з плаваючою комою. Опція еквівалентна -mcpu=547x, І
тепер відкинуто на користь цього варіанту.

-m68020-40
Згенеруйте вихідні дані для 68040, не використовуючи жодної з нових інструкцій. Це призводить
у коді, який може працювати відносно ефективно на 68020/68881, 68030 або
68040. Згенерований код використовує інструкції 68881, які емульовано на
68040.

Опція еквівалентна -березень=68020 -mtune=68020-40.

-m68020-60
Згенеруйте вихідні дані для 68060, не використовуючи жодної з нових інструкцій. Це призводить
у коді, який може працювати відносно ефективно на 68020/68881, 68030 або
68040. Згенерований код використовує інструкції 68881, які емульовано на
68060.

Опція еквівалентна -березень=68020 -mtune=68020-60.

-mhard-float
-м68881
Створення інструкцій з плаваючою комою. Це значення за замовчуванням для 68020 і вище, і
для пристроїв ColdFire, які мають FPU. Він визначає макрос __HAVE_68881__ на M680x0
цілі і __mcffpu__ на цілі ColdFire.

-msoft-float
Не генеруйте інструкції з плаваючою комою; замість цього використовуйте виклики бібліотеки. Це
за замовчуванням для цілей 68000, 68010 і 68832. Це також за замовчуванням для ColdFire
пристрої, які не мають FPU.

-mdiv
-мно-див
Генерувати (не генерувати) апаратні інструкції поділу та залишку ColdFire. Якщо
- марш використовується без -mcpu, за замовчуванням для архітектур ColdFire є "включено" і "вимкнено"
для архітектури M680x0. В іншому випадку значення за замовчуванням береться з цільового ЦП (або
ЦП за замовчуванням або той, який визначено -mcpu). Наприклад, за замовчуванням "вимкнено"
та цінності -mcpu=5206 і "включено" для -mcpu=5206e.

GCC визначає макрос __mcfhwdiv__ коли цей параметр увімкнено.

-mкороткий
Вважайте, що тип "int" має ширину 16 біт, наприклад "short int". Додатково параметри
передані стеку також вирівнюються за 16-бітовою межею навіть для цілей, API яких
вимагає просування до 32-розрядної.

-мно-короткі
Не вважайте, що тип "int" має ширину 16 біт. Це значення за замовчуванням.

-mnobitfield
-mno-бітове поле
Не використовуйте інструкції бітового поля. The -м68000, -mcpu32 та -м5200 варіанти мають на увазі
-mnobitfield.

-мбітфілд
Використовуйте інструкції з бітовим полем. The -м68020 варіант передбачає -мбітфілд, Це
за замовчуванням, якщо ви використовуєте конфігурацію, розроблену для 68020.

-mrtd
Використовуйте іншу конвенцію про виклик функцій, в якій функції, які приймають фіксований
кількість аргументів повертається з інструкцією "rtd", яка виводить їх аргументи
під час повернення. Це зберігає одну інструкцію в абоненті, оскільки в цьому немає потреби
наведіть туди аргументи.

Ця умова виклику несумісна з умовою, яка зазвичай використовується в Unix, тому ви
не можна використовувати його, якщо вам потрібно викликати бібліотеки, скомпільовані за допомогою компілятора Unix.

Крім того, ви повинні надати прототипи функцій для всіх функцій, які беруть змінну
кількість аргументів (включаючи «printf»); інакше для генерується неправильний код
виклики цих функцій.

Крім того, якщо ви викликаєте функцію із занадто великою кількістю, результатом буде серйозно неправильний код
аргументи. (Як правило, додаткові аргументи нешкідливо ігноруються.)

Інструкція "rtd" підтримується 68010, 68020, 68030, 68040, 68060 і CPU32
процесори, але не 68000 чи 5200.

-mno-rtd
Не використовуйте умови виклику, вибрані за допомогою -mrtd. Це значення за замовчуванням.

-malign-int
-mno-align-int
Контролюйте, чи GCC вирівнює "int", "long", "long long", "float", "double" і "long
double" змінні на 32-бітовій межі (-malign-int) або 16-бітну межу
(-mno-align-int). Вирівнювання змінних за 32-бітними межами створює код, який запускається
дещо швидше на процесорах з 32-розрядними шинами за рахунок більшої пам'яті.

Увага! якщо ви використовуєте -malign-int switch, GCC вирівнює структури, що містять вищезазначені
типи відрізняються від більшості опублікованих специфікацій бінарного інтерфейсу програми
m68k.

-mpcrel
Використовуйте відносний до ПК режим адресації 68000 безпосередньо, замість використання глобального
офсетна таблиця. Наразі цей варіант має на увазі -fpic, що допускає щонайбільше 16-бітове зміщення
для ПК-відносної адресації. -fPIC наразі не підтримується -mpcrel, хоча
це може підтримуватися для процесорів 68020 і вище.

-mno-strict-align
-mstrict-align
Не припускайте, що невирівняні посилання на пам’ять обробляються системою.

-msep-дані
Створіть код, який дозволяє розташовувати сегмент даних в іншій області пам'яті
з текстового сегмента. Це дозволяє виконувати на місці в середовищі без
управління віртуальною пам'яттю. Цей варіант має на увазі -fPIC.

-mno-sep-data
Створіть код, який передбачає, що сегмент даних слідує за текстовим сегментом. Це
за замовчуванням.

- середня спільна бібліотека
Згенеруйте код, який підтримує спільні бібліотеки за допомогою методу ідентифікатора бібліотеки. Це дозволяє
для виконання на місці та спільних бібліотек у середовищі без віртуальної пам’яті
управління. Цей варіант має на увазі -fPIC.

-mno-id-shared-library
Створіть код, який не передбачає використання спільних бібліотек на основі ідентифікатора. Це
за замовчуванням.

-mshared-library-id=n
Вказує ідентифікаційний номер спільної бібліотеки на основі ідентифікатора, що компілюється.
Зазначення значення 0 генерує більш компактний код; вказуючи інші значення сил
виділення цього номера поточній бібліотеці, але це більше не простір або час
ефективніше, ніж пропускати цей варіант.

-mxgot
-mno-xgot
Створюючи незалежний від позиції код для ColdFire, згенеруйте код, який працює if
GOT має більше 8192 записів. Цей код більший і повільніший за код
створюється без цієї опції. На процесорах M680x0 ця опція не потрібна; -fPIC
вистачає.

GCC зазвичай використовує одну інструкцію для завантаження значень з GOT. Поки це є
відносно ефективний, він працює лише в тому випадку, якщо GOT менший за 64 тис. Будь-що
більше змушує компонувальник повідомляти про помилку, наприклад:

переміщення зрізане відповідно до: R_68K_GOT16O foobar

Якщо це станеться, вам слід перекомпілювати свій код за допомогою -mxgot. Тоді він повинен працювати з
дуже великі ГОТ. Однак код, згенерований за допомогою -mxgot є менш ефективним, оскільки він
приймає 4 інструкції, щоб отримати значення глобального символу.

Зауважте, що деякі компонувальники, включаючи новіші версії компоновщика GNU, можуть створювати
кілька GOT і сортування записів GOT. Якщо у вас є такий лінкер, то вам тільки знадобиться
to use -mxgot під час компіляції одного об’єктного файлу, який отримує доступ до більш ніж 8192 GOT
записи. Дуже мало хто робить.

Ці параметри не діють, якщо GCC не генерує незалежний від позиції код.

MCore Опції

Це -m параметри, визначені для процесорів Motorola M*Core.

-mhardlit
-мно-жорсткий
Вбудовані константи в потік коду, якщо це можна зробити двома інструкціями або менше.

-mdiv
-мно-див
Використовуйте інструкцію поділу. (Увімкнено за замовчуванням).

-mrelax-негайний
-мно-розслабитися-негайно
Дозволити негайні елементи довільного розміру в бітових операціях.

-mwide-bitfields
-mno-wide-bitfields
Завжди розглядайте бітові поля як розмір "int".

-m4byte-функції
-mno-4byte-функції
Примусово вирівняти всі функції за 4-байтовою межею.

-mcallgraph-дані
-mno-callgraph-data
Видавати інформацію про коллграф.

-mslow-байтів
-mno-slow-bytes
Віддавайте перевагу доступу до слова під час читання кількості байтів.

-mlittle-endian
-big-endian
Згенеруйте код для цілі з маленьким байтом.

-м210
-м340
Згенеруйте код для процесора 210.

-мно-лсім
Припустимо, що підтримка під час виконання була надана, і тому опустіть бібліотеку симулятора
(libsim.a) з командного рядка компонувальника.

-mstack-increment=розмір
Встановіть максимальну суму для однієї операції збільшення стека. Великі значення можуть
збільшення швидкодії програм, які містять функції, які потребують великої кількості
простір стека, але вони також можуть викликати помилку сегментації, якщо стек розширено
забагато. Значення за замовчуванням — 0x1000.

MeP Опції

-mabsdiff
Вмикає інструкцію "abs", яка є абсолютною різницею між двома регістрами.

-mall-opts
Вмикає всі додаткові інструкції ---середнє значення, множення, ділення, бітові операції,
провідний нуль, абсолютна різниця, мін/макс, кліп і насиченість.

- середній
Вмикає інструкцію "ave", яка обчислює середнє значення двох регістрів.

-based=n
Змінні розміру n за замовчуванням у розділ ".based" розміщуються байти або менше.
Базовані змінні використовують регістр $tp як базовий регістр, і існує обмеження в 128 байт
до розділу ".based".

-бітопс
Вмикає інструкції з бітової операції --- бітовий тест ("btstm"), встановити ("bsetm"), очистити
("bclrm"), invert ("bnotm") і test-and-set ("tas").

-mc=ім'я
Вибирає, в який розділ розміщуються константні дані. ім'я може бути "крихітним", "поруч" або
«далеко».

-mclip
Вмикає інструкцію «кліп». Зауважте, що "-mclip" не корисний, якщо ви також не можете
надайте "-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 is
код сумісності. Приклад значень v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.

-mxl-soft-mul
Використовуйте програмну емуляцію множення (за замовчуванням).

-mxl-soft-div
Використовуйте програмну емуляцію для поділу (за замовчуванням).

-mxl-barrel-shift
Використовуйте апаратний перемикач ствола.

-mxl-шаблон-порівняти
Використовуйте інструкції для порівняння шаблонів.

-msmall-ділить
Використовуйте оптимізацію пошуку таблиці для малих цілих поділень зі знаком.

-mxl-перевірка стеку
Ця опція не підтримується. Використовуйте -fstack-check замість цього.

-mxl-gp-opt
Використовуйте розділи ".sdata"/.sbss, що відповідають GP.

-mxl-множення-високий
Використовуйте вказівки множення на високе значення для високої частини множення 32x32.

-mxl-float-convert
Використовуйте апаратні інструкції перетворення з плаваючою комою.

-mxl-float-sqrt
Використовуйте апаратну інструкцію квадратного кореня з плаваючою комою.

-big-endian
Згенеруйте код для цілі з великим порядком.

-mlittle-endian
Згенеруйте код для цілі з маленьким байтом.

-mxl-змінити порядок
Використовуйте інструкції щодо зміни порядку (переміщення та зворотне завантаження/збереження байтів).

-mxl-mode-додаток-модель
Виберіть модель програми додаток-модель. Дійсними є моделі

виконуваний файл
звичайний виконуваний файл (за замовчуванням), використовує код запуску crt0.o.

xmdstub
для використання з інтрузивним налагодженням програмного забезпечення Xilinx Microprocessor Debugger (XMD).
агент під назвою xmdstub. Для цього використовується файл запуску crt1.o і встановлює початкову адресу
програму на 0x800.

завантажувач
для програм, які завантажуються за допомогою завантажувача. Ця модель використовує файл запуску
crt2.o який не містить векторного обробника скидання процесора. Це підходить
для передачі керування скиданням процесора на завантажувач, а не на
Додаток.

новаторів
для програм, які не потребують жодного з векторів MicroBlaze. Цей варіант
може бути корисним для програм, що працюють у межах програми моніторингу. Ця модель
використовує crt3.o як файл запуску.

варіант -xl-mode-додаток-модель є застарілим псевдонімом для -mxl-mode-додаток-модель.

MIPS Опції

-EB Створення коду з великим порядком.

-ТО Згенеруйте код з маленьким порядком байтів. Це значення за замовчуванням для mips*el-*-* конфігурації

-березень=арка
Згенеруйте код, який працює на арка, що може бути ім'ям загального MIPS ISA або
назва конкретного процесора. Назви ISA: mips1, mips2, mips3, mips4,
mips32, mips32r2, 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, 34кн, 74 кк, 74KF2_1, 74KF1_1, 74KF3_2, 1004 кк,
1004KF2_1, 1004KF1_1, loongson2e, loongson2f, loongson3a, M4K, октеон, октеон+,
октеон2, Оріон, r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700, r6000, r8000,
rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120,
vr4130, vr4300, vr5000, vr5400, vr5500, xlr та xlp. Особлива цінність від-абі
вибирає найбільш сумісну архітектуру для вибраного ABI (тобто mips1 та цінності
32-розрядні ABI і mips3 для 64-розрядних ABI).

Власний ланцюг інструментів Linux/GNU також підтримує це значення рідний, який обирає найкращих
варіант архітектури для хост-процесора. -березня = рідний не має ефекту, якщо це робить GCC
не розпізнає процесор.

В назвах процесорів кінцеве 000 можна скоротити як k (наприклад, -березень=r2k).
Префікси необов’язкові та vr може бути написано r.

Назви форми nF2_1 посилаються на процесори з тактовою частотою FPU на половину частоти
ядро, назви форми nF1_1 посилаються на процесори з тактовою частотою FPU
як ядро, так і назви форми nF3_2 посилаються на процесори з частотою FPU
3:2 по відношенню до ядра. З міркувань сумісності, nf приймається як a
синонім до nF2_1 в той час як nx та bfx прийняті як синоніми для nF1_1.

GCC визначає два макроси на основі значення цієї опції. Перший є _MIPS_ARCH,
яка дає назву цільової архітектури у вигляді рядка. Другий має форму
_MIPS_ARCH_Foo, Де Foo це капіталізована вартість _MIPS_ARCH, Наприклад,
-березень=r2000 Набори _MIPS_ARCH до "r2000" і визначає макрос _MIPS_ARCH_R2000.

Зауважте, що _MIPS_ARCH макрос використовує імена процесора, наведені вище. Іншими словами,
він має повний префікс і не скорочує 000 as k, У випадку від-абі,
макрос називає вирішену архітектуру (або "mips1" or "mips3"). Він називає
архітектура за замовчуванням, коли немає - марш надається варіант.

-mtune=арка
Оптимізуйте для арка. Крім усього іншого, ця опція керує тим, як відображаються інструкції
заплановані, а також передбачувана вартість арифметичних операцій. Список арка величини
те саме, що і для - марш.

Якщо цей параметр не використовується, GCC оптимізує для процесора, зазначеного в - марш. По
використання - марш та -mtune разом можна створити код, який працює на a
сімейство процесорів, але оптимізувати код для одного конкретного члена цього сімейства.

-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
Не використовуйте інструкції співпроцесора з плаваючою комою. Реалізація з плаваючою комою
обчислення з використанням викликів бібліотеки.

-mno-float
Дорівнює -msoft-float, але додатково стверджує, що програма, що компілюється
не виконує жодних операцій з плаваючою комою. Наразі ця опція підтримується
лише за допомогою деяких конфігурацій MIPS, де можна вибрати спеціальний набір
бібліотеки, які не мають усієї підтримки з плаваючою комою (включаючи, наприклад,
формати пункту "printf"). Якщо код, скомпільований з "-mno-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.

-mmcu
-мно-мцу
Використовуйте (не використовуйте) інструкції MIPS MCU ASE.

-mlong64
Змусити "довгі" типи мати ширину 64 біта. Побачити -mlong32 для пояснення дефолту
і спосіб визначення розміру покажчика.

-mlong32
Змусити типи "long", "int" і вказівники мати ширину 32 біти.

Розмір за замовчуванням "int", "long" і покажчиків залежить від ABI. Всі
підтримувані ABI використовують 32-розрядні "int". n64 ABI використовує 64-розрядні "long", як і 64-розрядні
EABI; інші використовують 32-розрядні "довгі". Вказівники мають такий самий розмір, як "довгі" або "
такого ж розміру, як і цілі регістри, залежно від того, що менше.

-msym32
-mno-sym32
Припустимо (не припускаємо), що всі символи мають 32-бітові значення, незалежно від вибраного
ABI. Ця опція корисна в поєднанні з -mabi=64 та -мно-абікали Тому що це
дозволяє GCC генерувати коротші та швидші посилання на символічні адреси.

-G Num
Помістіть визначення зовнішніх даних у невеликий розділ даних, якщо цих даних немає
більше, ніж Num байтів. GCC може потім генерувати більш ефективний доступ до даних; побачити
-mgpopt for details.

За умовчанням -G опція залежить від конфігурації.

-mlocal-sdata
-mno-local-sdata
Розширювати (не розширювати). -G поведінка до локальних даних, наприклад, до статичних змінних
в С. -mlocal-sdata є за замовчуванням для всіх конфігурацій.

Якщо компонувальник скаржиться, що програма використовує занадто багато малих даних, ви можете
хочу спробувати відновити менш критичні для продуктивності частини -mno-local-sdata. Ви
Ви також можете створити великі бібліотеки -mno-local-sdata, щоб бібліотеки
залиште більше місця для основної програми.

-mextern-sdata
-mno-extern-sdata
Припустимо (не припускаємо), що дані, визначені ззовні, знаходяться в невеликому розділі даних, якщо
розмір цих даних знаходиться в межах -G ліміт. -mextern-sdata є стандартним для всіх
конфігурації

Якщо ви компілюєте модуль Спосіб з -mextern-sdata -G Num -mgpopt та Спосіб посилання а
змінна Кожен що не більше ніж Num байтів, ви повинні переконатися в цьому Кожен розміщено
у невеликому розділі даних. Якщо Кожен визначається іншим модулем, ви повинні або скомпілювати
що модуль з досить високим -G встановлення або додавання атрибута "section". Кожен's
визначення. Якщо Кожен є звичайним, ви повинні зв'язати програму з досить високим -G
установка.

Найпростіший спосіб задовольнити ці обмеження – зібрати та зв’язати кожен модуль
з такою ж -G варіант. Однак ви можете створити бібліотеку, яка підтримує
кілька різних обмежень малих даних. Ви можете зробити це, зібравши бібліотеку з
найвища підтримувана -G налаштування та додатково використання -mno-extern-sdata зупинити
бібліотеку від припущень щодо даних, визначених ззовні.

-mgpopt
-mno-gpopt
Використовуйте (не використовуйте) доступи щодо GP для символів, які, як відомо, містяться в невеликих даних
розділ; побачити -G, -mlocal-sdata та -mextern-sdata. -mgpopt є стандартним для всіх
конфігурації

-mno-gpopt корисний у випадках, коли регістр $gp може не містити значення
"_gp". Наприклад, якщо код є частиною бібліотеки, яка може використовуватися під час завантаження
monitor, програми, які викликають підпрограми монітора завантаження, передають невідоме значення в $gp. (В
У таких ситуаціях зазвичай компілюється сам монітор завантаження -G0.)

-mno-gpopt мається на увазі -mno-local-sdata та -mno-extern-sdata.

-вбудовані дані
-mno-вбудованих-даних
Якщо можливо, спочатку розподіліть змінні до розділу даних лише для читання, а потім у розділі
невеликий розділ даних, якщо це можливо, інакше в даних. Це дає трохи повільніший код
ніж за замовчуванням, але зменшує обсяг оперативної пам’яті, необхідної під час виконання, і, таким чином, може
бути кращим для деяких вбудованих систем.

-muninit-const-in-rodata
-mno-uninit-const-in-rodata
Помістіть неініціалізовані змінні "const" у розділ даних лише для читання. Цей варіант є
має значення лише в поєднанні з -вбудовані дані.

-mcode-readable=установка
Укажіть, чи може GCC генерувати код, який читає з виконуваних розділів. Існує
три можливі налаштування:

-mcode-readable=так
Інструкції можуть вільно отримувати доступ до виконуваних розділів. Це налаштування за замовчуванням.

-Mcode-readable = pcrel
MIPS16 інструкції щодо завантаження ПК можуть отримати доступ до виконуваних розділів, але інші
інструкції не повинні цього робити. Ця опція корисна для процесорів 4KSc і 4KSd
коли код TLB має біт заборони читання. Це також корисно для процесорів
який можна налаштувати на подвійний інтерфейс SRAM інструкцій/даних і що,
як і M4K, автоматично перенаправляє навантаження, пов’язані з ПК, на оперативну пам’ять інструкцій.

-mcode-readable=ні
Інструкції не повинні мати доступ до виконуваних розділів. Ця опція може бути корисною на
цілі, які налаштовані на подвійний інтерфейс SRAM інструкції/дані, але
що (на відміну від M4K) не автоматично перенаправляє навантаження, пов’язані з ПК, на
інструкційна оперативна пам'ять.

-msplit-адреси
-mno-split-адреси
Увімкнути (вимкнути) використання операторів переміщення ассемблера "%hi()" і "%lo()". Це
варіант замінено на -mexplicit-relocs але зберігається для зворотного
Сумісність.

-mexplicit-relocs
-mno-explicit-relocs
Використовуйте (не використовуйте) оператори переміщення асемблера під час роботи з символічними адресами.
Альтернатива, обрана -mno-explicit-relocs, замість цього використовувати макроси асемблера.

-mexplicit-relocs є за замовчуванням, якщо GCC був налаштований на використання асемблера, який
підтримує операторів переміщення.

-mcheck-zero-division
-мно-перевірка-нуль-ділення
Уловити (не захопити) на ціле ділення на нуль.

За замовчуванням - -mcheck-zero-division.

-mрозділяти-пастки
-mdivide-breaks
Системи MIPS перевіряють поділ на нуль, генеруючи або умовну пастку, або a
інструкція перервати. Використання пасток призводить до меншого розміру коду, але підтримується лише в MIPS
II і пізніше. Крім того, деякі версії ядра Linux мають помилку, яка запобігає захвату
від генерування належного сигналу ("SIGFPE"). Використовуйте -mрозділяти-пастки допускати умовні
пастки на архітектурах, які їх підтримують і -mdivide-breaks змусити використання
перерви.

Зазвичай за замовчуванням -mрозділяти-пастки, але це можна змінити під час налаштування
використання --with-divide=розриви. Перевірку ділення на нуль можна повністю вимкнути за допомогою
-мно-перевірка-нуль-ділення.

-mmemcpy
-mno-memcpy
Примусово (не примусово) використання "memcpy()" для нетривіальних переміщень блоків. За замовчуванням
is -mno-memcpy, що дозволяє GCC вставляти більшість копій постійного розміру.

-mlong-дзвінки
-mno-long-cales
Вимкніть (не вимикайте) використання інструкції «jal». Виклик функцій за допомогою "jal"
є більш ефективним, але вимагає, щоб абонент і абонент мали однакові 256 мегабайт
сегмент.

Цей параметр не впливає на код abicalls. За замовчуванням є -mno-long-cales.

-ммад
-мно-божевільний
Увімкнути (вимкнути) використання інструкцій "mad", "madu" і "mul", як передбачено
R4650 ISA.

-змішаний-божевільний
-мно-злитий-мадд
Увімкнути (вимкнути) використання інструкцій множення та накопичення з плаваючою комою, коли вони
доступні. За замовчуванням є -змішаний-божевільний.

На CPU R8000, коли використовуються інструкції множення-нагромадження, проміжне значення
продукт розраховується з нескінченною точністю і не підлягає змиву FCSR
Нульовий біт. За деяких обставин це може бути небажаним. На інших процесорах
результат чисельно ідентичний еквівалентному обчисленню з використанням роздільного множення,
інструкції додавання, віднімання та заперечення.

-nocpp
Скажіть ассемблеру MIPS не запускати свій препроцесор над файлами ассемблера користувача (за допомогою a
.s суфікс) при їх складанні.

-mfix-24k
-mno-fix-24k
Усуньте помилку 24K E48 (втрачені дані про магазини під час поповнення). Обхідні шляхи
реалізуються асемблером, а не GCC.

-mfix-r4000
-mno-fix-r4000
Обійти певні помилки ЦП R4000:

- Подвійне слово або зсув змінної може дати неправильний результат у разі виконання
відразу після початку цілого ділення.

- Подвійне слово або зсув змінної можуть дати неправильний результат, якщо вони виконуються під час
виконується ціле множення.

- Цілочисельне ділення може дати неправильний результат, якщо воно розпочато в інтервалі затримки a
взята гілка або стрибок.

-mfix-r4400
-mno-fix-r4400
Обійти певні помилки ЦП R4400:

- Подвійне слово або зсув змінної може дати неправильний результат у разі виконання
відразу після початку цілого ділення.

-mfix-r10000
-mno-fix-r10000
Обійти певні помилки в 10000 рупій:

- Послідовності "ll"/"sc" можуть не вести себе атомарно в версіях до версії 3.0. Вони можуть
безвихідь у версіях 2.6 і раніше.

Цей параметр можна використовувати, лише якщо цільова архітектура підтримує гілки
інструкціям. -mfix-r10000 за замовчуванням, коли -березень=r10000 використовується; -mno-fix-r10000
в іншому випадку за замовчуванням.

-mfix-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__.

Moxie Опції

-меб
Створення коду з великим порядком. Це значення за замовчуванням для мокси-*-* конфігурації

-мел
Згенеруйте код з маленьким порядком байтів.

-mno-crt0
Не створюйте посилання в об’єктному файлі ініціалізації під час виконання C.

ПДП-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:

-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
Ви використовуєте ці параметри, щоб визначити, які інструкції доступні на вашому процесорі
використовують. Значення за замовчуванням цих параметрів визначається під час налаштування GCC.
Визначення -mcpu=тип_процесора перекриває специфікацію цих параметрів. ми
рекомендуємо використовувати -mcpu=тип_процесора варіант, а не перераховані вище варіанти.

Уточнення -mpowerpc-gpopt дозволяє GCC використовувати додаткову архітектуру PowerPC
інструкції в групі загального призначення, включаючи квадратний корінь з плаваючою комою.
Уточнення -mpowerpc-gfxopt дозволяє GCC використовувати додаткову архітектуру PowerPC
інструкції в групі «Графіка», включаючи вибір з плаваючою комою.

Команда -mmfcrf Опція дозволяє GCC генерувати переміщення з поля регістру умов
інструкція реалізована на процесорі POWER4 та інших процесорах, які підтримують
Архітектура PowerPC V2.01. The -mpopcntb Опція дозволяє GCC генерувати popcount
та інструкція зворотної оцінки FP подвійної точності, реалізована на POWER5
процесор та інші процесори, які підтримують архітектуру PowerPC V2.02. The
-mpopcntd Опція дозволяє GCC генерувати інструкцію popcount, реалізовану на
Процесор POWER7 та інші процесори, які підтримують архітектуру PowerPC V2.06.
Команда -mfprnd Опція дозволяє GCC генерувати інструкції округлення FP до цілого числа
реалізовано на процесорі POWER5+ та інших процесорах, які підтримують PowerPC
Архітектура V2.03. The -mcmpb Опція дозволяє GCC генерувати порівняльні байти
інструкція реалізована на процесорі POWER6 та інших процесорах, які підтримують
Архітектура PowerPC V2.05. The -mmfpgpr Опція дозволяє GCC генерувати переміщення FP
інструкції до/з регістра загального призначення, реалізовані на процесорі POWER6X і
інші процесори, які підтримують розширену архітектуру PowerPC V2.05. The -mhard-dfp
Опція дозволяє GCC генерувати десяткові інструкції з плаваючою комою, реалізовані на
деякі процесори POWER.

Команда -mpowerpc64 Опція дозволяє GCC генерувати додаткові 64-розрядні інструкції, які
знаходяться в повній архітектурі PowerPC64 і розглядають GPR як 64-розрядні подвійні слова
кількості. GCC за замовчуванням -mno-powerpc64.

-mcpu=тип_процесора
Встановіть тип архітектури, використання реєстрів і параметри планування інструкцій для
тип машини тип_процесора. Підтримувані значення для тип_процесора він має 401, 403, 405, 405 кадри на секунду, 440,
440 кадри на секунду, 464, 464 кадри на секунду, 476, 476 кадри на секунду, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, велетень, power3, power4, power5, потужність 5+, power6,
потужність 6x, power7, power8, живлення ПК, powerpc64, powerpc64le та rs64.

-mcpu=powerpc, -mcpu = powerpc64 та -mcpu=powerpc64le вкажіть чистий 32-розрядний PowerPC
(будь-який байт), 64-розрядний PowerPC і 64-розрядний PowerPC
архітектурні типи машин із відповідною загальною моделлю процесора
цілі планування.

Інші параметри визначають конкретний процесор. Код, згенерований відповідно до цих параметрів
найкраще працює на цьому процесорі і може взагалі не працювати на інших.

Команда -mcpu параметри автоматично вмикають або вимикають такі параметри:

-мальтівець -mfprnd -mhard-float -mmfcrf - множинні -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mпрямий-хід -mpower8-fusion
-mpower8-вектор -mquad-пам'ять -mquad-memory-atomic

Конкретні параметри, встановлені для будь-якого конкретного ЦП, відрізняються в різних версіях компілятора,
залежно від того, яке налаштування створює оптимальний код для цього ЦП; це не так
обов'язково відображати реальні можливості обладнання. Якщо ви бажаєте встановити
індивідуальний параметр до певного значення, ви можете вказати його після -mcpu варіант
як -mcpu=970 -mno-altivec.

На AIX, -мальтівець та -mpowerpc64 параметри не вмикаються та не вимкнені -mcpu
наразі, оскільки AIX не має повної підтримки цих параметрів. Ви можете
все одно вмикайте або вимикайте їх окремо, якщо ви впевнені, що це працюватиме у вашому
довкілля.

-mtune=тип_процесора
Встановіть параметри планування інструкцій для типу машини тип_процесора, але не встановлюйте
тип архітектури або використання реєстру, як -mcpu=тип_процесора робить. Ті самі значення для
тип_процесора використовуються для -mtune що стосується -mcpu. Якщо вказано обидва, згенерується код
використовує архітектуру та регістри, встановлені за допомогою -mcpu, але параметри планування, встановлені за допомогою
-mtune.

-mcmodel=мала
Згенеруйте код PowerPC64 для невеликої моделі: TOC обмежено 64 КБ.

-mcmodel=середній
Згенеруйте код PowerPC64 для середньої моделі: TOC та інші статичні дані можуть бути підвищені
загальним розміром 4G.

-mcmodel=великий
Згенеруйте код PowerPC64 для великої моделі: TOC може мати розмір до 4G. Інший
дані та код обмежені лише 64-бітовим адресним простором.

-мальтівець
-mno-altivec
Згенеруйте код, який використовує (не використовує) інструкції AltiVec, а також увімкніть використання
вбудованих функцій, які забезпечують більш прямий доступ до набору інструкцій AltiVec.
Можливо, вам також знадобиться встановити -mabi=altivec щоб налаштувати поточний ABI за допомогою AltiVec ABI
удосконалення.

Коли -мальтівець використовується, а не -maltivec=le or -maltivec=бути, порядок елементів
для Altivec intrinsics, таких як "vec_splat", "vec_extract" і "vec_insert", будуть відповідати
Порядок елементів масиву, що відповідає порядковості байтів цілі. Тобто елемент
нуль визначає крайній лівий елемент у векторному регістрі, коли орієнтується на великий кінець
платформи та визначає крайній правий елемент у векторному регістрі під час націлювання на a
платформа з малим порядком.

-maltivec=бути
Генеруйте інструкції Altivec, використовуючи порядок елементів із великим порядком, незалежно від того, чи є
ціль має великий або маленький кінець. Це значення за замовчуванням, якщо орієнтуватися на великий байт
платформи.

Порядок елементів використовується для інтерпретації номерів елементів у внутрішніх елементах Altivec, наприклад
"vec_splat", "vec_extract" і "vec_insert". За замовчуванням вони будуть відповідати масиву
порядок елементів, що відповідає порядковості байтів для цілі.

-maltivec=le
Генеруйте інструкції Altivec, використовуючи порядок елементів з маленьким байтом, незалежно від того
ціль має великий або маленький кінець. Це значення за замовчуванням, якщо націлюватися на трохи-
порядкова платформа. Наразі ця опція ігнорується, якщо націлюватися на великий байт
платформи.

Порядок елементів використовується для інтерпретації номерів елементів у внутрішніх елементах Altivec, наприклад
"vec_splat", "vec_extract" і "vec_insert". За замовчуванням вони будуть відповідати масиву
порядок елементів, що відповідає порядковості байтів для цілі.

-mvrsave
-мно-врсаве
Генеруйте інструкції VRSAVE під час генерації коду AltiVec.

-mgen-cell-microcode
Створення інструкцій мікрокоду клітинки.

-mwarn-cell-microcode
Попереджати, коли надходить інструкція мікрокоду клітинки. Приклад мікрокоду клітинки
інструкція є змінною зміною.

-msecure-plt
Згенеруйте код, який дозволяє ld та ld.так для створення виконуваних файлів і спільних бібліотек
невиконувані розділи ".plt" і ".got". Це параметр PowerPC 32-розрядний SYSV ABI.

-mbss-plt
Згенеруйте код, який використовує розділ BSS ".plt", який ld.так заповнює та вимагає ".plt"
і розділи ".got", які є як для запису, так і для виконання. Це 32-розрядний PowerPC
Опція SYSV ABI.

-мисель
-мно-ісел
Цей перемикач дозволяє або вимикає генерацію інструкцій ISEL.

-misel=так ні
Цей перемикач більше не підтримується. Використовуйте -мисель та -мно-ісел замість цього.

-mspe
-мно-спе
Цей перемикач вмикає або вимикає генерацію інструкцій SPE simd.

- утруднений
-мнопарні
Цей перемикач вмикає або вимикає створення інструкцій PAIRED simd.

-mspe=так ні
Цей параметр не підтримується. Використовуйте -mspe та -мно-спе замість цього.

-mvsx
-mno-vsx
Створення коду, який використовує (не використовує) векторні/скалярні (VSX) інструкції, а також
дозволити використання вбудованих функцій, які забезпечують більш прямий доступ до VSX
набір інструкцій.

-mcrypto
-мно-крипто
Увімкнути використання (вимкнути) вбудованих функцій, які надають прямий доступ до
криптографічні інструкції, які були додані у версії 2.07 PowerPC ISA.

-mпрямий-хід
-мно-прямий-хід
Згенеруйте код, який використовує (не використовує) інструкції для переміщення даних між файлами
регістри загального призначення та векторні/скалярні (VSX) регістри, які були додані
версія 2.07 PowerPC ISA.

-mpower8-fusion
-mno-power8-fusion
Генерує код, який зберігає (не зберігає) деякі цілі операції суміжними, так що
інструкції можна об'єднати разом на процесорах power8 і новіших.

-mpower8-вектор
-mno-power8-вектор
Згенеруйте код, який використовує (не використовує) векторні та скалярні інструкції, які були
додано у версії 2.07 PowerPC ISA. Також увімкніть використання вбудованих функцій
які забезпечують більш прямий доступ до векторних інструкцій.

-mquad-пам'ять
-mno-quad-пам'ять
Створіть код, який використовує (не використовує) інструкції неатомарної пам'яті чотирьох слів.
Команда -mquad-пам'ять опція вимагає використання 64-розрядного режиму.

-mquad-memory-atomic
-mno-quad-memory-atomic
Створіть код, який використовує (не використовує) атомні інструкції пам'яті чотирьох слів. The
-mquad-memory-atomic опція вимагає використання 64-розрядного режиму.

-mfloat-gprs=так/одиночний/подвійний/ні
-mfloat-gprs
Цей перемикач вмикає або вимикає генерацію операцій з плаваючою комою на
регістри загального призначення для архітектур, які його підтримують.

Аргумент так or один дозволяє використовувати одинарну точність з плаваючою комою
операції.

Аргумент подвійний дозволяє використовувати одинарну та подвійну точність з плаваючою комою
операції.

Аргумент немає вимикає операції з плаваючою комою в регістрах загального призначення.

Наразі ця опція доступна лише на MPC854x.

-м32
-м64
Створення коду для 32-розрядних або 64-розрядних середовищ Darwin і SVR4 (включаючи
GNU/Linux). 32-розрядне середовище встановлює int, long і покажчик на 32 біти і
генерує код, який працює на будь-якому варіанті PowerPC. 64-розрядне середовище встановлює int
32 біти та long і вказівник на 64 біти та генерує код для PowerPC64, як для
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc
Змінити генерацію TOC (Змісту), яка створюється для кожного
виконуваний файл. The -mfull-toc параметр вибраний за замовчуванням. У цьому випадку GCC
виділяє принаймні один запис TOC для кожного унікального неавтоматичного посилання на змінну в
ваша програма. GCC також розміщує константи з плаваючою комою в TOC. Проте тільки
16,384 XNUMX записи доступні в TOC.

Якщо ви отримуєте повідомлення про помилку компонувальника про те, що ви переповнили доступний
Місце TOC, ви можете зменшити кількість простору TOC, що використовується з -mno-fp-in-toc та
-mno-sum-in-toc Варіанти. -mno-fp-in-toc запобігає GCC від розміщення з плаваючою комою
константи в TOC і -mno-sum-in-toc змушує GCC генерувати код для обчислення
сума адреси та константи під час виконання замість того, щоб вводити цю суму в TOC.
Ви можете вказати один або обидва з цих параметрів. Кожен з них змушує GCC виробляти дуже
дещо повільніший і більший код за рахунок збереження простору TOC.

Якщо у вас все одно не вистачає місця в TOC, навіть якщо ви вказали обидва ці параметри,
вкажіть -mminimal-toc замість цього. Ця опція змушує GCC робити лише один запис TOC для
кожен файл. Коли ви вказуєте цей параметр, GCC виробляє повільніший і більший код
але який використовує надзвичайно мало місця TOC. Ви можете використовувати цю опцію лише на
файли, які містять код, який виконується рідше.

-maix64
-maix32
Увімкнути 64-розрядний AIX ABI та умову виклику: 64-розрядні покажчики, 64-розрядний тип «довгий» та
інфраструктуру, необхідну для їх підтримки. Уточнення -maix64 мається на увазі -mpowerpc64,
в той час як -maix32 вимикає 64-розрядний ABI і має на увазі -mno-powerpc64. GCC за замовчуванням
-maix32.

-mxl-compat
-mno-xl-compat
Створіть код, який більше відповідає семантиці компілятора IBM XL при використанні AIX-
сумісний ABI. Передайте аргументи з плаваючою комою прототипним функціям за межами
зареєструвати область збереження (RSA) у стеку на додаток до аргументів FPR. Не припускайте
що найбільш значимий подвійний у 128-бітовому довгому значенні double правильно округлюється, коли
порівняння значень і перетворення в подвійне. Використовуйте назви символів XL для довгого подвійного
підтримувати рутини.

Умову викликів AIX було розширено, але спочатку не було задокументовано для обробки
незрозумілий випадок K&R C виклику функції, яка приймає адресу своїх аргументів
менше аргументів, ніж заявлено. Компілятори IBM XL мають доступ до аргументів з плаваючою комою
не поміщаються в RSA зі стека, коли підпрограма компілюється без
оптимізація. Тому що завжди зберігати аргументи з плаваючою комою в стеку є
неефективна та рідко потрібна, ця опція не ввімкнена за замовчуванням і лише є
необхідно під час виклику підпрограм, скомпільованих компіляторами IBM XL без оптимізації.

-mpe
Підтримайте IBM RS / 6000 SP Паралельні Навколишнє середовище (PE). Посилання на програму, написану для використання
передача повідомлення зі спеціальним кодом запуску для запуску програми. The
система повинна мати PE встановлений у стандартному місці (/usr/lpp/ppe.poe/), або
дані файл потрібно замінити на -специфікації= можливість вказати відповідний
розташування каталогу. Паралельне середовище не підтримує потоки, тому -mpe
варіант і -нитка варіанти несумісні.

-злоякісний-природний
- злоякісна сила
На AIX, 32-розрядних Darwin і 64-розрядних PowerPC GNU/Linux опція -злоякісний-природний
перекриває визначене ABI вирівнювання більших типів, таких як подвійні числа з плаваючою комою,
на їхній межі на основі природного розміру. Варіант - злоякісна сила доручає GCC
дотримуйтесь правил вирівнювання, визначених ABI. GCC за замовчуванням має стандартне вирівнювання
визначені в ABI.

У 64-розрядній версії Darwin природне вирівнювання є за замовчуванням, і - злоякісна сила НЕ
підтримується.

-msoft-float
-mhard-float
Згенеруйте код, який не використовує (використовує) набір регістрів з плаваючою комою. програмне забезпечення
Емуляція з плаваючою комою надається, якщо ви використовуєте -msoft-float варіант і передайте
опція до GCC при з'єднанні.

-msingle-float
-mdouble-float
Створення коду для операцій з плаваючою комою одинарної або подвійної точності.
-mdouble-float мається на увазі -msingle-float.

-msimple-fpu
Не генеруйте інструкції "sqrt" і "div" для апаратної одиниці з плаваючою комою.

-mfpu=ім'я
Вкажіть тип одиниці з плаваючою комою. Допустимі значення для ім'я він має sp_lite (дорівнює
-msingle-float -msimple-fpu), dp_lite (дорівнює -mdouble-float -msimple-fpu),
sp_full (дорівнює -msingle-float), А також dp_full (дорівнює -mdouble-float).

-mxilinx-fpu
Виконайте оптимізацію блоку з плаваючою комою на Xilinx PPC 405/440.

- множинні
-мно-множинний
Згенеруйте код, який використовує (не використовує) інструкції завантаження з кількома словами та
зберігати інструкції з кількох слів. Ці інструкції генеруються за замовчуванням на
POWER, а не генерується в системах PowerPC. Не використовувати - множинні на мало-
порядкові системи PowerPC, оскільки ці інструкції не працюють, коли ввімкнено процесор
режим малого ланцюга. Виняток становлять PPC740 і PPC750, які дозволяють це зробити
інструкції в режимі малого байта.

-mstring
-мно-рядок
Згенеруйте код, який використовує (не використовує) інструкції рядка завантаження та сховище
рядкові інструкції слова для збереження кількох регістрів і виконання невеликих блокових переміщень. Ці
інструкції генеруються за замовчуванням у системах POWER і не генеруються на PowerPC
системи. Не використовувати -mstring на системах PowerPC з малим кінцем, оскільки ті
інструкції не працюють, коли процесор перебуває в режимі малого байта. Винятки
це PPC740 і PPC750, які дозволяють виконувати ці інструкції в режимі малого байта.

-оновити
-mno-оновлення
Згенеруйте код, який використовує (не використовує) завантаження або зберігайте інструкції, які оновлюють
базовий регістр за адресою обчислюваної ділянки пам'яті. Ці інструкції
генеруються за замовчуванням. Якщо ви використовуєте -mno-оновлення, між ними є невелике віконце
час оновлення покажчика стека та адреси попереднього кадру
збережений, що означає код, який проходить кадр стека через переривання або сигнали
отримати пошкоджені дані.

-mavoid-indexed-addresses
-mno-уникати-індексованих-адрес
Створіть код, який намагається уникнути (не уникнути) використання індексованого завантаження або збереження
інструкції. Ці інструкції можуть призвести до зниження продуктивності процесорів Power6
у певних ситуаціях, наприклад, при переході через великі масиви, які перетинають 16M
межа. Цей параметр увімкнено за замовчуванням, якщо націлено на Power6, і вимкнено
інакше.

-змішаний-божевільний
-мно-злитий-мадд
Створіть код, який використовує (не використовує) множення та накопичення з плаваючою комою
інструкції. Ці інструкції генеруються за замовчуванням, якщо апаратна з плаваючою комою
використовується. Машинозалежний -змішаний-божевільний опція тепер зіставлена ​​з машиною-
незалежний -ffp-contract=швидко варіант, і -мно-злитий-мадд відображається на
-ffp-contract=вимкнено.

-mmulhw
-mno-mulhw
Створити код, який використовує (не використовує) напівслова множення та множення-накопичування
інструкції для процесорів IBM 405, 440, 464 і 476. Ці інструкції є
генерується за замовчуванням під час націлювання на ці процесори.

-mdlmzb
-мно-длмзб
Згенеруйте код, який використовує (не використовує) рядковий пошук dlmzb інструкція з IBM
Процесори 405, 440, 464 і 476. Ця інструкція генерується за замовчуванням, коли
націлені на ці процесори.

-mno-bit-align
-mbit-align
У системі V.4 і вбудованих системах PowerPC не (не) примушують структури та об’єднання
які містять бітові поля, які мають бути вирівняні з базовим типом бітового поля.

Наприклад, за замовчуванням структура, що не містить нічого, крім 8 «беззнакових» бітових полів
довжина 1 вирівняна з 4-байтовою межею і має розмір 4 байти. З допомогою
-mno-bit-align, структура вирівняна за межею 1 байт і має розмір 1 байт.

-mno-strict-align
-mstrict-align
У системі V.4 і вбудованих системах PowerPC не передбачається (не) припускає, що невирівняна пам'ять
посилання обробляються системою.

-mrelocable
-мнопереміщаються
Згенеруйте код, який дозволяє (не дозволяє) переміщувати статичний виконуваний файл до a
іншу адресу під час виконання. Простий вбудований системний завантажувач PowerPC повинен
перемістити весь вміст ".got2" і 4-байтових місць, перерахованих у ".fixup"
розділ, таблицю 32-розрядних адрес, створених за допомогою цієї опції. Щоб це спрацювало, все
об'єкти, пов'язані разом, повинні бути скомпільовані -mrelocable or -mrelocatable-lib.
-mrelocable код вирівнює стек за 8-байтовою межею.

-mrelocatable-lib
-mno-relocable-lib
Люблю -mrelocable, -mrelocatable-lib створює розділ ".fixup", щоб дозволити статику
виконувані файли, які будуть переміщені під час виконання, але -mrelocatable-lib не використовує
менше вирівнювання стека -mrelocable. Об’єкти, складені з -mrelocatable-lib може
бути пов’язаним з об’єктами, скомпільованими з будь-якою комбінацією -mrelocable Варіанти.

-мно-ток
-mtoc
У системі V.4 і вбудованих системах PowerPC не передбачається (не) припускати, що регістр 2 містить
покажчик на глобальну область, що вказує на адреси, що використовуються в програмі.

-маленький
-mlittle-endian
У системі V.4 і вбудованих системах PowerPC компілюють код для процесора в невеликій кількості
порядковий режим. The -mlittle-endian варіант такий самий, як -маленький.

-великий
-big-endian
У системі V.4 та вбудованих системах PowerPC компілюйте код для процесора у великому
порядковий режим. The -big-endian варіант такий самий, як -великий.

-mdynamic-no-pic
У системах Darwin і Mac OS X компілюйте код, щоб його не можна було переміщувати, а це
його зовнішні посилання переміщуються. Отриманий код підходить для
програми, але не спільні бібліотеки.

-msingle-pic-base
Розглядайте регістр, який використовується для адресації PIC, як доступний лише для читання, а не завантажуйте його в файл
пролог для кожної функції. За ініціалізацію цього відповідає система виконання
зареєструвати з відповідним значенням перед початком виконання.

-mpriritize-restricted-insns=пріоритет
Ця опція керує пріоритетом, який призначається обмеженому слоту відправлення
інструкції під час другого проходу планування. Аргумент пріоритет приймає значення
0, 1або 2 призначити ні, найвищий або другий за вищим (відповідно) пріоритет
інструкції з обмеженим доступом.

-msched-costly-dep=тип_залежності
Цей параметр контролює, які залежності будуть вважатися витратними для цілі
планування інструкцій. Аргумент тип_залежності приймає одне з наступних
значення:

немає Жодна залежність не коштує дорого.

всі Усі залежності коштують дорого.

true_store_to_load
Справжня залежність від магазину до навантаження коштує дорого.

store_to_load
Будь-яка залежність від магазину до навантаження коштує дорого.

номер
Будь-яка залежність, для якої затримка більше або дорівнює номер коштує дорого.

-minsert-sched-nops=схема
Цей параметр визначає, яка схема вставки NOP використовується під час другого планування
пройти. Аргумент схема приймає одне з таких значень:

немає Не вставляйте NOP.

майданчик Заповніть NOPs будь-яку групу диспетчеризації, яка має вільні місця видачі, відповідно до
групування планувальника.

regroup_exact
Вставте NOP, щоб змусити дорогі залежні заклади розділити окремі групи. Вставте точно
згідно з оцінками, стільки NOP, скільки необхідно, щоб примусити insn до нової групи
групування процесорів.

номер
Вставте NOP, щоб змусити дорогі залежні заклади розділити окремі групи. Вставити номер
NOPs, щоб примусити insn до нової групи.

-mcall-sysv
У системі V.4 і вбудованих системах PowerPC компілюйте код, використовуючи умовні умови виклику, що
дотримуватися проекту двійкового інтерфейсу додатків System V PowerPC від березня 1995 року
доповнення до процесора. Це значення за замовчуванням, якщо ви не налаштували GCC за допомогою
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Вкажіть обидва -mcall-sysv та -меабі Варіанти.

-Mcall-sysv-noeabi
Вкажіть обидва -mcall-sysv та -мно-еабі Варіанти.

-mcall-aixdesc
У системі V.4 і вбудованих системах PowerPC компілюйте код для операційної системи AIX.

-mcall-linux
На системі V.4 та вбудованих системах PowerPC компілюйте код для GNU на базі Linux
системи.

-mcall-freebsd
У системі V.4 і вбудованих системах PowerPC компілюйте код для роботи FreeBSD
системи.

-mcall-netbsd
У системі V.4 і вбудованих системах PowerPC компілюйте код для роботи NetBSD
системи.

-mcall-openbsd
У системі V.4 і вбудованих системах PowerPC компілюйте код для роботи OpenBSD
системи.

-maix-struct-return
Повернути всі структури в пам’яті (як зазначено в AIX ABI).

-msvr4-struct-return
Повертати структури менше 8 байт у регістрах (як зазначено в SVR4 ABI).

-mabi=abi-тип
Розширте поточний ABI за допомогою певного розширення або видаліть таке розширення. Дійсний
значення є altivec, no-altivec, спе, ні-спе, ibmlongdouble, ieeelongdouble, elfv1,
elfv2.

-mabi=spe
Розширте поточний ABI за допомогою розширень SPE ABI. Це не змінює ABI за замовчуванням,
замість цього він додає розширення SPE ABI до поточного ABI.

-mabi=no-spe
Вимкніть розширення Book-E SPE ABI для поточного ABI.

-mabi=ibmlongdouble
Змініть поточний ABI, щоб використовувати IBM розширеної точності long double. Це PowerPC
32-розрядний варіант SYSV ABI.

-mabi=ieeelongdouble
Змініть поточний ABI, щоб використовувати IEEE розширеної точності long double. Це PowerPC
32-розрядний варіант ABI для Linux.

-mabi=elfv1
Змініть поточний ABI, щоб використовувати ABI ELFv1. Це стандартний ABI для big-endian
PowerPC 64-розрядна версія Linux. Для перевизначення ABI за замовчуванням потрібна спеціальна підтримка системи та
ймовірно, зазнає невдачі у вражаючий спосіб.

-mabi=elfv2
Змініть поточний ABI, щоб використовувати ABI ELFv2. Це стандартний ABI для малого-
endian PowerPC 64-розрядний Linux. Для перевизначення ABI за замовчуванням потрібна спеціальна система
підтримки і, ймовірно, зазнає невдачі в вражаючий спосіб.

-мпрототип
-мно-прототип
У системі V.4 і вбудованих системах PowerPC передбачається, що всі виклики змінного аргументу
функції правильно прототиповані. В іншому випадку компілятор повинен вставити інструкцію
перед кожним непрототипованим викликом встановити або очистити біт 6 регістра коду умови
(CR), щоб вказати, чи передаються значення з плаваючою комою
регістрів у випадку, якщо функція приймає змінні аргументи. З -мпрототип, тільки дзвінки
до прототипу змінної функції аргументу встановіть або очистіть біт.

-msim
У вбудованих системах PowerPC припустимо, що викликається модуль запуску sim-crt0.o та
що стандартні бібліотеки C є libsim.a та libc.a. Це значення за замовчуванням для
powerpc-*-eabisim конфігурації

-mmvme
У вбудованих системах PowerPC припустимо, що викликається модуль запуску crt0.o і
стандартні бібліотеки C libmvme.a та libc.a.

- шалено
У вбудованих системах PowerPC припустимо, що викликається модуль запуску crt0.o і
стандартні бібліотеки C libads.a та libc.a.

- жовтий ніж
У вбудованих системах PowerPC припустимо, що викликається модуль запуску crt0.o і
стандартні бібліотеки C Libyk.a та libc.a.

-mvxworks
У системі V.4 і вбудованих системах PowerPC вкажіть, що ви компілюєте для a
Система VxWorks.

-член
На вбудованих системах PowerPC встановіть параметр PPC_EMB біт у заголовку прапорів ELF для вказівки
Що eabi використовуються розширені переїзди.

-меабі
-мно-еабі
У системі V.4 і вбудованих системах PowerPC (не) дотримуються вбудованих
Бінарний інтерфейс додатків (EABI), який являє собою набір модифікацій Системи
Специфікації V.4. Вибір -меабі означає, що стек вирівняний з 8-байтовим
межі, функція "__eabi" викликається з "main" для налаштування середовища EABI,
і -msdata Опція може використовувати як "r2", так і "r13", щоб вказувати на два окремих невеликих даних
області. Вибір -мно-еабі означає, що стек вирівняний за 16-байтовою межею, ні
Функція ініціалізації EABI викликається з "main" і -msdata використовується лише варіант
"r13", щоб вказати на одну невелику область даних. The -меабі опція ввімкнена за замовчуванням, якщо ви
налаштовано GCC за допомогою одного з powerpc*-*-eabi* Варіанти.

-msdata=eabi
У системі V.4 і вбудованих системах PowerPC поставте невеликий ініціалізований глобальний і
статичні дані в .sdata2 розділ, на який вказує регістр "r2". Покладіть дрібні
ініціалізовані глобальні та статичні дані, що не є константою .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 віддає перевагу першій адресі та генерує "bl callee"
якщо інструкція PPC "bl" прямує до абонента; інакше – компонувальник
генерує "bl L42" для виклику острова розгалуження. Острів гілок додається до
тіло функції, що викликає; він обчислює повну 32-бітну адресу абонента та
стрибає до нього.

У системах Mach-O (Darwin) цей параметр спрямовує випромінювання компілятора на клей для
кожен прямий виклик, і лінкер Дарвіна вирішує, використовувати його чи відкинути.

У майбутньому GCC може ігнорувати всі специфікації довгого виклику, коли лінкер відомий
генерувати клей.

-mtls-маркери
-mno-tls-маркери
Позначте (не позначайте) виклики "__tls_get_addr" з переміщенням із зазначенням функції
аргумент. Переміщення дозволяє компоновщику надійно асоціювати виклик функції
Інструкції з налаштування аргументів для оптимізації TLS, що, у свою чергу, дозволяє GCC краще
заплануйте послідовність.

-нитка
Додає підтримку багатопоточності за допомогою pthreads бібліотека. Цей параметр встановлює прапори для
як препроцесор, так і компонувальник.

-mrecip
-мно-рецепт
Цей параметр дозволяє використовувати взаємну оцінку та оцінку зворотного квадратного кореня
інструкції з додатковими кроками Ньютона-Рафсона для підвищення точності замість
виконання ділення або квадратного кореня та ділення для аргументів з плаваючою комою. Ви повинні використовувати
-швидка математика варіант при використанні -mrecip (або принаймні -funsafe-math-optimizations,
-тільки кінцева математика, -частотно-мат та -fno-trapping-math). Зауважте, що в той час як
пропускна здатність послідовності, як правило, вища, ніж пропускна здатність не-
взаємною інструкцією, точність послідовності може бути зменшена до 2 ulp
(тобто обернене до 1.0 дорівнює 0.99999994) для взаємних квадратних коренів.

-mrecip=вибирати
Цей параметр визначає, які інструкції взаємної оцінки можуть використовуватися. вибирати це
розділений комами список параметрів, перед яким може стояти символ "!" щоб інвертувати параметр:
"всі": увімкнути всі інструкції щодо оцінки, "за замовчуванням": увімкнути інструкції за замовчуванням,
еквівалентно -mrecip, "none": вимкнути всі інструкції щодо оцінки, еквівалентно
-мно-рецепт; "div": увімкнути інструкції взаємної апроксимації для обох одиночних
і подвійною точністю; "divf": увімкнути взаємне наближення одинарної точності
інструкції; "divd": увімкнути взаємне наближення подвійної точності
інструкції; "rsqrt": увімкнути інструкції наближення зворотного квадратного кореня
як для одинарної, так і для подвійної точності; "rsqrtf": увімкнути взаємне значення одинарної точності
інструкції щодо наближення квадратного кореня; "rsqrtd": увімкнути подвійну точність
інструкції щодо апроксимації взаємного квадратного кореня;

Так, наприклад, -mrecip=все,!rsqrtd дозволяє виконати всі взаємні оцінки
інструкції, крім інструкцій "FRSQRTE", "XSRSQRTEDP" і "XVRSQRTEDP"
які обробляють обчислення зворотного квадратного кореня подвійної точності.

-mrecip-точність
-мно-рецепт-точність
Припустимо (не припускаємо), що інструкції щодо взаємної оцінки забезпечують вищу -
точні оцінки, ніж це передбачено PowerPC ABI. Вибір -mcpu=потужність6,
-mcpu=потужність7 or -mcpu=потужність8 автоматично вибирає -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 також має бути увімкнено. Бібліотеки MASS повинні бути
вказано під час посилання.

-мфриз
-мно-фриз
Генерувати (не генерувати) інструкцію "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 параметр за замовчуванням.

-mcompat-align-parm
-mno-compat-align-parm
Згенеруйте (не генеруйте) код для передачі параметрів структури з максимальним вирівнюванням
64 біт, для сумісності зі старішими версіями GCC.

Старіші версії GCC (до 4.9.0) неправильно не вирівнювали параметр структури
на 128-бітній межі, коли ця структура містила член, який вимагає 128-біт
вирівнювання. Це виправлено в останніх версіях GCC. Цей параметр можна використовувати
для створення коду, сумісного з функціями, скомпільованими зі старішими версіями
GCC.

У цій версії компілятора -mcompat-align-parm за замовчуванням, за винятком випадків, коли
використовуючи Linux ELFv2 ABI.

RX Опції

Ці параметри командного рядка визначені для цілей RX:

-m64bit-подвійники
-m32bit-подвійники
Зробіть тип даних "подвійний" 64 біт (-m64bit-подвійники) або 32 біти (-m32bit-подвійники)
за розміром. За замовчуванням є -m32bit-подвійники. примітки Апаратне забезпечення RX з плаваючою комою працює лише
на 32-бітові значення, тому за замовчуванням є -m32bit-подвійники.

-fpu
-nofpu
Вмикає (-fpu) або вимикає (-nofpu) використання апаратного забезпечення RX з плаваючою комою. The
за замовчуванням увімкнено для RX600 серії та вимкнено для RX200 серії.

Інструкції з плаваючою комою генеруються лише для 32-бітових значень з плаваючою комою,
однак, тому апаратне забезпечення FPU не використовується для дублів, якщо -m64bit-подвійники опція
використаний

примітки Якщо -fpu тоді параметр увімкнено -funsafe-math-optimizations також увімкнено
автоматично. Це тому, що інструкції RX FPU самі по собі небезпечні.

-mcpu=ім'я
Вибирає тип цільового ЦП RX. На даний момент підтримуються три типи:
родової RX600 та RX200 серії апаратних і спец RX610 ЦП. За замовчуванням є
RX600.

Єдина відмінність між ними RX600 та RX610 Ест дие ле RX610 не підтримує
Інструкція «МВТИПЛ».

Команда RX200 серія не має апаратної одиниці з плаваючою комою і так -nofpu увімкнено
за замовчуванням, коли вибрано цей тип.

-big-endian-data
-mlittle-endian-data
Зберігайте дані (але не код) у форматі big-endian. За замовчуванням є
-mlittle-endian-data, тобто зберігати дані у форматі малого байта.

-msmall-data-limit=N
Вказує максимальний розмір глобальних і статичних змінних, які можуть бути розміщені в байтах
в малу область даних. Використання невеликої області даних може призвести до меншої та швидшої
коду, але розмір області обмежений, і програміст повинен забезпечити це
площа не переповнюється. Також, коли невелика область даних використовується один із RX
регістри (зазвичай "r13") зарезервовано для використання, що вказують на цю область, тому його немає
більше доступний для використання компілятором. Це може призвести до уповільнення та/або збільшення
код, якщо змінні поміщаються в стек, а не зберігаються в цьому регістрі.

Зверніть увагу, що загальні змінні (змінні, які не були ініціалізовані) і константи є
не поміщаються в малу область даних, оскільки вони призначаються іншим розділам у
вихідний виконуваний файл.

Значення за замовчуванням дорівнює нулю, що вимикає цю функцію. Зауважте, цієї функції немає
увімкнено за замовчуванням з вищими рівнями оптимізації (-О2 тощо) через
потенційно шкідливі наслідки резервування реєстру. Це залежить від програміста
експериментувати та з’ясовувати, чи корисна ця функція їхній програмі. Побачити
опис -мпід варіант для опису того, як фактично зареєструватися
утримуйте вказівник невеликої області даних.

-msim
-мно-сім
Використовуйте час виконання симулятора. За замовчуванням використовується середовище виконання, специфічне для дошки libgloss.

-mas100-синтаксис
-mno-as100-синтаксис
Під час створення виводу асемблера використовуйте синтаксис, сумісний з AS100 Renesas
монтажник. Цей синтаксис також може оброблятися асемблером GAS, але він має деякі
обмеження, тому він не генерується за замовчуванням.

-mmax-constant-size=N
Вказує максимальний розмір константи в байтах, яку можна використовувати як операнд
інструкція RX. Хоча набір інструкцій RX допускає константи до 4
довжина байтів, що використовуються в інструкціях, довше значення дорівнює більшому
інструкція. Таким чином, за деяких обставин може бути корисно обмежити розмір
константи, які використовуються в інструкціях. Замість цього є занадто великі константи
поміщається в постійний пул і посилається через регістр опосередкованого напрямку.

Значення N може бути від 0 до 4. Значення 0 (за замовчуванням) або 4 означає, що
допускаються константи будь-якого розміру.

- розслабитися
Увімкнути релаксацію лінкера. Розслаблення лінкера – це процес, за допомогою якого лінкер намагається
зменшити розмір програми, знайшовши коротші версії різних інструкцій.
Вимкнено за умовчанням.

-mint-register=N
Вкажіть кількість регістрів, які потрібно зарезервувати для функцій обробника швидких переривань. The
значення N може бути від 0 до 4. Значення 1 означає, що регістр "r13" зарезервований
для ексклюзивного використання обробників швидких переривань. Значення 2 резерви «r13» і
"r12". Значення 3 резервів "r13", "r12" і "r11" і значення 4 резервів "r13"
через "r10". Значення 0 за замовчуванням не резервує жодних регістрів.

-msave-acc-in-interrupts
Вказує, що функції обробника переривань повинні зберігати регістр акумулятора.
Це необхідно лише в тому випадку, якщо звичайний код може використовувати регістр акумулятора, наприклад
оскільки він виконує 64-розрядні множення. За замовчуванням акумулятор ігнорується
оскільки це робить обробники переривань швидшими.

-мпід
-мно-під
Дозволяє генерувати незалежні від позиції дані. Коли ввімкнено будь-який доступ до
постійні дані виконуються через зміщення від базової адреси, що зберігається в регістрі. Це
дозволяє визначати розташування постійних даних під час виконання без необхідності
виконуваний файл, який буде переміщено, що є перевагою для вбудованих додатків із close
обмеження пам'яті. Цей параметр не впливає на дані, які можна змінити.

Зауважте, що використання цієї функції резервує регістр, зазвичай «r13», для постійних даних
базова адреса. Це може призвести до повільнішого та/або більшого коду, особливо у складному
функції.

Фактичний регістр, обраний для зберігання постійної адреси бази даних, залежить від того, чи
-msmall-data-limit та / або -монетний реєстр увімкнено параметри командного рядка.
Починаючи з регістра «r13» і продовжуючи вниз, першими виділяються регістри
щоб задовольнити вимоги -монетний реєстр, То -мпід і, нарешті
-msmall-data-limit. Таким чином, регістр малої області даних може бути "r8"
якщо обидва -mint-register=4 та -мпід вказуються в командному рядку.

За замовчуванням ця функція не ввімкнена. За замовчуванням можна відновити за допомогою -мно-під
параметр командного рядка.

-mno-warn-multiple-fast-interrupts
-mwarn-множинні-швидкі-переривання
Запобігає GCC від видачі попереджувального повідомлення, якщо він знаходить більше одного швидкого переривання
обробник під час компіляції файлу. За замовчуванням видає попередження для кожного додаткового
Знайдено обробник швидкого переривання, оскільки RX підтримує лише одне таке переривання.

Примітка: Загальний параметр командного рядка GCC -фіксований-Реджо має особливе значення для RX
порт при використанні з атрибутом функції "переривання". Цей атрибут вказує на a
функція, призначена для обробки швидких переривань. GCC гарантує, що використовує лише регістри
"r10", "r11", "r12" та/або "r13" і лише за умови, що нормальне використання
відповідні реєстри були обмежені через -фіксований-Реджо or -монетний реєстр
параметри командного рядка.

S / 390 та zSeries Опції

Це -m параметри, визначені для архітектури S/390 і zSeries.

-mhard-float
-msoft-float
Використовуйте (не використовуйте) апаратні інструкції з плаваючою комою та регістри для floating-
точкові операції. Коли -msoft-float вказано, функціонує в libgcc.a звикли
виконувати операції з плаваючою комою. Коли -mhard-float вказано, компілятор
генерує інструкції IEEE з плаваючою комою. Це значення за замовчуванням.

-mhard-dfp
-mno-hard-dfp
Використовуйте (не використовуйте) апаратні інструкції з плаваючою комою для десяткового
операції з плаваючою комою. Коли -mno-hard-dfp вказано, функціонує в libgcc.a він має
використовується для виконання десяткових операцій з плаваючою комою. Коли -mhard-dfp вказано,
компілятор генерує апаратні інструкції з десятковою плаваючою комою. Це значення за замовчуванням
та цінності -march=z9-ec або вище.

-млонг-подвійний-64
-млонг-подвійний-128
Ці перемикачі керують розміром типу «довгий подвійний». Розмір 64 біта робить
"long double" тип еквівалентний типу "double". Це значення за замовчуванням.

-mbackchain
-мно-бекчейн
Зберігайте (не зберігайте) адресу кадру абонента як покажчик бекчейна в
кадр стека викликаного. Для налагодження за допомогою інструментів може знадобитися бекчейн
не розуміють інформацію про кадр виклику DWARF 2. Коли -mno-packed-stack В
ефект, покажчик бекчейна зберігається в нижній частині кадру стека; коли
-mpacked-stack фактично, бекчейн розміщується в самому верхньому слові
Область збереження реєстру 96/160 байт.

Загалом, код скомпільований з -mbackchain сумісний із викликом із кодом, скомпільованим з
-mmo-backchain; однак використання бекчейна для цілей налагодження зазвичай вимагає
з яким побудовано весь двійковий файл -mbackchain. Зверніть увагу, що поєднання з
-mbackchain, -mpacked-stack та -mhard-float не підтримується. Для того щоб побудувати а
використання ядра linux -msoft-float.

За замовчуванням не підтримується бекчейн.

-mpacked-stack
-mno-packed-stack
Використовуйте (не використовуйте) макет упакованого стека. Коли -mno-packed-stack вказано,
Компілятор використовує всі поля області збереження регістру розміром 96/160 байт тільки для їх
призначення за замовчуванням; невикористані поля все ще займають місце в стеку. Коли -mpacked-stack is
зазначено, слоти збереження регістру щільно запаковані у верхній частині збереження регістру
площа; невикористаний простір повторно використовується для інших цілей, що дозволяє більш ефективно використовувати його
доступний простір стека. Однак коли -mbackchain також діє, найвищий
слово області збереження завжди використовується для зберігання бекчейну та зворотної адреси
register завжди зберігається на два слова нижче бекчейна.

Поки не використовується бекчейн кадрів стека, код, згенерований за допомогою -mpacked-stack
сумісний із викликом із кодом, згенерованим за допомогою -mno-packed-stack. Зверніть увагу, що деякі не FSF
випуски GCC 2.95 для згенерованого коду S/390 або zSeries, який використовує кадр стека
бекчейн під час виконання, а не лише для налагодження. Такий код не викликає-
сумісний з кодом, скомпільованим з -mpacked-stack. Також зверніть увагу, що поєднання з
-mbackchain, -mpacked-stack та -mhard-float не підтримується. Для того щоб побудувати а
використання ядра linux -msoft-float.

За замовчуванням не використовувати макет упакованого стека.

-msmall-exec
-mno-small-exec
Згенеруйте (або не генеруйте) код за допомогою інструкції «bras» для виконання підпрограми
дзвінки. Це працює надійно, лише якщо загальний розмір виконуваного файлу не перевищує 64 КБ.
За замовчуванням замість цього використовується інструкція "basr", яка цього не має
обмеження.

-м64
-м31
Коли -м31 вказано, генерувати код, сумісний із GNU/Linux для S/390 ABI. Коли
-м64 вказано, генерувати код, сумісний із GNU/Linux для zSeries ABI. Це
дозволяє GCC, зокрема, генерувати 64-розрядні інструкції. Для s390 цілі,
за замовчуванням -м31, У той час s390x цілі за замовчуванням -м64.

-мзарх
-меса
Коли -мзарх вказано, згенеруйте код, використовуючи інструкції, доступні на
z/Архітектура. Коли -меса вказано, згенеруйте код, використовуючи інструкції
доступний на ESA/390. Зауважте, що -меса неможливо з -м64. При генерації
код, сумісний із GNU/Linux для S/390 ABI, за замовчуванням -меса. При генерації
код, сумісний з GNU/Linux для zSeries ABI, за замовчуванням -мзарх.

-mmvcle
-mno-mvcle
Згенеруйте (або не генеруйте) код за допомогою інструкції "mvcle" для виконання блоку
рухається. Коли -mno-mvcle вказано, замість цього використовуйте цикл "mvc". Це значення за замовчуванням
якщо не оптимізувати розмір.

-mdebug
-mno-налагодження
Роздрукуйте (або не друкуйте) додаткову інформацію про налагодження під час компіляції. За замовчуванням є
щоб не друкувати налагоджувальну інформацію.

-березень=тип процесора
Згенеруйте код, який працює на тип процесора, що є назвою системи, що представляє a
певний тип процесора. Можливі значення для тип процесора він має g5, g6, z900, z990, z9-109,
z9-ec, z10, z196 та zEC12. При створенні коду скористайтеся інструкціями, доступними на
z/Архітектура, за замовчуванням є -березень=z900. В іншому випадку, за замовчуванням -марш=g5.

-mtune=тип процесора
Налаштуйтеся на тип процесора все, що стосується згенерованого коду, крім ABI
і набір доступних інструкцій. Список тип процесора значення такі ж, як і для
- марш. За замовчуванням використовується значення для - марш.

-mtpf-trace
-mno-tpf-trace
Згенеруйте код, який додає (не додає) специфічні гілки ОС TPF для відстеження підпрограм
в операційній системі. Цей параметр вимкнено за замовчуванням, навіть під час компіляції для
ОС TPF.

-змішаний-божевільний
-мно-злитий-мадд
Створіть код, який використовує (не використовує) множення та накопичення з плаваючою комою
інструкції. Ці інструкції генеруються за замовчуванням, якщо апаратна з плаваючою комою
використовується.

-mwarn-framesize=розмір кадру
Видавати попередження, якщо поточна функція перевищує заданий розмір кадру. Тому що це є
перевірка під час компіляції, це не повинно бути справжньою проблемою під час виконання програми. Це
призначений для визначення функцій, які, швидше за все, викликають переповнення стека. це є
корисно для використання в середовищі з обмеженим розміром стека, наприклад, ядро ​​Linux.

-mwarn-динамічний стек
Видавати попередження, якщо функція викликає "alloca" або використовує масиви динамічного розміру. Це
як правило, це погана ідея з обмеженим розміром стека.

-mstack-guard=стек-охоронець
-mstack-size=розмір стопки
Якщо ці параметри передбачені, сервер S/390 видає додаткові інструкції в файлі
Пролог функції, який запускає пастку, якщо розмір стека дорівнює стек-охоронець байт вище
розмір стопки (Пам’ятайте, що стек на S/390 зростає вниз). Якщо стек-охоронець
Опція опускається найменша потужність на 2 більша за розмір кадру скомпільованого
обрана функція. Ці параметри призначені для використання для налагодження стека
проблеми з переповненням. Додатково випромінюваний код викликає лише невеликі накладні витрати і
тому може також використовуватися в виробничих системах без більшої продуктивності
деградація. Наведені значення мають бути точними степенями 2 і розмір стопки повинен бути
більше стек-охоронець не перевищуючи 64 тис. Щоб бути ефективним, доп
код робить припущення, що стек починається з адреси, вирівняної за значенням
дається розмір стопки, стек-охоронець опцію можна використовувати лише разом із
розмір стопки.

-mhotpatch=попередні напівслова,після напівслова
Якщо параметр гарячого виправлення увімкнено, для нього створюється пролог функції "гарячого виправлення".
всі функції в блоці компіляції. Перед міткою функції стоїть дане
кількість двобайтових інструкцій NOP (попередні напівслова, максимум 1000000). Після
етикетка, 2 * після напівслова байти додаються, використовуючи найбільші інструкції, подібні до NOP
архітектура дозволяє (максимум 1000000).

Якщо обидва аргументи нульові, гаряче виправлення вимкнено.

Цю опцію можна замінити для окремих функцій з атрибутом «hotpatch».

Рахунок Опції

Ці параметри визначені для реалізацій Score:

-меб
Скомпілювати код для режиму big-endian. Це значення за замовчуванням.

-мел
Скомпілювати код для режиму малого ланцюга.

-mnhwloop
Вимкнути генерацію інструкцій "bcnz".

-мулс
Увімкнути створення неузгоджених інструкцій завантаження та збереження.

-ммак
Увімкніть використання інструкцій множення-нагромадження. Вимкнено за замовчуванням.

-mscore5
Вкажіть SCORE5 як цільову архітектуру.

-mscore5u
Вкажіть SCORE5U цільової архітектури.

-mscore7
Вкажіть SCORE7 як цільову архітектуру. Це значення за замовчуванням.

-mscore7d
Вкажіть SCORE7D як цільову архітектуру.

SH Опції

Ці -m визначені параметри для реалізацій SH:

-м1 Згенеруйте код для SH1.

-м2 Згенеруйте код для SH2.

-m2e
Згенеруйте код для SH2e.

-m2a-nofpu
Згенеруйте код для SH2a без FPU або для SH2a-FPU таким чином, щоб
одиниця з плаваючою комою не використовується.

-m2a-лише одиночний
Згенеруйте код для SH2a-FPU таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m2a-один
Згенеруйте код для SH2a-FPU, припускаючи, що одиниця з плаваючою комою має одинарну точність
режим за замовчуванням.

-m2a
Згенеруйте код для SH2a-FPU, припускаючи, що одиниця з плаваючою комою має подвійну точність
режим за замовчуванням.

-м3 Згенеруйте код для SH3.

-m3e
Згенеруйте код для SH3e.

-m4-nofpu
Згенеруйте код для SH4 без одиниці з плаваючою комою.

-m4-лише одиночний
Згенеруйте код для SH4 за допомогою блоку з плаваючою комою, який підтримує лише одинарний
точна арифметика.

-m4-один
Згенеруйте код для SH4, припускаючи, що одиниця з плаваючою комою перебуває в режимі одинарної точності
за замовчуванням

-м4 Згенеруйте код для SH4.

-m4-100
Згенеруйте код для SH4-100.

-m4-100-nofpu
Згенеруйте код для SH4-100 таким чином, щоб одиниця з плаваючою комою не використовувалася.

-m4-100-одиночний
Згенеруйте код для SH4-100, припускаючи, що одиниця з плаваючою комою перебуває в режимі одинарної точності
за замовчуванням

-m4-100-лише одиночний
Згенеруйте код для SH4-100 таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4-200
Згенеруйте код для SH4-200.

-m4-200-nofpu
Згенеруйте код для SH4-200 без таким чином, щоб одиниця з плаваючою комою не була
використаний

-m4-200-одиночний
Згенеруйте код для SH4-200, припускаючи, що одиниця з плаваючою комою перебуває в режимі одинарної точності
за замовчуванням

-m4-200-лише одиночний
Згенеруйте код для SH4-200 таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4-300
Згенеруйте код для SH4-300.

-m4-300-nofpu
Згенеруйте код для SH4-300 без таким чином, щоб одиниця з плаваючою комою не була
використаний

-m4-300-одиночний
Згенеруйте код для SH4-300 таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4-300-лише одиночний
Згенеруйте код для SH4-300 таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4-340
Згенеруйте код для SH4-340 (без MMU, без FPU).

-m4-500
Згенеруйте код для SH4-500 (без FPU). Проходить -isa=sh4-nofpu до асемблера.

-m4a-nofpu
Згенеруйте код для SH4al-dsp або для SH4a таким чином, щоб з плаваючою комою
одиниця не використовується.

-m4a-лише одиночний
Згенеруйте код для SH4a таким чином, щоб не було подвійної точності з плаваючою комою
використовуються операції.

-m4a-один
Згенеруйте код для SH4a, припускаючи, що одиниця з плаваючою комою має одинарну точність
режим за замовчуванням.

-m4a
Згенеруйте код для SH4a.

-m4al
Такий же, як -m4a-nofpu, за винятком того, що він неявно проходить -dsp до асемблера. GCC
на даний момент не створює жодних інструкцій DSP.

-m5-32media
Згенеруйте 32-розрядний код для SHmedia.

-m5-32media-nofpu
Згенеруйте 32-розрядний код для SHmedia таким чином, щоб одиниця з плаваючою комою не була
використаний

-m5-64media
Згенеруйте 64-розрядний код для SHmedia.

-m5-64media-nofpu
Згенеруйте 64-розрядний код для SHmedia таким чином, щоб одиниця з плаваючою комою не була
використаний

-m5-компактний
Згенеруйте код для SHcompact.

-m5-compact-nofpu
Згенеруйте код для SHcompact таким чином, щоб одиниця з плаваючою комою не використовувалася.

-мб Скомпілювати код для процесора в режимі big-endian.

-мл Скомпілювати код для процесора в режимі малого байта.

-mdalign
Вирівняти подвоєння за 64-бітними межами. Зауважте, що це змінює конвенції викликів,
і, таким чином, деякі функції зі стандартної бібліотеки C не працюють, якщо ви не перекомпілюєте
це спочатку з -mdalign.

- розслабитися
Скоротіть деякі посилання на адресу під час посилання, якщо це можливо; використовує параметр компонування
- розслабитися.

- велика таблиця
Використовуйте 32-бітові зміщення в таблицях "перемикання". За замовчуванням використовуються 16-бітові зміщення.

-бітопс
Увімкнути використання інструкцій маніпуляції бітами на SH2A.

-mfmovd
Увімкніть використання інструкції «fmovd». Перевірте -mdalign для обмежень вирівнювання.

-мренеси
Дотримуйтесь умов дзвінків, визначених Renesas.

-мно-ренеси
Дотримуйтесь умов викликів, визначених для GCC до конвенцій Renesas
були доступні. Цей параметр є за замовчуванням для всіх цілей ланцюжка інструментів SH.

-mnomacsave
Позначте регістр "MAC" як заблокований виклик, навіть якщо -мренеси дається.

-миее
-мно-іее
Контролюйте відповідність IEEE порівнянь з плаваючою комою, що впливає на обробку
випадків, коли результат порівняння не впорядкований. За замовчуванням -миее is
неявно ввімкнено. Якщо -фінітна-математична увімкнено -мно-іее встановлюється неявно,
що призводить до швидшого порівняння з плаваючою комою, більший-рівний і менший-рівний. The
Параметри implcit можна змінити, вказавши будь-яке -миее or -мно-іее.

-minline-ic_invalidate
Вбудований код для скасування записів кешу інструкцій після налаштування вкладеної функції
батути. Цей параметр не діє, якщо - режим користувача діє і вибрано
варіант генерації коду (напр -м4) не дозволяє використовувати інструкцію "icbi".
Якщо вибраний параметр генерації коду не дозволяє використовувати "icbi"
інструкція, і - режим користувача не діє, вбудований код маніпулює
масив адрес кешу інструкцій безпосередньо з асоціативним записом. Це не тільки
вимагає привілейованого режиму під час виконання, але він також не працює, якщо був рядок кешу
відображено через TLB і стало невідображеним.

- неправильний розмір
Розмір і розташування інструкції дампу в коді зборки.

-mpadstruct
Ця опція не підтримується. Він доповнює структури до 4 байтів, тобто
несумісний з SH ABI.

-matomic-model=модель
Встановлює модель атомарних операцій і додаткові параметри через кому
список. Детальніше про атомарні вбудовані функції див __атомний Вбудовані,
підтримуються такі моделі та параметри:

ніхто
Вимкніть згенеровані компілятором атомарні послідовності та випустіть бібліотечні виклики для atomic
операції. Це значення за замовчуванням, якщо ціль не "sh*-*-linux*".

м’який-гуса
Створення атомних послідовностей програмного забезпечення gUSA, сумісного з GNU/Linux для вбудованого атома
у функціях. Створені атомні послідовності потребують додаткової підтримки з боку
код обробки переривань/виключень системи і підходять лише для SH3* і
Одноядерні системи SH4*. Ця опція ввімкнена за замовчуванням, коли ціль є
"sh*-*-linux*" і SH3* або SH4*. Якщо метою є SH4A, ця опція також буде
частково використовувати апаратні атомарні інструкції "movli.l" і "movco.l", щоб
створювати більш ефективний код, якщо строгий вказано.

soft-tcb
Створення програмних атомних послідовностей, які використовують змінну в управлінні потоком
блокувати. Це варіант послідовностей gUSA, який також можна використовувати на SH1*
і цілі SH2*. Створені атомні послідовності потребують додаткової підтримки з
код обробки переривань/виключень системи та підходять лише для
одноядерні системи. При використанні цієї моделі, gbr-offset= параметр повинен бути
також зазначено.

м'яка-маска
Генеруйте програмні атомарні послідовності, які тимчасово вимикають переривання шляхом налаштування
«SR.IMASK = 1111». Ця модель працює тільки тоді, коли програма працює в привілейованому режимі
і підходить лише для одноядерних систем. Додаткова підтримка від
Код обробки переривань/виключень системи не потрібен. Ця модель є
увімкнено за замовчуванням, якщо цільовим є "sh*-*-linux*" і SH1* або SH2*.

hard-llcs
Згенеруйте апаратні атомні послідовності за допомогою інструкцій "movli.l" і "movco.l".
тільки Це доступне лише на SH4A і підходить для багатоядерних систем.
Оскільки апаратні інструкції підтримують лише 32-розрядні атомарні змінні, доступ до 8
або 16-розрядні змінні емулюються з 32-розрядними доступами. Код, скомпільований з цим
Опція також буде сумісна з іншим програмним забезпеченням атомарної моделі
системи обробки переривань/виключень, якщо вони виконуються в системі SH4A. Додатковий
підтримка коду обробки переривань/виключень системи не потрібна
для цієї моделі.

gbr-offset=
Цей параметр визначає зміщення в байтах змінної в елементі керування потоком
блокова структура, яка повинна використовуватися створеними атомними послідовностями, коли
soft-tcb модель обрана. Для інших моделей цей параметр ігнорується.
Вказане значення має бути цілим кратним чотирьом і знаходитися в діапазоні від 0 до 1020.

строгий
Цей параметр запобігає змішаному використанню кількох атомних моделей, навіть якщо вони
буде сумісним, і змусить компілятор генерувати атомарні послідовності
тільки зазначена модель.

-mtas
Згенеруйте код операції "tas.b" для "__atomic_test_and_set". Зверніть увагу, що залежно від
конкретна конфігурація апаратного та програмного забезпечення може погіршити загальну продуктивність
через очищення рядка кешу операндів, які мають на увазі інструкцію "tas.b". Увімкнено
багатоядерні процесори SH4A інструкцію "tas.b" слід використовувати з обережністю, оскільки вона
може призвести до пошкодження даних для певних конфігурацій кешу.

-мпрефергот
Під час генерації коду, незалежного від позиції, випускайте виклики функцій за допомогою глобального зсуву
Таблиця замість таблиці зв'язків процедур.

- режим користувача
-mno-usermode
Не дозволяти (дозволити) компілятору генерувати код привілейованого режиму. Уточнення
- режим користувача також передбачає -mno-inline-ic_invalidate якщо вбудований код не працюватиме
в режимі користувача. - режим користувача є за замовчуванням, якщо цільовим є "sh*-*-linux*". Якщо
мета SH1* або SH2* - режим користувача не впливає, оскільки немає режиму користувача.

-multcost=номер
Встановіть вартість для примноження insn.

-mdiv=стратегія
Встановити стратегію поділу, яка буде використовуватися для цілочисельних операцій поділу. Для SHmedia
стратегія може бути одним з:

fp Виконує операцію з плаваючою комою. Це має дуже високу затримку, але потребує
лише кілька інструкцій, тому це може бути хорошим вибором, якщо вашого коду достатньо
ILP, що легко використовується, щоб дозволити компілятору планувати роботу з плаваючою комою
інструкції разом з іншими інструкціями. Ділення на нуль викликає а
виняток з плаваючою комою.

фактура Використовує цілі операції для обчислення оберненого дільника, а потім
множить дивіденд на обернений. Ця стратегія дозволяє CSE та підйому
зворотного обчислення. Ділення на нуль обчислює невизначений результат,
але не захоплює.

інв:мінлат
Варіант фактура де, якщо не було знайдено жодних CSE або можливостей підйому, або якщо
вся операція була піднята на те саме місце, останні етапи
Зворотні обчислення переплітаються з кінцевим множенням, щоб зменшити загальне
затримки, за рахунок використання кількох інструкцій і, таким чином, пропозиції менше
можливості планування за допомогою іншого коду.

call
Викликає бібліотечну функцію, яка зазвичай реалізує інв:мінлат стратегія. Це
дає високу щільність коду для компіляцій "m5-*media-nofpu".

дзвінок2
Використовує іншу точку входу тієї ж функції бібліотеки, де передбачається, що a
покажчик на таблицю пошуку вже налаштовано, що надає навантаження на покажчик
до CSE та оптимізації підняття коду.

інв:дзвінок
inv:call2
inv:fp
Використовувати фактура алгоритм початкового генерування коду, але якщо код залишається
неоптимізовано, поверніться до call, дзвінок2або fp стратегії, відповідно. Зауважте, що
потенційно-захоплюючий побічний ефект ділення на нуль переноситься окремою
інструкції, тому можливо, що всі цілі інструкції піднято,
але маркер побічного ефекту залишається на місці. Рекомбінація до
операції з плаваючою комою або виклик у цьому випадку неможливі.

inv20u
інв20л
Варіанти інв:мінлат стратегія. У випадку, якщо обернене обчислення
не відокремлені від множення, вони прискорюють ділення там, де підходить дивіденд
на 20 біт (знак плюс, якщо це можливо), вставивши тест, щоб пропустити кількість
операції в цьому випадку; цей тест уповільнює випадок більших дивідендів.
inv20u припускає, що такий малий дивіденд є малоймовірним, і інв20л
припускає, що це ймовірно.

Для цілей, відмінних від SHmedia стратегія може бути одним з:

call-div1
Викликає бібліотечну функцію, яка використовує однокрокову інструкцію поділу "div1".
виконати операцію. Ділення на нуль обчислює невизначений результат і робить
не пастка. Це значення за замовчуванням, за винятком SH4, SH2A та SHcompact.

call-fp
Викликає бібліотечну функцію, яка виконує операцію з плаваючою подвійною точністю
точка. Ділення на нуль викликає виняток з плаваючою комою. Це значення за замовчуванням
для SHcompact з FPU. Вказати це для цілей, які не мають подвійного
прецизійний FPU за замовчуванням має значення "call-div1".

дзвінок стіл
Викликає бібліотечну функцію, яка використовує таблицю пошуку для малих дільників і
Інструкція "div1" з розрізненням регістру для більших дільників. Ділення на нуль
обчислює невизначений результат і не захоплює. Це значення за замовчуванням для SH4.
Вказати це для цілей, які не мають інструкцій динамічного зсуву
за замовчуванням "call-div1".

Якщо стратегія поділу не вказана, буде вибрана стратегія за замовчуванням
на основі поточної цілі. Для SH2A стратегією за замовчуванням є використання "divs" і
інструкції "divu" замість викликів функцій бібліотеки.

-accumulate-outgoing-args
Один раз зарезервуйте місце для вихідних аргументів у пролозі функції, а не навколо
кожен дзвінок. Як правило, це вигідно для продуктивності та розміру. Також необхідний для розслаблення
щоб уникнути зміни фрейму стека навколо умовного коду.

-mdivsi3_libfunc=ім'я
Встановіть назву функції бібліотеки, яка використовується для 32-розрядного ділення зі знаком ім'я, це
впливає лише на назву, використану в call та інв:дзвінок стратегії поділу та
компілятор все ще очікує тих самих наборів регістрів введення/виводу/захищеності, як якщо б це
варіанта не було.

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який розподільник регістрів не може використовувати. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-індексована адресація
Увімкнути використання режиму індексованої адресації для SHmedia32/SHcompact. Це тільки
безпечно, якщо апаратне забезпечення та/або ОС реалізують 32-розрядну семантику обертання для індексованого
режим адресації. Архітектура дозволяє реалізувати процесори з 64-розрядними
MMU, який ОС може використовувати для отримання 32-розрядної адресації, але без поточного обладнання
реалізація підтримує цей або будь-який інший спосіб зробити режим індексованої адресації безпечним
для використання в 32-розрядній ABI за замовчуванням -mno-індексована-адресація.

-mgettrcost=номер
Встановіть передбачувану вартість для інструкції "gettr". номер. За замовчуванням 2 if
-mpt-виправлено діє, 100 в іншому випадку.

-mpt-виправлено
Припустимо, що інструкції "pt*" не перехоплюють. Це зазвичай генерує краще запланований код,
але це небезпечно на поточному обладнанні. Нинішнє визначення архітектури говорить про це
"ptabs" і "ptrel" пастку, коли ціль anded з 3 дорівнює 3. Це має
ненавмисний ефект, що робить небезпечним планування виконання цих інструкцій до a
гілки, або підняти їх із петлі. Наприклад, "__do_global_ctors", частина
libgcc який запускає конструктори під час запуску програми, викликає функції у списку, який є
розмежований -1. З -mpt-виправлено варіант, "ptabs" виконується перед тестуванням
проти -1. Це означає, що всі конструктори працюють трохи швидше, але коли
цикл доходить до кінця списку, програма аварійно завершує роботу, оскільки "ptabs" завантажує -1 в
цільовий реєстр.

Оскільки цей параметр небезпечний для будь-якого обладнання, що реалізує поточну архітектуру
специфікації, за замовчуванням -mno-pt-фіксований. Якщо не вказано явно з
-mgettrcost, -mno-pt-фіксований також передбачає -mgettrcost=100; це стримує реєстрацію
виділення з використанням цільових регістрів для зберігання звичайних цілих чисел.

-minvalid-символи
Припустимо, що символи можуть бути недійсними. Звичайні символи функцій, згенеровані компілятором
завжди дійсні для завантаження за допомогою "movi"/"shori"/"ptabs" або "movi"/"shori"/"ptrel", але
за допомогою трюків ассемблера та/або компонувальника можна генерувати символи, які викликають
"ptabs" або "ptrel" для захоплення. Цей варіант має значення лише тоді, коли -mno-pt-фіксований В
ефект. Це запобігає перехресному базовому блоку CSE, підйому та більшій частині планування символу
навантаження. За замовчуванням є -mno-invalid-symbols.

-mbranch-cost=Num
Припустимо Num бути витратою на інструкцію філії. Більші числа роблять компілятор
спробуйте створити більше коду без розгалужень, якщо це можливо. Якщо не вказано значення
вибирається залежно від типу процесора, для якого компілюється.

-mzdcгілка
-mno-zdcgranch
Припустимо (не припускаємо), що нульове зміщення умовного розгалуження інструкцій "bt" і
"bf" швидкі. Якщо -mzdcгілка якщо вказано, компілятор намагатиметься віддати перевагу нулю
зміщення кодових послідовностей гілок. Це ввімкнено за замовчуванням під час генерації коду
для SH4 і SH4A. Його можна явно вимкнути, вказавши -mno-zdcgranch.

-mcbranchdi
Увімкніть шаблон інструкцій "cbranchdi4".

-mcmpeqdi
Видавати шаблон інструкцій "cmpeqdi_t", навіть якщо -mcbranchdi діє.

-змішаний-божевільний
-мно-злитий-мадд
Створіть код, який використовує (не використовує) множення та накопичення з плаваючою комою
інструкції. Ці інструкції генеруються за замовчуванням, якщо апаратна з плаваючою комою
використовується. Машинозалежний -змішаний-божевільний опція тепер зіставлена ​​з машиною-
незалежний -ffp-contract=швидко варіант, і -мно-злитий-мадд відображається на
-ffp-contract=вимкнено.

-mfsca
-mno-fsca
Дозволити або заборонити компілятору видавати інструкцію «fsca» для синуса і косинуса
наближення. Параметр "-mfsca" необхідно використовувати в поєднанні з
"-funsafe-math-optimizations". Він увімкнено за замовчуванням під час створення коду для
SH4A. Використання "-mno-fsca" вимикає синус і косинус наближення, навіть якщо
"-funsafe-math-optimizations" діє.

-мфсрра
-мно-фсрра
Дозволити або заборонити компілятору видавати інструкцію "fsrra" для зворотного квадрата
кореневі наближення. Параметр "-mfsrra" необхідно використовувати в поєднанні з
"-funsafe-math-optimizations" і "-ffinite-math-only". Він увімкнено за замовчуванням, коли
генерування коду для SH4A. Використання "-mno-fsrra" вимикає взаємний квадратний корінь
наближення, навіть якщо "-funsafe-math-optimizations" і "-ffinite-math-only" знаходяться в
ефект

-mpend-cmove
Віддавайте перевагу умовним розгалуженням з нульовим зміщенням для інструкції умовного переміщення
візерунки. Це може призвести до прискорення коду на процесорі SH4.

Solaris 2 Опції

Ці -m Параметри підтримуються в Solaris 2:

-нечистий текст
-нечистий текст, використовується на додаток до - поділилися, повідомляє компілятору не передавати -z текст до
компонувальник під час зв’язування спільного об’єкта. Використовуючи цю опцію, ви можете зв’язати позицію-
залежний код у спільний об’єкт.

-нечистий текст пригнічує "переміщення залишаються проти розподілених, але не для запису
розділів" повідомлення про помилку компонувальника. Однак необхідні переміщення ініціюють копіювання на-
запису, а спільний об'єкт фактично не використовується між процесами. Замість
використання -нечистий текст, ви повинні скомпілювати весь вихідний код з -fpic or -fPIC.

Ці перемикачі підтримуються на додаток до перерахованого вище в Solaris 2:

-pthreads
Додайте підтримку багатопоточності за допомогою бібліотеки потоків POSIX. Цей параметр встановлює
прапори як для препроцесора, так і для компонувальника. Цей параметр не впливає на нитку
безпеку об'єктного коду, створеного компілятором, або бібліотек, що постачаються з ним.

-нитка
Це синонім до -pthreads.

SPARC Опції

Ці -m Параметри підтримуються на SPARC:

-mno-app-regs
-mapp-regs
Вказувати -mapp-regs для створення виводу за допомогою глобальних регістрів з 2 по 4, які
SPARC SVR4 ABI резервує для застосування. Як і глобальний регістр 1, кожен глобальний
Регістри з 2 по 4 потім розглядаються як доступний регістр, який блокується
виклики функцій. Це значення за замовчуванням.

Щоб бути повністю сумісним із SVR4 ABI за ціною деякої втрати продуктивності, вкажіть
-mno-app-regs. За допомогою цієї опції вам слід компілювати бібліотеки та системне програмне забезпечення.

-mflat
-мно-плоска
з -mflat, компілятор не генерує інструкції збереження/відновлення і використовує a
модель «плоского» або однорегістрового вікна. Ця модель сумісна зі звичайною
зареєструвати модель вікна. Локальні регістри та вхідні регістри (0--5) нерухомі
обробляються як регістри "збережених викликів" і за потреби зберігаються в стеку.

з -мно-плоска (за замовчуванням), компілятор генерує інструкції збереження/відновлення (крім
для функцій листка). Це нормальний режим роботи.

-mfpu
-mhard-float
Створити вихідні дані, що містять інструкції з плаваючою комою. Це значення за замовчуванням.

-mno-fpu
-msoft-float
Створити вихідні дані, що містять бібліотечні виклики для з плаваючою комою. Увага! необхідний
бібліотеки доступні не для всіх цілей SPARC. Зазвичай об'єкти
використовується звичайний компілятор C для машини, але це неможливо зробити безпосередньо в крос-
компіляція. Ви повинні зробити власні заходи, щоб забезпечити відповідну бібліотеку
функції для крос-компіляції. Вбудовані цілі sparc-*-aout та спаркліт-*-*
забезпечувати програмну підтримку з плаваючою комою.

-msoft-float змінює умову виклику у вихідному файлі; тому це лише
корисно, якщо ви компілюєте всі програми з цією опцією. Зокрема, потрібно
скласти libgcc.a, бібліотека, яка постачається з GCC, с -msoft-float для цього
працювати.

-mhard-quad-float
Створіть вихідні дані, що містять чотири слова (довгі подвійні) команди з плаваючою комою.

-msoft-quad-float
Згенерувати вихідні дані, що містять бібліотечні виклики для чотирьох слів (довгих подвійних) з плаваючою комою
інструкції. Викликані функції – це ті, які вказані в SPARC ABI. Це
за замовчуванням.

На момент написання цієї статті не існує реалізацій SPARC, які мають апаратну підтримку
чотирислівні інструкції з плаваючою комою. Усі вони викликають обробник пастки для одного з них
ці інструкції, а потім обробник пастки емулює ефект інструкції.
Через накладні витрати обробника пастки це набагато повільніше, ніж виклик бібліотеки ABI
рутини. Таким чином, -msoft-quad-float параметр за замовчуванням.

-mno-невирівняні-подвійники
-мунілінізовані-двійники
Припустимо, що подвійні мають 8-байтове вирівнювання. Це значення за замовчуванням.

з -мунілінізовані-двійники, GCC припускає, що двійники мають 8-байтове вирівнювання, лише якщо вони
містяться в іншому типі, або якщо вони мають абсолютну адресу. Інакше це
передбачає, що вони мають 4-байтове вирівнювання. Вказавши цю опцію, можна уникнути деяких рідкісних
проблеми сумісності з кодом, створеним іншими компіляторами. Це не за замовчуванням
оскільки це призводить до втрати продуктивності, особливо для коду з плаваючою комою.

- режим користувача
-mno-режим користувача
Не генеруйте код, який можна виконувати лише в режимі супервізора. Це актуально лише для
інструкція "casa", видана для процесора LEON3. За замовчуванням є
-mno-режим користувача.

-mno-faster-structs
-mfaster-structs
з -mfaster-structs, компілятор припускає, що структури повинні мати 8 байт
вирівнювання. Це дозволяє використовувати пари інструкцій "ldd" і "std" для копій
у присвоєнні структури замість вдвічі більшої кількості пар "ld" і "st". Однак,
використання цього зміненого вирівнювання безпосередньо порушує SPARC ABI. Таким чином, це задумано
тільки для використання на цілях, де розробник визнає, що їх результуючий код є
прямо не відповідає правилам ABI.

-mcpu=тип_процесора
Встановіть набір інструкцій, набір регістрів і параметри планування команд
тип машини тип_процесора. Підтримувані значення для тип_процесора він має v7, кипарис, v8, супершпарк,
гіперспарк, Леон, leon3, leon3v7, спаркліт, f930, f934, sparclite86x, іскорка,
tsc701, v9, ультраспарк, ultrasparc3, Ніагара, ніагара2, ніагара3 та ніагара4.

Нативні інструменти Solaris і GNU/Linux також підтримують цю цінність рідний, який вибирає
найкращий варіант архітектури для хост-процесора. -mcpu = рідний не має ефекту, якщо
GCC не розпізнає процесор.

Параметри планування інструкцій за замовчуванням використовуються для значень, які вибирають
архітектура, а не реалізація. Це такі v7, v8, спаркліт, іскорка, v9.

Ось список кожної підтримуваної архітектури та її реалізацій.

v7 кипарис, leon3v7

v8 supersparc, hypersparc, leon, leon3

спаркліт
f930, f934, sparclite86x

іскорка
tsc701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

За замовчуванням (якщо не налаштовано інше), GCC генерує код для варіанту V7
Архітектура SPARC. З -mcpu=кипарис, компілятор додатково оптимізує його для
чіп Cypress CY7C602, який використовується в серії SPARCStation/SPARCServer 3xx. Це
також підходить для старих SPARCStation 1, 2, IPX тощо.

з -mcpu=v8, GCC генерує код для варіанту V8 архітектури SPARC. The
Єдина відмінність від коду V7 полягає в тому, що компілятор видає ціле множення і
інструкції цілочисельного ділення, які існують у SPARC-V8, але не в SPARC-V7. З
-mcpu=supersparc, компілятор додатково оптимізує його для мікросхеми SuperSPARC, як
використовується в серіях SPARCStation 10, 1000 і 2000.

з -mcpu=спаркліт, GCC генерує код для варіанту SPARClite SPARC
архітектури. Це додає ціле множення, цілочисельне ділення та сканування ("ffs")
інструкції, які існують у SPARClite, але не в SPARC-V7. З -mcpu = f930,
компілятор додатково оптимізує його для чіпа Fujitsu MB86930, який є оригінальним
SPARClite, без FPU. З -mcpu = f934, компілятор додатково оптимізує його для
чіп Fujitsu MB86934, який є новішим SPARClite з FPU.

з -mcpu=іскорка, GCC генерує код для варіанту SPARClet SPARC
архітектури. Це додає ціле число множити, множити/накопичувати, цілочисельне ділення
інструкції кроку та сканування ("ffs"), які існують у SPARClet, але не в SPARC-V7. З
-mcpu=tsc701, компілятор додатково оптимізує його для мікросхеми TEMIC SPARClet.

з -mcpu=v9, GCC генерує код для варіанту V9 архітектури SPARC. Це
додає 64-розрядні цілі та інструкції переміщення з плаваючою комою, 3 додаткові функції з плаваючою комою
регістри коду умов та інструкції умовного переміщення. З -mcpu=ultrasparc,
компілятор додатково оптимізує його для мікросхем Sun UltraSPARC I/II/IIi. З
-mcpu=ultrasparc3, компілятор додатково оптимізує його для Sun UltraSPARC
III/III+/IIIi/IIIi+/IV/IV+ фішки. З -mcpu=ніагара, компілятор додатково
оптимізує його для чіпів Sun UltraSPARC T1. З -mcpu=niagara2, компілятор
додатково оптимізує його для чіпів Sun UltraSPARC T2. З -mcpu=niagara3,
компілятор додатково оптимізує його для чіпів Sun UltraSPARC T3. З -mcpu=niagara4,
компілятор додатково оптимізує його для чіпів Sun UltraSPARC T4.

-mtune=тип_процесора
Встановіть параметри планування інструкцій для типу машини тип_процесора, але не встановлюйте
набір інструкцій або набір регістрів, що є параметром -mcpu=тип_процесора робить.

Ті самі значення для -mcpu=тип_процесора може бути використаний для -mtune=тип_процесора, але єдиний
корисними значеннями є ті, які вибирають конкретну реалізацію ЦП. Ті
кипарис, супершпарк, гіперспарк, Леон, leon3, leon3v7, f930, f934, sparclite86x,
tsc701, ультраспарк, ultrasparc3, Ніагара, ніагара2, ніагара3 та ніагара4. З
власні інструменти Solaris і GNU/Linux, рідний також можна використовувати.

-mv8plus
-mno-v8plus
з -mv8plus, GCC генерує код для SPARC-V8+ ABI. Відмінність від V8
ABI полягає в тому, що глобальний і вихідний регістри вважаються шириною 64 біта. Це ввімкнено
за замовчуванням на Solaris у 32-розрядному режимі для всіх процесорів SPARC-V9.

-mvis
-мно-віс
з -mvis, GCC генерує код, який використовує переваги UltraSPARC Visual
Розширення набору інструкцій. За замовчуванням є -мно-віс.

-mvis2
-мно-вис2
з -mvis2, GCC генерує код, який використовує переваги версії 2.0 UltraSPARC
Розширення набору візуальних інструкцій. За замовчуванням є -mvis2 при націленні на процесор, що
підтримує такі інструкції, як UltraSPARC-III та новіші. Налаштування -mvis2 Також
Набори -mvis.

-mvis3
-мно-вис3
з -mvis3, GCC генерує код, який використовує переваги версії 3.0 UltraSPARC
Розширення набору візуальних інструкцій. За замовчуванням є -mvis3 при націленні на процесор, що
підтримує такі інструкції, як-от niagara-3 і пізніші. Налаштування -mvis3 також набори
-mvis2 та -mvis.

-mcbcond
-mno-cbcond
з -mcbcond, GCC генерує код, який використовує переваги порівняння та розгалуження
інструкції, як визначено в Sparc Architecture 2011. За замовчуванням є -mcbcond коли
орієнтований на процесор, який підтримує такі інструкції, наприклад niagara-4 і новіші.

-mpopc
-мно-попк
з -mpopc, GCC генерує код, який використовує переваги сукупності UltraSPARC
інструкція з підрахунку. За замовчуванням є -mpopc під час націлювання на процесор, який підтримує таке
інструкції, такі як Ніагара-2 і пізніші.

-mfmaf
-mno-fmaf
з -mfmaf, GCC генерує код, який використовує переваги UltraSPARC Fused Multiply-
Додайте розширення з плаваючою комою. За замовчуванням є -mfmaf при націленні на процесор, що
підтримує такі інструкції, як Niagara-3 і новіші.

-mfix-at697f
Увімкнути документований обхідний шлях для єдиної помилки процесора Atmel AT697F
(що відповідає помилці №13 процесора AT697E).

-mfix-ut699
Увімкніть задокументовані обхідні шляхи для помилок із плаваючою комою та кешу даних
скасувати помилки процесора UT699.

Ці -m Опції підтримуються на додаток до вищезазначених для процесорів SPARC-V9 у 64-розрядній версії
середовища:

-м32
-м64
Згенеруйте код для 32-розрядного або 64-розрядного середовища. 32-розрядне середовище встановлює int,
long і вказівник на 32 біти. 64-розрядне середовище встановлює значення int на 32 біти та long і
покажчик на 64 біта.

-mcmodel=який
Встановіть для моделі коду одну з

медлоу
Модель середнього/низького коду: 64-бітові адреси, програми повинні бути пов’язані в нижній 32
біт пам'яті. Програми можуть бути статично або динамічно пов'язані.

медмід
Середня/середня модель коду: 64-розрядні адреси, програми повинні бути пов’язані в нижній частині
44 біта пам’яті, сегменти тексту та даних мають бути меншими за 2 ГБ та
сегмент даних має розташовуватися в межах 2 Гб від текстового сегмента.

медани
Модель коду Medium/Anywhere: 64-розрядні адреси, програми можуть бути пов’язані будь-де
у пам’яті розмір сегментів тексту та даних не повинен перевищувати 2 Гб та даних
сегмент повинен знаходитися в межах 2 Гб від текстового сегмента.

embmedany
Модель коду Medium/Anywhere для вбудованих систем: 64-розрядні адреси, текст
і сегменти даних мають бути меншими за 2 ГБ, обидва починаються з будь-якого місця в пам’яті
(визначається під час посилання). Глобальний регістр %g4 вказує на базу даних
сегмент. Програми статично пов’язані, і PIC не підтримується.

-модель пам'яті=mem-модель
Встановіть модель пам’яті, яка діє на процесорі, на одну з

дефолт
Модель пам’яті за замовчуванням для процесора та операційної системи.

rmo Порядок розслабленої пам'яті

псо Часткове замовлення магазину

TSOs Загальне замовлення магазину

sc Послідовна послідовність

Ці моделі пам’яті формально визначені в Додатку D архітектури Sparc V9
вручну, як установлено в полі "PSTATE.MM" процесора.

-mstack-bias
-mno-stack-bias
з -mstack-bias, GCC припускає, що покажчик стека та покажчик кадру, якщо він присутній,
зміщуються на -2047, яке необхідно додати під час створення посилань на кадр стека. Це
є за замовчуванням у 64-розрядному режимі. В іншому випадку припустимо, що такого зміщення немає.

СПУ Опції

Ці -m на SPU підтримуються параметри:

-mwarn-reloc
-merror-reloc
Завантажувач для SPU не обробляє динамічні переміщення. За замовчуванням GCC дає an
помилка, коли він генерує код, який вимагає динамічного переміщення. -mno-error-reloc
вимикає помилку, -mwarn-reloc замість цього створює попередження.

-msafe-dma
-munsafe-dma
Інструкції, які ініціюють або тестують завершення DMA, не можна змінювати
щодо завантажень і сховищ пам’яті, до якої здійснюється доступ. З -munsafe-dma
Ви повинні використовувати ключове слово "volatile", щоб захистити доступ до пам'яті, але це може призвести до
неефективний код у місцях, де пам'ять, як відомо, не змінюється. Замість позначки
пам'ять як нестабільна, можна використовувати -msafe-dma щоб наказати компілятору обробити DMA
інструкції, які потенційно впливають на всю пам’ять.

-mbranch-підказки
За замовчуванням GCC генерує інструкцію підказки про розгалуження, щоб уникнути зупинок конвеєра
завжди прийняті або ймовірно взяті гілки. Підказка не генерується ближче 8
інструкції від свого відділення. Є мало причин для їх відключення, за винятком
налагодження, або щоб зробити об’єкт трохи меншим.

-msmall-mem
-mlarge-mem
За замовчуванням GCC генерує код, припускаючи, що адреси ніколи не перевищують 18 біт.
з -mlarge-mem генерується код, який передбачає повну 32-бітну адресу.

-mstdmain
За замовчуванням GCC зв’язується з кодом запуску, який бере на себе головну функцію в стилі SPU
інтерфейс (який має нетрадиційний список параметрів). З -mstdmain, посилання GCC
ваша програма проти коду запуску, який передбачає інтерфейс у стилі C99 як "основний",
включаючи локальну копію рядків "argv".

-mfixed-range=реєстр-діапазон
Згенеруйте код, який розглядає заданий діапазон регістрів як фіксовані регістри. Фіксований реєстр
є той, який не може використовувати розподільник регістрів. Це корисно під час компіляції ядра
код. Діапазон регістрів задається у вигляді двох регістрів, розділених тире. Кілька
Діапазони регістрів можна вказати через кому.

-mea32
-mea64
Скомпілювати код, припускаючи, що вказівники на адресний простір PPU доступні через "__ea"
іменований кваліфікатор адресного простору має ширину 32 або 64 біти. За замовчуванням 32 біти.
Оскільки це параметр зміни ABI, весь об’єктний код у виконуваному файлі має бути скомпільований
з тим же налаштуванням.

-madress-space-conversion
-mno-адресний простір-перетворення
Дозволити/заборонити обробку адресного простору "__ea" як надмножини загальної адреси
простір. Це дозволяє явне переведення типу між "__ea" і загальним покажчиком, а також
неявні перетворення загальних покажчиків у покажчики "__ea". За замовчуванням дозволено
перетворення покажчиків адресного простору.

-mcache-size=розмір кешу
Цей параметр контролює версію libgcc, яку компілятор посилає на виконуваний файл
і вибирає програмно-керований кеш для доступу до змінних за адресою "__ea".
простір із певним розміром кешу. Можливі варіанти для розмір кешу він має 8, 16, 32, 64
та 128. Розмір кешу за замовчуванням становить 64 КБ.

-matomic-оновлення
-mno-atomic-updates
Цей параметр контролює версію libgcc, яку компілятор посилає на виконуваний файл
і вибирає, чи будуть атомарні оновлення керованого програмним забезпеченням кешу змінних на стороні PPU
використовуються. Якщо ви використовуєте атомарні оновлення, змініть змінну PPU за допомогою коду SPU
Кваліфікатор адресного простору з іменем "__ea" не заважає змінам інших PPU
змінні, що знаходяться в одному рядку кешу з коду PPU. Якщо ви не використовуєте atomic
оновлення, такі перешкоди можуть виникнути; однак, запис рядків кешу назад більше
ефективний. Поведінка за замовчуванням — використання атомарних оновлень.

-mdual-nops
-mdual-nops=n
За замовчуванням GCC вставляє nops, щоб збільшити подвійну проблему, коли очікує її збільшення
продуктивність. n може бути значенням від 0 до 10. Менше n вставляє менше номерів. 10 є
за замовчуванням, 0 те саме, що -mno-dual-nops. Вимкнено з -Ос.

-mhint-max-nops=n
Максимальна кількість підказок для вставки для підказки гілки. Підказка гілки має бути не менше 8
інструкції від філії, на яку вона впливає. GCC вставки до n ні
застосуйте це, інакше він не генерує підказку гілки.

-mhint-max-distance=n
Кодування інструкції підказки розгалуження обмежує підказку в межах 256
інструкції філії, на яку вона впливає. За замовчуванням GCC перевіряє, чи він знаходиться всередині
125.

-msafe-підказки
Обійти апаратну помилку, яка призводить до зупинки SPU на невизначений термін. За замовчуванням GCC
вставляє інструкцію "hbrp", щоб переконатися, що ця затримка не станеться.

Опції та цінності SYSTEM V

Ці додаткові параметри доступні в System V Release 4 для сумісності з іншими
компілятори на цих системах:

-G Створіть спільний об’єкт. Рекомендується це - символічний or - поділилися використовувати замість цього.

- Qy Визначте версії кожного інструменту, який використовується компілятором, у асемблері ".ident".
директива у виводі.

-Qn Утримайтеся від додавання директив ".ident" до вихідного файлу (це за замовчуванням).

-YP,диски
Шукайте каталоги диски, і ніяких інших, для бібліотек, зазначених у -l.

-Там,реж
Подивіться в довіднику реж щоб знайти препроцесор M4. Асемблер використовує це
варіант.

ПЛИТКА-Gx Опції

Ці -m Параметри підтримуються на TILE-Gx:

-mcmodel=мала
Згенеруйте код для маленької моделі. Відстань для прямих дзвінків обмежена 500 м
в будь-який бік. Адреси, відносні до ПК, мають 32 біта. Абсолютна підтримка адрес
повний діапазон адрес.

-mcmodel=великий
Згенеруйте код для великої моделі. Немає обмежень щодо відстані дзвінка, ПК-
відносні адреси або абсолютні адреси.

-mcpu=ім'я
Вибирає тип ЦП, який буде цільовим. Наразі підтримується єдиний тип tilegx.

-м32
-м64
Згенеруйте код для 32-розрядного або 64-розрядного середовища. 32-розрядне середовище встановлює int,
long і вказівник на 32 біти. 64-розрядне середовище встановлює значення int на 32 біти та long і
покажчик на 64 біта.

TILEPro Опції

Ці -m Опції підтримуються на TILEPro:

-mcpu=ім'я
Вибирає тип ЦП, який буде цільовим. Наразі підтримується єдиний тип tilepro.

-м32
Згенеруйте код для 32-розрядного середовища, яке встановлює int, long і покажчик на 32 біти.
Це єдина підтримувана поведінка, тому прапор по суті ігнорується.

V850 Опції

Ці -m визначені параметри для реалізацій V850:

-mlong-дзвінки
-mno-long-cales
Розглядайте всі дзвінки як далекі (близькі). Якщо дзвінки вважаються далекими,
компілятор завжди завантажує адресу функції в регістр і викликає непрямий виклик
через покажчик.

-мно-еп
-меп
Не оптимізуйте (не оптимізуйте) базові блоки, які використовують той самий покажчик індексу 4 або більше
разів, щоб скопіювати вказівник в регістр "ep" і використовувати коротші "sld" і "sst"
інструкції. The -меп Опція ввімкнена за замовчуванням, якщо ви оптимізуєте.

-мно-пролог-функція
-мпролог-функція
Не використовуйте (використовуйте) зовнішні функції для збереження та відновлення регістрів у пролозі
і епілог функції. Зовнішні функції працюють повільніше, але використовують менше коду
простір, якщо більше ніж одна функція зберігає однакову кількість регістрів. The
-мпролог-функція Опція ввімкнена за замовчуванням, якщо ви оптимізуєте.

-mspace
Намагайтеся зробити код якомога меншим. Наразі це просто вмикається -меп
та -мпролог-функція Варіанти.

-mtda=n
Помістіть статичні або глобальні змінні, розмір яких дорівнює n байт або менше в крихітну область даних
на який вказує регістр "ep". Маленька область даних може містити до 256 байт
(128 байт для посилань на байти).

-msda=n
Помістіть статичні або глобальні змінні, розмір яких дорівнює n байт або менше в малу область даних
на який вказує регістр "gp". Невелика область даних може вмістити до 64 кілобайт.

-mzda=n
Помістіть статичні або глобальні змінні, розмір яких дорівнює n байт або менше в перші 32
кілобайти пам'яті.

-mv850
Вкажіть, що цільовим процесором є V850.

-mv850e3v5
Вкажіть, що цільовим процесором є V850E3V5. Константа препроцесора
__v850e3v5__ визначається, якщо використовується ця опція.

-mv850e2v4
Вкажіть, що цільовим процесором є V850E3V5. Це псевдонім для
-mv850e3v5 варіант.

-mv850e2v3
Вкажіть, що цільовим процесором є V850E2V3. Константа препроцесора
__v850e2v3__ визначається, якщо використовується ця опція.

-mv850e2
Вкажіть, що цільовим процесором є V850E2. Константа препроцесора __v850e2__
визначається, якщо використовується ця опція.

-mv850e1
Вкажіть, що цільовим процесором є V850E1. Константи препроцесора
__v850e1__ та __v850e__ визначаються, якщо використовується ця опція.

-mv850es
Вкажіть, що цільовим процесором є V850ES. Це псевдонім для -mv850e1
варіант.

-mv850e
Вкажіть, що цільовим процесором є V850E. Константа препроцесора __v850e__
визначається, якщо використовується ця опція.

Якщо ні -mv850 ні -mv850e ні -mv850e1 ні -mv850e2 ні -mv850e2v3 ні -mv850e3v5
визначаються, тоді вибирається цільовий процесор за замовчуванням і відповідний __v850*__
визначена константа препроцесора.

Константи препроцесора __v850 та __v851__ завжди визначені, незалежно від яких
варіант процесора є цільовим.

-mdisable-call
-mno-disable-call
Ця опція пригнічує створення інструкції "CALLT" для v850e, v850e1,
v850e2, v850e2v3 і v850e3v5 архітектури v850.

Цей параметр увімкнено за замовчуванням, коли використовується RH850 ABI (див -mrh850-abi), А також
вимкнено за замовчуванням, коли використовується GCC ABI. Якщо виконуються інструкції "CALLT".
генерується, то буде визначено символ препроцесора C "__V850_CALLT__".

- розслабитися
-мно-розслабитися
Передайте (або не передайте) своє - розслабитися параметр командного рядка для асемблера.

- довгі стрибки
-мно-стрибки в довжину
Вимкніть (або знову ввімкніть) генерацію інструкцій переходу щодо ПК.

-msoft-float
-mhard-float
Вимкніть (або знову ввімкніть) генерацію апаратних інструкцій з плаваючою комою. Це
Опція важлива лише тоді, коли є цільова архітектура V850E2V3 або вище. Якщо
апаратні інструкції з плаваючою комою генеруються потім препроцесором C
буде визначено символ "__FPU_OK__", інакше символ "__NO_FPU__" буде
визначений.

-млю
Дозволяє використовувати інструкцію e3v5 LOOP. Використання цієї інструкції не є
увімкнено за замовчуванням, коли вибрано архітектуру e3v5, оскільки вона все ще використовується
експериментальний.

-mrh850-abi
-мггс
Вмикає підтримку версії RH850 V850 ABI. Це значення за замовчуванням. З
до цієї версії ABI застосовуються такі правила:

· Структури та об'єднання цілого розміру повертаються через покажчик пам'яті, а не
реєстр.

· Великі структури та об'єднання (розміром більше 8 байт) передаються за значенням.

· Функції вирівнюються за 16-бітовими межами.

· -m8byte-align підтримується параметр командного рядка.

· -mdisable-call параметр командного рядка ввімкнено за замовчуванням. The
-mno-disable-call параметр командного рядка не підтримується.

Коли ця версія ABI увімкнена, символ препроцесора C "__V850_RH850_ABI__"
визначено.

-mgcc-abi
Вмикає підтримку старої версії GCC V850 ABI. З цією версією ABI
застосовуються такі правила:

· Структури та об'єднання цілого розміру повертаються в регістр "r10".

· Великі структури та об'єднання (розміром більше 8 байт) передаються за посиланням.

· Функції вирівнюються за 32-бітними межами, якщо вони не оптимізовані за розміром.

· -m8byte-align параметр командного рядка не підтримується.

· -mdisable-call Параметр командного рядка підтримується, але не вмикається за замовчуванням.

Коли ця версія ABI увімкнена, символ препроцесора C "__V850_GCC_ABI__"
визначено.

-m8byte-align
-mno-8byte-align
Дозволяє підтримувати типи «подвійні» та «довгі довгі» для вирівнювання на 8-байтовому
межі. За замовчуванням обмежується вирівнювання всіх об’єктів щонайбільше
4-байти. Коли -m8byte-align фактично є символом препроцесора C
Буде визначено "__V850_8BYTE_ALIGN__".

- великий перемикач
Згенеруйте код, який підходить для великих таблиць перемикачів. Використовуйте цю опцію, лише якщо
асемблер/компоновник скаржиться на розгалуження за межами діапазону в таблиці перемикачів.

-mapp-regs
Ця опція змушує використовувати r2 і r5 в коді, згенерованому компілятором. Це
налаштування за замовчуванням.

-mno-app-regs
Ця опція змушує r2 і r5 розглядати як фіксовані регістри.

VAX Опції

Ці -m параметри визначені для VAX:

-мунікс
Не виводьте певні інструкції переходу ("aobleq" і так далі), які ассемблер Unix
оскільки VAX не може працювати на великій відстані.

-мгну
Виведіть ці інструкції переходу, припустивши, що працює асемблер GNU
використаний

-мг Вивести код для чисел із плаваючою комою у форматі G замість D-формату.

VMS Опції

Ці -m визначені параметри для реалізацій VMS:

-mvms-коди повернення
Повернути коди умов VMS з "main". За замовчуванням повертається умова в стилі POSIX
(наприклад, коди помилок).

-mdebug-main=префікс
Позначте першу процедуру, назва якої починається з префікс як основна рутина для
налагоджувач.

-mmalloc64
За замовчуванням 64-розрядні процедури виділення пам’яті.

-mpointer-size=розмір
Встановити розмір покажчиків за замовчуванням. Можливі варіанти для розмір він має 32 or коротка для 32 біт
покажчики, 64 or довго для 64-розрядних покажчиків, і немає для підтримки лише 32-бітових покажчиків.
Пізніший варіант вимикає "прагма pointer_size".

VxWorks Опції

Параметри в цьому розділі визначені для всіх цілей VxWorks. Варіанти, характерні для
цільове обладнання перелічено разом з іншими параметрами для цієї цілі.

-mrtp
GCC може генерувати код як для ядер VxWorks, так і для процесів реального часу (RTP). Це
опція перемикається від першого до другого. Він також визначає макрос препроцесора
"__RTP__".

-нестатичні
Зв’яжіть виконуваний файл RTP зі спільними бібліотеками, а не зі статичними бібліотеками. The
опції -статичний та - поділилися також може використовуватися для RTP; -статичний є типовим.

-Бстатичний
-Бдинамічний
Ці параметри передаються компонувальнику. Вони визначені для сумісності з
діаб.

-Xbind-ледачий
Увімкнути відкладене прив’язування викликів функцій. Цей параметр еквівалентний -Вл,-з, зараз і
визначено для сумісності з Diab.

-Xbind-зараз
Вимкнути відкладене прив’язування викликів функцій. Цей параметр є за замовчуванням і визначено для
сумісність з Diab.

x86-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", які асемблер завжди вирівнює, або шляхом розширення
інструкції щільності або вставивши інструкції NOP.

-довгі дзвінки
-мно-довгі дзвінки
Коли цей параметр увімкнено, GCC інструктує асемблеру транслювати прямі виклики
непрямі виклики, якщо він не може визначити, що ціль прямого виклику знаходиться в
діапазон, дозволений інструкцією виклику. Цей переклад зазвичай відбувається для дзвінків до
функції в інших вихідних файлах. Зокрема, асемблер перекладає прямий
Інструкція «CALL» у «L32R», за якою слідує інструкція «CALLX». За замовчуванням є
-мно-довгі дзвінки. Цю опцію слід використовувати в програмах, де це може викликати виклик
потенційно бути поза зоною дії. Ця опція реалізована на асемблері, а не в
компілятор, тому код ассемблера, згенерований GCC, все ще показує прямий виклик
інструкції --- подивіться на розібраний об'єктний код, щоб побачити фактичні інструкції.
Зауважте, що асемблер використовує непрямий виклик для кожного міжфайлового виклику, а не тільки
ті, які дійсно знаходяться поза зоною дії.

zSeries Опції

Вони перераховані під

Опції та цінності код Покоління Умовні
Ці незалежні від машини параметри керують умовами інтерфейсу, які використовуються в коді
покоління

Більшість із них мають як позитивні, так і негативні форми; негативна форма -ффу is
-fno-foo. У таблиці нижче перелічено лише одну з форм --- та, яка не є
за замовчуванням. Ви можете знайти іншу форму, видаливши ні- або додавши його.

-fbounds-перевірка
Для інтерфейсів, які це підтримують, створіть додатковий код, щоб перевірити, чи використовувалися індекси
масиви доступу знаходяться в межах оголошеного діапазону. Наразі це підтримується лише
Інтерфейси Java та Fortran, де цей параметр за замовчуванням має значення true та false
відповідно.

-fstack-reuse=рівень повторного використання
Цей параметр керує повторним використанням простору стека для оголошених користувачем локальних/автоматичних змінних і
компілятор згенерував тимчасові файли. reuse_level може бути всі, named_varsабо ніхто. всі
дозволяє повторно використовувати стек для всіх локальних змінних і тимчасових елементів, named_vars дозволяє
повторно використовувати лише для визначених користувачем локальних змінних з іменами та ніхто вимикає повторне використання стека
повністю. Значенням за замовчуванням є всі. Опція потрібна, коли програма розширюється
час життя локальної змінної з областю дії або компілятора, створеного тимчасово за межами
кінцева точка, визначена мовою. Коли закінчується термін життя змінної, і якщо
змінна живе в пам'яті, оптимізуючий компілятор має свободу повторно використовувати свій стек
простір з іншими тимчасовими або локальними змінними з областю дії, чий живий діапазон не відповідає
перекриваються з ним. Застарілий код, що подовжує локальний термін життя, ймовірно, порушить
оптимізація повторного використання стека.

Наприклад,

int *p;
{
int local1;

p = &local1;
локальний1 = 10;
....
}
{
int local2;
локальний2 = 20;
...
}

if (*p == 10) // поза межами використання local1
{

}

Інший приклад:

структура А
{
A(int k) : i(k), j(k) { }
int i;
int j;
};

A *ap;

void foo(const A& ar)
{
ap = &ar;
}

недійсний бар()
{
фу(A(10)); // Час життя тимчасового об'єкта закінчується, коли повертається foo

{
A a(20);
....
}
ap->i+= 10; // ap посилання поза межами temp, чий простір
// повторно використовується з a. Яке значення ап->і?
}

Тривалість життя компілятора, створеного тимчасово, чітко визначається стандартом C++.
Коли закінчується життя тимчасового, і якщо тимчасове живе в пам'яті, то
оптимізуючий компілятор має свободу повторно використовувати простір стека з іншими тимчасовими елементами або
локальні змінні з областю дії, живий діапазон яких не перекривається з ним. Однак деякі з
застарілий код спирається на поведінку старих компіляторів, у яких стек тимчасових файлів
простір не використовується повторно, агресивне повторне використання стека може призвести до помилок під час виконання. Це
Опція використовується для керування тимчасовою оптимізацією повторного використання стеку.

-ftrapv
Цей параметр генерує пастки для переповнення зі знаком при додаванні, відніманні,
операції множення.

-fwrapv
Цей параметр наказує компілятору припустити, що арифметичне переповнення зі знаком
Додавання, віднімання та множення обертаються за допомогою доповнення до двох
представництво. Цей прапорець вмикає деякі оптимізації та вимикає інші. Це
Параметр увімкнено за замовчуванням для інтерфейсу Java, як того вимагає мова Java
специфікація.

-фекційні виключення
Увімкнути обробку винятків. Генерує додатковий код, необхідний для поширення винятків. Для
деякі цілі, це означає, що GCC генерує інформацію розгортання кадру для всіх функцій,
що може призвести до значного обсягу даних, хоча це не впливає
виконання. Якщо ви не вкажете цей параметр, GCC вмикає його за замовчуванням для мов
на зразок C++, які зазвичай вимагають обробки винятків, і вимикає її для таких мов, як
C, які зазвичай цього не потребують. Однак, можливо, вам доведеться ввімкнути цю опцію, коли
компіляція коду C, який повинен належним чином взаємодіяти з написаними обробниками винятків
на C++. Ви також можете вимкнути цю опцію, якщо ви збираєте старіший C++
програми, які не використовують обробку винятків.

-fnon-call-exceptions
Створіть код, який дозволяє інструкціям захоплення генерувати винятки. Зауважте, що це
вимагає підтримки для конкретної платформи, яка існує не скрізь. Крім того,
це тільки дозволяє захоплення інструкції для створення винятків, тобто посилання на пам'ять або
інструкції з плаваючою комою. Він не дозволяє викидати винятки з довільних
обробники сигналів, такі як "SIGALRM".

-fdelete-dead-exceptions
Враховуйте, що інструкції, які можуть викликати винятки, але іншим чином не сприяють цьому
виконання програми можна оптимізувати. Цей параметр увімкнено за замовчуванням
для інтерфейсу Ada, як це дозволено специфікацією мови Ada. Оптимізація
проходи, які викликають видалення мертвих винятків, увімкнені незалежно на різних
рівні оптимізації.

-забавні столики
Як і в -фекційні виключення, за винятком того, що він просто генерує будь-які необхідні статичні дані, але
ніяким іншим чином не впливає на згенерований код. Зазвичай це не потрібно
включити цю опцію; натомість мовний процесор, який потребує такої обробки, увімкне її
від вашого імені.

-fasynchronous-wind-tables
Створіть таблицю розгортання у форматі DWARF 2, якщо це підтримується цільовою машиною. Стіл є
точний на кожній межі команди, тому його можна використовувати для розгортання стека
асинхронні події (наприклад, налагоджувач або збирач сміття).

-fno-gnu-унікальний
У системах з останнім асемблером GNU і бібліотекою C компілятор C++ використовує файл
"STB_GNU_UNIQUE", щоб переконатися, що визначення членів шаблону статичні
а статичні локальні змінні у вбудованих функціях є унікальними навіть за наявності
"RTLD_LOCAL"; це необхідно, щоб уникнути проблем з бібліотекою, яку використовують дві різні
Плагіни "RTLD_LOCAL" залежно від визначення в одному з них і тому
не погоджуючись з іншим щодо прив'язки символу. Але це викликає
«dlclose» ігнорується для постраждалих DSO; якщо ваша програма покладається на повторну ініціалізацію
DSO через "dlclose" і "dlopen", ви можете використовувати -fno-gnu-унікальний.

-fpcc-struct-return
Повертайте значення "short" "struct" і "union" в пам'ять, як довші, а не в
реєстри. Ця конвенція менш ефективна, але вона має перевагу, що дозволяє
взаємозв'язок між файлами, скомпільованими GCC, і файлами, скомпільованими з іншими компіляторами,
зокрема портативний компілятор C (pcc).

Точна конвенція для повернення структур у пам'ять залежить від мети
макроси конфігурації.

Короткі структури та союзи – це ті, чиї розміри та вирівнювання збігаються з деякими
цілочисельний тип.

Увага! код, скомпільований з -fpcc-struct-return комутатор не сумісний із двоїчною системою
з кодом, скомпільованим за допомогою -freg-struct-return перемикач. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-freg-struct-return
Повертайте значення "struct" і "union" в регістрах, якщо це можливо. Це ефективніше
для невеликих споруд ніж -fpcc-struct-return.

Якщо ви не вкажете ні те, ні інше -fpcc-struct-return ні -freg-struct-return, GCC за замовчуванням
будь-яка умова є стандартною для цілі. Якщо стандартної конвенції немає,
GCC за замовчуванням -fpcc-struct-return, за винятком цілей, де GCC є основним
компілятор. У цих випадках ми можемо вибрати стандарт, а ми вибрали більш ефективний
альтернатива повернення реєстру.

Увага! код, скомпільований з -freg-struct-return комутатор не сумісний із двоїчною системою
з кодом, скомпільованим за допомогою -fpcc-struct-return перемикач. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-fshort-перерахування
Виділіть типу "перерахування" стільки байтів, скільки йому потрібно для оголошеного діапазону
можливі значення. Зокрема, тип "enum" еквівалентний найменшому цілу
тип, який має достатньо місця.

Увага! -fshort-перерахування switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-fshort-подвійний
Використовуйте той самий розмір для "подвійного", що і для "float".

Увага! -fshort-подвійний switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-fshort-wchar
Замінити базовий тип для wchar_t бути коротка непідписаний Int замість
за замовчуванням для цілі. Ця опція корисна для створення програм для виконання
ВИНО.

Увага! -fshort-wchar switch змушує GCC генерувати код, який не є двійковим
сумісний з кодом, створеним без цього перемикача. Використовуйте його, щоб відповідати не-
бінарний інтерфейс програми за замовчуванням.

-fno-загальний
У коді C контролює розміщення неініціалізованих глобальних змінних. Компілятори Unix C
традиційно допускали кілька визначень таких змінних у різних
одиниці компіляції шляхом розміщення змінних у загальний блок. Така поведінка
визначено -fзагальний, і є за замовчуванням для GCC для більшості цілей. З іншої сторони,
ISO C не вимагає такої поведінки, а на деяких цілях може містити швидкість або код
обмеження розміру на змінні посилання. The -fno-загальний параметр визначає, що
компілятор повинен помістити неініціалізовані глобальні змінні в розділ даних об'єкта
файл, а не генерувати їх як загальні блоки. Це призводить до того, що якщо
одна і та ж змінна оголошується (без "extern") у двох різних компіляціях, ви отримуєте a
помилка множинного визначення, коли ви їх пов’язуєте. У цьому випадку ви повинні скомпілювати з
-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» або
"включати/системи".

Якщо з якоїсь причини ви хочете включити букву ',' в одну з 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 та запобігає зіткненням символів. це є
сильно рекомендуємо використовувати це в будь-яких спільних об'єктах, які ви розповсюджуєте.

Незважаючи на номенклатуру, «за замовчуванням» завжди означає публічний; тобто доступні для зв'язування
проти ззовні спільного об'єкта. «захищений» і «внутрішній» досить марні
у реальному світі, тому єдиним іншим часто використовуваним параметром є «прихований». За замовчуванням
if - наочність не вказано є "за замовчуванням", тобто зробити кожен символ загальнодоступним --- це
викликає таку ж поведінку, як і попередні версії 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++, "оператор новий" і "оператор видалити" повинні
завжди мати видимість за замовчуванням.

Майте на увазі, що заголовки поза вашим проектом, зокрема системні заголовки і
заголовки з будь-якої іншої бібліотеки, яку ви використовуєте, можливо, не очікується компіляції
видимість, відмінну від стандартної. Можливо, вам потрібно буде прямо сказати #прагма GCC
видимість push (за замовчуванням) перед включенням таких заголовків.

зовнішній декларації не зачіпаються - наочність, тому коду може бути багато
перекомпільовано з -fvisibility=приховано без модифікацій. Однак це означає, що
виклики "зовнішніх" функцій без явної видимості використовують PLT, тому це більше
ефективно використовувати "__attribute ((visibility))" та/або "#pragma GCC visibility", щоб повідомити
компілятор, "зовнішні" оголошення повинні розглядатися як приховані.

Зверніть увагу, що - наочність впливає на нечіткі сутності зв'язку C++. Це означає, що для
наприклад, клас винятків, який передається між DSO, повинен бути явно позначений
з видимістю за замовчуванням, щоб type_info вузли уніфіковані між DSO.

Огляд цих методів, їх переваги та способи їх використання див
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
Цю опцію слід використовувати, якщо доступ до нестабільних бітових полів (або іншої структури
поля, хоча компілятор зазвичай шанує ці типи в будь-якому випадку) слід використовувати одиночний
доступ до ширини типу поля, вирівняного за природнім вирівнюванням, якщо це можливо.
Наприклад, цілі з відображеними в пам'яті периферійними регістрами можуть вимагати всього цього
доступ має бути шириною 16 біт; за допомогою цього прапора ви можете оголосити всі периферійні бітові поля
як "короткий без знака" (за умови, що короткий має 16 біт для цих цілей), щоб змусити GCC використовувати
16-розрядний доступ замість, можливо, більш ефективного 32-бітного доступу.

Якщо цей параметр вимкнено, компілятор використовує найефективнішу інструкцію. В
попередній приклад, це може бути 32-розрядна інструкція завантаження, навіть якщо вона має доступ
байти, які не містять жодної частини бітового поля або регістрів, відображених у пам'яті
не пов’язаний з тим, що оновлюється.

Якщо ціль вимагає суворого вирівнювання, і буде потрібно дотримуватися типу поля
за порушення цього вирівнювання виноситься попередження. Якщо поле має атрибут "packed",
доступ здійснюється без дотримання типу поля. Якщо в полі немає
"packed", доступ здійснюється відповідно до типу поля. В обох випадках GCC
передбачає, що користувач знає щось про цільове обладнання, про що він не знає.

Значення за замовчуванням цієї опції визначається бінарним інтерфейсом програми для
цільовий процесор.

-fsync-libcalls
Цей параметр контролює, чи буде будь-який позалінійний екземпляр сімейства "__sync".
функції можуть використовуватися для реалізації сімейства функцій C++11 "__atomic".

Значення цієї опції за замовчуванням увімкнено, отже, це єдина корисна форма параметра
is -fno-sync-libcalls. Цей варіант використовується при реалізації лібатомічні
бібліотека часу виконання.

НАВКОЛИШНЄ СЕРЕДОВИЩЕ


У цьому розділі описано кілька змінних середовища, які впливають на роботу GCC. Дещо
з них працюють, вказуючи каталоги або префікси для використання під час пошуку різних видів
файлів. Деякі використовуються для визначення інших аспектів середовища компіляції.

Зауважте, що ви також можете вказати місця для пошуку за допомогою таких параметрів, як -B, -I та -L.
Вони мають пріоритет над місцями, заданими за допомогою змінних середовища, які, у свою чергу
мають пріоритет над тими, які визначені конфігурацією GCC.

МОВА
LC_CTYPE
LC_MESSAGES
LC_ALL
Ці змінні середовища керують тим, як GCC використовує інформацію про локалізацію
що дозволяє GCC працювати з різними національними конвенціями. GCC перевіряє локаль
категорії LC_CTYPE та LC_MESSAGES якщо він був налаштований на це. Ці локалі
категорії можна встановити на будь-яке значення, яке підтримується вашою інсталяцією. Типове значення
en_GB.UTF-8 для англійської мови у Великобританії, закодованої в UTF-8.

Команда LC_CTYPE Змінна середовища визначає класифікацію символів. GCC використовує це для
визначити межі символів у рядку; це потрібно для деякої багатобайтової інформації
кодування, що містять лапки та escape-символи, які інакше інтерпретуються як a
кінець рядка або вихід.

Команда LC_MESSAGES Змінна середовища визначає мову для діагностики
повідомлення

Якщо LC_ALL змінна середовища встановлена, вона перевизначає значення LC_CTYPE та
LC_MESSAGES; інакше, LC_CTYPE та LC_MESSAGES за замовчуванням значення МОВА
змінна середовища. Якщо жодна з цих змінних не встановлена, GCC за замовчуванням має традиційне значення
C Англійська поведінка.

TMPDIR
If TMPDIR встановлено, він визначає каталог для тимчасових файлів. GCC використовує
тимчасові файли для зберігання результатів одного етапу компіляції, які мають використовуватися як
вхід до наступного етапу: наприклад, вихід препроцесора, який є
введення до власне компілятора.

GCC_COMPARE_DEBUG
Установка GCC_COMPARE_DEBUG майже еквівалентно проходженню -fcompare-debug до
драйвер компілятора. Додаткову інформацію дивіться в документації цієї опції.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX встановлено, він визначає префікс для використання в іменах
підпрограми, що виконуються компілятором. Якщо цей префікс об’єднано, коса риска не додається
з назвою підпрограми, але ви можете вказати префікс, який закінчується косою рискою if
Ви бажаєте.

If GCC_EXEC_PREFIX не встановлено, GCC намагається знайти відповідний префікс для використання
на основі імені шляху, за допомогою якого воно викликається.

Якщо GCC не може знайти підпрограму за вказаним префіксом, він намагається знайти в
звичайні місця для підпрограми.

Значення за замовчуванням GCC_EXEC_PREFIX is префікс/lib/gcc/ де префікс є префіксом до
встановлений компілятор. У багатьох випадках префікс це значення "prefix", коли ви запустили
конфігурувати сценарій

Інші префікси, зазначені з -B мати пріоритет перед цим префіксом.

Цей префікс також використовується для пошуку файлів, таких як crt0.o які використовуються для зв’язування.

Крім того, префікс використовується незвичним чином при пошуку каталогів для пошуку
для заголовних файлів. Для кожного зі стандартних каталогів, ім'я яких зазвичай починається
з /usr/local/lib/gcc (точніше, зі значенням GCC_INCLUDE_DIR), GCC намагається
замінивши цей початок на вказаний префікс, щоб створити альтернативний каталог
ім'я. Таким чином, с -Бфу/, пошук GCC foo/бар безпосередньо перед пошуком стандарту
каталог /usr/local/lib/bar. Якщо стандартний каталог починається з configured
префікс то значення префікс замінюється на GCC_EXEC_PREFIX під час пошуку заголовка
файли.

COMPILER_PATH
Значення COMPILER_PATH — це список каталогів, розділених двокрапкою, схожий на PATH.
Якщо не вдається, GCC намагається вказати каталоги під час пошуку підпрограм
знайдіть підпрограми за допомогою GCC_EXEC_PREFIX.

LIBRARY_PATH
Значення LIBRARY_PATH — це список каталогів, розділених двокрапкою, схожий на PATH.
Коли GCC налаштовано як рідний компілятор, GCC намагається використовувати каталоги, зазначені таким чином, коли
пошук спеціальних файлів компонувальника, якщо він не може знайти їх за допомогою GCC_EXEC_PREFIX.
Посилання за допомогою GCC також використовує ці каталоги під час пошуку звичайних бібліотек
для -l параметр (але каталоги, зазначені за допомогою -L прийди першим).

МОВА
Ця змінна використовується для передачі інформації про локаль компілятору. Один із способів
ця інформація використовується для визначення набору символів, який буде використовуватися, коли символ
літерали, рядкові літерали та коментарі аналізуються на C і C++. Коли компілятор
налаштовано на дозвіл багатобайтових символів, наступні значення для МОВА він має
визнано:

C-JIS
Розпізнавати символи JIS.

C-SJIS
Розпізнавати символи SJIS.

C-EUCJP
Розпізнавати символи EUCJP.

If МОВА не визначено, або якщо воно має якесь інше значення, то компілятор використовує "mblen"
і "mbtowc", як визначено за замовчуванням, для розпізнавання та перекладу багатобайт
символів.

Деякі додаткові змінні середовища впливають на поведінку препроцесора.

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Значення кожної змінної - це список каталогів, розділених спеціальним символом, багато
як PATH, в якому шукати заголовні файли. Особливий персонаж,
"PATH_SEPARATOR" залежить від мети і визначається під час складання GCC. Для Microsoft
Цілі на базі Windows це крапка з комою, а майже для всіх інших цілей це крапка з комою
товста кишка.

CPATH вказує список каталогів, які потрібно шукати так, ніби вказано з -I, Але
після будь-яких шляхів, заданих с -I параметри в командному рядку. Ця змінна середовища
використовується незалежно від мови попередньої обробки.

Решта змінних середовища застосовуються лише під час попередньої обробки конкретного
вказана мова. Кожен визначає список каталогів, які потрібно шукати
зазначено с -ісистема, але після будь-яких шляхів, заданих с -ісистема варіанти на
command line.

У всіх цих змінних порожній елемент інструктує компілятор шукати його поточний
робочий каталог. Порожні елементи можуть з'являтися на початку або в кінці шляху. Для
наприклад, якщо значення CPATH є ":/special/include", що має той самий ефект, що і
-Я. -Я/спеціальний/включаю.

DEPENDENCIES_OUTPUT
Якщо ця змінна встановлена, її значення вказує, як вивести залежності для Make на основі
на несистемні заголовні файли, оброблені компілятором. Системні заголовні файли є
ігнорується у виводі залежності.

Значення DEPENDENCIES_OUTPUT може бути просто ім’ям файлу, у цьому випадку правила Make
записуються в цей файл, вгадуючи цільове ім’я з назви вихідного файлу. Або
значення може мати вигляд файл мета, у цьому випадку правила записуються у файл файл
використання мета як цільове ім'я.

Іншими словами, ця змінна середовища еквівалентна об’єднанню параметрів -ММ
та -MF, з необов'язковим -MT перемикач теж.

SUNPRO_DEPENDENCIES
Ця змінна така ж, як DEPENDENCIES_OUTPUT (див. вище), крім цієї системи
заголовні файли не ігноруються, це означає -M а не -ММ. Проте
залежність від основного вхідного файлу пропущена.

Використовуйте aarch64-linux-gnu-g++-4.8 онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

  • 1
    VBA-M (заархівовано – зараз на Github)
    VBA-M (заархівовано – зараз на Github)
    Проект переміщено в
    https://github.com/visualboyadvance-m/visualboyadvance-m
    Особливості: Створення чітів, збереження кількох станів
    система, підтримує gba, gbc, gb, sgb,
    sgb2Tu...
    Завантажте VBA-M (архівовано - тепер на Github)
  • 2
    Стацер
    Стацер
    Оптимізатор і моніторинг системи Linux
    Репозиторій Github:
    https://github.com/oguzhaninan/Stacer.
    Аудиторія: кінцеві користувачі/комп’ютер. Користувач
    інтерфейс: Qt. Програмування La...
    Завантажити Stacer
  • 3
    оранжева лисиця
    оранжева лисиця
    Форк TeamWinRecoveryProject (TWRP)
    з багатьма додатковими функціями, редизайн
    та інші особливості: Підтримка високих частот і
    ПЗУ без високих частот. Оновлене ядро ​​Oreo,
    побудований...
    Завантажити OrangeFox
  • 4
    itop - ITSM CMDB OpenSource
    itop - ITSM CMDB OpenSource
    ІТ-операційний портал: повністю відкритий
    джерело, ITIL, веб-сервіс
    інструмент управління в тому числі повн
    настроюваний CMDB, система служби підтримки та
    документодавець...
    Завантажити itop - ITSM CMDB OpenSource
  • 5
    Клементина
    Клементина
    Clementine — це мультиплатформена музика
    плеєр і органайзер бібліотеки, натхненний
    Amarok 1.4. Він має швидкий і
    простий у використанні інтерфейс і дозволяє
    пошук і...
    Завантажити Clementine
  • 6
    XISMuS
    XISMuS
    УВАГА: Кумулятивне оновлення 2.4.3 має
    звільнено!! Оновлення працює для будь-якого
    попередня версія 2.xx. У разі оновлення
    з версії v1.xx, завантажте і
    Я ...
    Завантажте XISMuS
  • Детальніше »

Команди Linux

  • 1
    abiword
    abiword
    abiword � гнучке міжплатформне слово
    процесор...
    Запустіть abiword
  • 2
    абл
    абл
    abl - префіксне представлення для
    логічні функції ОПИС:
    libablmmm.a — це бібліотека, яка дозволяє
    представляють булеву функцію в a
    LISP-подібна форма. ...
    Запустити abl
  • 3
    create_bmp_for_rect_in_circ
    create_bmp_for_rect_in_circ
    sorry_no_written_yet - частина використання atlc
    create_bmp_for_rect_in_circ онлайн за допомогою
    послуги onworks.net. ...
    Запустіть create_bmp_for_rect_in_circ
  • 4
    create_bmp_for_rect_in_rect
    create_bmp_for_rect_in_rect
    create_bmp_for_rect_in_rect - растрове зображення
    генератор для прямокутного провідника
    всередині прямокутного провідника (частина
    atlc) ...
    Запустіть create_bmp_for_rect_in_rect
  • 5
    розрив 5
    розрив 5
    gap5 - Програма складання геному (частина
    стаден пакет)...
    Run gap5
  • 6
    gapi2-codegen
    gapi2-codegen
    недокументований - для цього немає довідкової сторінки
    програма. ОПИС: Ця програма робить
    немає сторінки довідника. Виконайте цю команду
    за допомогою перемикача, щоб побачити, що це
    робить. Для е...
    Запустіть gapi2-codegen
  • Детальніше »

Ad