Ad

Ulubiona usługa OnWorks
angielskifrancuskiniemieckiwłoskiportugalskirosyjskihiszpański

mips64el-linux-gnuabi64-gnatgcc - Online w chmurze

Uruchom mips64el-linux-gnuabi64-gnatgcc u dostawcy bezpłatnego hostingu OnWorks przez Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS

Jest to polecenie mips64el-linux-gnuabi64-gnatgcc, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu darmowych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS

PROGRAM:

IMIĘ


gcc — kompilator projektu GNU C i C++

STRESZCZENIE


gcc [-c|-S|-E] [-std=standard]
[-g] [-pg] [-Opoziom]
[-Wostrzec...] [-Wpedancki]
[-Ireż...] [-Lreż...]
[-Dmakro[=zdefiniuj]...] [-Umakro]
[-fopcja...] [-mmaszyna-opcja...]
[-o outfile] [@filet] w pliku...

Tutaj wymieniono tylko najbardziej przydatne opcje; patrz poniżej dla reszty. g ++ akceptuje
w większości takie same opcje jak gcc.

OPIS


Kiedy wywołujesz GCC, zwykle wykonuje wstępne przetwarzanie, kompilację, asemblację i linkowanie.
„Opcje ogólne” pozwalają zatrzymać ten proces na etapie pośrednim. Do
przykład -c opcja mówi, aby nie uruchamiać linkera. Wtedy wyjście składa się z obiektu
pliki wyjściowe przez asembler.

Inne opcje są przekazywane do jednego etapu przetwarzania. Niektóre opcje kontrolują
preprocesor i inne sam kompilator. Jeszcze inne opcje kontrolują asembler i
linker; większość z nich nie jest tutaj udokumentowana, ponieważ rzadko trzeba z nich korzystać.

Większość opcji wiersza poleceń, których można używać z GCC, jest przydatna dla programów w C; gdy
opcja jest użyteczna tylko w innym języku (zwykle C++), wyjaśnienie tak mówi
wyraźnie. Jeśli opis konkretnej opcji nie wymienia źródła
język, możesz użyć tej opcji we wszystkich obsługiwanych językach.

Pandemia gcc program akceptuje opcje i nazwy plików jako operandy. Wiele opcji ma wiele
nazwy literowe; dlatego wiele opcji jednoliterowych może nie być pogrupowane: -dv jest bardzo
różni się od -d -v.

Możesz mieszać opcje i inne argumenty. W większości kolejność, której używasz, nie
materiał. Porządek ma znaczenie, gdy korzystasz z kilku opcji tego samego rodzaju; na przykład, jeśli
ty określasz -L więcej niż raz, katalogi są przeszukiwane w określonej kolejności. Także,
umieszczenie -l opcja jest znacząca.

Wiele opcji ma długie nazwy zaczynające się od -f lub -W---na przykład,
-fmove-loop-niezmiennicze, -Wformat i tak dalej. Większość z nich ma zarówno pozytywne, jak i negatywne
formularze; negatywna forma -ffoo is -fno-foo. Ten podręcznik dokumentuje tylko jeden z nich
dwie formy, w zależności od tego, która z nich nie jest domyślna.

OPCJE


opcja Podsumowanie
Oto podsumowanie wszystkich opcji pogrupowanych według typu. Wyjaśnienia są następujące
działy.

Ogólnie Opcje
-c -S -E -o filet -bez-kanonicznych-przedrostków -rura - kody-wyjścia-pass -x język -v
-### --help[=klasa[, ...]] --cel-pomoc --wersja -obwoluta @filet -fplugin=filet
-fplugin-arg-Nazwa=arg -fdump-ada-spec[-szczupły] -fada-spec-parent=jednostka
-fdump-go-spec=filet

C język polski lub języki obce Opcje
-ansi -std=standard -fgnu89-w linii -informacje-dodatkowe filename
-odłogi-bezparametrowe-funkcje-zmienne -fno-asm -fno-wbudowany -fno-wbudowany-funkcjonować
-odsłonięty -wolnostojący -fopenacc -fopenmp -fopenmp-simd -fms-rozszerzenia
-fplan9-rozszerzenia -trygrafy -tradycyjny -tradycyjny-cpp -odłogiem-pojedyncza-precyzja
-fcond-niezgodność -konwersje-wektorów-lnu -fsigned-bitfields -fsigned-char
-zabawne-pola bitowe -zabawny-char

C + + język polski lub języki obce Opcje
-fabi-wersja=n -fno-kontrola-dostępu -fcheck-new -fconstexpr-głębokość=n
-ffriend-injection -fno-elide-konstruktory -fno-enforce-eh-specyfikacje -ffor-zakres
-fno-dla-zakresu -fno-gnu-słowa kluczowe -fno-niejawne-szablony
-fno-niejawne-inline-szablony -fno-implement-inline -fms-rozszerzenia
-fno-nonansi-builtins -fnothrow-opt -fno-nazwy-operatorów -fno-opcjonalne-diags
-fpermisywny -fno-ładne-szablony -frepo -fno-rtti -fsized-deallocation -fstats
-ftemplate-backtrace-limit=n -głębokość wzorca=n -fno-threadsafe-statics
-bezpiecznik-cxa-atexit -fno-słaba -nostdinc++ -fvisibility-inlines-hidden
-fvtable-weryfikacja=[std|preinit|Żaden] -liczba-fvtv -fvtv-debug -fvisibility-ms-compat
-fext-numeric-literals -Wabi=n -Wabi-tag -Wkonwersja-null -Wctor-dtor-prywatność
-Wdelete-nie wirtualny-dtor -Wliteral-sufiks -Zwężenie się -Niez wyjątkiem -Wnon-virtual-dtor
-Przesyłka -Weffc++ -Wstrict-null-sentinel -Wno-bez szablonu-znajomego -Wold-style-obsada
-Woverloaded-wirtualny -Wno-pmf-konwersje -Wsign-promo

Objective-C dzięki Cel-C++ język polski lub języki obce Opcje
-fstała-klasa-stringu=Nazwa klasy -fgnu-runtime -Fnext-runtime -fno-nil-odbiorniki
-fobjc-abi-wersja=n -fobjc-call-cxx-cdtors -fobjc-bezpośrednia-wysyłka -fobjc-wyjątki
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-lokalne-iwary
-fivar-widoczność=[publiczny|chroniony|prywatny|pakiet] -zajęcia-objc-replace
-fzero-link -gen-decls -Wassign-przechwytywanie -Wno-protokół -Wselektor
-Wstrict-selector-match -Niezadeklarowany-selektor

język polski lub języki obce Niezależny Opcje
-f-długość-wiadomości=n -fdiagnostyka-pokaż-lokalizację=[pewnego razu|każda linia]
-fdiagnostyka-kolor=[samochód|nigdy|zawsze] -fno-diagnostics-show opcja
-fno-diagnostics-show-caret

ostrzeżenie Opcje
- tylko fsyntax -fmax-błędy=n -Wpedancki -pedantyczne-błędy -w -Wextra -Ściana
-Waddress -Waggregate-zwrot - Optymalizacje Waggressive-loop -Warray-bounds
-Warray-bounds=n -Wbool-porównaj -Wno-atrybuty -Wno-wbudowane-makro-przedefiniowane
-Wc90-c99-kompatybilny -Wc99-c11-kompatybilny -Wc++-kompatybilność -Wc++11-kompatybilność -Wc++14-kompatybilność
-Wcast-wyrównaj -Wcast-qual -Wchar-subscripts -Wstrzymany -Wkomentarz
-W warunkowo obsługiwany -Wkonwersja -Niezgodność zasięgu -Wdata-godzina
-Wdelete-niekompletne -Wno-cpp -Wno-przestarzałe -Wno-przestarzałe-deklaracje
-Wno-desygnowany-init -Wdisabled-optymalizacja -Wno-odrzucone-kwalifikatory
-Wno-discarded-array-qualifiers -Wno-div-by-zero -Wpodwójna promocja -Wempty-ciało
-Wenum-porównaj -Wno-endif-etykiety -Błąd -Błąd=* -Wfatal-błędy -Wfloat-równe
-Wformat -Wformat=2 -Wno-format-contains-nul -Wno-format-extra-args
-Wformat-niedosłowny -Wformat-zabezpieczenia -Wformat-podpisywanie -Wformat-y2k
-Wframe-większy-niż=len -Wno-free-non-heap-object -Wjump-miss-init
-Wigned-kwalifikatory -Winkompatybilne typy wskaźników -Wimplicit
-Wimplicit-deklaracja funkcji -Wimplicit-int -Win-self -Winline
-Wno-w-konwersja -Wno-int-to-point-cast -Wno-invalid-offsetof -Winvalid-pch
-Większy-niż=len - Optymalizacje pętli Wunsafe -Wlogiczna-op -Wlogiczne-nie-nawiasy
-Wlong-long -Wmain -Wmoże-niezainicjowany -Wmemset-transponowane-args -Wmissing-szelkach
-Wmissing-field-initializers -Wmissing-include-dirs -Wno-wieloznakowy -Wnonnull
-Wnormalizowane=[Żaden|id|nfc|nfkc]
-Wodra -Bez przelewu -Wopenmp-simd -Woverlength-strings -Zapakowany
-Wpacked-bitfield-compat -Wyściółka -Nawiasy -Wpedantyczny-ms-format
-Wno-pedantyczny-ms-format -Wpointer-arith -Wno-wskaźnik-do-oddania -Zbędne dekl
-Wno-return-local-addr -Typ zwrotny -Wsekwencja-punkt -Cień -Wno-cień-ivar
-Wshift-count-ujemny -Wshift-count-overflow -Porównaj znak -Konwersja znaku
-Wpływ-konwersja -Wsizeof-pointer-memaccess -Wrozmiar-argumentu-tablicy
-Ochraniacz stosu -Wstos-użycie=len -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-przepełnienie -Wstrict-przepełnienie=n -Wsugeruj atrybut=[czysty|const|bez powrotu|format]
-Wsugeruj-ostateczne typy -Zasugeruj-końcowe-metody -Zasugeruj nadpisanie
-Wmissing-format-attribute -Wprzełącznik -Wswitch-default -Wswitch-enum -Wswitch-bool
-Wsync-nand -Wsystem-nagłówki -trampoliny -Wtrygrafy -Wtype-limity -Wundef
-Wuninitialized -Wunknown-pragmas -Wno-pragmy -Wunsuffixed-float-stałe
-Wunused -Wunused-funkcja -Wunused-etykieta -Wunused-local-typedefs -Wunused-parametr
-Wno-niewykorzystany-wynik -Wunused-wartość -Wunused-zmienna -Wunused-ale-set-parameter
-Wunused-ale-set-variable -Bezużyteczna obsada -Wvariadic-makra
-Wvector-operacja-wydajność -Wvla -Wvolatile-register-var -Write-strings
-Wzero-jako-null-stała-wskaźnika

C dzięki Tylko cel C ostrzeżenie Opcje
-Wbad-funkcja-obsada -brakujące-deklaracje -Wmissing-parameter-type
-Brakujące prototypy -Wnested-zewnętrzni - Deklaracja w stylu Wolda -Definicja w stylu Wolda
-Wstrict-prototypy -Wtradycyjne -Konwersja tradycyjna
-Wdeklaracja-po-wyciągu -Wskaźnik-znak

Debugowanie Opcje
-dlisty -dumpspecs -wywrotka -dumpwersja -fsanitize=styl -fsanitize-recover
-fsanitize-recover=styl -fasan-przesunięcie-cienia=numer
-fsanitize-undefined-trap-on-error -f-wskaźnik-kontrolny-granice -fchkp-check-incomplete-type
-fchkp-pierwsze-pole-ma-własne-granice -fchkp-wąskie granice
-fchkp-wąska-do-najbardziej wewnętrznej tablicy -fchkp-optymalizuj -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-functions -fchkp-use-static-bounds
-fchkp-use-static-const-bounds -fchkp-traktuj-zero-dynamic-rozmiar-jako-nieskończony
-fchkp-sprawdzanie-odczyt -fchkp-sprawdzanie-odczyt -fchkp-czek-zapis -fchkp-store-bounds
-fchkp-instrument-wywołania -fchkp-tylko-oznaczony-instrument -fchkp-use-wrappers
-fdbg-lista-cnt -fdbg-cnt=lista kontrwartości -fdisable-ipa-nazwa_przepustki
-fdisable-rtl-nazwa_przepustki -fdisable-rtl-imię-hasło=lista-zakresów -fdisable-drzewo-nazwa_przepustki
-fdisable-drzewo-imię-hasło=lista-zakresów -fdump-noaddr -fdump-nienumerowane
-fdump-nienumerowane-linki -fdump-jednostka-tłumaczenia[-n] -fdump-klasa-hierarchia[-n]
-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline -fdump-passes -fdump-statystyki
-fdump-drzewo-wszystkie -fdump-tree-original[-n] -fdump-zoptymalizowany pod drzewo[-n] -fdump-drzewo-cfg
-fdump-drzewo-alias -fdump-drzewo-ch -fdump-drzewo-ssa[-n] -fdump-drzewo-pre[-n]
-fdump-drzewo-ccp[-n] -fdump-drzewo-dce[-n] -fdump-drzewo-gimple[-surowy] -fdump-drzewo-dom[-n]
-fdump-drzewo-dse[-n] -fdump-drzewo-phiprop[-n] -fdump-drzewo-phiopt[-n]
-fdump-drzewo-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-drzewo-nrv -fdump-drzewo-vect
-fdump-drzewo-zlew -fdump-drzewo-sra[-n] -fdump-drzewo-forwprop[-n] -fdump-drzewo-fre[-n]
-fdump-drzewo-vtable-weryfikuj -fdump-drzewo-vrp[-n] -fdump-drzewo-storeccp[-n]
-fdump-final-insns=filet -fcompare-debug[=optuje] -fcompare-debug-second
-feliminacja-krasnoludek2-dupy -fno-eliminacja-nieużywanych-typów-debugowania
-feliminuj-nieużywane-symbole-debugowania -femit-class-debug-zawsze -wykonalne-uprzejmy-przechodzić
-wykonalne-uprzejmy-przechodzić=lista-zakresów -sekcja-fdebug-typów -fmem-raport-wpa -fmem-raport
-fpre-ipa-mem-raport -fpost-ipa-mem-raport -f-łuki-profilu -fopt-informacje
-fopt-informacje-Opcje[=filet] -frandom-seed=numer -fsched-verbose=n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-użycie -pokrycie-ftest
-ftime-raport -fvar-śledzenie -przypisania-śledzenia-fvar
-Przełącznik-przypisania-śledzenia-fvar -g -gpoziom -przełączanie -gcoff -gkarł-wersja -ggdb
-przełączniki-grecord-gcc -gno-record-gcc-switches -gtabs -gstabs+ -gstrict-krasnolud
-gno-ścisłe-karzeł -gvms -gxcoff -gxcoff+ -gz[=rodzaj] -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-mapa-prefiksów=stary=Nowy -femit-struct-debug-base only
-femit-struct-debug-reduced -femit-struct-debug-detailed[=lista specyfikacji] -p -pg
-print-nazwa-pliku=biblioteka -print-nazwa-pliku-libgcc -print-multi-directory
-print-multi-lib -print-multi-os-directory -print-nazwa-programu=program
-print-search-dirs -Q -print-sysroot -print-sysroot-headers-suffix -save-temps
-save-temps=cwd -save-temps=obj -czas[=filet]

Optymalizacja Opcje
-faggressive-loop-optymalizacje -falign-funkcje[=n] -falign-skoki[=n]
-falign-etykiety[=n] -falign-pętle[=n] -matematyka-łącznikowa -fauto-profil
-fauto-profil[=ścieżka] -fauto-inc-dec -prawdopodobieństwa-oddziału
-fbranch-target-load-optymalizuj -fbranch-target-load-optimize2 -fbtr-bb-exclusive
-fcaller-zapisuje -fcheck-data-deps -fcombine-regulacje-stosu -fkonserwuj-stosu
-fporównaj-elim -fcprop-rejestry -skoki przełajowe -fcse-follow-skoki -fcse-pomiń bloki
-fcx-fortran-zasady -fcx-ograniczony-zakres -fdata-sekcje -fdce -fdelayed-branch
-fdelete-null-pointer-checks -fdewirtualizuj -fdewirtualizuj-spekulatywnie
-fdevirtualize-at-ltrans -fdse -strasznie-inlining -fipa-sra -kosztowna-optymalizacje
-ffat-lto-obiekty -fast-matematyka -finite-tylko matematyka -sklep-float
-fexcess-precyzja=styl -forward-propaguj -ffp-umowa=styl -sekcje-funkcji
-fgcse -fgcse-po-przeładowaniu -fgcse-las -fgcse-lm -fgrafit-tożsamość -fgcse-sm
-podnośniki-sąsiadujące-obciążenia -fif-konwersja -fif-konwersja2 -findirect-inlining
-finline-funkcje -finline-functions- wywołane-raz -finline-limit=n
-finline-małe-funkcje -fipa-cp -fipa-cp-klon -wyrównanie fipa-cp -fipa-pta
-fipa-profil -fipa-pure-const -Fipa-referencja -fipa-icf -fira-algorytm=algorytm
-fira-region=region -fira-wciągnik-nacisk -fira-pętla-ciśnienie -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-gadatliwa=n -fisolate-błędnych-ścieżek-odniesienia
-fisolate-błędnych-ścieżek-atrybut -fivopts -fkeep-inline-functions
-fkeep-static-consts -skurcz-zasięg-przelotowy -floop-block -floop-wymiana
-floop-strip-mine -floop-rozwiń-i-zacięcie -floop-nest-optymalizuj -floop-parallelize-all
-flra-remat -flto -flto-poziom kompresji -flto-partycja=ALG -flto-raport
-flto-raport-wpa -fmerge-all-constans -fmerge-stałe -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-niezmiennicze -fno-liczba-oddziałów-reg
-fno-defer-pop -fno-funkcja-cse -fno-zgadnij-oddział-prawdopodobieństwo -fno-inline
-fno-matma-errno -fno-wizjer -fno-wizjer2 -fno-sched-interblock -fno-sched-spec
-fno-podpisane-zera -fno-toplevel-reorder -fno-trapping-matematyka
-fno-zero-inicjalizowane-w-bss -fomit-frame-pointer -foptimize-rodzeństwo-połączenia
-częściowa inlining -pętle-odczuwania -fpredictive-commoning -fprefetch-loop-arrays
-f-raport-profil -f-korekta-profilu -f-katalog-profilu=ścieżka -fprofil-generuj
-fprofil-generuj=ścieżka -f-użycie-profilu -f-użycie-profilu=ścieżka -f-wartości-profilu
-fprofile-reorder-functions - matematyka częsta -wolny -rejestry-nazwisk
-bloki-freorder -bloki-freorder-i-partycja -funkcje-freorder
-frerun-cse-po-pętli -freschedule-modulo-scheduled-loops -frounding-matematyka
-fsched2-użyj-superbloków -fsched-ciśnienie -fsched-spec-load
-fsched-spec-load-niebezpieczne -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n]
-fsched-group-heurystyka -fsched-heurystyka-ścieżki-krytycznej -fsched-spec-insn-heurystyka
-fsched-rank-heurystyka -fsched-last-insn-heurystyka -fsched-dep-count-heurystyka
-fschedule-fusion -fschedule-insns -fschedule-insns2 -kotwy-fsekcji
-fplanowanie-selektywne -f planowanie-selektywne2 -fsel-sched-pipelining
-fsel-sched-pipelining-outer-loops -fsemantyczna-interpozycja -fshrink-wrap
-fsygnalizacja-nans -fsingle-precyzja-stała -fsplit-ivs-in-unroller
-fsplit-wide-types -fssa-phiopt -fstack-protector -fstack-protector-all
-fstack-protector-silny -fstack-protector-wyraźny -fstdarg-opt -fstrict-aliasing
-przepełnienie-przepełnienie -przeskoki do nitki -ftracer -fttree-bit-ccp -fttree-wbudowany-call-dce
-fttree-ccp -ftree-ch -fttree-coalesce-inline-vars -ftree-coalesce-vars -bezpłatna kopia-prop
-fttree-copyrename -czterech-dce -bez-dominujący-opcje -ftree-dse -ftree-forwprop
-bezpłatny -ftree-loop-jeśli-konwertuj -sklepy-o-pętli-jeśli-przekonwertują -ftree-loop-im
-fttree-phiprop -dystrybucja-pętla-o-pętli -wzorce-dystrybucji-pętli-w-pętli
-ftree-loop-ivcanon -ftree-loop-linear -optymalizacja-pętla okrężna -wektoryzacja pętli trójstronnej
-fttree-parallelize-loops=n -bezpłatny -bezpłatna-częściowa-przed -czterech-pta -ftree-reassoc
-umywalka -ftre-slsr -ftree-sra -konwersja-przełącznika-ftree -Ftree-tail-scalanie
-fraterka -ftree-wektoryzuj -ftree-vrp -zabawa-na-czas -funroll-all-loops
-funroll-pętle -optymalizacje funsafe-loop -funsafe-matematyczne optymalizacje
-funswitch-pętle -fipa-ra -fvariable-expansion-in-unroller -fvect-model-kosztowy -fvpt
-fweb -cały-program -fwpa -fuse-linker-plugin --param Nazwa=wartość -O -O0 -O1 -O2
-O3 -Os -Ofast -Og

Preprocesor Opcje
-Apytanie=odpowiedź -ZA-pytanie[=odpowiedź] -C -dD -dI -dM -dN -Dmakro[=zdefiniuj] -E -H
-idirafter reż -zawierać filet -makros filet -iprefiks filet -iwithprefix reż
-iwithprefixbefore reż -isystem reż -imultilib reż -isysroot reż -M -MM -MF -MG
-POSEŁ -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-makro-rozszerzenie -fworking-katalog
-remap -trygrafy -undef -Umakro -Wp,opcja -Xpreprocesor opcja -brak zintegrowanego-cpp

Assembler opcja
-Wa,opcja -Xassembler opcja

Linki Opcje
nazwa-pliku-obiektu -bezpiecznik-ld=Linki -lbiblioteka -nostartfiles -nodefaultlibs -nostdlib
-ciasto -rdynamic -s -statyczny -static-libgcc -static-libstdc++ -static-libasan
-static-libtsan -static-liblsan -statyczna-libbsan -static-libmpx -static-libmpxwrappers
-wspólny -shared-libgcc -symboliczny -T scenariusz -Wl,opcja -Xlinker opcja -u symbol -z
keyword

Informator Opcje
-Bprefiks -Ireż -iplugindir=reż -Cytujęreż -Lreż -specyfikacje=filet -JA- --sysroot=reż
--no-sysroot-suffix

Maszyna Zależny Opcje
AAArch64 Opcje -mabi=Nazwa -mbig-endian -mlittle-endian -mgeneral-regs-only
-mcmodel=mały -mcmodel=mały -mcmodel=duży -mstrict-wyrównaj -momit-leaf-frame-pointer
-mno-pomiń-liść-wskaźnik-ramki -mtls-dialekt=opis -mtls-dialect=tradycyjny
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 -marzec=Nazwa -mcpu=Nazwa -mtune=Nazwa

Adapteva Święto Trzech Króli Opcje -mhalf-reg-plik -mprefer-short-insn-regs -koszt-oddzialu=num
-mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modyfikacja
-mstack-przesunięcie=num -mround-najbliższy -mlong-rozmowy -mshort-połączenia -msmall16 -tryb-mfp=tryb
-mvect-podwójny -max-vect-align=num -msplit-vecmove-wcześnie -m1reg-reg

ARC Opcje -mbarrel-shifter -mcpu=cpu -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-kompaktowy -mdpfp-szybki -mno-dpfp-lrsr -śr -mno-mpy -mmul32x16 -mmul64 -mnorma
-mspfp -mspfp-kompaktowy -mspfp-szybki -msimd -msoft-float -mswap -mcrc -mdsp-pakiet -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswape -telefonia -mxy -niewielkość -mannotate-wyrównaj
-marclinux -marclinux_prof -mepilog-cfi -mlong-rozmowy -mmedium-połączenia -msdata
-mucb-mcount -mvolatile-cache -malign-call -mauto-modyfikacja-reg -mbbit-wizjer -mno-brcc
-mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -marly-cbranchsi -mexpand-adddi
-mindexed-loads -mlra -mlra-priorytet-brak -mlra-priorytet-kompaktowy mlra-priorytet-
niekompaktowy -mno-milikod -Mmixed-kod -mq-klasa -mRcq -mRcw -mrozmiar-poziom=poziom
-mtune=cpu -multcost=num -munalign-prob-threshold=prawdopodobieństwo

ARM Opcje -mapcs-rama -mno-apcs-rama -mabi=Nazwa -mapcs-sprawdzanie stosu
-mno-apcs-sprawdzanie stosu -mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian
-mfloat-abi=Nazwa -mfp16-format=Nazwa -mkciuk-współpraca -mno-kciuk-interwork -mcpu=Nazwa
-marzec=Nazwa -mfpu=Nazwa -mtune=Nazwa -mprint-tune-informacje -mstruktura-rozmiar-granica=n
-mabort-on-noreturn -mlong-rozmowy -mno-długie-rozmowy -msingle-pic-base
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mpoke-nazwa-funkcji
-mkciuk -marm -mtpcs-rama -mtpcs-ramka-liść -mcaller-super-interworking
-mcallee-super-interworking -mtp=Nazwa -mtls-dialekt=dialekt -mword-relokacje
-mfix-cortex-m3-ldrd - dostęp do munaligned -mneon-dla-64bitów -mslow-flash-data
-masm-składnia-ujednolicona -mrestrict-it

AVR Opcje -mmcu=mcu -maccumulate-args -koszt-oddzialu=koszt -mcall-prologi -miętowy8
-mn_flash=rozmiar -mno-przerwania -mrelaks -mrmw -mstrict-X -mtiny-stack -nodevicelib
-Waddr-spacja-konwert

Blackfin Opcje -mcpu=cpu[-sirewizja] -msim -momit-leaf-frame-pointer
-mno-pomiń-liść-wskaźnik-ramki -mspecld-anomalia -mno-specld-anomalia -mcsync-anomalia
-mno-csync-anomalia -mlow-64k -mno-niski64k -mstack-check-l1 -Mid-shared-biblioteka
-mno-id-shared-biblioteka -id-biblioteki-mshared=n -mleaf-id-shared-biblioteka
-mno-leaf-id-shared-biblioteka -msep-dane -mno-sep-data -mlong-rozmowy -mno-długie-rozmowy
-mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram -micplb

C6X Opcje -mbig-endian -mlittle-endian -marzec=cpu -msim -msdata=sdata-type

CRIS Opcje -mcpu=cpu -marzec=cpu -mtune=cpu -mmax-ramka-stosu=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-efekty uboczne
-mstack-wyrównaj -mdata-wyrównaj -mconst-wyrównaj -m32-bitowy -m16-bitowy -m8-bitowy
-mno-prolog-epilog -mno-gotplt -melf -maout -melinux -mlinux -sim -sim2
-mmul-bug-obejście -mno-mul-bug-obejście

CR16 Opcje -mmac -mcr16cplus -mcr16c -msim -miętowy32 -mbit-ops -mdata-model=model

Darwin Opcje -all_load -dozwolony_klient -łuk -arch_errors_fatal -tylko_architektura
-bind_at_load -pakiet -bundle_loader -Nazwa klienta -wersja_zgodności
-obecna wersja -martwy_strip -plik-zależności -dylib_plik -dylinker_nazwa_instalacji
-dynamiczny -dynamiclib -exported_symbols_list -lista plików -płaska_przestrzeń nazw
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-baza_obrazu -w tym - nazwa_instalacji -keep_private_externs -multi_moduł
-zdefiniuj_wielokrotnie -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -noprebind
- edytuj powiązanie nosowe -pagezero_size -prebind - prebind_all_dwupoziomowe_moduły -Pakiet_prywatny
-read_only_relocs -sectalign -sektoobiektsymbole -dlaczego? -seg1addr -sectcreate
-sektoobiektsymbole -sektora -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -pojedynczy_moduł -statyczny -sub_biblioteka -sub_parasol
-dwupoziomowa_przestrzeń nazw -parasol -nieokreślony -unexported_symbols_list
-weak_reference_mismatches -co załadowano -F - przestraszony -gfull -mmacosx-wersja-min=wersja
-mkernel -mone-byte-bool

Grudzień Alfa Opcje -mno-fp-regs -msoft-float -mieee -mieee-z-niedokładną
-mieee-zgodny -tryb-pułapki-mfp=tryb -mfp-tryb-zaokrąglania=tryb -mtrap-precyzja=tryb
-mbuild-constants -mcpu=typ procesora -mtune=typ procesora -mbwx -mmmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data -mlarge-data -mały-tekst
-duży-tekst -opóźnienie-pamięci=czas

FR30 Opcje -mały-model -mno-lsim

FRV Opcje -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdouble -mno-podwójny -mmedia -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -multilib-biblioteka-pic
-mlinked-fp -mlong-rozmowy -malign-etykiety -mlibrary-pic -macc-4 -macc-8 -mpack
-mno-pakiet -mno-flagi -mcond-ruch -mno-cond-ruch -moptimize-membar
-mno-optymalizuj-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-oddział
-mno-vliw-oddział -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-zagnieżdżony-cond-exec -mtomcat-stats -mTLS -mtls -mcpu=cpu

GNU / Linux Opcje -mglibc -muclibc -mbioniczny -mandroid -tno-android-cc -tno-android-ld

H8 / 300 Opcje -mrelaks -mh -ms -mn -mexr -mno-exr -miętowy32 -złośliwy-300

HPPA Opcje -marzec=typ architektury -mdisable-fpregs -mdisable-indeksowanie
-mfast-połączenia-bezpośrednie -mgas -mgnu-ld -mhp-ld -mfixed-range=rejestr-zakres
-przeskok-opóźnienie -mlinker-opt -mlong-rozmowy -mlong-load-store -mno-wyłącz-fpregs
-mno-wyłącz-indeksowanie -mno-szybkie-połączenia-bezpośrednie -mno-gaz -mno-skok-opóźnienie
-mno-long-load-store -mno-portable-runtime -mno-miękki-pływak -mno-space-regs
-msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -portable-runtime
-mschedule=typ procesora -mspace-regs -msio -mwsio -unix=unix-std -nolibdld -statyczny
-wątki

IA-64 Opcje -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -nazwy-rejestrów -msdata -mno-sdata -mstała-gp -mauto-zdjęcie
-mfused-madd -minline-float-divide-min-latency -minline-float-divide-max-przepustowość
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-przepustowość -mno-inline-int-divide -minline-sqrt-min-opóźnienie
-minline-sqrt-max-przepustowość -mno-inline-sqrt -mdwarf2-asm -marly-stop-bits
-mfixed-range=rejestr-zakres -rozmiar-mtls=tls-rozmiar -mtune=typ procesora -milp32 -mlp64
-msched-br-data-spec -msched-ar-data-spec -msched-specyfikacja-kontroli -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-specyfikacja-kontroli -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-po-każdym-cyklu
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-kosztów -msched-max-memory-insns-hard-limit
-msched-max-memory-insns=max-insns

LM32 Opcje -włączona zmiana mbarrel - włączone mdivide -mmultiply-enabled
-msign-extend-enabled -muser-włączony

M32R/D Opcje -m32r2 -m32rx -m32r -mdebug -złośliwe pętle -mno-align-loops
-współczynnik-masy=numer -koszt-oddzialu=numer -mmodel=kod-rozmiar-model-typ -msdata=sdata-
rodzaj -mno-flush-func -mflush-func=Nazwa -mno-pułapka-podtynkowa -mflush-pułapka=numer -G num

M32C Opcje -mcpu=cpu -msim -memregs=numer

M680x0 Opcje -marzec=łuk -mcpu=cpu -mtune=melodia -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mshort -mno-krótki -mhard-float -m68881 -msoft-float -mpcrel
-malign-int -mstrict-wyrównaj -msep-dane -mno-sep-data -id-biblioteki-mshared=n
-Mid-shared-biblioteka -mno-id-shared-biblioteka -mxgot -mno-xgot

MCore Opcje -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-natychmiast
-mno-relaks-natychmiast -mwide-bitfields -mno-wide-bitfields -m4byte-funkcje
-mno-4byte-funkcje -mcallgraph-data -mno-callgraph-data -mslow-bajty
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-przyrost

MeP Opcje -mabsdiff -centrum-opcje -maverage -mbazowany=n -mbitops -mc=n -mclip
-mconfig=Nazwa -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-lotny -ml
-mleadz -mm -mminmax -mmult -mno-opts -powtórz -ms -msatur -msdram -msim -msimnovec
-mtf -mtiny=n

MicroBlaze Opcje -msoft-float -mhard-float -msmall-dzielniki -mcpu=cpu -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -Porównaj wzorce mxl -sprawdzanie stosu-mxl
-mxl-gp-opt -mno-clearbss -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
-mbig-endian -mlittle-endian - zmiana kolejności w mxl -tryb-mxl-model aplikacji

MIPS Opcje -EL -EB -marzec=łuk -mtune=łuk -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -Minterlink-skompresowany
-mno-interlink-skompresowany -minterlink-mips16 -mno-interlink-mips16 -mabi=abi
-mabicalls -mno-abicals -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-float
-msingle-float -mdouble-float -modd-spreg -mno-nieparzysty-spreg -mabs=tryb -mnan=kodowanie
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -meva -mno-ewa -mvirt -mno-virt
-mxpa -mno-xpa -mmicromips -mno-micromips -mfpu=typu fpu -msmartmips -mno-smartmips
-upośledzony-singiel -mno-sparowany-singiel -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt
-mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum
-mllocal-sdata -mno-lokalne-dane -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt
-wbudowane dane -mno-embedded-data -muninit-const-in-rodata
-mno-unit-const-w-rodacie -mcode-czytelny=ustawienie -msplit-adresy
-mno-split-adresy -mexplicit-relocs -mno-explicit-relocs -mcheck-zero-dzielenie
-mno-check-zero-division -mdivide-pułapki -mdivide-breaks -mmemcpy -mno-memcpy
-mlong-rozmowy -mno-długie-rozmowy -mmad -mno-szalony -mimadd -mno-imadd -mfused-madd
-mno-skondensowany-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000
-mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000
-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=funkcjonować -mno-flush-func -koszt-oddzialu=num -oddział-prawdopodobnie
-mno-oddział-prawdopodobnie -wyjątki-mfp -mno-fp-wyjątki -mvr4130-wyrównaj -mno-vr4130-wyrównaj
-msynci -mno-synci -mrelax-pic-calls -mno-relaks-pic-rozmowy -mmcount-ra-adres

MMIX Opcje -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-rozszerzenie -mknuthdiv -symbole mtoplevel -melf -przewidywanie-oddziału
-mno-branch-predict - adresy-mbase -mno-base-adresy -pojedyncze-wyjście
-mno-pojedyncze-wyjście

MN10300 Opcje -mult-bug -mno-mult-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=procesor-
rodzaj -mreturn-pointer-on-d0 -mno-crt0 -mrelaks -mliw -msetlb

Moxie Opcje -meb -mel -mmul.x -mno-crt0

MSP430 Opcje -msim -masm-hex -mmcu= -mcpu= -powiększanie -mały -mrelaks -mhwmult= -minrt

NDS32 Opcje -mbig-endian -mlittle-endian -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vector-size=num
-rozmiar-bloku-mcache=num -marzec=łuk -mcmodel=kod-model -mctor-dtor -mrelaks

Nios II Opcje -G num -mgpopt=opcja -mgpopt -mno-gpopt -mel -meb -mno-bypass-cache
-mbypass-cache -mno-cache-volatile -mcache-volatile -mno-szybko-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -mna zamówienie-insn=N
-mno-niestandardowy-insn -mcustom-fpu-cfg=Nazwa -mhal -msmallc -msys-crt0=Nazwa -msys-lib=Nazwa

Nvidia PTX Opcje -m32 -m64 -mmainkernel

PDP-11 Opcje -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy-wbudowany -miętowy32 -mno-int16 -miętowy16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -oddział-drogie -oddział-tanie
-munix-asm -mdec-asm

picoChip Opcje -mae=ae_type -mvliw-lookahead=N -msymbol-jako-adres
-mno-nieefektywne-ostrzeżenia

PowerPC Opcje Zobacz opcje RS/6000 i PowerPC.

RL78 Opcje -msim -mmul=brak -mmul=g13 -mmul=rl78 -m64bit-podwaja -m32bit-podwaja

RS / 6000 dzięki PowerPC Opcje -mcpu=typ procesora -mtune=typ procesora -mcmodel=kod-model
-mpowerpc64 -maltivec -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-twardy-dfp -mfull-toc -minimal-toc -mno-fp-w-toc -mno-sum-in-toc
-m64 -m32 -zgodny z mxl -mno-xl-kompatybilny -mpe -malign-power -złośliwy-naturalny
-msoft-float -mhard-float -mwielokrotność -mno-wielokrotność -msingle-float -mdouble-float
-msimple-fpu -mstring -mno-string -mupdate -mno-aktualizacja -mavoid-indeksowane-adresy
-mno-unikaj-indeksowanych-adresów -mfused-madd -mno-skondensowany-madd -mbit-wyrównaj
-mno-bit-wyrównaj -mstrict-wyrównaj -mno-ścisłe-wyrównaj -mprzeprowadzka -mno-przenośny
-mrelocable-lib -mno-relocable-lib -mtoc -mno-toc -mały -mlittle-endian
-duży -mbig-endian -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base
-mprioritize-restricted-insns=priorytet -msched-kosztowny-dep=typ_zależności
-minsert-sched-nops=schemat -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi=typ abi -msecure-plt -mbss-plt
-mblock-move-inline-limit=num -misel -mno-isel -misel=tak -misel=nie -mspe -mno-spe
-mspe=tak -mspe=nie -upośledzony -mgen-komórka-mikrokod -mwarn-komórka-mikrokod -mvrsave
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=tak -mfloat-gprs=nie
-mfloat-gprs=pojedynczy -mfloat-gprs=podwójny -mprototyp -mno-prototyp -msim -mmvme
-mads -nóż do szpiku -członek -msdata -msdata=optować -mvxworks -G num -pthread -mrecip
-mrecip=optować -mno-recept -mrecip-precyzja -mno-recip-precyzja -mveclibabi=rodzaj -mfriz
-mno-friz -wskaźniki-do-funkcji zagnieżdżonych -mno-wskaźniki-do-funkcji-zagnieżdżonych
-msave-toc-pośredni -mno-zapisz-toc-pośredni -mpower8-fusion -mno-mpower8-fusion
-mpower8-wektor -mno-power8-wektor -mcrypto -mno-krypto -mdirect-move -mno-direct-move
-mquad-pamięć -mno-quad-pamięć -mquad-memory-atomic -mno-quad-memory-atomic
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf -mupper-regs -mno-upper-regs

RX Opcje -m64bit-podwaja -m32bit-podwaja -fpu -nofpu -mcpu= -mbig-endian-data
-mlittle-endian-data -msmall-data -msim -mno-sim -mas100-składnia -mno-as100-składnia
-mrelaks -mmax-stała-rozmiar= -mint-rejestr= -mpid -mno-warn-wielokrotne-szybkie-przerwania
-msave-ac-w-przerwaniach

S / 390 dzięki zSeria Opcje -mtune=typ procesora -marzec=typ procesora -mhard-float -msoft-float
-mhard-dfp -mno-twardy-dfp -mlong-podwójny-64 -mlong-podwójny-128 -mbackchain
-mno-backchain -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa -mzarch -mtpf-śledzenie
-mno-tpf-trace -mfused-madd -mno-skondensowany-madd -mwarn-framesize -mwarn-dynamicstack
-mstack-rozmiar -mstack-strażnik -mhotpatch=półsłowa,półsłowa

Wynik Opcje -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH Opcje -m1 -m2 -m2e -m2a-nofpu -m2a-single-tylko -m2a-single -m2a -m3 -m3e
-m4-nofpu -m4-single-tylko -m4-single -m4 -m4a-nofpu -m4a-single-tylko -m4a-single
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-kompaktowy
-m5-kompaktowy-nofpu -mb -ml -mdalign -mrelaks -wielkich -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -mieee -mno-ieee -mbitops -niewielkość -minline-ic_invalidate
-mpadstruct -mspace -mprefergot -musermode -koszt wielokrotny=numer -mdiv=strategia
-mdivsi3_libfunc=Nazwa -mfixed-range=rejestr-zakres -mindexed-adresowanie
-mgettrkoszt=numer - naprawiono mpt -maccumulate-outgoing-args -minvalid-symbole
-model-matematyczny=model atomowy -koszt-oddzialu=num -mzdcgałąź -mno-zdcbranch
-slot-mcbranch-force-delay -mfused-madd -mno-skondensowany-madd -mfsca -mno-fsca -mfsrrra
-mno-fsrr -mpreend-cmove -mtas

Solaris 2 Opcje -mclear-hwcap -mno-clear-hwcap -niewierny-tekst -mno-nieczysty-tekst
-pwątki -pthread

SPARC Opcje -mcpu=typ procesora -mtune=typ procesora -mcmodel=kod-model -model-pamięci=pamięć-
model -m32 -m64 -mapp-regs -mno-app-regs -szybsze-struktury -mno-szybsze-struktury
-mpłaski -mno-mieszkanie -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stos-ustawienie -munaligned-dwójka
-mno-unaligned-doubles -tryb-użytkownika -mno-tryb-użytkownika -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699

SPU Opcje -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma -wskazówki-gałęzi
-msmall-mem -mlarge-mem -mstdmain -mfixed-range=rejestr-zakres -mea32 -mea64
-konwersja przestrzeni adresowej -mno-konwersja-przestrzeni-adresowej -rozmiar-mcache=rozmiar pamięci podręcznej
-matomic-aktualizacje -mno-atomowe-aktualizacje

system V Opcje -Qy -Qn -PZ,ścieżki -Ym,reż

PŁYTKA-Gx Opcje -mcpu=procesor -m32 -m64 -mbig-endian -mlittle-endian -mcmodel=kod-model

TILEPro Opcje -mcpu=cpu -m32

V850 Opcje -mlong-rozmowy -mno-długie-rozmowy -mep -mno-ep -mprolog-funkcja
-mno-prolog-funkcja -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-callt -mno-wyłącz-wezwanie -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -mloop -mrelaks -mlong-skoki -msoft-float -mhard-float -mgcc-abi
-mrh850-abi -duży-przełącznik

VAX Opcje -mg -mgnu -munix

Wizja Opcje -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=typ procesora
-mtune=typ procesora - tryb msv -tryb-użytkownika

VMS Opcje -mvms-kody-zwrotne -mdebug-główny=prefiks -mmalloc64 -mpointer-rozmiar=rozmiar

VxWorks Opcje -mrtp -niestatyczny -Bstatyczny -Bdynamic -Xbind-leniwy -Xbind-teraz

x86 Opcje -mtune=typ procesora -marzec=typ procesora -mtune-ctrl=lista funkcji
-mdump-tune-features -mno-domyślny -mfpmath=jednostka -masm=dialekt -mno-fancy-matematyka-387
-mno-fp-ret-w-387 -msoft-float -mno-szeroki-pomnóż -mrtd -złośliwy-podwójny
-mpreferred-stos-granica=num -mincoming-stack-boundary=num -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mrecip -mrecip=optować -mvzeroupper -mprefer-avx128 -mmmx -mss -msse2
-msse3 -msss3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msza -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mwątki
-mno-wyrównaj-stringops -minline-all-stringops -minline-stringops-dynamicznie
-mstringop-strategia=ALG -mmemcpy-strategia=strategia -mmemset-strategia=strategia
-push-args -maccumulate-outgoing-args -m128bit-long-double -m96bit-long-double
-mlong-podwójny-64 -mlong-podwójny-80 -mlong-podwójny-128 -mregparm=num -msseregparm
-mveclibabi=rodzaj -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -mno-czerwona-strefa -mno-tls-direct-seg-refs -mcmodel=kod-model
-mabi=Nazwa -tryb-adresu=tryb -m32 -m64 -mx32 -m16 -próg-mlarge-data-=num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data=rodzaj
-mstack-protector-guard=osłona

x86 Okna Opcje -mkonsola -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
-Municode -mwin32 -mwindows -fno-set-stack-wykonywalny

Xburza16 Opcje -msim

Xtensa Opcje -mconst16 -mno-const16 -mfused-madd -mno-skondensowany-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -mtext-sekcja-literałów
-mno-text-section-literals -mtarget-align -mno-target-align -mlongcalls
-mno-longcalls

zSeria Opcje Zobacz Opcje S/390 i zSeries.

Kod Pokolenie Opcje
-wezwanie-zapisane-reg -wywołanie-używane-reg -stały-reg -wyjątki -fnon-call-Exceptions
-fdelete-martwe-wyjątki -Funwind-stoliki -fasynchronous-unwind-tables -fno-gnu-unikalne
-Dyrektywa-finhibit-rozmiar -instrument-funkcje
-funkcje-instrumentu-wykluczanie-listy-funkcji=sym,sym, ...
-funkcje-instrumentu-wykluczenia-listy-plików=filet,filet, ... -fno-wspólny -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-skok-stoliki -przełączniki frecord-gcc
-freg-struct-return -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-check -fstack-limit-rejestr=reg -fstack-symbol-limitu=sym
-fno-stack-limit -fsplit-stack -przelotne-podkreślenie -ftls-model=model
-f stack-reuse=reuse_level -ftrapv -fwrapv -fbounds-check
-widoczność=[domyślnym|wewnętrzny|ukryty|chroniony] -fstrict-volatile-bitfields
-fsync-libcalls

Opcje Sterowanie die,en Uprzejmy of Wydajność
Kompilacja może obejmować do czterech etapów: wstępne przetwarzanie, właściwa kompilacja, montaż i
łączenie, zawsze w tej kolejności. GCC jest w stanie wstępnie przetworzyć i skompilować kilka
pliki albo do kilku plików wejściowych asemblera, albo do jednego pliku wejściowego asemblera; następnie
każdy plik wejściowy asemblera tworzy plik obiektowy, a linkowanie łączy wszystkie obiekty
pliki (te nowo skompilowane i te określone jako dane wejściowe) do pliku wykonywalnego.

Dla dowolnego pliku wejściowego przyrostek nazwy pliku określa rodzaj kompilacji
Gotowe:

filet.c
Kod źródłowy C, który musi być wstępnie przetworzony.

filet.i
Kod źródłowy C, który nie powinien być wstępnie przetwarzany.

filet.ii
Kod źródłowy C++, który nie powinien być wstępnie przetwarzany.

filet.m
Kod źródłowy celu C. Pamiętaj, że musisz połączyć z libobjc biblioteka do zrobienia
Praca programu Cel-C.

filet.mi
Kod źródłowy Objective-C, który nie powinien być wstępnie przetwarzany.

filet.mm
filet.M
Kod źródłowy celu w C++. Pamiętaj, że musisz połączyć z libobjc biblioteka do zrobienia
praca programu Objective-C++. Zauważ, że .M odnosi się do literalnej dużej litery M.

filet.mii
Kod źródłowy celu C++, który nie powinien być wstępnie przetwarzany.

filet.h
Plik nagłówkowy C, C++, Objective-C lub Objective-C++ do przekształcenia w prekompilowany
header (domyślnie) lub plik nagłówkowy C, C++, który ma zostać przekształcony w specyfikację Ady (poprzez
-fdump-ada-spec przełącznik).

filet. DC
filet.cp
filet.cxx
filet.cpp
filet.CPP
filet.c++
filet.C
Kod źródłowy C++, który musi być wstępnie przetworzony. Zauważ, że w .cxx, dwie ostatnie litery
muszą być dosłownie x. Również, .C odnosi się do literalnej dużej litery C.

filet.mm
filet.M
Kod źródłowy celu C++, który musi być wstępnie przetworzony.

filet.mii
Kod źródłowy celu C++, który nie powinien być wstępnie przetwarzany.

filet.hh
filet.H
filet.hp
filet.hxx
filet.hpp
filet.HPP
filet.h++
filet.tcc
Plik nagłówkowy C++, który ma zostać przekształcony w prekompilowany nagłówek lub specyfikację Ada.

filet.f
filet.dla
filet.ftn
Naprawiono kod źródłowy Fortran, który nie powinien być wstępnie przetwarzany.

filet.F
filet.DLA
filet.fpp
filet.FPP
filet.FTN
Stały kod źródłowy Fortran, który musi być wstępnie przetworzony (z tradycyjnym
preprocesor).

filet.f90
filet.f95
filet.f03
filet.f08
Darmowy kod źródłowy Fortran, który nie powinien być wstępnie przetwarzany.

filet.F90
filet.F95
filet.F03
filet.F08
Darmowy kod źródłowy Fortran, który musi być wstępnie przetworzony (z tradycyjnym
preprocesor).

filet.wybrać się
Idź kod źródłowy.

filet.reklamy
Plik z kodem źródłowym Ada zawierający deklarację jednostki bibliotecznej (deklaracja
pakiet, podprogram lub ogólne lub ogólne wystąpienie) lub jednostka biblioteczna
deklaracja zmiany nazwy (deklaracja zmiany nazwy pakietu, ogólna lub podprogramu). Taki
pliki są również nazywane okular.

filet.adb
Plik kodu źródłowego Ada zawierający treść jednostki biblioteki (treść podprogramu lub pakietu).
Takie pliki są również nazywane ciała.

filet.s
Kod asemblera.

filet.S
filet.sx
Kod asemblera, który musi być wstępnie przetworzony.

inny
Plik obiektowy, który ma być wprowadzony bezpośrednio do linkowania. Dowolna nazwa pliku bez rozpoznania
przyrostek jest traktowany w ten sposób.

Możesz wyraźnie określić język wprowadzania za pomocą -x opcja:

-x język
Określ wyraźnie język dla następujących plików wejściowych (zamiast pozwalać
kompilator wybiera wartość domyślną na podstawie sufiksu nazwy pliku). Ta opcja dotyczy wszystkich
następujące pliki wejściowe do następnego -x opcja. Możliwe wartości dla język należą:

c c-header cpp-output
c++ c++-nagłówek c++-cpp-wyjście
cel-c cel-c-nagłówek cel-c-cpp-wyjście
cel-c++ cel-c++-nagłówek cel-c++-cpp-wyjście
asembler asembler-z-cpp
Ada
f77 f77-wejście-cpp f95 f95-wejście-cpp
go
Jawa

-x Żaden
Wyłącz dowolną specyfikację języka, aby kolejne pliki były obsługiwane
zgodnie z ich sufiksami nazw plików (tak jak są, jeśli -x w ogóle nie był używany).

- kody-wyjścia-pass
Zwykle gcc program kończy pracę z kodem 1, jeśli powróci jakaś faza kompilatora
nieudany kod powrotu. Jeśli określisz - kody-wyjścia-passThe gcc zamiast tego program
zwraca z najwyższym liczbowo błędem wywołanym przez dowolną fazę, zwracając błąd
wskazanie. Nakładki C, C++ i Fortran zwracają 4 w przypadku wewnętrznego błędu kompilatora
napotkano.

Jeśli chcesz tylko niektóre etapy kompilacji, możesz użyć -x (lub sufiksy nazw plików)
powiedzieć gcc od czego zacząć i jedna z opcji -c, -Slub -E powiedzieć gdzie gcc jest
zatrzymać. Zwróć uwagę, że niektóre kombinacje (na przykład -x cpp-wyjście -E) pouczać gcc zrobić
nic w ogóle.

-c Kompiluj lub kompiluj pliki źródłowe, ale nie łącz. Etap łączenia to po prostu
nie skończone. Ostateczny wynik ma postać pliku obiektowego dla każdego pliku źródłowego.

Domyślnie nazwa pliku obiektowego dla pliku źródłowego jest tworzona przez zastąpienie sufiksu .c,
.i, .s, itp., z .o.

Nierozpoznane pliki wejściowe, niewymagające kompilacji ani składania, są ignorowane.

-S Zatrzymaj się po właściwym etapie kompilacji; nie montuj. Dane wyjściowe znajdują się w
forma pliku kodu asemblera dla każdego określonego nieasemblerowego pliku wejściowego.

Domyślnie nazwa pliku asemblera dla pliku źródłowego jest tworzona przez zastąpienie sufiksu
.c, .i, itp., z .s.

Pliki wejściowe, które nie wymagają kompilacji, są ignorowane.

-E Zatrzymaj się po etapie wstępnego przetwarzania; nie uruchamiaj właściwego kompilatora. Wyjście jest w
forma wstępnie przetworzonego kodu źródłowego, który jest wysyłany na standardowe wyjście.

Pliki wejściowe, które nie wymagają przetwarzania wstępnego, są ignorowane.

-o filet
Umieść dane wyjściowe w pliku filet. Dotyczy to wszelkiego rodzaju produkcji,
czy to plik wykonywalny, plik obiektowy, plik asemblera czy wstępnie przetworzony C
kod.

If -o nie jest określony, domyślnie umieszczany jest plik wykonywalny w a.out, obiekt
plik dla źródło.suffix in źródło.o, jego plik asemblera w źródło.s, prekompilowany
plik nagłówkowy w źródło.suffix.gchi wszystkie wstępnie przetworzone źródła C na standardowym wyjściu.

-v Wydrukuj (na standardowym wyjściu błędów) polecenia wykonane w celu uruchomienia etapów
kompilacja. Wydrukuj również numer wersji programu sterownika kompilatora i
preprocesor i właściwy kompilator.

-###
Polub -v z wyjątkiem tego, że polecenia nie są wykonywane, a argumenty są cytowane, chyba że
zawierają tylko znaki alfanumeryczne lub „./-_”. Jest to przydatne dla skryptów powłoki do:
przechwytywanie wierszy poleceń generowanych przez kierowcę.

-rura
Używaj potoków zamiast plików tymczasowych do komunikacji między różnymi etapami
kompilacja. To nie działa na niektórych systemach, w których asembler nie jest w stanie odczytać
z rury; ale asembler GNU nie ma problemów.

--help
Wydrukuj (na standardowym wyjściu) opis opcji wiersza poleceń zrozumiałych przez
gcc, Jeśli -v opcja jest również określona wtedy --help jest również przekazywana różnym
procesy wywoływane przez gcc, aby mogli wyświetlić opcje wiersza poleceń, które
zaakceptować. Jeśli -Wextra określono również opcję (przed --help opcja),
następnie opcje wiersza poleceń, z którymi nie jest związana żadna dokumentacja, są również
wystawiany.

--cel-pomoc
Wydrukuj (na standardowym wyjściu) opis opcji wiersza poleceń specyficznych dla celu
dla każdego narzędzia. W przypadku niektórych celów dodatkowe informacje specyficzne dla celu mogą być również:
drukowane.

--pomoc={klasa|[^]kwalifikator}[, ...]
Wydrukuj (na standardowym wyjściu) opis opcji wiersza poleceń zrozumiałych przez
kompilator, który pasuje do wszystkich określonych klas i kwalifikatorów. To są
obsługiwane zajęcia:

optymalizatory
Wyświetl wszystkie opcje optymalizacji obsługiwane przez kompilator.

ostrzeżenia
Wyświetl wszystkie opcje sterujące komunikatami ostrzegawczymi generowanymi przez kompilator.

cel
Wyświetl opcje specyficzne dla celu. w przeciwieństwie do --cel-pomoc opcja jednak cel-
określone opcje linkera i asemblera nie są wyświetlane. To dlatego, że
te narzędzia nie obsługują obecnie rozszerzonej --pomoc= składnia.

params
Wyświetl wartości rozpoznawane przez --param opcja.

język
Wyświetl opcje obsługiwane dla język, Gdzie język to imię jednego z
języki obsługiwane w tej wersji GCC.

pospolity
Wyświetl opcje, które są wspólne dla wszystkich języków.

Oto obsługiwane kwalifikatory:

nieudokumentowany
Wyświetlaj tylko te opcje, które są nieudokumentowane.

Dołączył
Opcje wyświetlania przyjmując argument, który pojawia się po znaku równości w tym samym
ciągły fragment tekstu, taki jak: --pomoc=cel.

oddzielny
Opcje wyświetlania przyjmujące argument, który pojawia się jako osobne słowo po
oryginalna opcja, taka jak: -o plik wyjściowy.

Na przykład, aby wyświetlić wszystkie nieudokumentowane przełączniki specyficzne dla celu obsługiwane przez
kompilator, użyj:

--help=cel,nieudokumentowane

Sens kwalifikatora można odwrócić, poprzedzając go przedrostkiem ^ charakter, więc dla
przykład, aby wyświetlić wszystkie opcje ostrzeżeń binarnych (tzn. te, które są włączone lub wyłączone)
i które nie przyjmują argumentów), które mają opis, użyj:

--help=ostrzeżenia,^dołączył,^nieudokumentowane

Argument, aby… --pomoc= nie powinien składać się wyłącznie z odwróconych kwalifikatorów.

Możliwe jest łączenie kilku klas, chociaż zwykle ogranicza to wydajność, więc
wiele, że nie ma nic do wyświetlenia. Jednak jednym z przypadków, w których to działa, jest sytuacja, gdy
jedna z klas to cel. Na przykład, aby wyświetlić wszystkie specyficzne dla celu
opcje optymalizacji, użyj:

--help=cel,optymalizatory

Pandemia --pomoc= opcję można powtórzyć w wierszu poleceń. Każde kolejne użycie wyświetla
żądanej klasy opcji, pomijając te, które już zostały wyświetlone.

Jeśli -Q opcja pojawia się w wierszu poleceń przed --pomoc= opcja, to
tekst opisowy wyświetlany przez --pomoc= jest zmieniony. Zamiast opisywać wyświetlane
opcje, podawane jest wskazanie, czy opcja jest włączona, wyłączona czy ustawiona
do określonej wartości (zakładając, że kompilator wie o tym w punkcie, w którym
--pomoc= jest używana opcja).

Oto skrócony przykład z portu ARM gcc:

% gcc -Q -mabi=2 --help=target -c
Następujące opcje są specyficzne dla celu:
-mabi= 2
-mabort-on-noreturn [wyłączone]
-mapcs [wyłączone]

Dane wyjściowe są wrażliwe na skutki poprzednich opcji wiersza poleceń, więc dla
na przykładzie można dowiedzieć się, które optymalizacje są włączone w -O2 używając:

-Q -O2 --help=optymalizatory

Alternatywnie możesz odkryć, które optymalizacje binarne są włączone przez -O3 używając:

gcc -c -Q -O3 --help=optymalizatory > /tmp/O3-opts
gcc -c -Q -O2 --help=optymalizatory > /tmp/O2-opts
diff /tmp/O2-opcje /tmp/O3-opcje | grep włączony

-bez-kanonicznych-przedrostków
Nie rozwijaj żadnych dowiązań symbolicznych, rozwiąż odniesienia do /../ or /./, lub zrób ścieżkę
bezwzględna podczas generowania przedrostka względnego.

--wersja
Wyświetl numer wersji i prawa autorskie do wywołanego GCC.

-obwoluta
Wywołaj wszystkie podkomendy w programie opakowującym. Nazwa programu owijającego i
jego parametry są przekazywane jako lista oddzielona przecinkami.

gcc -c tc -wrapper gdb,--args

To wywołuje wszystkie podprogramy gcc dla gdb --args, stąd inwokacja cc1 is
gdb --args cc1 ....

-fplugin=Nazwa.so
Załaduj kod wtyczki do pliku Nazwa.więc zakłada się, że jest to obiekt współdzielony, który ma być dlopen'd przez
kompilator. Podstawowa nazwa współdzielonego pliku obiektu jest używana do identyfikacji wtyczki
na potrzeby parsowania argumentów (patrz -fplugin-arg-Nazwa-klucz=wartość poniżej). Każdy
wtyczka powinna definiować funkcje wywołania zwrotnego określone w API wtyczek.

-fplugin-arg-Nazwa-klucz=wartość
Zdefiniuj argument o nazwie klucz o wartości wartość dla wtyczki o nazwie Nazwa.

-fdump-ada-spec[-szczupły]
W przypadku plików źródłowych C i C++ oraz plików dołączanych wygeneruj odpowiednie specyfikacje Ada.

-fada-spec-parent=jednostka
W połączeniu z -fdump-ada-spec[-szczupły] powyżej, wygeneruj specyfikacje Ada jako jednostki podrzędne
roślina mateczna jednostka.

-fdump-go-spec=filet
Dla plików wejściowych w dowolnym języku wygeneruj odpowiednie deklaracje Go w filet, To
generuje deklaracje Go "const", "type", "var" i "func", co może być użytecznym sposobem
zacząć pisać interfejs Go do kodu napisanego w innym języku.

@filet
Czytaj opcje wiersza poleceń z filet. Odczytane opcje są wstawiane w miejsce
oryginał @filet opcja. Gdyby filet nie istnieje lub nie można go odczytać, to opcja
będą traktowane dosłownie, a nie usuwane.

Opcje w filet są oddzielone białymi znakami. Może być dołączony znak odstępu
w opcji, otaczając całą opcję pojedynczym lub podwójnym cudzysłowem. Każdy
znak (w tym ukośnik odwrotny) może być dołączany przez poprzedzenie znaku, który ma być
w zestawie z odwrotnym ukośnikiem. ten filet może sam zawierać dodatkowe @filet opcje; każdy
takie opcje będą przetwarzane rekurencyjnie.

Kompilowanie C + + programy
Pliki źródłowe C++ zwykle używają jednego z przyrostków .C, . DC, .cpp, .CPP, .c++, .cplub
.cxx; Często używane są pliki nagłówkowe C++ .hh, .hpp, .H, lub (dla kodu szablonu udostępnionego) .tccOraz
wstępnie przetworzone pliki C++ używają sufiksu .ii. GCC rozpoznaje pliki o tych nazwach i
kompiluje je jako programy C++, nawet jeśli wywołujesz kompilator w taki sam sposób, jak przy kompilacji
Programy w C (zwykle o nazwie gcc).

Jednak użycie gcc nie dodaje biblioteki C++. g ++ to program, który wywołuje GCC i
automatycznie określa linkowanie do biblioteki C++. Traktuje .c, .h dzięki .i pliki jako
Pliki źródłowe C++ zamiast plików źródłowych C, chyba że -x jest używany. Ten program jest również przydatny
podczas prekompilacji pliku nagłówkowego C z .h rozszerzenie do użytku w kompilacjach C++. Na
wiele systemów, g ++ jest również zainstalowany z nazwą c ++.

Kiedy kompilujesz programy w C++, możesz określić wiele takich samych opcji wiersza poleceń, które:
używasz do kompilowania programów w dowolnym języku; lub opcje wiersza polecenia znaczące dla C
i pokrewne języki; lub opcje, które mają znaczenie tylko dla programów C++.

Opcje Sterowanie C Dialekt
Poniższe opcje sterują dialektem C (lub językami wywodzącymi się z C, takimi jak C++,
Objective-C i Objective-C++), które kompilator akceptuje:

-ansi
W trybie C jest to równoważne -std=c90. W trybie C++ jest to równoważne
-std=c++98.

Powoduje to wyłączenie niektórych funkcji GCC, które są niezgodne z ISO C90 (gdy
kompilacji kodu C) lub standardowego C++ (przy kompilacji kodu C++), takich jak „asm” i
słowa kluczowe „typeof” i predefiniowane makra, takie jak „unix” i „vax”, które identyfikują
rodzaj używanego systemu. Umożliwia także niepożądane i rzadko używane ISO
funkcja trygrafu. W przypadku kompilatora C wyłącza rozpoznawanie stylu C++ //
komentarze oraz słowo kluczowe „inline”.

Alternatywne słowa kluczowe „__asm__”, „__extension__”, „__inline__” i „__typeof__”
nadal pracować pomimo -ansi. Nie chciałbyś ich używać w programie ISO C,
oczywiście, ale warto umieścić je w plikach nagłówkowych, które mogą być zawarte w
kompilacje zrobione z -ansi. Alternatywne predefiniowane makra, takie jak „__unix__” i
Dostępne są również „__vax__”, z lub bez -ansi.

Pandemia -ansi opcja nie powoduje nieuzasadnionego odrzucania programów innych niż ISO. Do
że, -Wpedancki jest wymagane oprócz -ansi.

Makro „__STRICT_ANSI__” jest wstępnie zdefiniowane, gdy -ansi używana jest opcja. Niektóre nagłówki
pliki mogą zauważyć to makro i powstrzymać się od deklarowania pewnych funkcji lub definiowania
niektóre makra, których nie wymaga norma ISO; ma to na celu uniknięcie ingerencji
z dowolnymi programami, które mogą używać tych nazw do innych rzeczy.

Funkcje, które są normalnie wbudowane, ale nie mają semantyki zdefiniowanej przez ISO C (takie
jako "alloca" i "ffs") nie są funkcjami wbudowanymi, gdy -ansi Jest używane.

-std=
Określ standard językowy. Ta opcja jest obecnie obsługiwana tylko wtedy, gdy
kompilowanie C lub C++.

Kompilator może zaakceptować kilka podstawowych standardów, takich jak c90 or c++98i dialekty GNU
tych standardów, takich jak gnu90 or gnu++98. Gdy określono standard podstawowy,
kompilator akceptuje wszystkie programy zgodne z tym standardem oraz te korzystające z rozszerzeń GNU
które jej nie zaprzeczają. Na przykład, -std=c90 wyłącza niektóre funkcje GCC
które są niezgodne z ISO C90, takie jak słowa kluczowe „asm” i „typeof”, ale nie
inne rozszerzenia GNU, które nie mają znaczenia w ISO C90, takie jak pominięcie
środkowy wyraz wyrażenia „?:”. Z drugiej strony, gdy dialekt GNU standardu
jest określony, wszystkie funkcje obsługiwane przez kompilator są włączone, nawet jeśli te
cechy zmieniają znaczenie normy bazowej. W rezultacie niektóre ściśle zgodne
programy mogą zostać odrzucone. Określony standard jest używany przez -Wpedancki do identyfikacji
które cechy są rozszerzeniami GNU, biorąc pod uwagę tę wersję standardu. Na przykład
-std=gnu90 -Wpedancki ostrzega przed stylem C++ // komentarze, podczas gdy -std=gnu99 -Wpedancki
nie.

Należy podać wartość tej opcji; możliwe wartości to

c90
c89
iso9899:1990
Obsługuje wszystkie programy ISO C90 (niektóre rozszerzenia GNU, które są w konflikcie z ISO C90)
są wyłączone). Taki sam jak -ansi dla kodu C.

iso9899:199409
ISO C90 ze zmianami w poprawce 1.

c99
c9x
iso9899:1999
iso9899:199x
ISO C99. Ten standard jest zasadniczo całkowicie obsługiwany, błędy modulo i
problemy zmiennoprzecinkowe (głównie, ale nie w całości, związane z opcjonalnymi funkcjami C99)
z załączników F i G). Widziećhttp://gcc.gnu.org/c99status.html> po więcej
Informacja. Imiona c9x dzięki iso9899:199x są przestarzałe.

c11
c1x
iso9899:2011
ISO C11, wersja 2011 normy ISO C. Ten standard jest zasadniczo
całkowicie obsługiwane, błędy modulo, problemy zmiennoprzecinkowe (głównie, ale nie do końca)
odnoszące się do opcjonalnych elementów C11 z załączników F i G) oraz opcjonalnych załączników K
(interfejsy sprawdzające granice) i L (możliwość analizy). Imię c1x jest przestarzałe.

gnu90
gnu89
Dialekt GNU ISO C90 (w tym niektóre funkcje C99).

gnu99
gnu9x
Dialekt GNU ISO C99. Imię gnu9x jest przestarzałe.

gnu11
gnu1x
Dialekt GNU ISO C11. Jest to ustawienie domyślne dla kodu C. Imię gnu1x is
przestarzałe.

c++98
c++03
Norma ISO C++ z 1998 r. oraz sprostowanie techniczne z 2003 r. i kilka dodatkowych
raporty o defektach. Taki sam jak -ansi dla kodu C++.

gnu++98
gnu++03
dialekt GNU z -std=c++98. Jest to ustawienie domyślne dla kodu C++.

c++11
c++0x
Standard ISO C++ 2011 z poprawkami. Imię c++0x jest przestarzałe.

gnu++11
gnu++0x
dialekt GNU z -std=c++11, Imię gnu++0x jest przestarzałe.

c++14
c++1y
Standard ISO C++ 2014 z poprawkami. Imię c++1y jest przestarzałe.

gnu++14
gnu++1y
dialekt GNU z -std=c++14, Imię gnu++1y jest przestarzałe.

c++1z
Kolejna rewizja standardu ISO C++, wstępnie planowana na 2017 rok. Wsparcie
jest wysoce eksperymentalny i prawie na pewno zmieni się w niekompatybilny sposób w
przyszłe wydania.

gnu++1z
dialekt GNU z -std=c++1z. Wsparcie jest wysoce eksperymentalne i prawie
z pewnością zmienią się w niekompatybilny sposób w przyszłych wydaniach.

-fgnu89-w linii
Opcja -fgnu89-w linii mówi GCC, aby używało tradycyjnej semantyki GNU dla "inline"
działa w trybie C99.

Użycie tej opcji jest mniej więcej równoznaczne z dodaniem atrybutu funkcji „gnu_inline”
do wszystkich funkcji wbudowanych.

Opcja -fno-gnu89-w linii wyraźnie mówi GCC, aby używał semantyki C99 dla
"inline" w trybie C99 lub gnu99 (tzn. określa zachowanie domyślne). Ten
opcja nie jest obsługiwana w -std=c90 or -std=gnu90 tryb.

Można użyć makr preprocesora „__GNUC_GNU_INLINE__” i „__GNUC_STDC_INLINE__”
aby sprawdzić, jaka semantyka obowiązuje dla funkcji „wbudowanych”.

-informacje-dodatkowe filename
Wyjście do deklaracji prototypowych o podanej nazwie pliku dla wszystkich zadeklarowanych funkcji i/lub
zdefiniowane w jednostce tłumaczeniowej, w tym w plikach nagłówkowych. Ta opcja to
po cichu ignorowane w jakimkolwiek innym języku niż C.

Oprócz deklaracji plik wskazuje w komentarzach pochodzenie każdej deklaracji
(plik źródłowy i wiersz), czy deklaracja była niejawna, prototypowa czy
nieprototypowany (I, N dla nowego lub O dla starego odpowiednio w pierwszym znaku po
numer wiersza i dwukropek) oraz czy pochodzi z deklaracji, czy z definicji
(C or F, odpowiednio w następującym znaku). W przypadku funkcji
definicji, lista argumentów w stylu K&R, po której następują ich deklaracje, jest również
dostarczone, wewnętrzne uwagi, po deklaracji.

-odłogi-bezparametrowe-funkcje-zmienne
Akceptuj funkcje zmienne bez nazwanych parametrów.

Chociaż można zdefiniować taką funkcję, nie jest to zbyt przydatne, ponieważ jest
nie można odczytać argumentów. Jest to obsługiwane tylko w C, ponieważ ta konstrukcja jest
dozwolone przez C++.

-fno-asm
Nie rozpoznawaj „asm”, „inline” lub „typeof” jako słów kluczowych, aby kod mógł ich używać
słowa jako identyfikatory. Możesz użyć słów kluczowych „__asm__”, „__inline__” i
Zamiast tego „__typ__”. -ansi sugeruje -fno-asm.

W C++ ten przełącznik dotyczy tylko słowa kluczowego „typeof”, ponieważ „asm” i „inline” są
standardowe słowa kluczowe. Możesz użyć -fno-gnu-słowa kluczowe zamiast flagi, która ma
ten sam efekt. W trybie C99 (-std=c99 or -std=gnu99), ten przełącznik ma wpływ tylko na
słowa kluczowe „asm” i „typeof”, ponieważ „inline” jest standardowym słowem kluczowym w ISO C99.

-fno-wbudowany
-fno-wbudowany-funkcjonować
Nie rozpoznaj wbudowanych funkcji, które nie zaczynają się od __wbudowany_ jako przedrostek.

GCC zwykle generuje specjalny kod, aby obsłużyć niektóre wbudowane funkcje więcej
wydajnie; na przykład wywołania „alloca” mogą stać się pojedynczymi instrukcjami, które:
dostosuj stos bezpośrednio, a wywołania „memcpy” mogą stać się wbudowanymi pętlami kopiowania. ten
wynikowy kod jest często zarówno mniejszy, jak i szybszy, ale ponieważ funkcja wywołuje no
już pojawiają się jako takie, nie możesz ustawić punktu przerwania dla tych połączeń, ani nie możesz zmienić
zachowanie funkcji poprzez połączenie z inną biblioteką. Ponadto, kiedy
funkcja jest rozpoznawana jako funkcja wbudowana, GCC może wykorzystać informacje na ten temat
funkcja ostrzegająca o problemach z wywołaniami tej funkcji lub generująca więcej
wydajny kod, nawet jeśli wynikowy kod nadal zawiera wywołania tej funkcji. Do
przykład, ostrzeżenia są podawane z -Wformat za złe wywołania "printf", gdy "printf" jest
wbudowane i „strlen” nie modyfikują pamięci globalnej.

Z -fno-wbudowany-funkcjonować opcja tylko wbudowana funkcja funkcjonować jest wyłączony.
funkcjonować nie może zaczynać się od __wbudowany_. Jeśli nazwa funkcji nie jest wbudowana
w tej wersji GCC ta opcja jest ignorowana. Nie ma odpowiednika
-wbudowany-funkcjonować opcja; jeśli chcesz selektywnie włączyć wbudowane funkcje, gdy
za pomocą -fno-wbudowany or -wolnostojący, możesz zdefiniować makra takie jak:

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

-odsłonięty
Potwierdź, że kompilacja jest przeznaczona dla hostowanego środowiska. Oznacza to -wbudowany, ZA
hostowane środowisko to takie, w którym dostępna jest cała standardowa biblioteka,
który "main" ma typ zwracany "int". Przykłady to prawie wszystko z wyjątkiem
jądro. To jest równoważne -fno-wolnostojące.

-wolnostojący
Potwierdź, że kompilacja jest przeznaczona dla środowiska wolnostojącego. Oznacza to
-fno-wbudowany. Wolnostojące środowisko to takie, w którym standardowa biblioteka może nie
istnieją, a uruchamianie programu niekoniecznie musi odbywać się w trybie „main”. Najbardziej oczywisty przykład
to jądro systemu operacyjnego. To jest równoważne -fno-hostowany.

-fopenacc
Włącz obsługę dyrektyw OpenACC „#pragma acc” w C/C++ i „!$acc” w Fortranie.
Gdy -fopenacc jest określony, kompilator generuje przyspieszony kod zgodnie z
Interfejs programowania aplikacji OpenACC v2.0http://www.openacc.org/>. Ta opcja
sugeruje -pthread, a zatem jest obsługiwany tylko w obiektach docelowych, które obsługują
-pthread.

Pamiętaj, że jest to funkcja eksperymentalna, niekompletna i może ulec zmianie w przyszłości
wersje GCC. Widziećhttps://gcc.gnu.org/wiki/OpenACC> więcej informacji.

-fopenmp
Włącz obsługę dyrektyw OpenMP "#pragma omp" w C/C++ i "!$omp" w Fortranie.
Gdy -fopenmp jest określony, kompilator generuje kod równoległy zgodnie z
Interfejs programu aplikacji OpenMP v4.0http://www.openmp.org/>. Ta opcja
sugeruje -pthread, a zatem jest obsługiwany tylko w obiektach docelowych, które obsługują
-pthread. -fopenmp sugeruje -fopenmp-simd.

-fopenmp-simd
Włącz obsługę dyrektyw SIMD OpenMP za pomocą "#pragma omp" w C/C++ i "!$omp" w
Fortran. Inne dyrektywy OpenMP są ignorowane.

-fcilkplus
Włącz korzystanie z funkcji rozszerzenia języka Cilk Plus dla C/C++. Kiedy opcja
-fcilkplus jest określony, włącz korzystanie z funkcji rozszerzenia języka Cilk Plus Language
dla C/C++. Obecna implementacja jest zgodna z wersją ABI 1.2. To jest
eksperymentalna funkcja, która jest tylko częściowo kompletna i której interfejs może ulec zmianie
w przyszłych wersjach GCC w miarę zmian w oficjalnej specyfikacji. Obecnie wszystkie
funkcje, ale „_Cilk_for” zostały zaimplementowane.

-fgnu-tm
Kiedy opcja -fgnu-tm jest określony, kompilator generuje kod dla systemu Linux
wariant aktualnego dokumentu specyfikacji ABI pamięci transakcyjnych firmy Intel (wersja
1.1, 6 maja 2009). Jest to funkcja eksperymentalna, której interfejs może ulec zmianie
przyszłe wersje GCC, gdy zmieni się oficjalna specyfikacja. Należy pamiętać, że nie
wszystkie architektury są obsługiwane dla tej funkcji.

Aby uzyskać więcej informacji na temat obsługi pamięci transakcyjnej przez GCC,

Pamiętaj, że funkcja pamięci transakcyjnej nie jest obsługiwana z wyjątkami bez połączeń
(-fnon-call-Exceptions).

-fms-rozszerzenia
Zaakceptuj niektóre niestandardowe konstrukcje używane w plikach nagłówkowych firmy Microsoft.

W kodzie C++ pozwala to, aby nazwy członków w strukturach były podobne do poprzednich typów
deklaracje.

typedef int UOW;
struktura ABC {
UOW UOW;
};

Niektóre przypadki nienazwanych pól w strukturach i związkach są akceptowane tylko z tym
opcja.

Zauważ, że ta opcja jest wyłączona dla wszystkich celów z wyjątkiem celów x86 używających ms-abi.

-fplan9-rozszerzenia
Zaakceptuj niektóre niestandardowe konstrukcje używane w kodzie planu 9.

To umożliwia -fms-rozszerzenia, pozwala na przekazywanie wskaźników do struktur z anonimowym
pola do funkcji, które oczekują wskaźników do elementów typu pola, oraz
zezwala na odwoływanie się do anonimowych pól zadeklarowanych przy użyciu typedef. To jest tylko
obsługiwane dla C, a nie C++.

-trygrafy
Obsługa trygrafów ISO C. ten -ansi opcja (i -std opcje dla ścisłego ISO C
zgodność) implikuje -trygrafy.

-tradycyjny
-tradycyjny-cpp
Wcześniej te opcje powodowały, że GCC próbował emulować kompilator języka C przed standardowymi standardami.
Są teraz obsługiwane tylko z -E przełącznik. Preprocesor nadal obsługuje
tryb przedstandardowy. Szczegóły znajdziesz w podręczniku GNU CPP.

-fcond-niezgodność
Zezwalaj na wyrażenia warunkowe z niezgodnymi typami w drugim i trzecim argumencie.
Wartość takiego wyrażenia jest nieważna. Ta opcja nie jest obsługiwana w C++.

-konwersje-wektorów-lnu
Zezwalaj na niejawne konwersje między wektorami o różnej liczbie elementów i/lub
niezgodne typy elementów. Ta opcja nie powinna być używana w przypadku nowego kodu.

-zabawny-char
Niech typ „char” będzie unsigned, jak „unsigned char”.

Każdy rodzaj maszyny ma wartość domyślną określającą, jaki powinien być „znak”. To jest jak
domyślnie „unsigned char” lub domyślnie „signed char”.

Idealnie, przenośny program powinien zawsze używać „signed char” lub „unsigned char”, gdy jest
zależy od znaku przedmiotu. Ale wiele programów zostało napisanych do użytku
zwykły „znak” i oczekuj, że będzie podpisany lub nie będzie podpisany, w zależności od
maszyny, dla których zostały napisane. Ta opcja i jej odwrotność pozwalają na zrobienie takich
program działa z przeciwną wartością domyślną.

Typ „char” jest zawsze odrębnym typem od każdego typu „signed char” lub „unsigned
char”, mimo że jego zachowanie jest zawsze takie jak jedno z tych dwóch.

-fsigned-char
Niech typ „char” będzie ze znakiem, jak „signed char”.

Zauważ, że jest to równoważne -fno-unsigned-char, który jest formą przeczącą
-zabawny-char. Podobnie opcja -fno-podpisany-char odpowiada
-zabawny-char.

-fsigned-bitfields
-zabawne-pola bitowe
-fno-podpisane-bitfields
-fno-unsigned-bitfields
Te opcje kontrolują, czy pole bitowe jest ze znakiem, czy bez znaku, gdy deklaracja
nie używa ani „podpisane” ani „niepodpisane”. Domyślnie takie pole bitowe jest podpisane,
ponieważ jest to spójne: podstawowe typy całkowite, takie jak "int", są typami ze znakiem.

Opcje Sterowanie C + + Dialekt
W tej sekcji opisano opcje wiersza polecenia, które mają znaczenie tylko dla programów C++.
Możesz także użyć większości opcji kompilatora GNU, niezależnie od tego, w jakim języku jest twój program
jest. Na przykład możesz skompilować plik pierwsza klasa.C lubię to:

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

W tym przykładzie tylko -frepo to opcja przeznaczona tylko dla programów C++; możesz użyć
inne opcje w dowolnym języku obsługiwanym przez GCC.

Oto lista opcji, które są tylko do kompilowania programów w C++:

-fabi-wersja=n
Użyj wersji n C++ ABI. Domyślnie jest to wersja 0.

Wersja 0 odnosi się do wersji najbardziej zgodnej ze specyfikacją C++ ABI.
W związku z tym ABI uzyskany przy użyciu wersji 0 zmieni się w różnych wersjach G++
ponieważ błędy ABI są naprawiane.

Wersja 1 to wersja C++ ABI, która pojawiła się po raz pierwszy w G++ 3.2.

Wersja 2 to wersja C++ ABI, która po raz pierwszy pojawiła się w G++ 3.4 i była
domyślnie poprzez G++ 4.9.

Wersja 3 koryguje błąd w zniekształcaniu stałego adresu jako argumentu szablonu.

Wersja 4, która po raz pierwszy pojawiła się w G++ 4.5, implementuje standardowe maglowanie dla wektora
rodzaje.

Wersja 5, która po raz pierwszy pojawiła się w G++ 4.6, koryguje zniekształcanie atrybutu
const/volatile na typach wskaźników funkcji, decltype zwykłego decl i użycie a
parametr funkcji w deklaracji innego parametru.

Wersja 6, która pojawiła się po raz pierwszy w G++ 4.7, poprawia zachowanie promocji C++11
wyliczenia w zakresie i przerabianie pakietów argumentów szablonu, const/static_cast, prefiks ++
i -- oraz funkcję zakresu klasy używaną jako argument szablonu.

Wersja 7, która pojawiła się po raz pierwszy w G++ 4.8, która traktuje nullptr_t jako typ wbudowany
i koryguje zniekształcenie lambd w domyślnym zakresie argumentów.

Wersja 8, która pojawiła się po raz pierwszy w G++ 4.9, koryguje zachowanie substytucji
typy funkcji z kwalifikatorami funkcji-cv-kwalifikatorów.

Zobacz też -Wabi.

-fabi-compat-wersja=n
W przypadku celów, które obsługują silne aliasy, G ++ działa wokół zniekształcania zmian, tworząc
alias z poprawną zniekształconą nazwą podczas definiowania symbolu z niepoprawnym
zniekształcona nazwa. Ten przełącznik określa, której wersji ABI użyć dla aliasu.

Z -fabi-wersja=0 (domyślnie), wartość domyślna to 2. Jeśli inna wersja ABI to
wyraźnie zaznaczone, domyślnie jest to 0.

Wersja kompatybilności jest również ustalana przez -Wabi=n.

-fno-kontrola-dostępu
Wyłącz wszystkie sprawdzanie dostępu. Ten przełącznik jest przydatny głównie do obchodzenia błędów w
kod kontroli dostępu.

-fcheck-new
Sprawdź, czy wskaźnik zwrócony przez „operator nowy” nie jest pusty, zanim spróbujesz
zmodyfikować przydzieloną pamięć. To sprawdzenie jest zwykle niepotrzebne, ponieważ C++
standard określa, że ​​"operator nowy" zwraca 0 tylko wtedy, gdy jest zadeklarowany "throw()", in
w takim przypadku kompilator zawsze sprawdza wartość zwracaną nawet bez tej opcji. w
wszystkie inne przypadki, gdy „operator nowy” ma niepustą specyfikację wyjątku, pamięć
wyczerpanie sygnalizowane jest wyrzuceniem "std::bad_alloc". Zobacz też Nowy (brak).

-fconstexpr-głębokość=n
Ustaw maksymalną głębokość oceny zagnieżdżonej dla funkcji constexpr języka C++11 na n. Limit
jest potrzebny do wykrycia nieskończonej rekurencji podczas oceny stałego wyrażenia. ten
minimum określone przez normę to 512.

-fdeduce-init-list
Włącz odliczenie parametru typu szablonu jako „std::initializer_list” z nawiasu
załączona lista inicjatorów, tj.

szablon auto forward(T t) -> decltype (realfn (t))
{
return realfn (t);
}

nieważne f()
{
do przodu ({1,2}); // przekierowanie rozmów >
}

Odliczenie to zostało wprowadzone jako możliwe rozszerzenie pierwotnie proponowanego
semantyki dla standardu C++11, ale nie była częścią ostatecznego standardu, więc jest
domyślnie wyłączone. Ta opcja jest przestarzała i może zostać usunięta w przyszłości
wersja G++.

-ffriend-injection
Wstaw zaprzyjaźnione funkcje do otaczającej przestrzeni nazw, aby były widoczne na zewnątrz
zakres klasy, w której są zadeklarowane. Zaprzyjaźnione funkcje zostały udokumentowane
do pracy w ten sposób w starym Annotated C++ Reference Manual. Jednak w ISO C++ a
zaprzyjaźnioną funkcję, która nie jest zadeklarowana w otaczającym zakresie, można znaleźć tylko za pomocą
wyszukiwanie zależne od argumentów. GCC domyślnie zachowuje się standardowo.

Ta opcja ma na celu zapewnienie zgodności i może zostać usunięta w przyszłej wersji G++.

-fno-elide-konstruktory
Standard C++ pozwala implementacji na pominięcie tworzenia tymczasowego, który jest tylko
służy do inicjowania innego obiektu tego samego typu. Określenie tej opcji wyłącza
tej optymalizacji i zmusza G++ do wywołania konstruktora kopiującego we wszystkich przypadkach.

-fno-enforce-eh-specyfikacje
Nie generuj kodu w celu sprawdzenia naruszenia specyfikacji wyjątków w czasie wykonywania.
Ta opcja narusza standard C++, ale może być przydatna do zmniejszenia rozmiaru kodu w
kompilacje produkcyjne, podobnie jak definiowanie „NDEBUG”. To nie daje kodu użytkownika
pozwolenie na zgłaszanie wyjątków z naruszeniem specyfikacji wyjątków; ten
kompilator nadal optymalizuje na podstawie specyfikacji, więc rzuca nieoczekiwane
wyjątek powoduje niezdefiniowane zachowanie w czasie wykonywania.

-fextern-tls-init
-fno-extern-tls-init
Standardy C++11 i OpenMP pozwalają zmiennym „thread_local” i „threadprivate” na:
mają dynamiczną (w czasie wykonywania) inicjalizację. Aby to wesprzeć, każde użycie takiej zmiennej
przechodzi przez funkcję opakowującą, która wykonuje każdą niezbędną inicjalizację. Kiedy
użycie i definicja zmiennej są w tej samej jednostce tłumaczeniowej, ten narzut może
być zoptymalizowane, ale gdy użycie jest w innej jednostce tłumaczeniowej, nie ma
znaczne obciążenie, nawet jeśli zmienna w rzeczywistości nie potrzebuje dynamiki
inicjalizacja. Jeśli programista może mieć pewność, że żadne użycie zmiennej w nie-
zdefiniowanie TU musi wyzwolić dynamiczną inicjalizację (albo dlatego, że zmienna jest
inicjowana statycznie lub zostanie wykonane użycie zmiennej w definiującej JT
przed użyciem w innej JT), mogą uniknąć tego obciążenia za pomocą
-fno-extern-tls-init opcja.

W celach, które obsługują aliasy symboli, domyślną wartością jest -fextern-tls-init. Na celach
które nie obsługują aliasów symboli, domyślnie -fno-extern-tls-init.

-ffor-zakres
-fno-dla-zakresu
If -ffor-zakres jest określony, zakres zmiennych zadeklarowanych w a for-init-statement
jest ograniczone do samej pętli „for”, jak określono w standardzie C++. Gdyby
-fno-dla-zakresu jest określony, zakres zmiennych zadeklarowanych w a for-init-statement
rozciąga się do końca otaczającego zakresu, jak miało to miejsce w starych wersjach G++, oraz
inne (tradycyjne) implementacje C++.

Jeśli nie podano żadnej flagi, domyślnie jest podążanie za standardem, ale zezwalanie i dawanie
ostrzeżenie o kodzie w starym stylu, który w innym przypadku byłby nieważny lub miałby inny
zachowanie.

-fno-gnu-słowa kluczowe
Nie rozpoznaj „typeof” jako słowa kluczowego, aby kod mógł używać tego słowa jako an
identyfikator. Zamiast tego możesz użyć słowa kluczowego „__typeof__”. -ansi sugeruje
-fno-gnu-słowa kluczowe.

-fno-niejawne-szablony
Nigdy nie emituj kodu dla szablonów innych niż wbudowane, które są tworzone niejawnie (np. przez
posługiwać się); emituj kod tylko dla jawnych wystąpień.

-fno-niejawne-inline-szablony
Nie emituj również kodu dla niejawnych wystąpień szablonów wbudowanych. Domyślny
jest traktowanie inline w inny sposób, tak aby kompilacja była kompilowana z potrzebą optymalizacji i bez niej
ten sam zestaw jawnych wystąpień.

-fno-implement-inline
Aby zaoszczędzić miejsce, nie emituj kopii poza wierszem funkcji wbudowanych kontrolowanych przez
„#wdrożenie pragma”. Powoduje to błędy konsolidatora, jeśli te funkcje nie są
wpisane wszędzie, gdzie są nazywane.

-fms-rozszerzenia
Wyłącz ostrzeżenia Wpedantyczne dotyczące konstrukcji używanych w MFC, takich jak niejawne int i
uzyskanie wskaźnika do funkcji członkowskiej za pomocą niestandardowej składni.

-fno-nonansi-builtins
Wyłącz wbudowane deklaracje funkcji, które nie są wymagane przez ANSI/ISO C
obejmują „ffs”, „alloca”, „_exit”, „index”, „bzero”, „conjf” i inne pokrewne
funkcje.

-fnothrow-opt
Traktuj specyfikację wyjątku „throw()” tak, jakby była specyfikacją „noexcept” do
zmniejszyć lub wyeliminować narzut rozmiaru tekstu w stosunku do funkcji bez wyjątku
specyfikacja. Jeśli funkcja ma zmienne lokalne typów z nietrywialnymi
destruktory, specyfikacja wyjątków faktycznie zmniejsza funkcję, ponieważ
czyszczenie EH dla tych zmiennych można zoptymalizować. Efekt semantyczny to
że wyjątek wyrzucony z funkcji z taką specyfikacją wyjątku
skutkuje wezwaniem do „zakończenia”, a nie „nieoczekiwane”.

-fno-nazwy-operatorów
Nie traktuj słów kluczowych nazw operatorów "i", "bitand", "bitor", "compl", "not", "lub"
i „xor” jako synonimy jako słowa kluczowe.

-fno-opcjonalne-diags
Wyłącz diagnostykę, o której norma mówi, że kompilator nie musi wydawać.
Obecnie jedyną taką diagnostyką wydaną przez G++ jest ta dla nazwy posiadającej
wiele znaczeń w ramach klasy.

-fpermisywny
Zmniejsz część diagnostyki niezgodności kodu z błędów na ostrzeżenia. Zatem,
za pomocą -fpermisywny pozwala na kompilację jakiegoś niezgodnego kodu.

-fno-ładne-szablony
Gdy komunikat o błędzie odnosi się do specjalizacji szablonu funkcji, kompilator
normalnie drukuje podpis szablonu, po którym następują argumenty szablonu i
wszelkie typedefs lub nazwy typów w sygnaturze (np. "void f(T) [z T = int]" raczej
niż „void f(int)”), aby było jasne, o który szablon chodzi. Kiedy błąd
komunikat odnosi się do specjalizacji szablonu klasy, kompilator pomija wszystkie
argumenty szablonu, które pasują do domyślnych argumentów szablonu dla tego szablonu. Gdyby
jedno z tych zachowań utrudnia zrozumienie komunikatu o błędzie zamiast
łatwiej, możesz użyć -fno-ładne-szablony aby je wyłączyć.

-frepo
Włącz automatyczne tworzenie instancji szablonu w czasie łączenia. Ta opcja oznacza również:
-fno-niejawne-szablony.

-fno-rtti
Wyłącz generowanie informacji o każdej klasie z funkcjami wirtualnymi do użytku przez
funkcje identyfikacji typu środowiska uruchomieniowego C++ ("dynamic_cast" i "typeid"). Jeśli ty
nie używaj tych części języka, możesz zaoszczędzić trochę miejsca, używając tej flagi.
Zauważ, że obsługa wyjątków wykorzystuje te same informacje, ale G++ generuje je jako
potrzebne. Operatora „dynamic_cast” można nadal używać do rzutów, które nie wymagają
informacje o typie czasu wykonywania, tj. rzutuje na "unieważnione *" lub na jednoznaczne klasy bazowe.

-fsized-deallocation
Włącz wbudowane globalne deklaracje

void operator usuń (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;

jak wprowadzono w C++14. Jest to przydatne w przypadku cofania alokacji zastępczej zdefiniowanej przez użytkownika
funkcje, które na przykład wykorzystują rozmiar obiektu, aby przyspieszyć cofanie alokacji.
Domyślnie włączone pod -std=c++14 i powyżej. Flaga -Wsize-delokacja ostrzega
o miejscach, które mogą chcieć dodać definicję.

-fstats
Emituj statystyki dotyczące przetwarzania frontonu po zakończeniu kompilacji. Ten
informacje są generalnie przydatne tylko dla zespołu programistów G++.

-fstrict-enums
Pozwól kompilatorowi na optymalizację przy założeniu, że wartość typu wyliczeniowego
może być tylko jedną z wartości wyliczenia (zgodnie z definicją w standardzie C++;
w zasadzie wartość, którą można przedstawić w minimalnej liczbie bitów potrzebnych do
reprezentują wszystkie enumeratory). To założenie może nie być prawidłowe, jeśli program używa
rzut do konwersji dowolnej wartości całkowitej na typ wyliczeniowy.

-ftemplate-backtrace-limit=n
Ustaw maksymalną liczbę notatek o wystąpieniu szablonu dla pojedynczego ostrzeżenia lub błędu
do n. Wartość domyślna to 10.

-głębokość wzorca=n
Ustaw maksymalną głębokość tworzenia instancji dla klas szablonów na n. Limit na
Głębokość instancji szablonu jest potrzebna do wykrywania niekończących się rekurencji podczas szablonu
tworzenie instancji klasy. Programy zgodne z ANSI/ISO C++ nie mogą polegać na maksimum
głębokość większa niż 17 (zmieniona na 1024 w C++11). Domyślna wartość to 900, ponieważ
kompilatorowi może zabraknąć miejsca na stosie przed trafieniem 1024 w niektórych sytuacjach.

-fno-threadsafe-statics
Nie emituj dodatkowego kodu, aby użyć procedur określonych w C++ ABI dla wątków
bezpieczna inicjalizacja statyki lokalnej. Możesz użyć tej opcji, aby zmniejszyć rozmiar kodu
nieco w kodzie, który nie musi być bezpieczny dla wątków.

-bezpiecznik-cxa-atexit
Zarejestruj destruktory dla obiektów ze statycznym czasem przechowywania za pomocą "__cxa_atexit"
funkcji, a nie funkcji „atexit”. Ta opcja jest wymagana do pełnego
zgodna ze standardami obsługa destruktorów statycznych, ale działa tylko wtedy, gdy twoja biblioteka C
obsługuje "__cxa_atexit".

-fno-use-cxa-get-Exception-ptr
Nie używaj procedury wykonawczej „__cxa_get_exception_ptr”. To powoduje
"std::uncaught_exception" jest niepoprawne, ale jest konieczne, jeśli procedura uruchomieniowa jest
niedostępne.

-fvisibility-inlines-hidden
Ten przełącznik deklaruje, że użytkownik nie próbuje porównywać wskaźników z wbudowanymi
funkcje lub metody, w których adresy dwóch funkcji są przyjmowane w różnych
wspólne obiekty.

Efektem tego jest to, że GCC może skutecznie oznaczać metody wbudowane za pomocą
„__attribute__ ((widoczność („ukryty”)))”, aby nie pojawiały się w eksporcie
tabeli DSO i nie wymagają pośrednika PLT, gdy są używane w DSO.
Włączenie tej opcji może mieć dramatyczny wpływ na obciążenie i czasy połączeń DSO, ponieważ:
znacznie zmniejsza rozmiar dynamicznej tabeli eksportu, gdy biblioteka jest ciężka
korzystanie z szablonów.

Zachowanie tego przełącznika to nie to samo, co oznaczanie metod jako ukrytych
bezpośrednio, ponieważ nie wpływa na zmienne statyczne lokalne funkcji lub przyczyny
kompilator do wywnioskowania, że ​​funkcja jest zdefiniowana tylko w jednym obiekcie współdzielonym.

Możesz wyraźnie oznaczyć metodę jako mającą widoczność, aby zanegować efekt
przełącz się na tę metodę. Na przykład, jeśli chcesz porównać wskaźniki do a
konkretnej metody wbudowanej, możesz oznaczyć ją jako mającą domyślną widoczność. Oznaczenie
zamykanie klasy z jawną widocznością nie ma żadnego efektu.

Ta opcja nie ma wpływu na metody wbudowane w sposób jawny, ponieważ ich powiązanie
w przeciwnym razie może przekroczyć granicę biblioteki współdzielonej.

-fvisibility-ms-compat
Ta flaga próbuje użyć ustawień widoczności do stworzenia modelu powiązania GCC w C++
kompatybilny z Microsoft Visual Studio.

Flaga wprowadza następujące zmiany w modelu powiązania GCC:

1. Ustawia domyślną widoczność na „ukrytą”, na przykład -fvisibility=ukryty.

2. Typy, ale nie ich członkowie, nie są domyślnie ukryte.

3. Zasada jednej definicji jest złagodzona dla typów bez wyraźnej widoczności
specyfikacje, które są zdefiniowane w więcej niż jednym wspólnym obiekcie: te deklaracje
są dozwolone, jeśli są dozwolone, gdy ta opcja nie jest używana.

W nowym kodzie lepiej użyć -fvisibility=ukryty i wyeksportuj te klasy, które są
przeznaczone do tego, aby były widoczne na zewnątrz. Niestety możliwe jest, że kod może polegać,
być może przypadkowo w zachowaniu programu Visual Studio.

Wśród konsekwencji tych zmian jest to, że statyczne elementy danych tego samego typu
o tej samej nazwie, ale zdefiniowane w różnych wspólnych obiektach są różne, więc się zmieniają
jedno nie zmienia drugiego; i że wskaźniki do członków funkcji zdefiniowanych w
różne obiekty współdzielone mogą nie być takie same. Gdy ta flaga jest podana, jest to
naruszenie ODR w celu innego zdefiniowania typów o tej samej nazwie.

-fvtable-weryfikacja=[std|preinit|Żaden]
Włącz (lub wyłącz, jeśli używasz -fvtable-verify=brak) zabezpieczenie, które weryfikuje w
czas wykonywania, dla każdego wirtualnego połączenia, że ​​wskaźnik vtable, przez który połączenie jest
made jest prawidłowy dla typu obiektu i nie został uszkodzony ani nadpisany.
Jeśli w czasie wykonywania zostanie wykryty nieprawidłowy wskaźnik vtable, zgłaszany jest błąd i
wykonanie programu jest natychmiast wstrzymywane.

Ta opcja powoduje budowanie struktur danych w czasie wykonywania podczas uruchamiania programu, które są
służy do weryfikacji wskaźników vtable. Opcje std dzięki preinit kontrolować
czas tworzenia tych struktur danych. W obu przypadkach struktury danych są
zbudowany przed wykonaniem osiągnie „główny”. Za pomocą -fvtable-verify=std powoduje, że dane
struktury, które mają zostać zbudowane po załadowaniu i zainicjowaniu bibliotek współdzielonych.
-fvtable-verify=preinit powoduje, że są one budowane przed utworzeniem bibliotek współdzielonych
załadowany i zainicjowany.

Jeśli ta opcja pojawia się wiele razy w wierszu poleceń z różnymi wartościami
określony, Żaden ma najwyższy priorytet nad obydwoma std dzięki preinit; preinit trwa
pierwszeństwo przed std.

-fvtv-debug
W połączeniu z -fvtable-verify=std or -fvtable-verify=preinit, powoduje
debuguj wersje funkcji wykonawczych dla funkcji weryfikacji vtable
nazywa. Ta flaga powoduje również, że kompilator rejestruje informacje o tym, który vtable
wskaźniki, które znajdzie dla każdej klasy. Ta informacja jest zapisywana w pliku o nazwie
vtv_set_ptr_data.log w katalogu nazwanym przez zmienną środowiskową VTV_LOGS_DIR
jeśli jest zdefiniowany lub bieżący katalog roboczy inaczej.

Uwaga: ta funkcja dołącza dane do pliku dziennika. Jeśli chcesz mieć świeży plik dziennika, bądź
pamiętaj, aby usunąć wszystkie istniejące.

-liczba-fvtv
To jest flaga debugowania. W połączeniu z -fvtable-verify=std or
-fvtable-verify=preinit, powoduje to, że kompilator śledzi całkowitą liczbę
napotkanych wirtualnych połączeń i liczby wstawionych weryfikacji. To również
zlicza liczbę wywołań określonych funkcji biblioteki wykonawczej, które wstawia i
rejestruje te informacje dla każdej jednostki kompilacji. Kompilator zapisuje te informacje
do pliku o nazwie vtv_count_data.log w katalogu nazwanym przez zmienną środowiskową
VTV_LOGS_DIR jeśli jest zdefiniowany lub bieżący katalog roboczy inaczej. To również
zlicza rozmiar zestawów wskaźników vtable dla każdej klasy i zapisuje te informacje
do vtv_class_set_sizes.log W tym samym katalogu.

Uwaga: ta funkcja dołącza dane do plików dziennika. Aby uzyskać świeże pliki dziennika, upewnij się, że:
usuń wszystkie istniejące.

-fno-słaba
Nie używaj słabej obsługi symboli, nawet jeśli jest ona zapewniona przez linker. Domyślnie G++
używa słabych symboli, jeśli są dostępne. Ta opcja istnieje tylko do testowania i
nie powinny być wykorzystywane przez użytkowników końcowych; skutkuje to gorszym kodem i nie ma żadnych korzyści.
Ta opcja może zostać usunięta w przyszłej wersji G++.

-nostdinc++
Nie szukaj plików nagłówkowych w standardowych katalogach specyficznych dla C++, ale rób
nadal przeszukuj inne standardowe katalogi. (Ta opcja jest używana podczas budowania
biblioteka C++.)

Ponadto te opcje optymalizacji, ostrzeżeń i generowania kodu mają tylko znaczenie
dla programów C++:

-Wabi (tylko C, Objective-C, C++ i Objective-C++)
Kiedy wyraźny -fabi-wersja=n opcja jest używana, powoduje, że G++ ostrzega, gdy generuje
kod, który prawdopodobnie nie jest zgodny z niezależnym od dostawcy ABI C++. Od G++ teraz
domyślnie to -fabi-wersja=0, -Wabi nie ma żadnego efektu, chyba że jest to starsza wersja ABI
wybrane (z -fabi-wersja=n) lub wybrana jest starsza wersja kompatybilności (z
-Wabi=n or -fabi-compat-wersja=n).

Chociaż podjęto starania, aby ostrzec o wszystkich takich przypadkach, prawdopodobnie istnieją pewne
przypadki, o których nie są ostrzegane, mimo że G++ generuje niekompatybilny kod.
Mogą również wystąpić przypadki, w których ostrzeżenia są emitowane, mimo że kod, który jest
wygenerowany jest kompatybilny.

Powinieneś przepisać swój kod, aby uniknąć tych ostrzeżeń, jeśli martwisz się o
fakt, że kod wygenerowany przez G++ może nie być zgodny binarnie z kodem wygenerowanym przez
inne kompilatory.

-Wabi może być również używany z wyraźnym numerem wersji, aby ostrzec o kompatybilności
z konkretnym -wersja fabi poziom, np. -Wabi=2 ostrzegać o zmianach w stosunku do
-fabi-wersja=2. Określanie numeru wersji również ustawia -fabi-compat-wersja=n.

Znane niezgodności w -fabi-wersja=2 (co było domyślne od GCC 3.4 do
4.9) obejmują:

* Szablon z nietypowym parametrem szablonu typu referencyjnego został zniekształcony
nieprawidłowo:

zewn. wewn. N;
szablon struktura S {};
nieważne n (S ) {2}

Zostało to naprawione w -fabi-wersja=3.

* Typy wektorowe SIMD zadeklarowane przy użyciu „__attribute ((vector_size))” zostały zniekształcone w a
niestandardowy sposób, który nie pozwala na przeciążanie funkcji pobierających wektory
o różnych rozmiarach.

Manglowanie zostało zmienione w -fabi-wersja=4.

* "__attribute ((const))" i "noreturn" zostały zniekształcone jako kwalifikatory typu, oraz
"decltype" zwykłego oświadczenia został złożony.

Te problemy z manipulowaniem zostały naprawione w -fabi-wersja=5.

* Enumeratory z zakresem przekazywane jako argumenty do funkcji wariadycznych są promowane jak
enumeratory nieobjęte zakresem, powodując narzekanie „va_arg”. W przypadku większości celów to nie
faktycznie wpływają na parametr przekazujący ABI, ponieważ nie ma możliwości przekazania argumentu
mniejszy niż „int”.

Ponadto ABI zmieniło zniekształcanie pakietów argumentów szablonów, „const_cast”,
"static_cast", przyrost/zmniejszenie prefiksu oraz funkcja zakresu klasy używana jako a
argument szablonu.

Te problemy zostały poprawione w -fabi-wersja=6.

* Lambdy w domyślnym zakresie argumentów zostały niepoprawnie zniekształcone, a ABI zmieniony
zniekształcenie „nullptr_t”.

Te problemy zostały poprawione w -fabi-wersja=7.

* Podczas manipulowania typem funkcji za pomocą kwalifikatorów function-cv-cv, niekwalifikowany
typ funkcji był błędnie traktowany jako kandydat do podstawienia.

Zostało to naprawione w -fabi-wersja=8.

Ostrzega również przed zmianami związanymi z psABI. Znane zmiany psABI w tym momencie
zawierać:

* W przypadku SysV/x86-64 unie z „długimi podwójnymi” członkami są przekazywane w pamięci jako
określone w psABI. Na przykład:

związek U {
długi podwójny ld;
wew;
};

"Zjednoczenie U" jest zawsze przekazywane do pamięci.

-Wabi-tag (Tylko C++ i Objective-C++)
Ostrzegaj, gdy typ ze znacznikiem ABI jest używany w kontekście, który nie ma tego znacznika ABI.
Widzieć C + + Atrybuty aby uzyskać więcej informacji o tagach ABI.

-Wctor-dtor-prywatność (Tylko C++ i Objective-C++)
Ostrzegaj, gdy klasa wydaje się bezużyteczna, ponieważ wszystkie konstruktory lub destruktory w niej zawarte
class są prywatne i nie mają ani znajomych, ani publicznych, statycznych funkcji składowych.
Ostrzegaj również, jeśli nie ma metod nieprywatnych i jest co najmniej jeden prywatny członek
funkcja, która nie jest konstruktorem ani destruktorem.

-Wdelete-nie wirtualny-dtor (Tylko C++ i Objective-C++)
Ostrzegaj, gdy "delete" jest używane do zniszczenia instancji klasy, która ma virtual
funkcje i destruktor niewirtualny. Usunięcie instancji pochodnej . jest niebezpieczne
klasę za pomocą wskaźnika do klasy bazowej, jeśli klasa bazowa nie ma wirtualnego
burzyciel. To ostrzeżenie jest włączone przez -Ściana.

-Wliteral-sufiks (Tylko C++ i Objective-C++)
Ostrzegaj, gdy po łańcuchu lub literale znakowym występuje sufiks ud, który nie
zacznij od podkreślenia. Jako rozszerzenie zgodne, GCC traktuje takie przyrostki jak
oddzielne tokeny przetwarzania wstępnego w celu zachowania wstecznej kompatybilności z kodem
który używa makr formatujących z „ ". Na przykład:

#define __STDC_FORMAT_MACROS
#włączać
#włączać

int main () {
int64_t i64 = 123;
printf("Mój int64: %"PRId64"\n", i64);
}

W takim przypadku „PRID64” jest traktowany jako oddzielny token przetwarzania wstępnego.

To ostrzeżenie jest domyślnie włączone.

-Zwężenie się (Tylko C++ i Objective-C++)
Ostrzegaj, gdy zawężająca konwersja zabroniona przez C++11 występuje w ciągu { }np

int i = { 2.2 }; // błąd: zawężenie od double do int

Ta flaga jest zawarta w -Ściana dzięki -Wc++11-kompatybilność.

Z -std=c++11, -Nie-zwężenie wyłącza diagnostykę wymaganą przez normę.
Zauważ, że nie wpływa to na znaczenie poprawnie sformułowanego kodu; zawężanie konwersji
są nadal uważane za źle ukształtowane w kontekście SFINAE.

-Niez wyjątkiem (Tylko C++ i Objective-C++)
Ostrzegaj, gdy wyrażenie noexcept ma wartość false z powodu wywołania funkcji
który nie ma specyfikacji wyjątku niezgłaszania (np. "throw()" lub
"noexcept"), ale kompilator wie, że nigdy nie zgłasza wyjątku.

-Wnon-virtual-dtor (Tylko C++ i Objective-C++)
Ostrzegaj, gdy klasa ma funkcje wirtualne i dostępny niewirtualny destruktor
sam lub w dostępnej polimorficznej klasie bazowej, w takim przypadku jest to możliwe, ale
niebezpieczne jest usunięcie instancji klasy pochodnej za pomocą wskaźnika do samej klasy
lub klasa podstawowa. To ostrzeżenie jest automatycznie włączane, jeśli -Weffc++ jest specyficzne.

-Przesyłka (Tylko C++ i Objective-C++)
Ostrzegaj, gdy kolejność inicjatorów elementów członkowskich podana w kodzie nie jest zgodna z kolejnością
w którym muszą zostać wykonane. Na przykład:

struktura A {
wew;
intj;
A(): j (0), ja (1) { }
};

Kompilator zmienia kolejność inicjatorów elementów członkowskich dla „i” i „j”, aby pasowały do
kolejność deklaracji członków, emitując ostrzeżenie o tym skutku. To ostrzeżenie jest
włączony przez -Ściana.

-fext-numeric-literals (Tylko C++ i Objective-C++)
Zaakceptuj urojone, stałoprzecinkowe lub zdefiniowane przez maszynę literalne sufiksy liczb jako GNU
rozszerzenia. Gdy ta opcja jest wyłączona, te przyrostki są traktowane jako C++11 user-
zdefiniowane dosłowne sufiksy liczbowe. Jest to domyślnie włączone dla wszystkich dialektów starszych niż C++11
i wszystkie dialekty GNU: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14, To
opcja jest domyślnie wyłączona dla ISO C++11 i nowszych (-std=c++11, ...).

Poniższy -W... na opcje nie ma wpływu -Ściana.

-Weffc++ (Tylko C++ i Objective-C++)
Ostrzegaj o naruszeniach następujących wytycznych dotyczących stylu od Scotta Meyersa Skuteczny
C + + seria książek:

* Zdefiniuj konstruktor kopiujący i operator przypisania dla klas z dynamicznie-
Przydzielona pamięć.

* Preferuj inicjalizację niż przypisanie w konstruktorach.

* Niech "operator=" zwraca odniesienie do *this.

* Nie próbuj zwracać referencji, gdy musisz zwrócić obiekt.

* Rozróżnij przedrostkowe i przyrostkowe formy operatorów inkrementacji i dekrementacji.

* Nigdy nie przeciążaj "&&", "||" lub ",".

Ta opcja umożliwia również: -Wnon-virtual-dtor, który jest również jednym z efektywnych C++
zalecenia. Jednak sprawdzanie jest przedłużane, aby ostrzec o braku wirtualnego
destruktor w dostępnych, niepolimorficznych klasach bazowych.

Wybierając tę ​​opcję, pamiętaj, że nagłówki biblioteki standardowej nie są zgodne ze wszystkimi
niniejszych wytycznych; posługiwać się grep -v aby odfiltrować te ostrzeżenia.

-Wstrict-null-sentinel (Tylko C++ i Objective-C++)
Ostrzegaj o używaniu niecastowanego „NULL” jako wartownika. Przy kompilacji tylko z GCC
jest to poprawny wskaźnik, ponieważ „NULL” jest zdefiniowane jako „__null”. Chociaż jest to null
wskaźnik, a nie wskaźnik zerowy, gwarantuje, że ma ten sam rozmiar
jako wskaźnik. Ale to zastosowanie nie jest przenośne w różnych kompilatorach.

-Wno-bez szablonu-znajomego (Tylko C++ i Objective-C++)
Wyłącz ostrzeżenia, gdy w szablonie zadeklarowane są funkcje znajomych niebędące szablonami.
Od czasu pojawienia się wyraźnej obsługi specyfikacji szablonów w G++, jeśli nazwa
przyjaciel jest niekwalifikowanym identyfikatorem (tj. przyjaciel foo(int)), specyfikacja języka C++
żąda, aby znajomy zadeklarował lub zdefiniował zwykłą, nieszablonową funkcję. (Sekcja
14.5.3). Zanim G++ zaimplementował wyraźną specyfikację, niekwalifikowane identyfikatory mogły być
interpretowane jako szczególna specjalizacja funkcji szablonowej. Ponieważ to
zachowanie niezgodne nie jest już zachowaniem domyślnym dla G++,
-Wnon-szablon-znajomy pozwala kompilatorowi sprawdzić istniejący kod pod kątem potencjalnych problemów
plamki i jest domyślnie włączony. To nowe zachowanie kompilatora można wyłączyć za pomocą
-Wno-bez szablonu-znajomego, który zachowuje zgodny kod kompilatora, ale wyłącza
pomocne ostrzeżenie.

-Wold-style-obsada (Tylko C++ i Objective-C++)
Ostrzegaj, jeśli rzutowanie w starym stylu (w stylu C) na typ niepusty jest używany w programie C++.
Rzuty w nowym stylu („dynamic_cast”, „static_cast”, „reinterpret_cast” i
„const_cast”) są mniej podatne na niezamierzone efekty i znacznie łatwiejsze do wyszukania.

-Woverloaded-wirtualny (Tylko C++ i Objective-C++)
Ostrzegaj, gdy deklaracja funkcji ukrywa funkcje wirtualne z klasy bazowej. Do
na przykład w:

struktura A {
wirtualna pustka f();
};

struktura B: public A {
nieważne f(int);
};

wersja klasy "f" klasy "f" jest ukryta w "B", a kod taki jak:

B*b;
b->f();

nie kompiluje się.

-Wno-pmf-konwersje (Tylko C++ i Objective-C++)
Wyłącz diagnostykę konwertowania wskaźnika powiązanego na funkcję składową na zwykły
wskaźnik.

-Wsign-promo (Tylko C++ i Objective-C++)
Ostrzegaj, gdy rozpoznawanie przeciążenia wybiera promocję z typu niepodpisanego lub wyliczanego do
typ ze znakiem, przez konwersję na typ bez znaku o tym samym rozmiarze. Poprzedni
wersje G++ próbowały zachować bez znaku, ale standard nakazuje obecne
zachowanie.

Opcje Sterowanie Objective-C dzięki Cel-C++ Dialekty
(UWAGA: Ten podręcznik nie opisuje języków Objective-C i Objective-C++
sami.

W tej sekcji opisano opcje wiersza polecenia, które mają znaczenie tylko dla celu-C
i programy Cel-C++. Możesz także użyć większości niezależnego od języka GNU
opcje kompilatora. Na przykład możesz skompilować plik jakas_klasa.m lubię to:

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

W tym przykładzie -fgnu-runtime to opcja przeznaczona tylko dla Objective-C i Objective-C++
programy; możesz użyć innych opcji w dowolnym języku obsługiwanym przez GCC.

Zauważ, że ponieważ Objective-C jest rozszerzeniem języka C, kompilacje Objective-C
może również używać opcji specyficznych dla interfejsu C (np. -Wtradycyjne). Podobnie,
Kompilacje Objective-C++ mogą używać opcji specyficznych dla C++ (np. -Wabi).

Oto lista opcji, które są tylko do kompilacji Objective-C i Objective-C++
programy:

-fstała-klasa-stringu=Nazwa klasy
Zastosowanie Nazwa klasy jako nazwa klasy do utworzenia instancji dla każdego łańcucha literału
określony za pomocą składni "@"..."". Domyślna nazwa klasy to „NXConstantString”, jeśli
używane jest środowisko wykonawcze GNU i „NSConstantString”, jeśli środowisko wykonawcze NeXT jest w użyciu
używany (patrz poniżej). ten -fstała-cfstrings opcja, jeśli jest również obecna, zastępuje
-fstała-string-class ustawienie i spowodować, że literały "@"..."" będą ułożone jako stałe
Ciągi CoreFoundation.

-fgnu-runtime
Generuj kod obiektowy zgodny ze standardowym środowiskiem wykonawczym GNU Objective-C. To jest
domyślne dla większości typów systemów.

-Fnext-runtime
Generuj dane wyjściowe zgodne ze środowiskiem wykonawczym NeXT. Jest to ustawienie domyślne dla opartego na NeXT
systemy, w tym Darwin i Mac OS X. Makro „__NEXT_RUNTIME__” jest predefiniowane, jeśli:
(i tylko wtedy, gdy) ta opcja jest używana.

-fno-nil-odbiorniki
Załóżmy, że wszystkie komunikaty Objective-C ("[receiver message:arg]") w tym
jednostka tłumaczeniowa upewnij się, że odbiorca nie jest „zerowy”. Pozwala to na więcej
wydajne punkty wejścia w środowisku wykonawczym do wykorzystania. Ta opcja jest dostępna tylko w
w połączeniu ze środowiskiem wykonawczym NeXT i ABI w wersji 0 lub 1.

-fobjc-abi-wersja=n
Użyj wersji n ABI Objective-C dla wybranego środowiska wykonawczego. Ta opcja to
obecnie obsługiwane tylko dla środowiska wykonawczego NeXT. W takim przypadku wersja 0 to
tradycyjny (32-bitowy) ABI bez obsługi właściwości i innych Objective-C 2.0
wzbogacenie. Wersja 1 to tradycyjny (32-bitowy) ABI z obsługą właściwości i
inne dodatki do celu C 2.0. Wersja 2 to nowoczesny (64-bitowy) ABI. Jeśli nic nie jest
określona, ​​domyślna jest wersja 0 na 32-bitowych maszynach docelowych i wersja 2 na 64-bitowych
maszyny docelowe.

-fobjc-call-cxx-cdtors
Dla każdej klasy Objective-C sprawdź, czy którakolwiek z jej zmiennych instancji jest obiektem C++
z nietrywialnym domyślnym konstruktorem. Jeśli tak, zsyntetyzuj specjalny „- (id)
.cxx_construct” metoda instancji, która uruchamia nietrywialne domyślne konstruktory na dowolnym
takie zmienne instancji, w kolejności, a następnie zwracają "self". Podobnie, sprawdź, czy w ogóle
zmienna instancji jest obiektem C++ z nietrywialnym destruktorem, a jeśli tak, syntezuj
specjalna metoda "- (void) .cxx_destruct", która uruchamia wszystkie takie domyślne destruktory, in
Odwrotna kolejność.

Metody "- (id) .cxx_construct" i "- (void) .cxx_destruct" w ten sposób wygenerowały tylko
działają na zmiennych instancji zadeklarowanych w bieżącej klasie Objective-C, a nie na tych
odziedziczone z nadklas. Obowiązkiem środowiska wykonawczego Objective-C jest:
wywoływać wszystkie takie metody w hierarchii dziedziczenia obiektu. Dowód osobisty)
Metody .cxx_construct” są wywoływane przez środowisko wykonawcze natychmiast po nowym obiekcie
instancja jest przydzielona; metody "- (void) .cxx_destruct" są wywoływane natychmiast
zanim środowisko wykonawcze zwolni instancję obiektu.

W chwili pisania tego tekstu tylko środowisko uruchomieniowe NeXT w systemie Mac OS X 10.4 i nowszych obsługuje
wywoływanie metod "- (id) .cxx_construct" i "- (void) .cxx_destruct".

-fobjc-bezpośrednia-wysyłka
Zezwalaj na szybkie przeskoki do dyspozytora wiadomości. Na Darwin odbywa się to poprzez
strona komunikacyjna.

-fobjc-wyjątki
Włącz obsługę składniową dla strukturalnej obsługi wyjątków w Objective-C, podobnie jak
co oferują C++ i Java. Ta opcja jest wymagana do korzystania z celu-C
słowa kluczowe @try, @throw, @catch, @finally i @synchronized. Ta opcja jest dostępna
zarówno ze środowiskiem uruchomieniowym GNU, jak i środowiskiem wykonawczym NeXT (ale niedostępne w połączeniu z
środowisko wykonawcze NeXT w systemie Mac OS X 10.2 i wcześniejszych).

-fobjc-gc
Włącz wyrzucanie elementów bezużytecznych (GC) w programach Objective-C i Objective-C++. Ta opcja
jest dostępny tylko ze środowiskiem wykonawczym NeXT; środowisko uruchomieniowe GNU ma inne śmieci
implementacja kolekcji, która nie wymaga specjalnych flag kompilatora.

-fobjc-nilcheck
W przypadku środowiska uruchomieniowego NeXT z wersją 2 ABI sprawdź, czy w metodzie nie ma odbiornika zerowego
wywołania przed wykonaniem rzeczywistego wywołania metody. Jest to ustawienie domyślne i może być
wyłączone przy użyciu -fno-objc-nilcheck. Metody klas i super wywołania nigdy nie są sprawdzane
na zero w ten sposób bez względu na ustawienie tej flagi. Obecnie ta flaga nie
nic, gdy używane jest środowisko wykonawcze GNU lub starsza wersja ABI środowiska wykonawczego NeXT.

-fobjc-std=objc1
Zgodne ze składnią języka Objective-C 1.0, języka rozpoznawanego przez GCC 4.0.
Dotyczy to tylko dodatków Objective-C do języka C/C++; to nie ma wpływu
zgodność ze standardami C/C++, która jest kontrolowana przez osobny dialekt C/C++
flagi opcji. Gdy ta opcja jest używana z Objective-C lub Objective-C++
kompilator, każda składnia Objective-C, która nie jest rozpoznawana przez GCC 4.0, jest odrzucana. Ten
jest przydatne, jeśli chcesz się upewnić, że Twój kod Objective-C może być skompilowany za pomocą
starsze wersje GCC.

-zajęcia-objc-replace
Emituj specjalny znacznik instruujący ld(1) nie łączyć statycznie w wynikowym obiekcie
złożyć i zezwolić dyld(1) aby zamiast tego załadować go w czasie wykonywania. To jest używane w
w połączeniu z trybem debugowania Fix-and-Continue, w którym plik obiektowy znajduje się w
pytanie może być przekompilowane i dynamicznie przeładowane w trakcie programu
wykonanie, bez konieczności ponownego uruchamiania samego programu. Obecnie Fix-i-
Funkcja Continue jest dostępna tylko w połączeniu ze środowiskiem wykonawczym NeXT na Macu
OS X 10.3 i nowsze.

-fzero-link
Podczas kompilacji dla środowiska wykonawczego NeXT kompilator zwykle zastępuje wywołania do
"objc_getClass("...")" (gdy nazwa klasy jest znana w czasie kompilacji) z
statyczne odwołania do klas, które są inicjowane w czasie ładowania, co poprawia czas wykonywania
wydajność. Określanie -fzero-link flaga tłumi to zachowanie i powoduje
wywołuje "objc_getClass("...")" do zachowania. Jest to przydatne w Zero-Link
tryb debugowania, ponieważ pozwala na modyfikację poszczególnych implementacji klas
podczas wykonywania programu. Środowisko wykonawcze GNU obecnie zawsze zachowuje wezwania do
"objc_get_class("...")" niezależnie od opcji wiersza poleceń.

-fno-lokalne-iwary
Domyślnie zmienne instancji w Objective-C są dostępne tak, jakby były lokalne
zmienne z metod klasy, w której są zadeklarowane. Może to prowadzić do:
cieniowanie między zmiennymi instancji a innymi zmiennymi zadeklarowanymi lokalnie
wewnątrz metody klasy lub globalnie o tej samej nazwie. Określanie -fno-lokalne-iwary
flaga wyłącza to zachowanie, unikając w ten sposób problemów z cieniowaniem zmiennych.

-fivar-widoczność=[publiczny|chroniony|prywatny|pakiet]
Ustaw domyślną widoczność zmiennej instancji na określoną opcję, aby instancja
zmienne zadeklarowane poza zakresem jakichkolwiek dyrektyw modyfikujących dostęp domyślnie mają wartość
określona widoczność.

-gen-decls
Zrzuć deklaracje interfejsu dla wszystkich klas widocznych w pliku źródłowym do pliku o nazwie
nazwaźródła.decl.

-Wassign-przechwytywanie (Tylko Objective-C i Objective-C++)
Ostrzegaj za każdym razem, gdy zadanie Celu C zostanie przechwycone przez garbage collector.

-Wno-protokół (Tylko Objective-C i Objective-C++)
Jeśli zadeklarowano, że klasa implementuje protokół, dla każdej metody wyświetlane jest ostrzeżenie
w protokole, który nie jest zaimplementowany przez klasę. Domyślnym zachowaniem jest:
wystawia ostrzeżenie dla każdej metody, która nie została wprost zaimplementowana w klasie, nawet jeśli a
implementacja metody jest dziedziczona z nadklasy. Jeśli używasz -Wno-protokół
opcję, wówczas metody odziedziczone z nadklasy uważa się za zaimplementowane,
i żadne ostrzeżenie nie zostanie im wydane.

-Wselektor (Tylko Objective-C i Objective-C++)
Ostrzegaj, jeśli podczas tego samego selektora zostanie znalezionych wiele metod różnych typów dla tego samego selektora
kompilacja. Sprawdzenie odbywa się na liście metod w końcowym etapie
kompilacja. Dodatkowo sprawdzane jest dla każdego selektora występującego w
Wyrażenie „@selector(...)” i odpowiadająca mu metoda dla tego selektora zostały
znalezione podczas kompilacji. Ponieważ te kontrole skanują tabelę metod dopiero na końcu
kompilacji, ostrzeżenia te nie są generowane, jeśli końcowym etapem kompilacji jest:
nie został osiągnięty, na przykład z powodu wykrycia błędu podczas kompilacji lub z powodu
- tylko fsyntax używana jest opcja.

-Wstrict-selector-match (Tylko Objective-C i Objective-C++)
Ostrzegaj, jeśli dla a . znaleziono wiele metod z różnymi typami argumentów i/lub zwracanych
podany selektor podczas próby wysłania wiadomości za pomocą tego selektora do odbiorcy
wpisz „id” lub „Klasa”. Gdy ta flaga jest wyłączona (co jest zachowaniem domyślnym),
kompilator pomija takie ostrzeżenia, jeśli jakiekolwiek znalezione różnice ograniczają się do typów, które współdzielą
ten sam rozmiar i wyrównanie.

-Niezadeklarowany-selektor (Tylko Objective-C i Objective-C++)
Ostrzegaj, jeśli zostanie znalezione wyrażenie „@selector(...)” odwołujące się do niezadeklarowanego selektora. A
selektor jest uważany za niezadeklarowany, jeśli żadna metoda o tej nazwie nie została wcześniej zadeklarowana
wyrażenie "@selector(...)", jawnie w @interface lub @protocol
deklaracji lub niejawnie w sekcji @implementation. Ta opcja zawsze działa
sprawdza się, gdy tylko zostanie znalezione wyrażenie „@selector(...)”, podczas gdy -Wselektor tylko
przeprowadza swoje kontrole w końcowej fazie kompilacji. To również wymusza kodowanie
konwencja stylu, zgodnie z którą metody i selektory muszą być zadeklarowane przed użyciem.

-print-objc-runtime-informacje
Wygeneruj nagłówek C opisujący największą strukturę, która jest przekazywana przez wartość, jeśli istnieje.

Opcje do Kontrola Diagnostyczny Wiadomości Formatowanie
Tradycyjnie komunikaty diagnostyczne były formatowane niezależnie od urządzenia wyjściowego
aspekt (np. jego szerokość, ...). Możesz użyć opcji opisanych poniżej, aby kontrolować
algorytm formatowania komunikatów diagnostycznych, np. ile znaków w linii, jak często
należy zgłaszać informacje o lokalizacji źródła. Pamiętaj, że niektóre interfejsy językowe mogą:
nie honoruj ​​tych opcji.

-f-długość-wiadomości=n
Spróbuj sformatować komunikaty o błędach tak, aby mieściły się w wierszach około n postacie. Gdyby n is
zero, wtedy zawijanie wierszy nie jest wykonywane; każdy komunikat o błędzie pojawia się w jednym wierszu.
Jest to ustawienie domyślne dla wszystkich interfejsów.

-fdiagnostics-show-location=raz
Ma znaczenie tylko w trybie zawijania linii. Nakazuje zgłaszającemu komunikaty diagnostyczne:
emitować informacje o lokalizacji źródła pewnego razu; to znaczy w przypadku, gdy wiadomość jest zbyt długa, aby się zmieścić
na pojedynczej linii fizycznej i musi być zawinięty, lokalizacja źródłowa nie zostanie wyemitowana
(jako przedrostek) ponownie, w kółko, w kolejnych wierszach kontynuacji. To jest
zachowanie domyślne.

-fdiagnostics-show-location=każda-wiersz
Ma znaczenie tylko w trybie zawijania linii. Nakazuje zgłaszającemu komunikaty diagnostyczne:
emitować te same informacje o lokalizacji źródła (jako prefiks) dla fizycznych linii, które wynikną
z procesu łamania wiadomości, która jest zbyt długa, aby zmieścić się w jednej linii.

-f-kolor-diagnostyki[=KIEDY]
-fno-diagnostyka-kolor
Użyj koloru w diagnostyce. KIEDY is nigdy, zawszelub samochód. Wartość domyślna zależy od tego, jak
kompilator został skonfigurowany, może to być dowolny z powyższych KIEDY opcje lub też
nigdy if GCC_COLORS zmienna środowiskowa nie występuje w środowisku i samochód
Inaczej. samochód oznacza używanie koloru tylko wtedy, gdy standardowym błędem jest terminal. ten
formularze -fdiagnostyka-kolor dzięki -fno-diagnostyka-kolor są aliasami dla
-fdiagnostics-color=zawsze dzięki -fdiagnostics-color=nigdy, Odpowiednio.

Kolory są definiowane przez zmienną środowiskową GCC_COLORS. Jego wartość to dwukropek-
oddzielona lista możliwości i podciągi Select Graphic Rendition (SGR). SGR
polecenia są interpretowane przez terminal lub emulator terminala. (Patrz rozdział w
dokumentacja twojego terminala tekstowego dla dozwolonych wartości i ich znaczenia jako
atrybuty znaków). Te wartości podłańcuchów są liczbami całkowitymi w reprezentacji dziesiętnej
i mogą być łączone ze średnikami. Wspólne wartości do łączenia obejmują 1 dla
pogrubienie, 4 dla podkreślenia, 5 na mrugnięcie, 7 dla odwrotności, 39 dla domyślnego koloru pierwszego planu, 30
do 37 dla kolorów pierwszego planu, 90 do 97 dla 16-kolorowych kolorów pierwszego planu, 38; 5; 0 do
38; 5; 255 dla trybów 88-kolorowych i 256-kolorowych kolory pierwszego planu, 49 dla domyślnego tła
kolor, 40 do 47 dla kolorów tła, 100 do 107 dla 16-kolorowych kolorów tła,
dzięki 48; 5; 0 do 48; 5; 255 dla trybów 88-kolorowych i 256-kolorowych kolorów tła.

Domyślny GCC_COLORS is

error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01

gdzie 01; 31 jest pogrubiony czerwony, 01; 35 jest pogrubiona magenta, 01; 36 jest pogrubiony cyjan, 01; 32 jest odważny
zielony i 01 jest odważny. Ustawienie GCC_COLORS do pustego ciągu wyłącza kolory.
Obsługiwane możliwości są następujące.

"błąd="
Podciąg SGR dla błędu: znaczniki.

"ostrzeżenie="
Podciąg SGR dla ostrzeżenia: znaczniki.

"uwaga="
Podciąg SGR dla notatki: znaczniki.

"daszek="
Podciąg SGR dla linii karetki.

„miejsce =”
podciąg SGR dla informacji o lokalizacji, plik:linia or plik:linia:kolumna itd.

"cytat="
Podciąg SGR dla informacji drukowanych w cudzysłowie.

-fno-diagnostics-show opcja
Domyślnie każda wyemitowana diagnostyka zawiera tekst wskazujący opcję wiersza poleceń
który bezpośrednio steruje diagnostyką (jeśli taka opcja jest znana diagnoscie)
maszyneria). Określanie -fno-diagnostics-show opcja flaga to tłumi
zachowanie.

-fno-diagnostics-show-caret
Domyślnie każda wyemitowana diagnostyka zawiera oryginalny wiersz źródłowy i karetkę '^'
wskazując kolumnę. Ta opcja pomija te informacje. Linia źródłowa to
obcięte do n znaki, jeśli -f-długość-wiadomości=n podana jest opcja. Kiedy wyjście
odbywa się na terminalu, szerokość jest ograniczona do szerokości podanej przez KOLUMNY
zmienna środowiskowa lub, jeśli nie jest ustawiona, szerokość terminala.

Opcje do Żądanie or Stłumić ostrzeżenia
Ostrzeżenia to komunikaty diagnostyczne, które zgłaszają konstrukcje, które nie są z natury
błędne, ale które są ryzykowne lub sugerują, że mógł wystąpić błąd.

Poniższe opcje niezależne od języka nie włączają określonych ostrzeżeń, ale kontrolują
rodzaje diagnostyki produkowanej przez GCC.

- tylko fsyntax
Sprawdź kod pod kątem błędów składniowych, ale nie rób nic poza tym.

-fmax-błędy=n
Ogranicza maksymalną liczbę komunikatów o błędach do n, w którym to momencie GCC raczej ucieka
niż próba dalszego przetwarzania kodu źródłowego. Gdyby n wynosi 0 (domyślnie),
nie ma limitu liczby generowanych komunikatów o błędach. Gdyby -Wfatal-błędy Jest również
określone, a następnie -Wfatal-błędy ma pierwszeństwo przed tą opcją.

-w Zablokuj wszystkie komunikaty ostrzegawcze.

-Błąd
Zamień wszystkie ostrzeżenia w błędy.

-Błąd=
Przekształć określone ostrzeżenie w błąd. Dołączany jest specyfikator ostrzeżenia;
na przykład -Błąd=przełącznik włącza ostrzeżenia kontrolowane przez -Wprzełącznik w błędy.
Ten przełącznik przyjmuje formę negatywną, która ma być używana do negacji -Błąd dla konkretnych ostrzeżeń;
na przykład -Wno-błąd=przełącznik sprawia, że -Wprzełącznik ostrzeżenia nie są błędami, nawet gdy -Błąd
obowiązuje.

Komunikat ostrzegawczy dla każdego kontrolowanego ostrzeżenia zawiera opcję, która kontroluje
ostrzeżenie. Ta opcja może być następnie używana z -Błąd= dzięki -Wno-błąd= jak w opisie
nad. (Drukowanie opcji w komunikacie ostrzegawczym można wyłączyć za pomocą
-fno-diagnostics-show opcja flaga.)

Zauważ, że określenie -Błąd=bla automatycznie implikuje -Wbla. Jednakże, -Wno-błąd=bla
niczego nie sugeruje.

-Wfatal-błędy
Ta opcja powoduje, że kompilator przerywa kompilację przy pierwszym wystąpieniu błędu
zamiast próbować kontynuować i drukować kolejne komunikaty o błędach.

Możesz poprosić o wiele konkretnych ostrzeżeń z opcjami zaczynającymi się od -W, Na przykład
-Wimplicit żądać ostrzeżeń dotyczących niejawnych deklaracji. Każde z tych konkretnych ostrzeżeń
opcje mają również początek formy przeczącej -Wnie- wyłączyć ostrzeżenia; na przykład,
-Wno-niejawny. W tym podręczniku wymieniono tylko jeden z dwóch formularzy, w zależności od tego, który nie jest domyślny.
Aby uzyskać więcej opcji specyficznych dla języka, zobacz również C + + Dialekt Opcje dzięki Objective-C
dzięki Cel-C++ Dialekt Opcje.

Niektóre opcje, takie jak -Ściana dzięki -Wextra, włącz inne opcje, takie jak -Wunused, który
może włączyć dalsze opcje, takie jak -Wunused-wartość. Połączony efekt pozytywnych i
formy negatywne polega na tym, że bardziej szczegółowe opcje mają pierwszeństwo przed mniej szczegółowymi,
niezależnie od ich pozycji w wierszu poleceń. W przypadku opcji o tej samej specyfice,
ostatnia zaczyna obowiązywać. Opcje włączone lub wyłączone za pomocą pragm działają tak, jakby były
pojawił się na końcu wiersza poleceń.

Gdy zażądano nierozpoznanej opcji ostrzeżenia (np. -Nieznane-ostrzeżenie), GCC emituje a
diagnostyka informująca, że ​​opcja nie została rozpoznana. Jeśli jednak -Wnie- używany jest formularz,
zachowanie jest nieco inne: żadna diagnostyka nie jest tworzona dla -Wno-nieznane-ostrzeżenie
chyba że tworzone są inne dane diagnostyczne. Pozwala to na użycie nowego -Wnie- Opcje
ze starymi kompilatorami, ale jeśli coś pójdzie nie tak, kompilator ostrzega, że ​​nierozpoznany
opcja jest obecna.

-Wpedancki
-pedantyczny
Wydaj wszystkie ostrzeżenia wymagane przez ścisłe normy ISO C i ISO C++; odrzuć wszystkie programy, które
używaj niedozwolonych rozszerzeń i niektórych innych programów, które nie są zgodne z ISO C i ISO
C++. W przypadku ISO C następuje wersja standardu ISO C określona przez any -std
używana opcja.

Poprawne programy ISO C i ISO C++ powinny skompilować się poprawnie z tą opcją lub bez niej
(chociaż nieliczne rzadko wymagają -ansi lub -std opcja określająca wymaganą wersję
ISO C). Jednak bez tej opcji niektóre rozszerzenia GNU i tradycyjne C i
Obsługiwane są również funkcje C++. W tej opcji są one odrzucane.

-Wpedancki nie powoduje komunikatów ostrzegawczych dotyczących użycia alternatywnych słów kluczowych, których
nazwy zaczynają się i kończą na __. Ostrzeżenia pedantyczne są również wyłączone w wyrażeniu
który następuje po „__rozszerzeniu__”. Jednak tylko systemowe pliki nagłówkowe powinny ich używać
drogi ewakuacyjne; programy użytkowe powinny ich unikać.

Niektórzy użytkownicy próbują używać -Wpedancki aby sprawdzić programy pod kątem ścisłej zgodności z ISO C. Oni
wkrótce okazuje się, że nie robi dokładnie tego, czego chcą: znajduje pewne praktyki niezgodne z ISO,
ale nie wszystkie --- tylko te, dla których ISO C Wymaga diagnostyka i kilka innych dla
która diagnostyka została dodana.

W niektórych przypadkach przydatna może być funkcja zgłaszania wszelkich niezgodności z normą ISO C,
ale wymagałoby to znacznej dodatkowej pracy i byłoby zupełnie inne niż
-Wpedancki. Nie planujemy obsługi takiej funkcji w najbliższej przyszłości.

Gdzie norma określona z -std reprezentuje rozszerzony dialekt języka C GNU, taki jak
gnu90 or gnu99, istnieje odpowiednia baza standard, wersja ISO C, na której
oparty jest na rozszerzonym dialekcie GNU. Ostrzeżenia od -Wpedancki są podane tam, gdzie są
wymagane przez normę podstawową. (Nie ma sensu udzielać takich ostrzeżeń)
tylko dla funkcji spoza określonego dialektu GNU C, ponieważ z definicji GNU
dialekty języka C zawierają wszystkie funkcje obsługiwane przez kompilator z daną opcją oraz
nie byłoby przed czym ostrzegać.)

-pedantyczne-błędy
Podaj błąd, gdy baza standard (Patrz -Wpedancki) wymaga diagnostyki, w
w niektórych przypadkach występuje niezdefiniowane zachowanie w czasie kompilacji, aw innych przypadkach
które nie uniemożliwiają kompilacji programów zgodnych ze standardem.
To nie jest równoznaczne z -Błąd=pedantyczny, ponieważ są przez to włączone błędy
opcja i nie jest włączona przez tę ostatnią i odwrotnie.

-Ściana
Dzięki temu wszystkie ostrzeżenia dotyczące konstrukcji, które niektórzy użytkownicy rozważają
wątpliwe i łatwe do uniknięcia (lub zmodyfikowania, aby zapobiec ostrzeżeniu), nawet w
w połączeniu z makrami. Włącza to również niektóre opisane ostrzeżenia specyficzne dla języka
in C + + Dialekt Opcje dzięki Objective-C dzięki Cel-C++ Dialekt Opcje.

-Ściana włącza następujące flagi ostrzegawcze:

-Waddress -Granice warray = 1 (tylko z -O2) -Wc++11-kompatybilność -Wc++14-kompatybilność
-Wchar-subscripts -Wenum-porównaj (w C/ObjC; domyślnie włączone w C++)
-Wimplicit-int (Tylko C i Cel-C) -Wimplicit-deklaracja funkcji (C i
Tylko cel C) -Wkomentarz -Wformat -Wmain (tylko dla C/ObjC i chyba że
-wolnostojący) -Wmoże-niezainicjowany -Wmissing-szelkach (tylko dla C/ObjC) -Wnonnull
-Wopenmp-simd -Nawiasy -Wskaźnik-znak -Przesyłka -Typ zwrotny -Wsekwencja-punkt
-Porównaj znak (tylko w C++) -Wstrict-aliasing -Wstrict-przepełnienie = 1 -Wprzełącznik
-Wtrygrafy -Wuninitialized -Wunknown-pragmas -Wunused-funkcja -Wunused-etykieta
-Wunused-wartość -Wunused-zmienna -Wvolatile-register-var

Zwróć uwagę, że niektóre flagi ostrzegawcze nie są implikowane przez -Ściana. Niektórzy ostrzegają przed
konstrukcje, których użytkownicy na ogół nie uważają za wątpliwe, ale które
czasami możesz chcieć sprawdzić; inni ostrzegają przed konstrukcjami, które są
konieczne lub trudne do uniknięcia w niektórych przypadkach i nie ma prostego sposobu na zmodyfikowanie
kod, aby pominąć ostrzeżenie. Niektóre z nich są włączone przez -Wextra ale wielu z nich
muszą być włączone indywidualnie.

-Wextra
Włącza to dodatkowe flagi ostrzegawcze, które nie są włączone przez -Ściana. (Ta opcja używana
być nazywanym -W. Starsza nazwa jest nadal obsługiwana, ale nowsza nazwa jest bardziej
opisowy.)

-Wstrzymany -Wempty-ciało -Wigned-kwalifikatory -Wmissing-field-initializers
-Wmissing-parameter-type (tylko C) - Deklaracja w stylu Wolda (tylko C) -Woverride-init
-Porównaj znak -Wtype-limity -Wuninitialized -Wunused-parametr (tylko z -Wunused or
-Ściana) -Wunused-ale-set-parameter (tylko z -Wunused or -Ściana)

Opcja -Wextra drukuje również komunikaty ostrzegawcze w następujących przypadkach:

* Wskaźnik jest porównywany z liczbą całkowitą zero z "<", "<=", ">" lub ">=".

* (Tylko C++) Zarówno moduł wyliczający, jak i element nie wyliczający pojawiają się w warunkowym
wyrażenie.

* (tylko C++) Niejednoznaczne bazy wirtualne.

* (tylko C++) Subskrypcja tablicy, która została zadeklarowana jako „rejestr”.

* (tylko C++) Pobranie adresu zmiennej, która została zadeklarowana jako „rejestr”.

* (Tylko C++) Klasa bazowa nie jest inicjowana w konstruktorze kopiującym klasy pochodnej.

-Wchar-subscripts
Ostrzegaj, jeśli indeks dolny tablicy ma typ „char”. Jest to częsta przyczyna błędów, ponieważ
programiści często zapominają, że ten typ jest podpisany na niektórych maszynach. To ostrzeżenie jest
włączony przez -Ściana.

-Wkomentarz
Ostrzegaj, gdy rozpoczyna się sekwencja komentarza /* pojawia się w /* komentarz, lub kiedy
Odwrotny ukośnik-nowa linia pojawia się w // komentarz. To ostrzeżenie jest włączone przez -Ściana.

-Wno-pokrycie-niezgodność
Ostrzegaj, jeśli profile opinii nie pasują do siebie podczas korzystania z -f-użycie-profilu opcja. Jeśli
plik źródłowy jest zmieniany między kompilacją z -fprofile-gen i z -f-użycie-profilu,
pliki z informacją o profilu mogą nie pasować do pliku źródłowego, a GCC nie może
skorzystaj z informacji zwrotnej z profilu. Domyślnie to ostrzeżenie jest włączone i jest
traktowane jako błąd. -Wno-pokrycie-niezgodność może być użyty do wyłączenia ostrzeżenia lub
-Wno-error=niezgodność pokrycia może służyć do wyłączenia błędu. Wyłączanie błędu
za to ostrzeżenie może skutkować źle zoptymalizowanym kodem i jest przydatne tylko w przypadku
bardzo drobne zmiany, takie jak poprawki błędów w istniejącej bazie kodu. Całkowicie wyłączam
ostrzeżenie nie jest zalecane.

-Wno-cpp
(tylko C, Objective-C, C++, Objective-C++ i Fortran)

Pomijaj komunikaty ostrzegawcze emitowane przez dyrektywy „#warning”.

-Wpodwójna promocja (tylko C, C++, Objective-C i Objective-C++)
Daj ostrzeżenie, gdy wartość typu „float” jest niejawnie promowana do „double”. Procesory
z 32-bitową jednostką zmiennoprzecinkową „single-precision” implementuje sprzętowo „float”,
ale emuluj "podwójne" w oprogramowaniu. Na takiej maszynie wykonywanie obliczeń przy użyciu
„podwójne” wartości są znacznie droższe ze względu na narzut wymagany w przypadku oprogramowania
współzawodnictwo.

Łatwo jest przypadkowo wykonać obliczenia z „podwójnym”, ponieważ liczba zmiennoprzecinkowa
literały są niejawnie typu „double”. Na przykład w:

obszar pływania (promień pływaka)
{
powrót 3.14159 * promień * promień;
}

kompilator wykonuje całe obliczenia z „podwójnym”, ponieważ liczba zmiennoprzecinkowa
literał to „podwójny”.

-Wformat
-Wformat=n
Sprawdź wywołania "printf" i "scanf" itp., aby upewnić się, że podane argumenty
mają typy odpowiednie do określonego ciągu formatu, a konwersje
określone w ciągu formatu mają sens. Obejmuje to standardowe funkcje oraz
inne określone przez atrybuty formatu, w "printf", "scanf", "strftime" i
rodziny „strfmon” (rozszerzenie X/Open, nie należące do standardu C) (lub inne
konkretne rodziny). Które funkcje są sprawdzane bez atrybutów formatu?
określony zależy od wybranej wersji standardowej, a takie sprawdzenia funkcji
bez określonego atrybutu są wyłączone przez -wolnostojący or -fno-wbudowany.

Formaty są sprawdzane pod kątem funkcji formatowania obsługiwanych przez GNU libc w wersji 2.2.
Obejmują one wszystkie funkcje ISO C90 i C99, a także funkcje z Single Unix
Specyfikacja i niektóre rozszerzenia BSD i GNU. Inne implementacje bibliotek mogą nie
obsługuje wszystkie te funkcje; GCC nie obsługuje ostrzeżeń o funkcjach wykraczających poza
ograniczenia konkretnej biblioteki. Jeśli jednak -Wpedancki jest używany z -Wformat,
wyświetlane są ostrzeżenia o funkcjach formatu, które nie są w wybranej standardowej wersji (ale nie
dla formatów "strfmon", ponieważ nie ma ich w żadnej wersji standardu C).

-Wformat=1
-Wformat
opcja -Wformat odpowiada -Wformat=1, -Wno-format odpowiada
-Wformat=0. Od -Wformat sprawdza również dla kilku argumentów formatu null
funkcje, -Wformat oznacza również -Wnonnull. Niektóre aspekty tego poziomu formatu
sprawdzanie można wyłączyć za pomocą opcji: -Wno-format-contains-nul,
-Wno-format-extra-args, -Wno-format-zero-długość. -Wformat jest włączony przez
-Ściana.

-Wno-format-contains-nul
If -Wformat jest określony, nie ostrzegaj o ciągach formatujących, które zawierają bajty NUL.

-Wno-format-extra-args
If -Wformat jest określony, nie ostrzegaj o nadmiarze argumentów do "printf" lub
funkcja formatu „skanuj”. Standard C określa, że ​​takie argumenty są
ignorowane.

Gdzie nieużywane argumenty leżą między użytymi argumentami, które są określone za pomocą $
specyfikacje numerów operandów, zwykle ostrzeżenia są nadal podawane, ponieważ
implementacja nie mogła wiedzieć, jaki typ przekazać do „va_arg”, aby pominąć nieużywane
argumenty. Jednak w przypadku formatów „skanuj” ta opcja blokuje
ostrzeżenie, jeśli nieużywane argumenty są wskaźnikami, ponieważ Single Unix
Specyfikacja mówi, że takie niewykorzystane argumenty są dozwolone.

-Wno-format-zero-długość
If -Wformat jest określony, nie ostrzegaj o formatach o zerowej długości. Standard C
określa, że ​​dozwolone są formaty o zerowej długości.

-Wformat=2
umożliwiać -Wformat plus dodatkowe kontrole formatu. Obecnie odpowiednik -Wformat
-Wformat-niedosłowny -Wformat-zabezpieczenia -Wformat-y2k.

-Wformat-niedosłowny
If -Wformat jest określony, ostrzega również, jeśli ciąg formatujący nie jest literałem ciągu
i dlatego nie można tego sprawdzić, chyba że funkcja format przyjmuje swoje argumenty formatu jako
"va_list".

-Wformat-zabezpieczenia
If -Wformat jest określony, ostrzega również o użyciu funkcji formatujących, które reprezentują
możliwe problemy z bezpieczeństwem. Obecnie ostrzega przed wezwaniami do „printf” i
Funkcje "scanf", w których ciąg formatujący nie jest literałem ciągu i nie ma
argumenty formatu, jak w "printf (foo);". Może to być luka w zabezpieczeniach, jeśli
ciąg formatu pochodzi z niezaufanych danych wejściowych i zawiera %n. (Obecnie jest to
podzbiór czego? -Wformat-niedosłowny ostrzega, ale w przyszłości ostrzeżenia mogą być
dodaje się -Wformat-zabezpieczenia które nie są zawarte w -Wformat-niedosłowny.)

-Wformat-podpisywanie
If -Wformat jest określony, ostrzega również, jeśli ciąg formatujący wymaga unsigned
argument i argument jest podpisany i na odwrót.

UWAGA: W Ubuntu 8.10 i nowszych wersjach ta opcja jest domyślnie włączona dla C,
C++, ObjC, ObjC++. Aby wyłączyć, użyj -Wno-format-zabezpieczenialub wyłącz wszystkie formaty
ostrzeżenia z -Wformat=0. Aby ostrzeżenia dotyczące bezpieczeństwa formatu były krytyczne, określ
-Werror=format-bezpieczeństwo.

-Wformat-y2k
If -Wformat jest określony, ostrzega również o formatach "strftime", które mogą dawać tylko a
dwucyfrowy rok.

-Wnonnull
Ostrzegaj o przekazywaniu wskaźnika null dla argumentów oznaczonych jako wymagające wartości innej niż null
przez atrybut funkcji „nonnull”.

-Wnonnull jest zawarty w -Ściana dzięki -Wformat. Można go wyłączyć za pomocą -Wno-nonnull
opcja.

-Win-self (tylko C, C++, Objective-C i Objective-C++)
Ostrzegaj o niezainicjowanych zmiennych, które są inicjowane samymi sobą. Zanotuj to
opcja może być używana tylko z -Wuninitialized opcja.

Na przykład GCC ostrzega o niezainicjowaniu „i” tylko w poniższym fragmencie
gdy -Win-self określono:

int f()
{
int i = ja;
powrót i;
}

To ostrzeżenie jest włączone przez -Ściana w C++.

-Wimplicit-int (Tylko C i Cel-C)
Ostrzegaj, gdy deklaracja nie określa typu. To ostrzeżenie jest włączone przez -Ściana.

-Wimplicit-deklaracja funkcji (Tylko C i Cel-C)
Daj ostrzeżenie za każdym razem, gdy funkcja jest używana przed zadeklarowaniem. W trybie C99
(-std=c99 or -std=gnu99), to ostrzeżenie jest domyślnie włączone i jest przekształcane w
błąd przez -pedantyczne-błędy. To ostrzeżenie jest również włączone przez -Ściana.

-Wimplicit (Tylko C i Cel-C)
Taki sam jak -Wimplicit-int dzięki -Wimplicit-deklaracja funkcji. To ostrzeżenie jest włączone
by -Ściana.

-Wigned-kwalifikatory (tylko C i C++)
Ostrzegaj, jeśli zwracany typ funkcji ma kwalifikator typu, taki jak „const”. Dla ISO C
taki kwalifikator typu nie ma żadnego efektu, ponieważ wartość zwracana przez funkcję nie jest
lwartość. W przypadku C++ ostrzeżenie jest emitowane tylko dla typów skalarnych lub „unieważnienia”. ISO C
zabrania kwalifikowanych typów zwrotów „nieważnych” w definicjach funkcji, więc takie typy zwrotów
zawsze otrzymuj ostrzeżenie, nawet bez tej opcji.

To ostrzeżenie jest również włączone przez -Wextra.

-Wmain
Ostrzegaj, jeśli typ „główny” jest podejrzany. "main" powinien być funkcją z zewnętrznym
powiązanie, zwracanie int, przyjmowanie zero argumentów, dwa lub trzy argumenty z
odpowiednie typy. To ostrzeżenie jest domyślnie włączone w C++ i jest włączone przez:
-Ściana or -Wpedancki.

-Wmissing-szelkach
Ostrzegaj, jeśli inicjator agregacji lub unii nie jest w pełni ujęty w nawiasy. W następującym
na przykład inicjator dla „a” nie jest w pełni ujęty w nawias, ale dla „b” jest w pełni
w nawiasach. To ostrzeżenie jest włączone przez -Ściana w C.

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

To ostrzeżenie jest włączone przez -Ściana.

-Wmissing-include-dirs (tylko C, C++, Objective-C i Objective-C++)
Ostrzegaj, jeśli dostarczony przez użytkownika katalog dołączeń nie istnieje.

-Nawiasy
Ostrzegaj, jeśli w pewnych kontekstach pominięto nawiasy, na przykład gdy występuje
przypisanie w kontekście, w którym oczekiwana jest wartość prawdy lub gdy operatory są zagnieżdżone
o których pierwszeństwie ludzie często się mylą.

Ostrzegaj również, jeśli pojawi się porównanie typu „x<=y<=z”; jest to równoważne "(x<=y ? 1 :
0) <= z", co jest inną interpretacją niż zwykłe matematyczne
notacja.

Ostrzegaj również przed konstrukcjami, w których może wystąpić niejasność, co do tego, które stwierdzenie „if” i
„inny” oddział należy. Oto przykład takiego przypadku:

{
Jeśli)
jeśli (b)
bla ();
więcej
bar ();
}

W C/C++ każda gałąź „else” należy do najgłębszej możliwej instrukcji „if”, która:
w tym przykładzie to „jeśli (b)”. Często nie tego oczekiwał programista, ponieważ
zilustrowane w powyższym przykładzie przez wcięcie wybrane przez programistę. Kiedy jest
potencjalnego zamieszania, GCC generuje ostrzeżenie, gdy ta flaga jest określona.
Aby wyeliminować ostrzeżenie, dodaj wyraźne nawiasy klamrowe wokół najbardziej wewnętrznego wyrażenia „if”, więc
nie ma możliwości, aby „inne” mogło należeć do załączonego „jeśli”. Wynikowy kod wygląda
lubię to:

{
Jeśli)
{
jeśli (b)
bla ();
więcej
bar ();
}
}

Ostrzegaj również przed niebezpiecznym użyciem rozszerzenia GNU do "?:" z pominiętym środkowym operandem.
Gdy warunek w operatorze „?”: jest wyrażeniem logicznym, pominiętą wartością jest
zawsze 1. Często programiści oczekują, że będzie to wartość obliczona wewnątrz warunku
zamiast tego wyrażenie.

To ostrzeżenie jest włączone przez -Ściana.

-Wsekwencja-punkt
Ostrzegaj o kodzie, który może mieć niezdefiniowaną semantykę z powodu naruszenia sekwencji
reguły punktowe w standardach C i C++.

Standardy C i C++ definiują kolejność, w jakiej wyrażenia w programie C/C++ są
oceniane pod kątem sekwencja zwrotnica, które reprezentują częściowe uporządkowanie między
wykonanie części programu: tych wykonanych przed punktem sekwencji oraz tych
wykonywane po nim. Występują one po ocenie pełnego wyrażenia (takiego, które
nie jest częścią większego wyrażenia), po obliczeniu pierwszego argumentu a
"&&", "||", "? :" lub "," (przecinek) przed wywołaniem funkcji (ale po
ocena jej argumentów i wyrażenia oznaczającego wywoływaną funkcję), oraz in
w niektórych innych miejscach. Inny niż wyrażony przez reguły punktów sekwencji, kolejność
oceny podwyrażeń wyrażenia nie jest określona. Wszystkie te zasady
opisz tylko porządek częściowy, a nie całkowity, ponieważ na przykład, jeśli dwa
funkcje są wywoływane w obrębie jednego wyrażenia bez punktu sekwencji między nimi,
kolejność wywoływania funkcji nie jest określona. Jednak standardy
komisja orzekła, że ​​powołania funkcji nie nakładają się na siebie.

Nie określono, kiedy między punktami sekwencji modyfikacje wartości
obiekty zaczynają obowiązywać. Programy, których zachowanie zależy od tego, mają niezdefiniowane zachowanie;
standardy C i C++ określają, że „Pomiędzy poprzednim a następnym punktem sekwencji an
obiekt powinien mieć swoją przechowywaną wartość zmodyfikowaną co najwyżej raz przez ocenę
wyrażenie. Ponadto poprzednia wartość powinna być odczytywana tylko w celu określenia wartości do
być przechowywane.”. Jeśli program łamie te zasady, wyniki dotyczące dowolnego konkretnego
wdrożenia są całkowicie nieprzewidywalne.

Przykładami kodu z niezdefiniowanym zachowaniem są „a = a++;”, „a[n] = b[n++]” i „a[i++] =
i;". Niektóre bardziej skomplikowane przypadki nie są diagnozowane przez tę opcję i może to dać
sporadyczny wynik fałszywie dodatni, ale ogólnie okazał się dość skuteczny przy
wykrywanie tego rodzaju problemów w programach.

Norma jest sformułowana w sposób mylący, dlatego toczy się debata na temat precyzji
znaczenie reguł punktów sekwencji w subtelnych przypadkach. Linki do dyskusji na temat
problem, w tym proponowane definicje formalne, można znaleźć na stronie z odczytami GCC,
whttp://gcc.gnu.org/readings.html>.

To ostrzeżenie jest włączone przez -Ściana dla C i C++.

-Wno-return-local-addr
Nie ostrzegaj przed zwróceniem wskaźnika (lub w C++ referencji) do zmiennej, która idzie
poza zakresem po powrocie funkcji.

-Typ zwrotny
Ostrzegaj za każdym razem, gdy funkcja jest zdefiniowana z typem zwracanym, który domyślnie to „int”. Także
ostrzega o wszelkich instrukcjach „return” bez zwracanej wartości w funkcji, której typ zwracany
nie jest „unieważniony” (upadek z końca ciała funkcji jest uważany za powracający
bez wartości) oraz o instrukcji „return” z wyrażeniem w funkcji
którego typ zwrotu to „unieważniony”.

W przypadku C++ funkcja bez zwracanego typu zawsze generuje komunikat diagnostyczny, nawet
gdy -Bez zwrotu-typu jest specyficzne. Jedynymi wyjątkami są „główne” i funkcje
zdefiniowane w nagłówkach systemowych.

To ostrzeżenie jest włączone przez -Ściana.

-Wshift-count-ujemny
Ostrzegaj, jeśli liczba zmian jest ujemna. To ostrzeżenie jest domyślnie włączone.

-Wshift-count-overflow
Ostrzegaj, jeśli liczba przesunięć >= szerokość tekstu. To ostrzeżenie jest domyślnie włączone.

-Wprzełącznik
Ostrzegaj, gdy instrukcja „switch” ma indeks typu wyliczeniowego i nie zawiera „case”
dla co najmniej jednego z wymienionych kodów tego wyliczenia. (Obecność „domyślnego”
label zapobiega temu ostrzeżeniu.) Etykiety "case" poza zakresem wyliczenia również
prowokuj ostrzeżenia, gdy ta opcja jest używana (nawet jeśli istnieje etykieta „domyślna”). Ten
ostrzeżenie jest włączone przez -Ściana.

-Wswitch-default
Ostrzegaj, gdy instrukcja „switch” nie ma wielkości „domyślnej”.

-Wswitch-enum
Ostrzegaj, gdy instrukcja „switch” ma indeks typu wyliczeniowego i nie zawiera „case”
dla co najmniej jednego z wymienionych kodów tego wyliczenia. etykiety „przypadek” na zewnątrz
zakres wyliczenia również wywołuje ostrzeżenia, gdy ta opcja jest używana. Jedyna różnica
pomiędzy -Wprzełącznik a ta opcja jest taka, że ​​ta opcja daje ostrzeżenie o pominiętym
kod wyliczenia, nawet jeśli istnieje etykieta „domyślna”.

-Wswitch-bool
Ostrzegaj, gdy instrukcja „switch” ma indeks typu logicznego. Możliwe jest
pomiń to ostrzeżenie, rzutując wyrażenie sterujące na typ inny niż
"bool". Na przykład:

przełącznik ((int) (a == 4))
{
...
}

To ostrzeżenie jest domyślnie włączone w programach C i C++.

-Wsync-nand (tylko C i C++)
Ostrzegaj, gdy wbudowane funkcje „__sync_fetch_and_nand” i „__sync_nand_and_fetch” są
używany. Funkcje te zmieniły semantykę w GCC 4.4.

-Wtrygrafy
Ostrzegaj, jeśli napotkasz trygrafy, które mogą zmienić znaczenie programu
(trygrafy w komentarzach nie są ostrzegane). To ostrzeżenie jest włączone przez -Ściana.

-Wunused-ale-set-parameter
Ostrzegaj za każdym razem, gdy parametr funkcji jest przypisany, ale poza tym nie jest używany (poza
swoją deklarację).

Aby pominąć to ostrzeżenie, użyj atrybutu „unused”.

To ostrzeżenie jest również włączone przez -Wunused Wraz z -Wextra.

-Wunused-ale-set-variable
Ostrzegaj za każdym razem, gdy przypisana jest zmienna lokalna, ale poza tym nie jest używana (poza jej
deklaracja). To ostrzeżenie jest włączone przez -Ściana.

Aby pominąć to ostrzeżenie, użyj atrybutu „unused”.

To ostrzeżenie jest również włączone przez -Wunused, który jest włączony przez -Ściana.

-Wunused-funkcja
Ostrzegaj za każdym razem, gdy funkcja statyczna jest zadeklarowana, ale nie została zdefiniowana, lub jest statyczna niewbudowana
funkcja nie jest używana. To ostrzeżenie jest włączone przez -Ściana.

-Wunused-etykieta
Ostrzegaj, gdy etykieta jest zadeklarowana, ale nie jest używana. To ostrzeżenie jest włączone przez -Ściana.

Aby pominąć to ostrzeżenie, użyj atrybutu „unused”.

-Wunused-local-typedefs (tylko C, Objective-C, C++ i Objective-C++)
Ostrzegaj, gdy typedef zdefiniowany lokalnie w funkcji nie jest używany. To ostrzeżenie jest
włączony przez -Ściana.

-Wunused-parametr
Ostrzegaj, gdy parametr funkcji nie jest używany poza deklaracją.

Aby pominąć to ostrzeżenie, użyj atrybutu „unused”.

-Wno-niewykorzystany-wynik
Nie ostrzegaj, jeśli robi to wywołujący funkcję oznaczoną atrybutem „warn_unused_result”
nie używaj jego zwracanej wartości. Wartość domyślna to -Niewykorzystany-wynik.

-Wunused-zmienna
Ostrzegaj, gdy zmienna lokalna lub niestała zmienna statyczna nie jest używana oprócz
swoją deklarację. To ostrzeżenie jest włączone przez -Ściana.

Aby pominąć to ostrzeżenie, użyj atrybutu „unused”.

-Wunused-wartość
Ostrzegaj, gdy instrukcja oblicza wynik, który nie jest jawnie używany. Aby stłumić
to ostrzeżenie rzuciło nieużywane wyrażenie na „unieważnienie”. Obejmuje to wyrażenie-
oświadczenie lub lewa strona wyrażenia przecinkowego, które nie zawiera żadnych skutków ubocznych.
Na przykład wyrażenie takie jak „x[i,j]” powoduje ostrzeżenie, podczas gdy „x[(void)i,j]”
nie.

To ostrzeżenie jest włączone przez -Ściana.

-Wunused
Wszystko powyższe -Wunused połączone opcje.

Aby otrzymać ostrzeżenie o nieużywanym parametrze funkcji, musisz podać:
-Wextra -Wunused (zauważ, że -Ściana sugeruje -Wunused) lub osobno określić
-Wunused-parametr.

-Wuninitialized
Ostrzegaj, jeśli zmienna automatyczna jest używana bez uprzedniego zainicjowania lub jeśli zmienna
może zostać zaatakowany przez wywołanie "setjmp". W C++ ostrzegaj, jeśli odwołanie niestatyczne lub nie-
statyczny element członkowski „const” pojawia się w klasie bez konstruktorów.

Jeśli chcesz ostrzec o kodzie, który używa niezainicjowanej wartości zmiennej in
własny inicjator, użyj -Win-self opcja.

Ostrzeżenia te pojawiają się w przypadku pojedynczych niezainicjowanych lub przeciążonych elementów konstrukcji,
zmienne unii lub tablicowe, a także zmienne, które są niezainicjowane lub zaatakowane
jako całość. Nie występują dla zmiennych lub elementów zadeklarowanych jako „ulotne”. Ponieważ
te ostrzeżenia zależą od optymalizacji, dokładnych zmiennych lub elementów, dla których istnieją
Liczba ostrzeżeń zależy od precyzyjnych opcji optymalizacji i używanej wersji GCC.

Zwróć uwagę, że może nie być ostrzeżenia o zmiennej używanej tylko do obliczenia a
wartość, która sama nigdy nie jest używana, ponieważ takie obliczenia mogą zostać usunięte przez przepływ danych
analizę przed wydrukowaniem ostrzeżeń.

-Wmoże-niezainicjowany
Dla zmiennej automatycznej, jeśli istnieje ścieżka od wpisu funkcji do użycia
zmienna, która jest inicjowana, ale istnieją inne ścieżki, dla których
zmienna nie jest inicjowana, kompilator wyświetla ostrzeżenie, jeśli nie może udowodnić
niezainicjowane ścieżki nie są wykonywane w czasie wykonywania. Te ostrzeżenia są opcjonalne
ponieważ GCC nie jest wystarczająco sprytny, aby zobaczyć wszystkie powody, dla których kod może być poprawny
pomimo pozornego błędu. Oto jeden przykład, jak to się może stać:

{
int x;
przełącznik (y)
{
przypadek 1: x = 1;
break;
przypadek 2: x = 4;
break;
przypadek 3: x = 5;
}
foo (x);
}

Jeśli wartość „y” wynosi zawsze 1, 2 lub 3, to „x” jest zawsze inicjowane, ale GCC
nie wie o tym. Aby pominąć ostrzeżenie, musisz podać domyślny przypadek z
zapewniać(0) lub podobny kod.

Ta opcja ostrzega również, gdy nieulotna zmienna automatyczna może zostać zmieniona przez
zadzwoń do "longjmp". Te ostrzeżenia również są możliwe tylko przy optymalizacji
kompilacja.

Kompilator widzi tylko wywołania "setjmp". Nie może wiedzieć, gdzie będzie „longjmp”
nazywa; w rzeczywistości program obsługi sygnału może wywołać go w dowolnym miejscu kodu. Jak
wynik, możesz otrzymać ostrzeżenie, nawet jeśli w rzeczywistości nie ma problemu, ponieważ "longjmp"
w rzeczywistości nie można wezwać w miejscu, które spowodowałoby problem.

Niektórych fałszywych ostrzeżeń można uniknąć, jeśli zadeklarujesz wszystkie używane funkcje
nigdy nie wracaj jako „noreturn”.

To ostrzeżenie jest włączone przez -Ściana or -Wextra.

-Wunknown-pragmas
Ostrzegaj w przypadku napotkania dyrektywy „#pragma”, która nie jest zrozumiała dla GCC. Jeśli to
używana jest opcja wiersza poleceń, ostrzeżenia są nawet wystawiane dla nieznanych pragm w systemie
pliki nagłówkowe. Tak nie jest, jeśli ostrzeżenia są włączone tylko przez -Ściana
opcja wiersza poleceń.

-Wno-pragmy
Nie ostrzegaj o nadużyciach pragm, takich jak nieprawidłowe parametry, nieprawidłowa składnia lub
konflikty między pragmatami. Zobacz też -Wunknown-pragmas.

-Wstrict-aliasing
Ta opcja jest aktywna tylko wtedy, gdy -fstrict-aliasing jest aktywny. Ostrzega o kodzie, który
może złamać surowe reguły aliasów, których używa kompilator do optymalizacji.
Ostrzeżenie nie obejmuje wszystkich przypadków, ale próbuje wyłapać te bardziej powszechne
pułapki. Jest zawarty w -Ściana. Jest odpowiednikiem -Wstrict-aliasing=3

-Wstrict-aliasing=n
Ta opcja jest aktywna tylko wtedy, gdy -fstrict-aliasing jest aktywny. Ostrzega o kodzie, który
może złamać surowe reguły aliasów, których używa kompilator do optymalizacji.
Wyższe poziomy odpowiadają wyższej dokładności (mniej fałszywych trafień). Wyższe poziomy
również odpowiadają większemu wysiłkowi, podobnie do sposobu -O działa. -Wstrict-aliasing is
równoważny -Wstrict-aliasing=3.

Poziom 1: Najbardziej agresywny, szybki, najmniej dokładny. Prawdopodobnie przydatne na wyższych poziomach
nie ostrzegaj, ale -fstrict-aliasing nadal łamie kod, ponieważ ma bardzo niewiele fałszywych
negatywy. Ma jednak wiele fałszywych alarmów. Ostrzega o wszystkich konwersjach wskaźnika
między prawdopodobnie niezgodnymi typami, nawet jeśli nigdy nie zostały wyłuskane. Działa z przodu
tylko koniec.

Poziom 2: Agresywny, szybki, niezbyt precyzyjny. Może nadal mieć wiele fałszywych alarmów (nie
aż do poziomu 1) i kilka wyników fałszywie negatywnych (ale prawdopodobnie więcej niż na poziomie 1).
W przeciwieństwie do poziomu 1, ostrzega tylko o zajęciu adresu. Ostrzega o niekompletnych typach.
Działa tylko z przodu.

Poziom 3 (domyślny dla -Wstrict-aliasing): Powinien mieć bardzo mało fałszywych alarmów i kilka
fałszywie negatywy. Nieco wolniej niż poziomy 1 lub 2, gdy włączona jest optymalizacja.
Dba o typowy wzór kalambur + dereferencja na froncie:
"*(int*)&jakaś_zmienna". Jeśli optymalizacja jest włączona, działa również na zapleczu, gdzie
zajmuje się przypadkami wielu instrukcji, używając informacji o punktach do wrażliwych na przepływ.
Ostrzega tylko wtedy, gdy przekonwertowany wskaźnik jest wyłuskiwany. Nie ostrzega o niekompletności
rodzaje.

-Wstrict-przepełnienie
-Wstrict-przepełnienie=n
Ta opcja jest aktywna tylko wtedy, gdy -przepełnienie-przepełnienie jest aktywny. Ostrzega o przypadkach
gdzie kompilator optymalizuje w oparciu o założenie, że podpisane przepełnienie nie
zdarzać się. Zauważ, że nie ostrzega o wszystkich przypadkach, w których kod może się przepełnić: it
ostrzega tylko o przypadkach, w których kompilator implementuje pewną optymalizację. Więc to
ostrzeżenie zależy od poziomu optymalizacji.

Optymalizacja, która zakłada, że ​​nie występuje przepełnienie podpisu, jest całkowicie bezpieczna, jeśli:
wartości zaangażowanych zmiennych są takie, że przepełnienie nigdy nie powoduje
zdarzać się. Dlatego to ostrzeżenie może łatwo dać fałszywy alarm: ostrzeżenie o kodzie
to właściwie nie jest problem. Aby pomóc skoncentrować się na ważnych kwestiach, kilka ostrzeżeń
poziomy są zdefiniowane. W przypadku użycia niezdefiniowanego przepełnienia podpisu nie są wyświetlane żadne ostrzeżenia
przy szacowaniu, ile iteracji wymaga pętla, w szczególności przy określaniu
czy pętla w ogóle zostanie wykonana.

-Wstrict-przepełnienie = 1
Ostrzegaj o przypadkach, które są zarówno wątpliwe, jak i łatwe do uniknięcia. Na przykład z
-przepełnienie-przepełnienie, kompilator upraszcza "x + 1 > x" do 1. Ten poziom
-Wstrict-przepełnienie jest włączony przez -Ściana; wyższe poziomy nie są i muszą być
wyraźnie zażądane.

-Wstrict-przepełnienie = 2
Ostrzegaj również o innych przypadkach, w których porównanie jest uproszczone do stałej. Do
przykład: "abs (x) >= 0". Można to uprościć tylko wtedy, gdy -przepełnienie-przepełnienie jest w
efekt, ponieważ "abs (INT_MIN)" przelewa się do "INT_MIN", które jest mniejsze od zera.
-Wstrict-przepełnienie (bez poziomu) to to samo co -Wstrict-przepełnienie = 2.

-Wstrict-przepełnienie = 3
Ostrzegaj również o innych przypadkach, w których porównanie jest uproszczone. Na przykład: „x + 1
> 1” jest uproszczone do „x > 0”.

-Wstrict-przepełnienie = 4
Ostrzegaj również o innych uproszczeniach nie objętych powyższymi przypadkami. Do
przykład: „(x * 10) / 5” jest uproszczone do „x * 2”.

-Wstrict-przepełnienie = 5
Ostrzegaj również o przypadkach, w których kompilator zmniejsza wielkość stałej
zaangażowany w porównanie. Na przykład: „x + 2 > y” jest uproszczone do „x + 1 >= y”.
Jest to zgłaszane tylko na najwyższym poziomie ostrzegawczym, ponieważ to uproszczenie
dotyczy wielu porównań, więc ten poziom ostrzeżenia daje bardzo dużą liczbę
fałszywe alarmy.

-Wsugeruj atrybut=[czysty|const|bez powrotu|format]
Ostrzegaj o przypadkach, w których dodanie atrybutu może być korzystne. Atrybuty obecnie
obsługiwane są wymienione poniżej.

-Wsuggest-attribute=czysty
-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn
Ostrzegaj o funkcjach, które mogą być kandydatami do atrybutów „pure”, „const” lub
"bez powrotu". Kompilator ostrzega tylko o funkcjach widocznych w innych kompilacjach
jednostki lub (w przypadku „czysty” i „const”), jeśli nie można udowodnić, że funkcja
wraca normalnie. Funkcja zwraca się normalnie, jeśli nie zawiera nieskończoności
zapętlić lub powrócić nienormalnie, rzucając, wołając „przerwij” lub zalewając. Ta analiza
wymaga opcji -fipa-pure-const, który jest domyślnie włączony w -O i wyżej.
Wyższe poziomy optymalizacji poprawiają dokładność analizy.

-Wsuggest-attribute=format
-Wmissing-format-attribute
Ostrzegaj o wskaźnikach funkcji, które mogą być kandydatami do atrybutów „format”.
Zauważ, że są to tylko możliwi kandydaci, a nie absolutni. GCC zgaduje, że
wskaźniki funkcji z atrybutami „format”, które są używane w przypisaniu,
instrukcje inicjalizacji, przekazywania parametrów lub zwracania powinny mieć odpowiedni
Atrybut „format” w typie wynikowym. Czyli lewa strona
przypisanie lub inicjalizacja, typ zmiennej parametru lub zwrot
typ funkcji zawierającej odpowiednio powinien mieć również atrybut „format”
aby uniknąć ostrzeżenia.

GCC ostrzega również o definicjach funkcji, które mogą być kandydatami do "formatu"
atrybuty. Znowu są to tylko możliwi kandydaci. GCC zgaduje, że „format”
atrybuty mogą być odpowiednie dla dowolnej funkcji, która wywołuje funkcję taką jak
"vprintf" lub "vscanf", ale nie zawsze tak jest i niektóre funkcje
dla których atrybuty „format” są odpowiednie, mogą nie zostać wykryte.

-Wsugeruj-ostateczne typy
Ostrzegaj o typach z wirtualnymi metodami, w których jakość kodu uległaby poprawie, gdyby typ
zostały zadeklarowane ze specyfikatorem C++11 "final" lub, jeśli to możliwe, zadeklarowane w an
anonimowa przestrzeń nazw. Pozwala to GCC na bardziej agresywną dewirtualizację polimorfizmu
wzywa. To ostrzeżenie jest skuteczniejsze w przypadku optymalizacji czasu linku, gdzie
informacje o wykresie hierarchii klas są bardziej kompletne.

-Zasugeruj-końcowe-metody
Ostrzegaj o metodach wirtualnych, w których jakość kodu uległaby poprawie, gdyby metoda była
zadeklarowany ze specyfikatorem C++11 "final" lub, jeśli to możliwe, jego typ został zadeklarowany w
anonimowa przestrzeń nazw lub ze specyfikatorem „final”. To ostrzeżenie jest bardziej skuteczne
z optymalizacją czasu łącza, gdzie znajduje się informacja o grafie hierarchii klas
Bardziej kompletny. Zaleca się, aby najpierw rozważyć sugestie
-Wsugeruj-ostateczne typy a następnie przebuduj z nowymi adnotacjami.

-Zasugeruj nadpisanie
Ostrzegaj o zastępowaniu funkcji wirtualnych, które nie są oznaczone słowem kluczowym override.

-Warray-bounds
-Warray-bounds=n
Ta opcja jest aktywna tylko wtedy, gdy -ftree-vrp jest aktywny (domyślnie dla -O2 i powyżej). Ono
ostrzega o indeksach do tablic, które zawsze są poza zakresem. To ostrzeżenie jest
włączony przez -Ściana.

-Granice warray = 1
To jest poziom ostrzegawczy -Warray-bounds i jest włączony przez -Ściana; wyższe poziomy
nie są i muszą być wyraźnie wymagane.

-Granice warray = 2
Ten poziom ostrzeżenia ostrzega również o dostępie poza granicami dla tablic na końcu
struktury i tablic dostępnych za pomocą wskaźników. Ten poziom ostrzeżenia może dać
większa liczba fałszywych alarmów i jest domyślnie dezaktywowana.

-Wbool-porównaj
Ostrzegaj o wyrażeniu logicznym w porównaniu z wartością całkowitą inną od
"prawda fałsz". Na przykład poniższe porównanie jest zawsze fałszywe:

int n = 5;
...
jeśli ((n > 1) == 2) { ... }

To ostrzeżenie jest włączone przez -Ściana.

-Wno-odrzucone-kwalifikatory (Tylko C i Cel-C)
Nie ostrzegaj, jeśli kwalifikatory typu na wskaźnikach są odrzucane. Zazwyczaj
kompilator ostrzega, jeśli zmienna „const char *” jest przekazywana do funkcji, która przyjmuje „char
*" parametr. Ta opcja może służyć do pominięcia takiego ostrzeżenia.

-Wno-discarded-array-qualifiers (Tylko C i Cel-C)
Nie ostrzegaj, jeśli kwalifikatory typu w tablicach, które są celami wskaźników, są
odrzucone. Zazwyczaj kompilator ostrzega, jeśli zmienna „const int (*)[]” jest przekazywana do
funkcja, która przyjmuje parametr „int (*)[]”. Ta opcja może być użyta do stłumienia
takie ostrzeżenie.

-Wno-niezgodne-typy-wskazników (Tylko C i Cel-C)
Nie ostrzegaj, gdy następuje konwersja między wskaźnikami, które mają niezgodne typy.
To ostrzeżenie dotyczy przypadków nieobjętych -Wno-znak-wskaźnika, który ostrzega o wskaźniku
przekazywanie lub przypisywanie argumentów z różnymi znakami.

-Wno-w-konwersja (Tylko C i Cel-C)
Nie ostrzegaj o niezgodnych konwersjach liczby całkowitej na wskaźnik i wskaźnika na liczbę całkowitą.
To ostrzeżenie dotyczy niejawnych konwersji; dla jawnych konwersji ostrzeżenia
-Wno-int-to-point-cast dzięki -Wno-wskaźnik-do-oddania może być użyty.

-Wno-div-by-zero
Nie ostrzegaj o dzieleniu liczb całkowitych w czasie kompilacji przez zero. Dzielenie zmiennoprzecinkowe przez
zero nie jest ostrzegane, ponieważ może to być legalny sposób na uzyskanie nieskończoności i
NaN.

-Wsystem-nagłówki
Drukuj komunikaty ostrzegawcze dla konstrukcji znalezionych w systemowych plikach nagłówkowych. Ostrzeżenia od
nagłówki systemowe są zwykle pomijane, przy założeniu, że zwykle nie
wskazują na rzeczywiste problemy i tylko utrudniają odczytanie danych wyjściowych kompilatora. Za pomocą
ta opcja wiersza poleceń mówi GCC, aby emitował ostrzeżenia z nagłówków systemowych, tak jakby one
wystąpiło w kodzie użytkownika. Należy jednak pamiętać, że używając -Ściana w połączeniu z tą opcją
robi nie ostrzegaj o nieznanych pragmach w nagłówkach systemowych --- w tym celu -Wunknown-pragmas
należy również użyć.

-trampoliny
Ostrzegaj o trampolinach generowanych dla wskaźników do funkcji zagnieżdżonych. Trampolina to…
mały fragment danych lub kodu, który jest tworzony w czasie wykonywania na stosie, gdy adres
zagnieżdżonej funkcji jest pobierana i jest używana do wywołania zagnieżdżonej funkcji pośrednio.
W przypadku niektórych celów składa się wyłącznie z danych, a zatem nie wymaga specjalnego traktowania.
Ale w przypadku większości celów składa się z kodu, a zatem wymaga utworzenia stosu
wykonywalny, aby program działał poprawnie.

-Wfloat-równe
Ostrzegaj, jeśli w porównaniach równości są używane wartości zmiennoprzecinkowe.

Ideą tego jest to, że czasami wygodnie (dla programisty) jest:
Rozważ wartości zmiennoprzecinkowe jako przybliżenia do nieskończenie dokładnych liczb rzeczywistych.
Jeśli to robisz, musisz obliczyć (poprzez analizę kodu lub w niektórych
w inny sposób) maksymalny lub prawdopodobny maksymalny błąd, który wprowadza obliczenia, oraz
pozwalaj na to podczas wykonywania porównań (i podczas tworzenia danych wyjściowych, ale to jest
inny problem). W szczególności, zamiast testować równość, powinieneś sprawdzić
aby zobaczyć, czy te dwie wartości mają nakładające się zakresy; i odbywa się to za pomocą
operatory relacyjne, więc porównania równości są prawdopodobnie błędne.

-Wtradycyjne (Tylko C i Cel-C)
Ostrzegaj o pewnych konstrukcjach, które zachowują się inaczej w tradycyjnym i ISO C. Również
ostrzegaj przed konstrukcjami ISO C, które nie mają tradycyjnego odpowiednika w C i/lub problematyczne
konstrukcje, których należy unikać.

* Parametry makr, które pojawiają się w literałach ciągu w treści makra. w
tradycyjne zastępowanie makr w C odbywa się w literałach napisowych, ale w ISO C
to nie.

* W tradycyjnym C niektóre dyrektywy preprocesora nie istniały. Tradycyjny
preprocesory uważały linię za dyrektywę tylko wtedy, gdy # pojawił się w kolumnie
1 na linii. W związku z tym -Wtradycyjne ostrzega przed dyrektywami, które tradycyjne C
rozumie, ale ignoruje, ponieważ # nie pojawia się jako pierwszy znak
linia. Sugeruje również ukrycie dyrektyw, takich jak „#pragma”, których nie rozumie
tradycyjne C przez wcięcie ich. Niektóre tradycyjne implementacje nie
rozpoznać „#elif”, więc ta opcja sugeruje całkowite uniknięcie tego.

* Makro podobne do funkcji, które pojawia się bez argumentów.

* Jednoargumentowy operator plus.

* U stały przyrostek liczby całkowitej lub F or L stałe przyrostki zmiennoprzecinkowe.
(Tradycyjny C obsługuje L przyrostek na stałych całkowitych.) Uwaga, te
przyrostki pojawiają się w makrach zdefiniowanych w nagłówkach systemowych większości nowoczesnych systemów,
np _MIN/_MAX makra w " ". Użycie tych makr w kodzie użytkownika może
zwykle prowadzą do fałszywych ostrzeżeń, jednak zintegrowany preprocesor GCC ma:
wystarczający kontekst, aby uniknąć ostrzeżenia w takich przypadkach.

* Funkcja zadeklarowana jako zewnętrzna w jednym bloku, a następnie używana po zakończeniu
blok.

* Instrukcja „switch” ma operand typu „long”.

* Deklaracja funkcji nie „statycznej” następuje po „statycznej”. Ta konstrukcja nie jest
akceptowane przez niektóre tradycyjne kompilatory C.

* Typ ISO stałej liczby całkowitej ma inną szerokość lub znak rozpoznawczy niż jej
typ tradycyjny. To ostrzeżenie jest wyświetlane tylko wtedy, gdy podstawą stałej jest dziesięć.
Tj. wartości szesnastkowe lub ósemkowe, które zazwyczaj reprezentują wzorce bitowe, nie są
ostrzegł.

* Wykryto użycie konkatenacji ciągów ISO.

* Inicjalizacja automatycznych agregatów.

* Konflikt identyfikatora z etykietami. W tradycyjnym C brakuje oddzielnej przestrzeni nazw dla
etykiety.

* Inicjalizacja związków. Jeśli inicjator ma wartość zero, ostrzeżenie jest pomijane.
Odbywa się to przy założeniu, że w kodzie użytkownika pojawia się inicjator zerowy
uwarunkowane np. „__STDC__”, aby uniknąć brakujących ostrzeżeń inicjatora i polega na
domyślna inicjalizacja na zero w tradycyjnym przypadku C.

* Konwersje według prototypów między wartościami stałymi/zmiennoprzecinkowymi i odwrotnie. ten
brak tych prototypów przy kompilacji z tradycyjnym C powoduje poważne
problemy. Jest to podzbiór możliwych ostrzeżeń dotyczących konwersji; za cały zestaw
posługiwać się -Konwersja tradycyjna.

* Wykorzystanie definicji funkcji w stylu ISO C. To ostrzeżenie celowo jest nie wydane
dla deklaracji prototypowych lub funkcji wariadycznych, ponieważ te cechy ISO C
pojawiają się w Twoim kodzie podczas korzystania z tradycyjnych makr zgodności C libiberty,
„PARAMETRY” i „VPARAMS”. To ostrzeżenie jest również pomijane w przypadku funkcji zagnieżdżonych
ponieważ ta funkcja jest już rozszerzeniem GCC i dlatego nie ma znaczenia dla
tradycyjna kompatybilność z C.

-Konwersja tradycyjna (Tylko C i Cel-C)
Ostrzegaj, jeśli prototyp powoduje konwersję typu, która różni się od tego, co by się stało
do tego samego argumentu w przypadku braku prototypu. Obejmuje to konwersje
punkt stały na zmiennoprzecinkowy i odwrotnie oraz konwersje zmieniające szerokość lub
sygnatura argumentu stałoprzecinkowego, z wyjątkiem sytuacji, gdy jest taka sama jak domyślna promocja.

-Wdeklaracja-po-wyciągu (Tylko C i Cel-C)
Ostrzegaj, gdy deklaracja zostanie znaleziona po instrukcji w bloku. Ten konstrukt, znany
z C++, został wprowadzony wraz z ISO C99 i jest domyślnie dozwolony w GCC. Nie jest
obsługiwane przez ISO C90.

-Wundef
Ostrzegaj, jeśli niezdefiniowany identyfikator jest oceniany w dyrektywie „#if”.

-Wno-endif-etykiety
Nie ostrzegaj, gdy po „#else” lub „#endif” następuje tekst.

-Cień
Ostrzegaj, gdy zmienna lokalna lub deklaracja typu przesłania inną zmienną,
parametr, typ, element klasy (w C++) lub zmienna instancji (w Objective-C) lub
gdy wbudowana funkcja jest zacieniona. Zauważ, że w C++ kompilator ostrzega, jeśli a
zmienna lokalna przesłania jawny typedef, ale nie, jeśli przesłania strukturę/klasę/wyliczenie.

-Wno-cień-ivar (Tylko cel-C)
Nie ostrzegaj, gdy zmienna lokalna zasłania zmienną instancji w Objective-C
Metoda.

-Większy-niż=len
Ostrzegaj, gdy obiekt większy niż len bajty są zdefiniowane.

-Wframe-większy-niż=len
Ostrzegaj, jeśli rozmiar ramki funkcji jest większy niż len bajty. Obliczenia wykonane
określenie rozmiaru ramki stosu jest przybliżone, a nie konserwatywne. Aktualny
wymagania mogą być nieco większe niż len nawet jeśli nie otrzymasz ostrzeżenia. w
dodatkowo, dowolna przestrzeń przydzielona przez „alloca”, tablice o zmiennej długości lub powiązane
konstrukty nie są uwzględniane przez kompilator podczas określania, czy wydać a
ostrzeżenie.

-Wno-free-non-heap-object
Nie ostrzegaj przy próbie uwolnienia obiektu, który nie został przydzielony na stercie.

-Wstos-użycie=len
Ostrzegaj, jeśli użycie funkcji na stosie może być większe niż len bajty. Obliczenie
wykonane w celu określenia użycia stosu jest konserwatywne. Dowolna przestrzeń przydzielona za pomocą „allocy”,
kompilator dołącza tablice o zmiennej długości lub pokrewne konstrukcje, gdy
ustalenie, czy wydać ostrzeżenie.

Wiadomość jest zgodna z wyjściem -fstack-użycie.

* Jeśli użycie stosu jest w pełni statyczne, ale przekracza określoną wartość, to:

ostrzeżenie: użycie stosu wynosi 1120 bajtów

* Jeśli użycie stosu jest (częściowo) dynamiczne, ale ograniczone, to:

ostrzeżenie: użycie stosu może wynosić 1648 bajtów

* Jeśli użycie stosu jest (częściowo) dynamiczne i nie jest ograniczone, to:

ostrzeżenie: użycie stosu może być nieograniczone

- Optymalizacje pętli Wunsafe
Ostrzegaj, jeśli pętla nie może zostać zoptymalizowana, ponieważ kompilator nie może zakładać niczego na
granice indeksów pętli. Z -optymalizacje funsafe-loop ostrzegaj, jeśli kompilator
czyni takie założenia.

-Wno-pedantyczny-ms-format (tylko cele MinGW)
W połączeniu z -Wformat dzięki -pedantyczny bez rozszerzeń GNU, to
opcja wyłącza ostrzeżenia o specyfikatorach szerokości formatu "printf" / "scanf" innych niż ISO
"I32", "I64" i "I" używane w podsystemach Windows, które zależą od środowiska wykonawczego MS.

-Wpointer-arith
Ostrzegaj o wszystkim, co zależy od „rozmiaru” typu funkcji lub „unieważnienia”. GNU C
przypisuje tym typom rozmiar 1, dla wygody w obliczeniach z "unieważnionym *"
wskaźniki i wskaźniki do funkcji. W C++ ostrzegaj również, gdy wykonujesz operację arytmetyczną
obejmuje „NULL”. To ostrzeżenie jest również włączone przez -Wpedancki.

-Wtype-limity
Ostrzegaj, jeśli porównanie jest zawsze prawdziwe lub zawsze fałszywe ze względu na ograniczony zakres
typ danych, ale nie ostrzegaj o wyrażeniach stałych. Na przykład ostrzegaj, jeśli niepodpisany
zmienna jest porównywana z zerem z "<" lub ">=". To ostrzeżenie jest również włączone przez
-Wextra.

-Wbad-funkcja-obsada (Tylko C i Cel-C)
Ostrzegaj, gdy wywołanie funkcji jest rzutowane na niezgodny typ. Na przykład ostrzegaj, jeśli połączenie
do funkcji zwracającej typ całkowity jest rzutowany na typ wskaźnika.

-Wc90-c99-kompatybilny (Tylko C i Cel-C)
Ostrzegaj o funkcjach nieobecnych w ISO C90, ale obecnych w ISO C99. Na przykład,
ostrzega przed użyciem tablic o zmiennej długości, typu „long long”, typu „bool”, złożonego
literały, wyznaczone inicjatory i tak dalej. Ta opcja jest niezależna od
tryb standardów. Ostrzeżenia są wyłączone w wyrażeniu następującym po „__rozszerzeniu__”.

-Wc99-c11-kompatybilny (Tylko C i Cel-C)
Ostrzegaj o funkcjach nieobecnych w ISO C99, ale obecnych w ISO C11. Na przykład,
ostrzega przed użyciem anonimowych struktur i unii, kwalifikator typu "_Atomic",
specyfikator klasy pamięci „_Thread_local”, specyfikator „_Alignas”, operator „Alignof”,
Słowo kluczowe „_Generic” i tak dalej. Ta opcja jest niezależna od trybu standardów.
Ostrzeżenia są wyłączone w wyrażeniu następującym po „__rozszerzeniu__”.

-Wc++-kompatybilność (Tylko C i Cel-C)
Ostrzegaj o konstrukcjach ISO C, które są poza wspólnym podzbiorem ISO C i ISO
C++, np. żądanie niejawnej konwersji z „void *” na wskaźnik na inny niż „void”
rodzaj.

-Wc++11-kompatybilność (Tylko C++ i Objective-C++)
Ostrzegaj o konstrukcjach C++, których znaczenie różni się między ISO C++ 1998 a ISO C++ 2011,
np. identyfikatory w ISO C++ 1998, które są słowami kluczowymi w ISO C++ 2011. To ostrzeżenie
włącza się -Zwężenie się i jest włączony przez -Ściana.

-Wc++14-kompatybilność (Tylko C++ i Objective-C++)
Ostrzegaj o konstrukcjach C++, których znaczenie różni się w ISO C++ 2011 i ISO C++ 2014.
To ostrzeżenie jest włączone przez -Ściana.

-Wcast-qual
Ostrzegaj za każdym razem, gdy rzutowany jest wskaźnik, aby usunąć kwalifikator typu z typu docelowego.
Ostrzegaj na przykład, jeśli „const char *” jest rzutowany na zwykły „char *”.

Ostrzegaj również podczas wykonywania rzutowania, które wprowadza kwalifikator typu w niebezpieczny sposób. Do
na przykład rzutowanie "char **" na "const char **" jest niebezpieczne, jak w tym przykładzie:

/* p jest wartością znaku **. */
const char **q = (const char **) p;
/* Przypisanie łańcucha tylko do odczytu do const char * jest OK. */
*q = "ciąg";
/* Teraz wskaźnik char** wskazuje na pamięć tylko do odczytu. */
**p = „b”;

-Wcast-wyrównaj
Ostrzegaj za każdym razem, gdy wskaźnik zostanie rzucony w taki sposób, że wymagane wyrównanie celu jest
zwiększony. Na przykład ostrzegaj, jeśli znak „znak *” jest rzutowany na „int *” na komputerach, na których
liczby całkowite mogą być dostępne tylko w granicach dwu- lub czterobajtowych.

-Write-strings
Podczas kompilacji C nadaj stałym łańcuchowym typ „const char[długość]" więc kopiowanie
adres jednego do wskaźnika innego niż „const” „char *” generuje ostrzeżenie. Te
ostrzeżenia pomagają znaleźć w czasie kompilacji kod, który może próbować zapisać w ciągu znaków
stała, ale tylko wtedy, gdy bardzo ostrożnie używałeś "const" w deklaracjach
i prototypy. W przeciwnym razie jest to tylko uciążliwość. Dlatego nie zrobiliśmy -Ściana
zażądać tych ostrzeżeń.

Podczas kompilowania C++ ostrzegaj o przestarzałej konwersji literałów łańcuchowych na „char
*". To ostrzeżenie jest domyślnie włączone w programach C++.

-Wstrzymany
Ostrzegaj o zmiennych, które mogą zostać zmienione przez „longjmp” lub „vfork”. To ostrzeżenie jest
również włączone przez -Wextra.

-W warunkowo obsługiwany (Tylko C++ i Objective-C++)
Ostrzegaj o konstrukcjach warunkowo obsługiwanych (C++11 [intro.defs]).

-Wkonwersja
Ostrzegaj o niejawnych konwersjach, które mogą zmienić wartość. Obejmuje to konwersje
między liczbą rzeczywistą a liczbą całkowitą, jak „abs (x)”, gdy „x” jest „podwójne”; konwersje między
ze znakiem i bez znaku, jak „unsigned ui = -1”; i konwersje na mniejsze typy, takie jak
„sqrtf (M_PI)”. Nie ostrzegaj przed wyraźnymi rzutami, takimi jak „abs ((int) x)” i „ui =
(unsigned) -1”, lub jeśli wartość nie została zmieniona przez konwersję, jak w „abs (2.0)”.
Ostrzeżenia dotyczące konwersji między liczbami całkowitymi ze znakiem i bez znaku można wyłączyć przez
za pomocą -Konwersja bez znaku.

W przypadku języka C++ ostrzegaj również o mylącym rozpoznawaniu przeciążenia dla konwersji zdefiniowanych przez użytkownika; oraz
konwersje, które nigdy nie używają operatora konwersji typu: konwersje na „unieważnione”, to samo
typ, klasę bazową lub odwołanie do nich. Ostrzeżenia o konwersjach między podpisanymi
i liczby całkowite bez znaku są domyślnie wyłączone w C++, chyba że -Konwersja znaku is
wyraźnie włączone.

-Wno-konwersja-null (Tylko C++ i Objective-C++)
Nie ostrzegaj o konwersjach między typami „NULL” i bez wskaźnika. -Wkonwersja-null is
domyślnie włączone.

-Wzero-jako-null-stała-wskaźnika (Tylko C++ i Objective-C++)
Ostrzegaj, gdy literał „0” jest używany jako stała wskaźnika zerowego. Może to być przydatne do
ułatwiają konwersję do "nullptr" w C++11.

-Wdata-godzina
Ostrzegaj, gdy napotkane zostaną makra „__TIME__”, „__DATE__” lub „__TIMESTAMP__”
może uniemożliwić identyczne bitowo kompilacje odtwarzalne.

-Wdelete-niekompletne (Tylko C++ i Objective-C++)
Ostrzegaj przy usuwaniu wskaźnika do niekompletnego typu, co może spowodować niezdefiniowane zachowanie w
czas wykonywania. To ostrzeżenie jest domyślnie włączone.

-Bezużyteczna obsada (Tylko C++ i Objective-C++)
Ostrzegaj, gdy wyrażenie jest rzutowane na swój własny typ.

-Wempty-ciało
Ostrzegaj, jeśli w instrukcji „if”, „else” lub „do while” pojawi się pusta treść. To ostrzeżenie
jest również włączony przez -Wextra.

-Wenum-porównaj
Ostrzegaj o porównaniu wartości różnych typów wyliczanych. W C++ enumeral
diagnozowane są również niezgodności w wyrażeniach warunkowych, a ostrzeżenie jest włączane przez:
domyślny. W C to ostrzeżenie jest włączone przez -Ściana.

-Wjump-miss-init (C, tylko cel C)
Ostrzegaj, jeśli instrukcja „goto” lub „switch” przeskakuje do przodu przez
inicjalizacja zmiennej lub przeskakuje wstecz do etykiety po tym, jak zmienna została
zainicjowane. To ostrzega tylko o zmiennych, które są inicjowane, gdy są
zdeklarowany. To ostrzeżenie jest obsługiwane tylko w C i Objective-C; w C++ tego rodzaju
branch w każdym przypadku jest błędem.

-Wjump-miss-init jest zawarty w -Wc++-kompatybilność. Można go wyłączyć za pomocą
-Wno-jump-miss-init opcja.

-Porównaj znak
Ostrzegaj, gdy porównanie wartości ze znakiem i bez znaku może spowodować nieprawidłowe
wynik, gdy wartość ze znakiem jest konwertowana na wartość bez znaku. To ostrzeżenie jest również włączone
by -Wextra; aby uzyskać inne ostrzeżenia o -Wextra bez tego ostrzeżenia użyj -Wextra
-Wno-znak-porównaj.

-Konwersja znaku
Ostrzegaj o niejawnych konwersjach, które mogą zmienić znak wartości całkowitej, na przykład
przypisywanie wyrażenia liczby całkowitej ze znakiem do zmiennej liczby całkowitej bez znaku. Wyraźny
Cast wycisza ostrzeżenie. W C ta opcja jest również włączona przez -Wkonwersja.

-Wpływ-konwersja
Ostrzegaj o niejawnych konwersjach, które zmniejszają dokładność wartości rzeczywistej. Ten
obejmuje konwersje z wartości rzeczywistych na liczby całkowite oraz z wartości rzeczywistych o wyższej precyzji na niższe
precyzyjne wartości rzeczywiste. Ta opcja jest również włączona przez -Wkonwersja.

-Wsize-delokacja (Tylko C++ i Objective-C++)
Ostrzegaj o definicji nieskalowanej funkcji cofania alokacji

void operator usuń (nieważne *) noexcept;
void operator usuń[] (nieważne *) noexcept;

bez definicji odpowiedniej wielkości funkcji cofnięcia alokacji

void operator usuń (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;

lub odwrotnie. Włączone przez -Wextra oraz -fsized-deallocation.

-Wsizeof-pointer-memaccess
Ostrzegaj o podejrzanych parametrach długości niektórych wbudowanych funkcji łańcucha i pamięci
jeśli argument używa "sizeof". To ostrzeżenie ostrzega np. o "memset (ptr, 0, sizeof
(ptr));”, jeśli „ptr” nie jest tablicą, ale wskaźnikiem i sugeruje możliwą poprawkę, lub
o "memcpy (&foo, ptr, sizeof (&foo));". To ostrzeżenie jest włączone przez -Ściana.

-Wrozmiar-argumentu-tablicy
Ostrzegaj, gdy operator „sizeof” jest stosowany do parametru, który jest zadeklarowany jako tablica
w definicji funkcji. To ostrzeżenie jest domyślnie włączone w programach C i C++.

-Wmemset-transponowane-args
Ostrzegaj o podejrzanych wywołaniach funkcji wbudowanej „memset”, jeśli drugim argumentem jest
nie zero, a trzecim argumentem jest zero. To ostrzega np@ o "memset (buf, sizeof
buf, 0)”, gdzie najprawdopodobniej chodziło o „memset (buf, 0, sizeof buf)”.
diagnostyka jest emitowana tylko wtedy, gdy trzecim argumentem jest dosłownie zero. Jeśli jest jakiś
wyrażenie złożone do zera, rzutowanie zerowe na jakiś typ itp., jest znacznie mniejsze
prawdopodobnie użytkownik omyłkowo wymienił argumenty i nie zostanie wyświetlone żadne ostrzeżenie.
To ostrzeżenie jest włączone przez -Ściana.

-Waddress
Ostrzegaj o podejrzanym użyciu adresów pamięci. Obejmują one użycie adresu
funkcja w wyrażeniu warunkowym, takim jak „void func(void); if (func)” i
porównania z adresem pamięci literału ciągu, na przykład „if (x == „abc”)”.
Takie zastosowania zwykle wskazują na błąd programisty: adres funkcji zawsze
wartościuje się jako prawda, więc ich użycie w trybie warunkowym zwykle wskazuje, że programista
zapomniałem nawiasów w wywołaniu funkcji; i porównania z literałami ciągów znaków
powodują nieokreślone zachowanie i nie są przenośne w C, więc zwykle wskazują:
że programista zamierzał użyć "strcmp". To ostrzeżenie jest włączone przez -Ściana.

-Wlogiczna-op
Ostrzegaj o podejrzanym użyciu operatorów logicznych w wyrażeniach. Obejmuje to używanie
operatory logiczne w kontekstach, w których można oczekiwać operatora bitowego.

-Wlogiczne-nie-nawiasy
Ostrzegaj o nieużywanym logicznym operandzie po lewej stronie porównania. Ten
opcja nie ostrzega, jeśli operand RHS jest typu logicznego. Jego celem jest:
wykryj podejrzany kod, taki jak:

int;
...
jeśli (!a > 1) { ... }

Możliwe jest pominięcie ostrzeżenia poprzez zawinięcie LHS w nawiasy:

jeśli ((!a) > 1) { ... }

To ostrzeżenie jest włączone przez -Ściana.

-Waggregate-zwrot
Ostrzegaj, jeśli zdefiniowane lub wywoływane są jakiekolwiek funkcje zwracające struktury lub związki. (W
języki, w których można zwrócić tablicę, powoduje to również ostrzeżenie.)

-Wno-agressive-loop-optymalizacje
Ostrzegaj, jeśli w pętli ze stałą liczbą iteracji kompilator wykryje niezdefiniowane
zachowanie w jakiejś instrukcji podczas jednej lub więcej iteracji.

-Wno-atrybuty
Nie ostrzegaj, jeśli zostanie użyty nieoczekiwany „__attribute__”, taki jak nierozpoznane atrybuty,
atrybuty funkcji zastosowane do zmiennych itp. To nie zatrzymuje błędów dla
nieprawidłowe użycie obsługiwanych atrybutów.

-Wno-wbudowane-makro-przedefiniowane
Nie ostrzegaj, jeśli niektóre wbudowane makra zostaną przedefiniowane. Powoduje to zignorowanie ostrzeżeń dla
redefinicja „__TIMESTAMP__”, „__TIME__”, „__DATE__”, „__FILE__” oraz
„__BASE_FILE__”.

-Wstrict-prototypy (Tylko C i Cel-C)
Ostrzegaj, jeśli funkcja jest zadeklarowana lub zdefiniowana bez określenia typów argumentów. (Jakiś
definicja funkcji w starym stylu jest dozwolona bez ostrzeżenia, jeśli poprzedzona przez
deklaracja określająca typy argumentów).

- Deklaracja w stylu Wolda (Tylko C i Cel-C)
Ostrzegaj o przestarzałych zastosowaniach, zgodnie ze standardem C, w deklaracji. Do
na przykład, ostrzegaj, jeśli specyfikatory klasy pamięci, takie jak „statyczny”, nie są pierwszymi rzeczami w a
deklaracja. To ostrzeżenie jest również włączone przez -Wextra.

-Definicja w stylu Wolda (Tylko C i Cel-C)
Ostrzegaj, jeśli używana jest definicja funkcji w starym stylu. Ostrzeżenie jest podawane, nawet jeśli jest
poprzedni prototyp.

-Wmissing-parameter-type (Tylko C i Cel-C)
Parametr funkcji jest deklarowany bez specyfikatora typu w funkcjach w stylu K&R:

nieważne foo(bar) { }

To ostrzeżenie jest również włączone przez -Wextra.

-Brakujące prototypy (Tylko C i Cel-C)
Ostrzegaj, jeśli funkcja globalna została zdefiniowana bez wcześniejszej deklaracji prototypu. Ten
ostrzeżenie jest wyświetlane, nawet jeśli sama definicja zawiera prototyp. Użyj tej opcji
do wykrywania funkcji globalnych, które nie mają zgodnej deklaracji prototypu w
plik nagłówkowy. Ta opcja nie jest prawidłowa dla C++, ponieważ wszystkie deklaracje funkcji
dostarczyć prototypy, a niezgodna deklaracja deklaruje przeciążenie, a nie
konflikt z wcześniejszą deklaracją. Posługiwać się -brakujące-deklaracje wykryć zaginięcie
deklaracje w C++.

-brakujące-deklaracje
Ostrzegaj, jeśli funkcja globalna jest zdefiniowana bez wcześniejszej deklaracji. Zrób to, nawet jeśli
sama definicja stanowi prototyp. Użyj tej opcji, aby wykryć globalne
funkcje, które nie są zadeklarowane w plikach nagłówkowych. W C nie są wydawane żadne ostrzeżenia dla
funkcje z poprzednimi deklaracjami nieprototypowymi; posługiwać się -Brakujące prototypy wykryć
brakujące prototypy. W C++ nie są wydawane żadne ostrzeżenia dla szablonów funkcji ani dla
funkcje wbudowane lub funkcje w anonimowych przestrzeniach nazw.

-Wmissing-field-initializers
Ostrzegaj, jeśli w inicjatorze struktury brakuje niektórych pól. Na przykład następujące
kod powoduje takie ostrzeżenie, ponieważ "xh" jest domyślnie zerem:

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

Ta opcja nie ostrzega o wyznaczonych inicjatorach, więc następująca modyfikacja
nie wyzwala ostrzeżenia:

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

W C++ ta opcja nie ostrzega też o pustym inicjatorze { }, na przykład:

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

To ostrzeżenie jest zawarte w -Wextra. Aby zdobyć inne -Wextra ostrzeżenia bez tego,
posługiwać się -Wextra -Wno-brakujące-pola-inicjatory.

-Wno-wieloznakowy
Nie ostrzegaj, jeśli stała wieloznakowa („ŁÓDŹ”) jest używany. Zwykle wskazują a
literówka w kodzie użytkownika, ponieważ mają wartości zdefiniowane w implementacji i nie powinny być
używane w kodzie przenośnym.

-Wnormalizowany[=<Żaden|id|nfc|nfkc>]
W ISO C i ISO C++ dwa identyfikatory są różne, jeśli są różnymi sekwencjami
postacie. Jednak czasami, gdy znaki spoza podstawowego zestawu znaków ASCII
są używane, możesz mieć dwie różne sekwencje znaków, które wyglądają tak samo. Unikać
zamieszania, norma ISO 10646 określa niektóre normalizacja reguły który po zastosowaniu
upewnij się, że dwie sekwencje, które wyglądają tak samo, zostały przekształcone w tę samą sekwencję. GCC
może ostrzec, jeśli używasz identyfikatorów, które nie zostały znormalizowane; ta opcja
kontroluje to ostrzeżenie.

GCC obsługuje cztery poziomy ostrzeżeń. Wartość domyślna to -Wnormalizowane=nfc,
który ostrzega o każdym identyfikatorze, który nie jest w znormalizowanej formie ISO 10646 „C”,
NFC. NFC jest zalecaną formą dla większości zastosowań. Jest to równoważne -Wnormalizowany.

Niestety, istnieją pewne znaki dozwolone w identyfikatorach przez ISO C i ISO C++
które po przekształceniu w NFC nie są dozwolone w identyfikatorach. To znaczy, nie ma mowy
używać tych symboli w przenośnym ISO C lub C++ i mieć wszystkie swoje identyfikatory w NFC.
-Wnormalizowane=id pomija ostrzeżenie dla tych znaków. Mamy nadzieję, że przyszłość
wersje odpowiednich standardów poprawią to, dlatego ta opcja nie jest
domyślny.

Możesz wyłączyć ostrzeżenie dla wszystkich znaków, pisząc -Wnormalizowane=brak or
-Wno-znormalizowane. Powinieneś to zrobić tylko wtedy, gdy używasz innej normalizacji
schemat (np. „D”), ponieważ w przeciwnym razie można łatwo tworzyć błędy, które są dosłownie
niemożliwe do zobaczenia.

Niektóre znaki w ISO 10646 mają różne znaczenia, ale w niektórych czcionkach wyglądają identycznie
lub metodologii wyświetlania, zwłaszcza po zastosowaniu formatowania. Na przykład
„\u207F”, „SUPERSCRIPT LATIN MAŁA LITERA N”, wyświetla się jak zwykłe „n”, które
został umieszczony w indeksie górnym. ISO 10646 definiuje NFKC schemat normalizacji do
przekonwertuj je wszystkie do standardowej postaci, a GCC ostrzega, jeśli Twój kod nie jest w
NFKC, jeśli używasz -Wnormalizowane=nfkc. To ostrzeżenie jest porównywalne z ostrzeżeniem o każdym
identyfikator zawierający literę O, ponieważ może być mylony z cyfrą 0,
i tak nie jest to domyślne, ale może być przydatne jako lokalna konwencja kodowania, jeśli
środowiska programowania nie można naprawić, aby wyraźnie wyświetlać te znaki.

-Wno-przestarzałe
Nie ostrzegaj o użyciu przestarzałych funkcji.

-Wno-przestarzałe-deklaracje
Nie ostrzegaj o użyciu funkcji, zmiennych i typów oznaczonych jako przestarzałe przez
za pomocą atrybutu „przestarzałe”.

-Bez przelewu
Nie ostrzegaj o przepełnieniu czasu kompilacji w wyrażeniach stałych.

-Wno-odr
Ostrzegaj o naruszeniach reguły jednej definicji podczas optymalizacji czasu łącza. Wymaga
-scalanie typu flto-odr do włączenia. Domyślnie włączone.

-Wopenmp-simd
Ostrzegaj, jeśli model kosztów wektoryzatora zastępuje dyrektywę OpenMP lub Cilk Plus simd
ustawione przez użytkownika. ten -fsimd-model-kosztów=nieograniczony opcja może być wykorzystana do złagodzenia kosztów
model.

-Woverride-init (Tylko C i Cel-C)
Ostrzegaj, jeśli zainicjowane pole bez efektów ubocznych zostanie nadpisane podczas korzystania z oznaczonego
inicjatory.

To ostrzeżenie jest zawarte w -Wextra. Aby zdobyć inne -Wextra ostrzeżenia bez tego,
posługiwać się -Wextra -Wno-override-init.

-Zapakowany
Ostrzegaj, jeśli strukturze nadano atrybut upakowania, ale atrybut upakowania nie ma
wpływ na układ lub wielkość konstrukcji. Takie struktury mogą być źle wyrównane dla
niewielka korzyść. Na przykład w tym kodzie zmienna „fx” w „struct bar” to
źle wyrównany, mimo że „struct bar” sam nie ma atrybutu „packed”:

struktura foo {
int x;
znak a, b, c, d;
} __attribute __ ((zapakowany));
pasek struktury {
char z;
struct foo f;
};

-Wpacked-bitfield-compat
Serie GCC 4.1, 4.2 i 4.3 ignorują atrybut „packed” w polach bitowych typu
"zwęglać". Zostało to naprawione w GCC 4.4, ale zmiana może prowadzić do różnic w
układ struktury. GCC informuje o zmianie offsetu takiego pola w GCC
4.4. Na przykład nie ma już 4-bitowego dopełnienia między polami „a” i „b” w tym
struktura:

struktura foo
{
znak a:4;
znak b:8;
} __atrybut__ ((pakowany));

To ostrzeżenie jest domyślnie włączone. Posługiwać się -Wno-packed-bitfield-compat aby to wyłączyć
ostrzeżenie.

-Wyściółka
Ostrzegaj, jeśli dopełnienie jest zawarte w strukturze, aby wyrównać element
struktury lub wyrównać całą konstrukcję. Czasami, gdy tak się dzieje, jest to możliwe
zmienić rozmieszczenie pól struktury w celu zmniejszenia dopełnienia, dzięki czemu
struktura mniejsza.

-Zbędne dekl
Ostrzegaj, jeśli coś jest deklarowane więcej niż raz w tym samym zakresie, nawet w przypadkach, gdy
wielokrotna deklaracja jest ważna i nic nie zmienia.

-Wnested-zewnętrzni (Tylko C i Cel-C)
Ostrzegaj, jeśli w funkcji zostanie napotkana deklaracja „extern”.

-Wno-dziedziczony-variadic-ctor
Pomiń ostrzeżenia o użyciu konstruktorów dziedziczących C++11, gdy klasa bazowa
dziedziczone z ma konstruktor variadic C; ostrzeżenie jest domyślnie włączone, ponieważ
wielokropek nie jest dziedziczony.

-Winline
Ostrzegaj, jeśli funkcja zadeklarowana jako wbudowana nie może być wbudowana. Nawet z tym
opcja, kompilator nie ostrzega o błędach funkcji wbudowanych zadeklarowanych w
nagłówki systemowe.

Kompilator używa różnych metod heurystycznych, aby określić, czy wbudować a
funkcjonować. Na przykład kompilator bierze pod uwagę rozmiar funkcji będącej
inlined i ilość inline, która została już wykonana w bieżącej funkcji.
Dlatego pozornie nieznaczne zmiany w programie źródłowym mogą spowodować
ostrzeżenia wyprodukowane przez -Winline pojawiać się lub znikać.

-Wno-invalid-offsetof (Tylko C++ i Objective-C++)
Pomiń ostrzeżenia przed zastosowaniem makra „offsetof” do typu innego niż POD. Według
standard ISO C++ z 2014 r., stosujący „offsetof” do niestandardowego typu układu to
nieokreślony. Jednak w istniejących implementacjach C++ „offsetof” zazwyczaj daje:
znaczące wyniki. Ta flaga jest przeznaczona dla użytkowników, którzy są świadomi, że piszą
nieprzenośny kod i którzy celowo zdecydowali się zignorować ostrzeżenie o nim.

Ograniczenia dotyczące „offsetof” mogą zostać złagodzone w przyszłej wersji standardu C++.

-Wno-int-to-point-cast
Pomijaj ostrzeżenia z rzutowania na typ wskaźnika liczby całkowitej o innym rozmiarze. w
C++ rzutowanie na typ wskaźnika o mniejszym rozmiarze jest błędem. Wint-to-point-cast is
domyślnie włączone.

-Wno-wskaźnik-do-oddania (Tylko C i Cel-C)
Pomijaj ostrzeżenia z rzutowania ze wskaźnika na liczbę całkowitą o innym rozmiarze.

-Winvalid-pch
Ostrzegaj, jeśli w ścieżce wyszukiwania zostanie znaleziony prekompilowany nagłówek, ale nie można go użyć.

-Wlong-long
Ostrzegaj, jeśli używany jest typ „długi długi”. Umożliwia to albo -Wpedancki or
-Wtradycyjne w trybach ISO C90 i C++98. Aby zablokować komunikaty ostrzegawcze, użyj
-Wno-długi-długi.

-Wvariadic-makra
Ostrzegaj, jeśli makra wariadyczne są używane w trybie ISO C90 lub jeśli alternatywna składnia GNU to
używany w trybie ISO C99. Umożliwia to albo -Wpedancki or -Wtradycyjne, Do
wstrzymaj komunikaty ostrzegawcze, użyj -Wno-variadic-makra.

-Wvarargs
Ostrzegaj przed wątpliwym użyciem makr używanych do obsługi zmiennych argumentów, takich jak
"va_start". To jest domyślne. Aby zablokować komunikaty ostrzegawcze, użyj -Wno-varargs.

-Wvector-operacja-wydajność
Ostrzegaj, jeśli operacja wektorowa nie jest zaimplementowana przez możliwości architektury SIMD.
Głównie przydatne do strojenia wydajności. Można zaimplementować operację wektorową
„odcinkowo”, co oznacza, że ​​operacja skalarna jest wykonywana na każdym wektorze
element; „równolegle”, co oznacza, że ​​operacja wektorowa jest realizowana za pomocą
skalary szerszego typu, które zwykle są bardziej wydajne; i „jako singiel
skalarne”, co oznacza, że ​​wektor pasuje do typu skalarnego.

-Wno-wirtualny-przenieś-przypisz
Pomiń ostrzeżenia o dziedziczeniu z wirtualnej bazy za pomocą nietrywialnego ruchu C++11
operator przypisania. Jest to niebezpieczne, ponieważ jeśli wirtualna baza jest osiągalna przez
więcej niż jedną ścieżkę, jest przesuwany wielokrotnie, co może oznaczać, że oba obiekty znajdą się w
przeniesiony ze stanu. Jeśli operator przypisania przeniesienia jest napisany, aby uniknąć przenoszenia z
przeniesiony z obiektu, to ostrzeżenie można wyłączyć.

-Wvla
Ostrzegaj, jeśli w kodzie jest używana tablica o zmiennej długości. -Wno-vla zapobiega -Wpedancki
ostrzeżenie o tablicy o zmiennej długości.

-Wvolatile-register-var
Ostrzegaj, jeśli zmienna rejestru jest zadeklarowana jako ulotna. Modyfikator lotny nie
wstrzymać wszystkie optymalizacje, które mogą wyeliminować odczyty i/lub zapisy do rejestru
zmienne. To ostrzeżenie jest włączone przez -Ściana.

-Wdisabled-optymalizacja
Ostrzegaj, jeśli żądany przebieg optymalizacji jest wyłączony. To ostrzeżenie generalnie nie
wskazać, że coś jest nie tak z twoim kodem; wskazuje jedynie, że GCC
optymalizatory nie są w stanie efektywnie obsługiwać kodu. Często problemem jest to, że twoje
kod jest zbyt duży lub zbyt skomplikowany; GCC odmawia optymalizacji programów, gdy optymalizacja
samo w sobie prawdopodobnie zajmie bardzo dużo czasu.

-Wskaźnik-znak (Tylko C i Cel-C)
Ostrzegaj przed przekazaniem lub przypisaniem argumentu wskaźnika z inną sygnaturą. Ten
opcja jest obsługiwana tylko dla C i Objective-C. Jest to dorozumiane przez -Ściana i przez
-Wpedancki, który można wyłączyć za pomocą -Wno-znak-wskaźnika.

-Ochraniacz stosu
Ta opcja jest aktywna tylko wtedy, gdy -fstack-protector jest aktywny. Ostrzega o funkcjach
które nie są zabezpieczone przed rozbiciem stosu.

-Woverlength-strings
Ostrzegaj o stałych łańcucha, które są dłuższe niż „minimalna maksymalna” długość
określone w normie C. Nowoczesne kompilatory generalnie dopuszczają stałe łańcuchowe, które
są znacznie dłuższe niż minimalny limit normy, ale bardzo przenośne programy powinny
unikaj używania dłuższych ciągów.

Obowiązuje limit po ciągła konkatenacja stałych i nie liczy końca
NUL. W C90 limit wynosił 509 znaków; w C99 podniesiono go do 4095. C++98 robi
nie określać normatywnego minimum maksimum, więc nie diagnozujemy długich ciągów znaków w
C ++.

Ta opcja jest implikowana przez -Wpedanckii można go wyłączyć za pomocą
-Wno-naddługość-strings.

-Wunsuffixed-float-stałe (Tylko C i Cel-C)
Wydaj ostrzeżenie dla każdej stałej zmiennoprzecinkowej, która nie ma sufiksu. Kiedy jest używany
Wraz z -Wsystem-nagłówki ostrzega o takich stałych w systemowych plikach nagłówkowych.
Może to być przydatne podczas przygotowywania kodu do użycia z pragma „FLOAT_CONST_DECIMAL64”
z dziesiętnego rozszerzenia zmiennoprzecinkowego do C99.

-Wno-desygnowany-init (Tylko C i Cel-C)
Pomijaj ostrzeżenia, gdy inicjator pozycyjny jest używany do inicjowania struktury, która
został oznaczony atrybutem „designated_init”.

Opcje dla Debugowanie Twój Program or GCC
GCC ma różne specjalne opcje, które są używane do debugowania programu lub GCC:

-g Twórz informacje debugowania w natywnym formacie systemu operacyjnego (stabs, COFF,
XCOFF lub KRASNOLUD 2). GDB może pracować z tymi informacjami debugowania.

W większości systemów używających formatu stab, -g umożliwia korzystanie z dodatkowych informacji debugowania
że tylko GDB może używać; te dodatkowe informacje sprawiają, że debugowanie działa lepiej w GDB, ale
prawdopodobnie powoduje awarię innych debuggerów lub odmawia odczytu programu. Jeśli chcesz
kontroluj, czy chcesz wygenerować dodatkowe informacje, użyj -gstabs+, -gtabs,
-gxcoff+, -gxcofflub -gvms (Patrz niżej).

GCC pozwala na użycie -g z -O. Skróty podejmowane przez zoptymalizowany kod mogą:
czasami dają zaskakujące wyniki: niektóre zmienne, które zadeklarowałeś, mogą nie istnieć w
wszystko; przepływ kontroli może na chwilę przenieść się tam, gdzie się tego nie spodziewałeś; niektóre stwierdzenia mogą
nie mogą być wykonywane, ponieważ obliczają stałe wyniki lub ich wartości są już w
ręka; niektóre wypowiedzi mogą być wykonywane w różnych miejscach, ponieważ zostały przeniesione
pętli.

Niemniej jednak okazuje się, że możliwe jest debugowanie zoptymalizowanego wyjścia. To sprawia, że ​​jest to rozsądne
używać optymalizatora dla programów, które mogą zawierać błędy.

Poniższe opcje są przydatne, gdy GCC jest generowane z możliwością więcej
niż jeden format debugowania.

-gsplit-krasnolud
Oddziel jak najwięcej informacji o debugowaniu krasnoludów w osobnym pliku wyjściowym
z rozszerzeniem .dwo. Ta opcja pozwala systemowi kompilacji uniknąć łączenia plików
z informacjami debugowania. Aby była użyteczna, ta opcja wymaga debuggera zdolnego do:
odczytywanie plików .dwo.

-ggdb
Twórz informacje debugowania do użytku przez GDB. Oznacza to użycie najbardziej wyrazistego
dostępny format (DWARF 2, dźgnięcia lub format natywny, jeśli żaden z nich nie jest)
obsługiwane), w tym rozszerzenia GDB, jeśli to w ogóle możliwe.

-gpubnames
Generuj sekcje krasnolud .debug_pubnames i .debug_pubtypes.

-ggnu-pubnames
Generuj sekcje .debug_pubnames i .debug_pubtypes w formacie odpowiednim dla
konwersja na indeks GDB. Ta opcja jest użyteczna tylko z linkerem, który może:
tworzymy indeks GDB w wersji 7.

-gtabs
Twórz informacje debugowania w formacie stabs (jeśli jest obsługiwany), bez GDB
rozszerzenia. Jest to format używany przez DBX w większości systemów BSD. W MIPS, Alpha i
Systemy System V Release 4 ta opcja generuje dane wyjściowe debugowania stab, które nie są
rozumiane przez DBX lub SDB. W systemach System V Release 4 ta opcja wymaga GNU
monter.

-feliminuj-nieużywane-symbole-debugowania
Twórz informacje debugowania w formacie stabs (jeśli jest to obsługiwane), tylko dla symboli
które są faktycznie używane.

-femit-class-debug-zawsze
Zamiast emitować informacje debugowania dla klasy C++ tylko w jednym pliku obiektowym,
emitować go we wszystkich plikach obiektowych przy użyciu klasy. Ta opcja powinna być używana tylko z
debugery, które nie są w stanie obsłużyć sposobu, w jaki GCC zwykle emituje informacje debugowania
dla klas, ponieważ użycie tej opcji zwiększa rozmiar informacji debugowania o
aż dwa razy.

-sekcja-fdebug-typów
Podczas korzystania z DWARF w wersji 4 lub wyższej, typy DIE można umieścić we własnych
Sekcja ".debug_types" zamiast umieszczania ich w sekcji ".debug_info". Ono
efektywniej jest umieścić je w oddzielnych sekcjach comdat, ponieważ linker może wtedy
usuń duplikaty. Ale nie wszyscy konsumenci DWARF obsługują jeszcze sekcje ".debug_types"
a na niektórych obiektach ".debug_types" generuje większe zamiast mniejszego debugowania
informacje.

-gstabs+
Twórz informacje debugowania w formacie stabs (jeśli jest obsługiwany), używając GNU
rozszerzenia rozumiane tylko przez debugger GNU (GDB). Korzystanie z tych rozszerzeń jest
może spowodować awarię innych debugerów lub odmówić czytania programu.

-gcoff
Twórz informacje debugowania w formacie COFF (jeśli jest to obsługiwane). To jest
format używany przez SDB w większości systemów System V przed wersją System V 4.

-gxcoff
Twórz informacje debugowania w formacie XCOFF (jeśli jest to obsługiwane). To jest
format używany przez debugger DBX w systemach IBM RS/6000.

-gxcoff+
Twórz informacje debugowania w formacie XCOFF (jeśli jest obsługiwany), używając GNU
rozszerzenia rozumiane tylko przez debugger GNU (GDB). Korzystanie z tych rozszerzeń jest
może spowodować awarię innych debugerów lub odmówić czytania programu i może spowodować:
asemblery inne niż asembler GNU (GAS) zawiodą z powodu błędu.

-gkarł-wersja
Twórz informacje debugowania w formacie DWARF (jeśli jest to obsługiwane). Wartość
wersja może wynosić 2, 3, 4 lub 5; domyślna wersja dla większości celów to 4. DWARF
Wersja 5 jest tylko eksperymentalna.

Zwróć uwagę, że w DWARF w wersji 2 niektóre porty wymagają i zawsze używają pewnych niekonfliktowych
Rozszerzenia DWARF 3 w stołach odprężających.

Wersja 4 może wymagać GDB 7.0 i -przypisania-śledzenia-fvar dla maksymalnych korzyści.

-przełączniki-grecord-gcc
Ten przełącznik powoduje, że opcje wiersza poleceń używane do wywoływania kompilatora, który może:
wpływają na generowanie kodu, który ma być dołączony do atrybutu DW_AT_producer w DWARF
informacje debugowania. Opcje są połączone spacjami oddzielającymi je od
siebie i z wersji kompilatora. Zobacz też -przełączniki frecord-gcc dla innego
sposób przechowywania opcji kompilatora w pliku obiektowym. To jest ustawienie domyślne.

-gno-record-gcc-switches
Nie zezwalaj na dołączanie opcji wiersza polecenia do atrybutu DW_AT_producer w DWARF
informacje debugowania.

-gstrict-krasnolud
Nie zezwalaj na używanie rozszerzeń późniejszej standardowej wersji DWARF niż wybrane za pomocą
-gkarł-wersja. W przypadku większości celów przy użyciu późniejszych rozszerzeń DWARF bez konfliktów
dozwolone są wersje standardowe.

-gno-ścisłe-karzeł
Zezwalaj na używanie rozszerzeń późniejszej standardowej wersji DWARF niż wybrane za pomocą
-gkarł-wersja.

-gz[=rodzaj]
Twórz skompresowane sekcje debugowania w formacie DWARF, jeśli jest to obsługiwane. Gdyby rodzaj is
nie podano, domyślny typ zależy od możliwości asemblera i linkera
używany. rodzaj może być jednym z Żaden (nie kompresuj sekcji debugowania), zlib (użyj zlib
kompresja w formacie ELF gABI), lub zlib-gnu (użyj kompresji zlib w tradycyjnym GNU
format). Jeśli linker nie obsługuje pisania skompresowanych sekcji debugowania, opcja
zostanie odrzucony. W przeciwnym razie, jeśli asembler ich nie obsługuje, -gz jest cicho
ignorowane podczas tworzenia plików obiektowych.

-gvms
Twórz informacje debugowania w formacie debugowania Alpha/VMS (jeśli jest to obsługiwane). Ten
to format używany przez DEBUG w systemach Alpha/VMS.

-gpoziom
-ggdbpoziom
-gtabspoziom
-gcoffpoziom
-gxcoffpoziom
-gvmspoziom
Poproś o informacje dotyczące debugowania, a także użyj poziom określić, ile informacji. ten
domyślny poziom to 2.

Poziom 0 nie generuje żadnych informacji debugowania. Zatem, -g0 neguje -g.

Poziom 1 daje minimalną ilość informacji, wystarczającą do wykonania śladów wstecznych w częściach
program, którego nie planujesz debugować. Obejmuje to opisy funkcji i
zmienne zewnętrzne i tabele numerów wierszy, ale brak informacji o zmiennych lokalnych.

Poziom 3 zawiera dodatkowe informacje, takie jak wszystkie definicje makr obecne w
program. Niektóre debugery obsługują rozszerzanie makr, gdy używasz -g3.

-gdwarf-2 nie akceptuje połączonego poziomu debugowania, ponieważ GCC służyło do obsługi
opcja -gdwarf co oznaczało generowanie informacji debugowania w wersji 1 DWARF
format (który bardzo różni się od wersji 2) i byłby zbyt mylący.
Ten format debugowania jest już dawno przestarzały, ale tej opcji nie można teraz zmienić. Zamiast tego użyj
Dodatkowy -gpoziom opcja zmiany poziomu debugowania dla DWARF.

-przełączanie
Wyłącz generowanie informacji debugowania, jeśli pominięcie tej opcji generuje je, lub włącz ją
na poziomie 2 w przeciwnym razie. Pozycja tego argumentu w wierszu poleceń nie
materiał; zaczyna obowiązywać po przetworzeniu wszystkich innych opcji i robi to tylko
raz, bez względu na to, ile razy zostanie podany. Jest to przeznaczone głównie do użytku z
-fcompare-debug.

-fsanitize=adres
Włącz AddressSanitizer, szybki wykrywacz błędów pamięci. Instrukcje dostępu do pamięci są
oprzyrządowane do wykrywania błędów poza granicami i użycia po zwolnieniu. Widzieć
<https://github.com/google/sanitizers/wiki/AddressSanitizer> więcej szczegółów. ten
na zachowanie w czasie wykonywania można wpływać za pomocą ASAN_OPTIONS Zmienna środowiskowa. Kiedy
ustawione na "help=1", dostępne opcje są wyświetlane przy uruchomieniu instrumentu
program. Widzieć
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> dla
lista obsługiwanych opcji.

-fsanitize=adres-jądra
Włącz AddressSanitizer dla jądra systemu Linux. Widziećhttps://github.com/google/kasan/wiki>
więcej szczegółów.

-fsanitize=wątek
Włącz ThreadSanitizer, szybki wykrywacz wyścigu danych. Instrukcje dostępu do pamięci są
oprzyrządowane do wykrywania błędów związanych z wyścigiem danych. Widzieć
<https://github.com/google/sanitizers/wiki#threadsanitizer> więcej szczegółów. Bieg-
na zachowanie czasu można wpływać za pomocą TSAN_OPTIONS Zmienna środowiskowa; zobaczyć
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> lista
obsługiwane opcje.

-fsanitize=wyciek
Włącz LeakSanitizer, wykrywacz wycieków pamięci. Ta opcja ma znaczenie tylko w przypadku łączenia
pliki wykonywalne, a jeśli nie -fsanitize=adres ani -fsanitize=wątek jest używany. W tym
przypadku, gdy plik wykonywalny jest połączony z biblioteką, która zastępuje „malloc” i inne
funkcje alokatora. Widzieć
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> po więcej
Detale. Na zachowanie w czasie wykonywania można wpłynąć za pomocą LSAN_OPTIONS środowisko
zmienna.

-fsanitize=nieokreślony
Włącz UndefinedBehaviorSanitizer, szybki wykrywacz niezdefiniowanych zachowań. Różny
obliczenia są oprzyrządowane do wykrywania niezdefiniowanych zachowań w czasie wykonywania. Aktualny
podopcje to:

-fsanitize=przesunięcie
Ta opcja umożliwia sprawdzenie, czy wynik operacji zmianowej nie jest
nieokreślony. Zauważ, że to, co dokładnie jest uważane za nieokreślone, nieco się różni
między C i C++, a także między ISO C90 i C99 itd.

-fsanitize=liczba-całkowita-dziel-przez-zero
Wykryj dzielenie przez zero oraz dzielenie "INT_MIN / -1".

-fsanitize=nieosiągalny
Dzięki tej opcji kompilator zamienia wywołanie "__builtin_unreachable" na a
zamiast tego wywołanie komunikatu diagnostycznego. Po osiągnięciu wywołania „__builtin_unreachable”,
zachowanie jest niezdefiniowane.

-fsanitize=związanie z vla
Ta opcja instruuje kompilator, aby sprawdził, czy rozmiar zmiennej długości
tablica jest dodatnia.

-fsanitize=null
Ta opcja umożliwia sprawdzanie wskaźnika. W szczególności aplikacja zbudowana z
ta opcja włączona spowoduje wyświetlenie komunikatu o błędzie, gdy spróbuje wyłuskać a
Wskaźnik NULL lub jeśli odwołanie (prawdopodobnie odwołanie do rvalue) jest powiązane z wartością NULL
wskaźnik lub jeśli metoda jest wywoływana na obiekcie wskazywanym przez wskaźnik NULL.

-fsanitize=powrót
Ta opcja umożliwia sprawdzenie deklaracji zwrotu. Programy zbudowane z tą opcją
włączone spowoduje wyświetlenie komunikatu o błędzie, gdy koniec funkcji nieunieważnionej jest
osiągnięty bez faktycznego zwracania wartości. Ta opcja działa tylko w C++.

-fsanitize=przepełnienie liczby całkowitej ze znakiem
Ta opcja umożliwia sprawdzanie przepełnienia ze znakiem liczby całkowitej. Sprawdzamy, czy wynik
„+”, „*” oraz jednoargumentowe i binarne „-” nie przepełniają się ze znakiem
arytmetyka. Uwaga, należy wziąć pod uwagę zasady promocji liczb całkowitych. To jest,
to nie jest przepełnieniem:

znak ze znakiem a = SCHAR_MAX;
a++;

-fsanitize=granice
Ta opcja umożliwia instrumentację granic tablicy. Różne poza granicami
dostępy są wykrywane. Elastyczne elementy tablicy, elastyczne tablice podobne do elementów tablicy,
a inicjatory zmiennych z pamięcią statyczną nie są oprzyrządowane.

-fsanitize=wyrównanie
Ta opcja umożliwia sprawdzenie wyrównania wskaźników podczas ich wyłuskiwania,
lub gdy odniesienie jest związane z niewystarczająco wyrównanym celem, lub gdy metoda lub
Konstruktor jest wywoływany na niewystarczająco wyrównanym obiekcie.

-fsanitize=rozmiar-obiektu
Ta opcja umożliwia instrumentację odwołań do pamięci za pomocą
Funkcja „__builtin_object_size”. Różne są dostępy do wskaźnika poza granicami
wykryte.

-fsanitize=float-dzielenie-przez-zero
Wykryj dzielenie zmiennoprzecinkowe przez zero. W przeciwieństwie do innych podobnych opcji,
-fsanitize=float-dzielenie-przez-zero nie jest włączony przez -fsanitize=nieokreślony, od
dzielenie zmiennoprzecinkowe przez zero może być uzasadnionym sposobem uzyskania nieskończoności
i NaN.

-fsanitize=float-cast-overflow
Ta opcja umożliwia sprawdzanie konwersji typu zmiennoprzecinkowego na liczby całkowite. Sprawdzamy
aby wynik konwersji nie przepełnił się. W przeciwieństwie do innych podobnych
Opcje -fsanitize=float-cast-overflow nie jest włączony przez -fsanitize=nieokreślony.
Ta opcja nie działa dobrze z włączonymi wyjątkami „FE_INVALID”.

-fsanitize=niepusty atrybut
Ta opcja umożliwia instrumentację wywołań, sprawdzanie, czy wartości null nie są
przekazywane do argumentów oznaczonych jako wymagające wartości innej niż null przez funkcję „nonnull”
atrybutów.

-fsanitize=zwraca-nonnull-atrybut
Ta opcja umożliwia instrumentację instrukcji return w funkcjach oznaczonych
Atrybut funkcji „returns_nonnull”, aby wykryć zwracanie wartości null z takich
funkcje.

-fsanitize=bool
Ta opcja umożliwia instrumentację obciążeń z bool. Jeśli wartość inna niż 0/1
jest załadowany, pojawia się błąd wykonania.

-fsanitize=wyliczanie
Ta opcja umożliwia instrumentację obciążeń z typu wyliczeniowego. Jeśli wartość
poza zakresem wartości dla typu wyliczenia jest ładowany, błąd wykonania jest
wydany.

-fsanitize=vptr
Ta opcja umożliwia instrumentację wywołań funkcji członkowskich C++, dostęp do członków
i niektóre konwersje między wskaźnikami do klas bazowych i pochodnych, aby zweryfikować
obiekt, do którego się odwołuje, ma poprawny typ dynamiczny.

Kompletujemy wszystkie dokumenty (wymagana jest kopia paszportu i 4 zdjęcia) potrzebne do -ftrapv powoduje emisję pułapek dla podpisanych przepełnień, -fsanitize=nieokreślony
daje komunikat diagnostyczny. Obecnie działa to tylko dla rodziny języków C.

-fno-sanitize=wszystkie
Ta opcja wyłącza wszystkie wcześniej włączone środki dezynfekujące. -fsanitize=wszystkie nie jest
dozwolone, ponieważ niektóre środki dezynfekujące nie mogą być używane razem.

-fasan-przesunięcie-cienia=numer
Ta opcja wymusza na GCC użycie niestandardowego przesunięcia cienia w kontrolach AddressSanitizer. To jest
przydatne do eksperymentowania z różnymi układami pamięci cieni w Kernel
AdresSanitizer.

-fsanitize-recover[=optuje]
-fsanitize-recover= kontroluje tryb odzyskiwania po błędzie dla środków dezynfekujących wymienionych w przecinku
oddzielona lista optuje. Włączenie tej opcji dla składnika odkażającego powoduje, że:
spróbuj kontynuować działanie programu tak, jakby nie wystąpił żaden błąd. Oznacza to wielokrotność
błędy uruchomieniowe mogą być zgłaszane w pojedynczym uruchomieniu programu, a kod wyjścia
program może wskazywać sukces, nawet jeśli zostały zgłoszone błędy. ten
-fno-sanitize-recover= opcja może być użyta do zmiany tego zachowania: tylko pierwsza
wykryty błąd jest zgłaszany i program kończy pracę z niezerowym kodem zakończenia.

Obecnie ta funkcja działa tylko dla -fsanitize=nieokreślony (i jego podopcje z wyjątkiem
dla -fsanitize=nieosiągalny dzięki -fsanitize=powrót), -fsanitize=float-cast-overflow,
-fsanitize=float-dzielenie-przez-zero dzięki -fsanitize=adres-jądra. Dla tych środków odkażających
odzyskiwanie po błędzie jest domyślnie włączone. -fsanitize-recover=all dzięki
-fno-sanitize-recover=wszystkie jest również akceptowana, ta pierwsza umożliwia odzyskanie zdrowia dla wszystkich
środki odkażające, które go obsługują, ta ostatnia wyłącza odzyskiwanie dla wszystkich środków odkażających, które
Wspieraj to.

Składnia bez wyraźnego optuje parametr jest przestarzały. Jest to równoważne

-fsanitize-recover=undefined,float-cast-overflow,float-divide-by-zero

Podobnie -fno-sanitize-recover odpowiada

-fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-zero

-fsanitize-undefined-trap-on-error
Pandemia -fsanitize-undefined-trap-on-error opcja nakazuje kompilatorowi raport
niezdefiniowane zachowanie przy użyciu "__builtin_trap" zamiast procedury bibliotecznej "libubsan".
Zaletą tego jest to, że biblioteka „libbsan” nie jest potrzebna i nie jest połączona
w, dzięki czemu można go używać nawet w środowiskach wolnostojących.

-f-wskaźnik-kontrolny-granice
Włącz instrumentację sprawdzania granic wskaźnika. Każde odwołanie do pamięci jest oprzyrządowane
ze sprawdzaniem wskaźnika używanego do dostępu do pamięci z ograniczeniami z tym związanymi
wskaźnik.

Obecnie dostępna jest tylko implementacja dla Intel MPX, więc x86 target i
-mmpx są wymagane do włączenia tej funkcji. Oprzyrządowanie oparte na MPX wymaga
biblioteka uruchomieniowa do włączania MPX w sprzęcie i obsługi sygnałów naruszeń granic. Za pomocą
domyślnie, gdy -f-wskaźnik-kontrolny-granice dzięki -mmpx opcje są używane do łączenia programu,
Łącza sterowników GCC przeciwko libmpx biblioteka uruchomieniowa i libmpxwrappers Biblioteka. Ono
przekazuje również '-z bndplt' do konsolidatora w przypadku, gdy obsługuje tę opcję (która jest zaznaczona
w konfiguracji libmpx). Zauważ, że stare wersje linkera mogą ignorować opcję. Złoto
linker nie obsługuje opcji '-z bndplt'. Bez obsługi '-z bndplt' w linkerze all
wywołania bibliotek dynamicznych tracą przekroczone granice, zmniejszając ogólny poziom ochrony. Jego
wysoce zalecane jest użycie linkera z obsługą '-z bndplt'. W przypadku, gdy taki linker nie jest
dostępne, zaleca się zawsze używać -static-libmpxwrappers dla lepszej ochrony
poziom lub użyj -statyczny aby całkowicie uniknąć zewnętrznych wywołań do bibliotek dynamicznych. MPX-
oprzyrządowanie oparte na instrumentach może być używane do debugowania, a także może być włączone do produkcji
kod w celu zwiększenia bezpieczeństwa programu. W zależności od użytkowania możesz mieć różne
wymagania dotyczące biblioteki wykonawczej. Aktualna wersja biblioteki uruchomieniowej MPX
jest bardziej zorientowany na użycie jako narzędzie do debugowania. Użycie biblioteki wykonawczej MPX implikuje
-lpthread. Zobacz też -static-libmpx. Można mieć wpływ na zachowanie biblioteki wykonawczej
za pomocą różnych CHKP_RT_* Zmienne środowiska. Widzieć
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> po więcej
detale.

Wygenerowane oprzyrządowanie może być sterowane przez różne -fchkp-* opcje i przez
Atrybut pola struktury „bnd_variable_size” oraz „bnd_legacy” i „bnd_instrument”
atrybuty funkcji. GCC zapewnia również szereg wbudowanych funkcji do sterowania
Kontroler granic wskaźnika.

-fchkp-check-incomplete-type
Generuj kontrole granic wskaźnika dla zmiennych o niepełnym typie. Włączone przez
domyślna.

-fchkp-wąskie granice
Kontroluje granice używane przez narzędzie Pointer Bounds Checker dla wskaźników do pól obiektów. Gdyby
zawężanie jest włączone, a następnie używane są granice pól. W przeciwnym razie używane są ograniczenia obiektów.
Zobacz też -fchkp-wąska-do-najbardziej wewnętrznej tablicy dzięki -fchkp-pierwsze-pole-ma-własne-granice.
Domyślnie włączone.

-fchkp-pierwsze-pole-ma-własne-granice
Wymusza użycie zawężonych granic dla adresu pierwszego w przypadku wskaźnika granic
pole w strukturze. Domyślnie wskaźnik do pierwszego pola ma te same granice
jako wskaźnik do całej struktury.

-fchkp-wąska-do-najbardziej wewnętrznej tablicy
Wymusza używanie przez narzędzie Pointer Bounds Checker granic najbardziej wewnętrznych tablic w przypadku zagnieżdżonych
statyczny dostęp do tablicy. Domyślnie ta opcja jest wyłączona i ogranicza się do najbardziej zewnętrznego
używane są tablice.

-fchkp-optymalizuj
Włącza optymalizacje sprawdzania granic wskaźnika. Domyślnie włączone przy optymalizacji
poziomy -O, -O2, -O3.

-fchkp-use-fast-string-functions
Umożliwia korzystanie z *_nobnd wersji funkcji tekstowych (bez kopiowania granic) przez Pointer
Kontroler granic. Domyślnie wyłączone.

-fchkp-use-nochk-string-functions
Umożliwia korzystanie z *_nochk wersji funkcji tekstowych (bez sprawdzania granic) przez Pointer
Kontroler granic. Domyślnie wyłączone.

-fchkp-use-static-bounds
Zezwalaj kontrolerowi granic wskaźnika na generowanie granic statycznych zawierających granice statyczne
zmienne. Domyślnie włączone.

-fchkp-use-static-const-bounds
Użyj statycznie zainicjowanych granic dla stałych granic zamiast ich generowania
czas, w którym są wymagane. Domyślnie włączone, gdy -fchkp-use-static-bounds jest włączony.

-fchkp-traktuj-zero-dynamic-rozmiar-jako-nieskończony
Dzięki tej opcji obiekty o niepełnym typie, których dynamicznie uzyskiwany rozmiar wynosi zero
są traktowane jako mające nieskończony rozmiar zamiast tego przez narzędzie Pointer Bounds Checker. Ta opcja
może być pomocne, jeśli program jest połączony z biblioteką, w przypadku której brakuje informacji o rozmiarze
symbolika. Domyślnie wyłączone.

-fchkp-sprawdzanie-odczyt
Nakazuje programowi Pointer Bounds Checker generowanie kontroli dla wszystkich dostępów odczytu do pamięci.
Domyślnie włączone.

-fchkp-czek-zapis
Nakazuje programowi Pointer Bounds Checker generowanie kontroli dla wszystkich praw zapisu do pamięci.
Domyślnie włączone.

-fchkp-store-bounds
Nakazuje programowi Pointer Bounds Checker generowanie magazynów granic dla zapisów wskaźnika.
Domyślnie włączone.

-fchkp-instrument-wywołania
Instruuje narzędzie Pointer Bounds Checker, aby przekazywał granice wskaźnika do wywołań. Domyślnie włączone.

-fchkp-tylko-oznaczony-instrument
Instruuje narzędzie Pointer Bounds Checker do obsługi tylko funkcji oznaczonych symbolem
Atrybut „bnd_instrument”. Domyślnie wyłączone.

-fchkp-use-wrappers
Umożliwia programowi Pointer Bounds Checker zastępowanie wywołań funkcji wbudowanych wywołaniami do
funkcje opakowujące. Kiedy -fchkp-use-wrappers służy do łączenia programu, sterownika GCC
automatycznie łączy przeciwko libmpxwrappers. Zobacz też -static-libmpxwrappers. Włączony
domyślnie.

-fdump-final-insns[=filet]
Zrzuć ostateczną reprezentację wewnętrzną (RTL) do filet. Jeśli opcjonalnym argumentem jest
pominięty (lub jeśli filet to "."), nazwa pliku zrzutu jest określana przez dołączenie
".gkd" do nazwy pliku wyjściowego kompilacji.

-fcompare-debug[=optuje]
Jeśli podczas kompilacji nie wystąpi żaden błąd, uruchom kompilator po raz drugi, dodając optuje dzięki
-fcompare-debug-second do argumentów przekazanych do drugiej kompilacji. Zrzuć
ostateczna reprezentacja wewnętrzna w obu kompilacjach i wypisuje błąd, jeśli się różnią.

Jeśli znak równości zostanie pominięty, domyślnie -przełączanie Jest używane.

Zmienna środowiskowa GCC_COMPARE_DEBUG, jeśli zdefiniowano, niepuste i niezerowe,
domyślnie umożliwia -fcompare-debug. Jeśli GCC_COMPARE_DEBUG jest zdefiniowany jako ciąg
zaczynając od myślnika, następnie używa się go do optuje, w przeciwnym razie domyślny -przełączanie is
używany.

-fporównaj-debug=, ze znakiem równości, ale bez optuje, jest równa
-fno-porównaj-debug, co wyłącza zrzucanie ostatecznej reprezentacji i
druga kompilacja, zapobiegająca nawet GCC_COMPARE_DEBUG od wejścia w życie.

Aby zweryfikować pełne pokrycie podczas -fcompare-debug testowanie, zestaw GCC_COMPARE_DEBUG powiedzieć
-fcompare-debug-not-overrided, który GCC odrzuca jako nieprawidłową opcję we wszystkich rzeczywistych
kompilacja (zamiast wstępnego przetwarzania, montażu lub łączenia). Aby otrzymać tylko ostrzeżenie,
ustawienie GCC_COMPARE_DEBUG do -w%n-fcompare-debug nie zastąpione zrobi.

-fcompare-debug-second
Ta opcja jest niejawnie przekazywana do kompilatora dla drugiej żądanej kompilacji
by -fcompare-debugwraz z opcjami wyciszania ostrzeżeń i pomijania innych opcji
spowodowałoby to wyjście kompilatora z efektami ubocznymi do plików lub na standardowe wyjście.
Pliki zrzutów i zachowane pliki tymczasowe są zmieniane tak, aby zawierały „.gk”
dodatkowe rozszerzenie podczas drugiej kompilacji, aby uniknąć ich nadpisania
generowane przez pierwsze.

Gdy ta opcja jest przekazywana do sterownika kompilatora, powoduje to drugim kompilacja do
być pominiętym, co czyni go przydatnym tylko do debugowania właściwego kompilatora.

-feliminacja-krasnoludek2-dupy
Kompresuj informacje debugowania DWARF 2, eliminując zduplikowane informacje o
każdy symbol. Ta opcja ma sens tylko podczas generowania debugowania DWARF 2
informacje z -gdwarf-2.

-femit-struct-debug-base only
Emituj informacje debugowania dla typów podobnych do struktury tylko wtedy, gdy podstawowa nazwa
plik źródłowy kompilacji pasuje do podstawowej nazwy pliku, w którym zdefiniowana jest struktura.

Ta opcja znacznie zmniejsza rozmiar informacji debugowania, ale w
znaczna potencjalna utrata informacji o typie dla debugera. Widzieć
-femit-struct-debug-reduced dla mniej agresywnej opcji. Widzieć
-femit-struct-debug-detailed dla bardziej szczegółowej kontroli.

Ta opcja działa tylko z DWARF 2.

-femit-struct-debug-reduced
Emituj informacje debugowania dla typów podobnych do struktury tylko wtedy, gdy podstawowa nazwa
plik źródłowy kompilacji jest zgodny z nazwą bazową pliku, w którym zdefiniowany jest typ,
chyba że struktura jest szablonem lub jest zdefiniowana w nagłówku systemu.

Ta opcja znacznie zmniejsza rozmiar informacji debugowania, z niektórymi
potencjalna utrata informacji o typie dla debugera. Widzieć -femit-struct-debug-base only
dla bardziej agresywnej opcji. Widzieć -femit-struct-debug-detailed po więcej szczegółów
kontrola.

Ta opcja działa tylko z DWARF 2.

-femit-struct-debug-detailed[=lista specyfikacji]
Określ typy podobne do struktury, dla których kompilator generuje informacje debugowania. ten
celem jest zmniejszenie zduplikowanych informacji debugowania struktury między różnymi plikami obiektowymi
w ramach tego samego programu.

Ta opcja jest szczegółową wersją -femit-struct-debug-reduced dzięki
-femit-struct-debug-base only, który służy do większości potrzeb.

Specyfikacja ma składnię[reż:|indeks:][kolejność:|gatunek:](każdy|sys|baza|Żaden)

Opcjonalne pierwsze słowo ogranicza specyfikację do struktur, które są używane bezpośrednio
(reż:) lub używane pośrednio (indeks:). Typ struktury jest używany bezpośrednio, gdy jest typem
zmiennej, członka. Zastosowania pośrednie powstają poprzez wskaźniki do struktur. To jest,
jeśli użycie niekompletnej struktury jest poprawne, użycie jest pośrednie. Przykładem jest struct
jeden bezpośredni; struct dwa * pośredni;.

Opcjonalne drugie słowo ogranicza specyfikację do zwykłych struktur (kolejność:) lub
ogólne struktury (gatunek:). Ogólne struktury są nieco skomplikowane do wyjaśnienia. Dla C++,
są to niejawne specjalizacje klas szablonowych, czyli klas nieszablonowych
w ramach powyższego. Inne języki programowania mają generyki, ale
-femit-struct-debug-detailed jeszcze ich nie wdraża.

Trzecie słowo określa pliki źródłowe dla tych struktur, dla których kompilator
powinien emitować informacje debugowania. Wartości Żaden dzięki każdy mają normalne znaczenie. ten
wartość baza oznacza, że ​​baza nazwy pliku, w którym deklaracja typu
pojawia się musi odpowiadać podstawie nazwy głównego pliku kompilacji. W praktyce,
oznacza to, że podczas kompilacji foo.c, informacje debugowania są generowane dla typów
zadeklarowane w tym pliku i foo.h, ale nie inne pliki nagłówkowe. Wartość sys znaczy
te typy satysfakcjonujące baza lub zadeklarowane w nagłówkach systemu lub kompilatora.

Być może trzeba będzie poeksperymentować, aby określić najlepsze ustawienia dla Twojej aplikacji.

Wartość domyślna to -femit-struct-debug-detailed=wszystkie.

Ta opcja działa tylko z DWARF 2.

-fno-merge-debug-strings
Poleć linkerowi, aby nie scalał ze sobą ciągów w informacjach debugowania, które są
identyczne w różnych plikach obiektowych. Scalanie nie jest obsługiwane przez wszystkie asemblery lub
wyrazy łączące. Scalanie zmniejsza rozmiar informacji debugowania w pliku wyjściowym w
koszt wydłużenia czasu przetwarzania linków. Scalanie jest domyślnie włączone.

-fdebug-mapa-prefiksów=stary=Nowy
Podczas kompilacji plików w katalogu stary, zapisz informacje debugowania opisujące je jako
in Nowy zamiast.

-fno-dwarf2-cfi-asm
Emituj informacje o rozwijaniu DWARF 2 jako wygenerowane przez kompilator sekcji „.eh_frame” zamiast używania
Dyrektywy GAS „.cfi_*”.

-p Wygeneruj dodatkowy kod, aby zapisać informacje o profilu odpowiednie dla programu analitycznego
prof. Musisz użyć tej opcji podczas kompilowania plików źródłowych, o których chcesz uzyskać dane,
i musisz go również użyć podczas łączenia.

-pg Wygeneruj dodatkowy kod, aby zapisać informacje o profilu odpowiednie dla programu analitycznego
gprof. Musisz użyć tej opcji podczas kompilowania plików źródłowych, o których chcesz uzyskać dane,
i musisz go również użyć podczas łączenia.

-Q Sprawia, że ​​kompilator wypisuje nazwę każdej funkcji podczas jej kompilacji i wyświetla niektóre
statystyki dotyczące każdego przejazdu po jego zakończeniu.

-ftime-raport
Sprawia, że ​​kompilator drukuje statystyki dotyczące czasu zużywanego przez każde przejście, gdy
wykończenia.

-fmem-raport
Sprawia, że ​​kompilator drukuje statystyki dotyczące trwałej alokacji pamięci, gdy
wykończenia.

-fmem-raport-wpa
Sprawia, że ​​kompilator drukuje statystyki dotyczące stałego przydziału pamięci dla WPA
tylko faza.

-fpre-ipa-mem-raport
-fpost-ipa-mem-raport
Sprawia, że ​​kompilator drukuje statystyki dotyczące stałego przydziału pamięci przed lub
po optymalizacji międzyproceduralnej.

-f-raport-profil
Sprawia, że ​​kompilator drukuje statystyki dotyczące spójności (szacowanego) profilu
i efekt poszczególnych przejazdów.

-fstack-użycie
Sprawia, że ​​kompilator wyprowadza informacje o użyciu stosu dla programu, w odniesieniu do funkcji
podstawa. Nazwa pliku zrzutu jest tworzona przez dołączenie .su do auxname. auxname is
generowane z nazwy pliku wyjściowego, jeśli jest wyraźnie określone i nie jest
wykonywalny, w przeciwnym razie jest to podstawowa nazwa pliku źródłowego. Wpis składa się z
trzy pola:

* Nazwa funkcji.

* Liczba bajtów.

* Co najmniej jeden kwalifikator: „statyczny”, „dynamiczny”, „ograniczony”.

Kwalifikator „static” oznacza, że ​​funkcja manipuluje stosem statycznie: a
stała liczba bajtów jest alokowana dla ramki przy wejściu do funkcji i zwalniana w dniu
wyjście z funkcji; w funkcji nie są dokonywane żadne inne regulacje stosu. Drugi
pole to ta stała liczba bajtów.

Kwalifikator „dynamic” oznacza, że ​​funkcja dynamicznie manipuluje stosem: in
oprócz statycznej alokacji opisanej powyżej, korekty stosu są dokonywane w
treść funkcji, na przykład, aby wypychać/wyskakiwać argumenty wokół wywołań funkcji. Jeśli
występuje również kwalifikator „ograniczony”, kwota tych korekt jest ograniczona do
czas kompilacji, a drugie pole to górna granica całkowitej ilości użytego stosu
przez funkcję. Jeśli nie występuje, kwota tych korekt nie jest ograniczona
w czasie kompilacji, a drugie pole reprezentuje tylko część ograniczoną.

-f-łuki-profilu
Dodaj kod, aby program działał łuki są oprzyrządowane. Podczas wykonywania programu
rejestruje, ile razy każda gałąź i połączenie jest wykonywane i ile razy jest wykonywane
lub zwraca. Kiedy skompilowany program kończy działanie, zapisuje te dane do pliku o nazwie
auxname.gcda dla każdego pliku źródłowego. Dane mogą być wykorzystywane do profilów ukierunkowanych
optymalizacje (-prawdopodobieństwa-oddziału) lub do analizy pokrycia testami
(-pokrycie-ftest). Każdy plik obiektowy auxname jest generowany z nazwy
plik wyjściowy, jeśli jest wyraźnie określony i nie jest ostatecznym plikiem wykonywalnym, w przeciwnym razie
to podstawowa nazwa pliku źródłowego. W obu przypadkach dowolny przyrostek jest usuwany (np.
foo.gcda dla pliku wejściowego reż/foo.club reż/foo.gcda dla pliku wyjściowego określonego jako -o
reż/foo.o).

--zasięg
Ta opcja służy do kompilowania i łączenia kodu oprzyrządowanego do analizy pokrycia. ten
opcja jest synonimem -f-łuki-profilu -pokrycie-ftest (podczas kompilacji) i -lgcov
(podczas łączenia). Więcej informacji znajdziesz w dokumentacji tych opcji.

* Skompiluj pliki źródłowe za pomocą -f-łuki-profilu plus optymalizacja i generowanie kodu
opcje. Do analizy pokrycia testowego użyj dodatkowego -pokrycie-ftest opcja.
Nie musisz profilować każdego pliku źródłowego w programie.

* Połącz swoje pliki obiektów z -lgcov or -f-łuki-profilu (to ostatnie oznacza
dawny).

* Uruchom program na reprezentatywnym obciążeniu, aby wygenerować profil łuku
Informacja. Można to powtórzyć dowolną ilość razy. Możesz biegać równolegle
wystąpień programu i pod warunkiem, że system plików obsługuje blokowanie,
pliki danych zostaną poprawnie zaktualizowane. Wykrywane są również połączenia „fork” i
poprawnie obsługiwane (podwójne liczenie nie nastąpi).

* W celu optymalizacji ukierunkowanej na profil, skompiluj ponownie pliki źródłowe z tym samym
opcje optymalizacji i generowania kodu plus -prawdopodobieństwa-oddziału.

* Do analizy pokrycia testowego użyj gcov do generowania informacji czytelnych dla człowieka z
die,en .gcno dzięki .gcda pliki. Zapoznaj się z gcov dokumentacja do dalszych
informacje.

Z -f-łuki-profilu, dla każdej funkcji twojego programu GCC tworzy przepływ programu
graph, a następnie znajduje drzewo opinające dla wykresu. Tylko łuki, które nie są na
drzewo opinające musi być oprzyrządowane: kompilator dodaje kod, aby policzyć liczbę
razy, kiedy te łuki są wykonywane. Kiedy łuk jest jedynym wyjściem lub jedynym wejściem do
blok, kod oprzyrządowania można dodać do bloku; w przeciwnym razie nowy podstawowy
należy utworzyć blok do przechowywania kodu instrumentacji.

-pokrycie-ftest
Utwórz plik notatek, który gcov Narzędzie do obsługi kodu, którego można użyć do wyświetlenia programu
zasięg. Plik notatek każdego pliku źródłowego nosi nazwę auxname.gcno. Zapoznaj się z
-f-łuki-profilu opcja powyżej dla opisu auxname i instrukcje, jak
generować dane pokrycia testowego. Dane pokrycia są bardziej zgodne z plikami źródłowymi, jeśli:
nie optymalizujesz.

-fdbg-lista-cnt
Wydrukuj nazwę i górną granicę licznika dla wszystkich liczników debugowania.

-fdbg-cnt=lista kontrwartości
Ustaw górną granicę wewnętrznego licznika debugowania. lista kontrwartości jest wartością oddzieloną przecinkami
Lista Nazwa:wartość pary, które ustawiają górną granicę każdego licznika debugowania Nazwa do
wartość. Wszystkie liczniki debugowania mają początkową górną granicę „UINT_MAX”; zatem "dbg_cnt"
zwraca true zawsze, chyba że górna granica jest ustawiona przez tę opcję. Na przykład z
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" zwraca prawdę tylko dla pierwszych 10
modły.

-wykonalne-uprzejmy-przechodzić
-fwyłącz-uprzejmy-przechodzić=lista-zakresów
Jest to zestaw opcji, które są używane do jawnego wyłączania/włączania optymalizacji
Karnety. Te opcje są przeznaczone do debugowania GCC. Użytkownicy kompilatora powinni
zamiast tego użyj zwykłych opcji włączania/wyłączania kart.

-fdisable-ipa-przechodzić
Wyłącz przepustkę IPA przechodzić. przechodzić to nazwa przepustki. Jeśli to samo podanie jest statyczne
wywoływane w kompilatorze wielokrotnie, do nazwy przepustki należy dodać a
kolejny numer zaczynający się od 1.

-fdisable-rtl-przechodzić
-fdisable-rtl-przechodzić=lista-zakresów
Wyłącz przepustkę RTL przechodzić. przechodzić to nazwa przepustki. Jeśli to samo podanie jest statyczne
wywoływane w kompilatorze wielokrotnie, do nazwy przepustki należy dodać a
kolejny numer zaczynający się od 1. lista-zakresów to rozdzielona przecinkami lista
zakresy funkcji lub nazwy asemblerów. Każdy zakres to para liczb oddzielona znakiem a
okrężnica. Zakres obejmuje obie strony. Jeśli zakres jest trywialny, liczba
para może być uproszczona jako pojedyncza liczba. Jeśli węzeł wykresu wywołań funkcji jest
uid mieści się w jednym z określonych zakresów, przechodzić jest za to wyłączony
funkcjonować. The uid jest wyświetlany w nagłówku funkcji pliku zrzutu, a pass
nazwy można zrzucić za pomocą opcji -fdump-passes.

-fdisable-drzewo-przechodzić
-fdisable-drzewo-przechodzić=lista-zakresów
Wyłącz przepustkę do drzewa przechodzić. Zobaczyć -fdisable-rtl dla opisu opcji
argumenty.

-fenable-ipa-przechodzić
Włącz przepustkę IPA przechodzić. przechodzić to nazwa przepustki. Jeśli to samo podanie jest statyczne
wywoływane w kompilatorze wielokrotnie, do nazwy przepustki należy dodać a
kolejny numer zaczynający się od 1.

-możliwy-rtl-przechodzić
-możliwy-rtl-przechodzić=lista-zakresów
Włącz przepustkę RTL przechodzić. Zobaczyć -fdisable-rtl dla opisu argumentu opcji i
przykłady.

-fenable-drzewo-przechodzić
-fenable-drzewo-przechodzić=lista-zakresów
Włącz przepustkę do drzewa przechodzić. Zobaczyć -fdisable-rtl dla opisu argumentów opcji.

Oto kilka przykładów pokazujących zastosowania tych opcji.

# wyłącz ccp1 dla wszystkich funkcji
-fdisable-drzewo-ccp1
# wyłącz pełne rozwijanie dla funkcji, której uid węzła cgraph wynosi 1
-fenable-drzewo-cunroll=1
# wyłącz gcse2 dla funkcji z następujących zakresów [1,1],
# [300,400 400,1000] i [XNUMX XNUMX]
# wyłącz gcse2 dla funkcji foo i foo2
-fdisable-rtl-gcse2=foo,foo2
# wyłącz wczesne inlining
-fdisable-drzewo-einline
# wyłącz inlining ipa
-fdisable-ipa-inline
# włącz pełne rozwijanie drzewa
-fenable-drzewo-rozwijanie

-dlisty
-fdump-rtl-przechodzić
-fdump-rtl-przechodzić=filename
Mówi, aby robić zrzuty debugowania podczas kompilacji w godzinach określonych przez listy, To
służy do debugowania przebiegów kompilatora opartych na RTL. Nazwy plików dla większości
zrzutów jest tworzonych przez dodanie numeru przepustki i słowa do nazwa zrzutuI
pliki są tworzone w katalogu pliku wyjściowego. W przypadku =filename opcja,
zrzut jest wyprowadzany na podany plik zamiast na pliki zrzutu o numerach przejść. Notatka
że numer przepustki jest obliczany statycznie, gdy przepustki są rejestrowane na przepustce
menedżer. Tak więc numeracja nie jest związana z dynamiczną kolejnością wykonywania
Karnety. W szczególności przepustka zainstalowana przez wtyczkę może mieć nawet ponad 200
jeśli wykonał się dość wcześnie. nazwa zrzutu jest generowany z nazwy pliku wyjściowego,
jeśli jest wyraźnie określony i nie jest wykonywalny, w przeciwnym razie jest to nazwa bazowa
plik źródłowy. Te przełączniki mogą mieć różne efekty, gdy -E jest używany do
wstępne przetwarzanie.

Zrzuty debugowania można włączyć za pomocą -fdump-rtl przełącznik czy coś -d opcja listy. Tutaj
są możliwe litery do użycia w przechodzić dzięki listyi ich znaczenie:

-fdump-rtl-wyrównania
Zrzut po wyliczeniu wyrównania gałęzi.

-fdump-rtl-asmcons
Zrzuć po naprawieniu instrukcji rtl, które mają niespełnione ograniczenia wejścia/wyjścia.

-fdump-rtl-auto_inc_dec
Zrzut po wykryciu auto-inc-dec. Ta przepustka jest uruchamiana tylko na architekturach, które
mieć instrukcje auto inc lub auto dec.

-fdump-rtl-barier
Wysyp po oczyszczeniu instrukcji bariery.

-fdump-rtl-bbpart
Wysyp po podzieleniu na gorące i zimne bloki podstawowe.

-fdump-rtl-bbro
Zrzut po zmianie kolejności bloków.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 dzięki -fdump-rtl-btl2 włącz zrzucanie po celu dwóch gałęzi
optymalizacja obciążenia przechodzi.

-fdump-rtl-bypass
Zrzut po obejściu skoku i optymalizacja przepływu sterowania.

-fdump-rtl-kombinacja
Zrzut po przejściu kombinacji instrukcji RTL.

-fdump-rtl-compgotos
Zrzuć po zduplikowaniu obliczonych gotos.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2, -fdump-rtl-ce3 włącz zrzucanie po trzech
jeśli konwersja przejdzie.

-fdump-rtl-cprop_hardreg
Zrzut po propagacji kopii rejestru.

-fdump-rtl-csa
Zrzuć po połączeniu korekt stosu.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 dzięki -fdump-rtl-cse2 włącz zrzucanie po dwóch wspólnych
eliminacja podwyrażeń przechodzi.

-fdump-rtl-dce
Zrzuć po tym, jak samodzielna eliminacja martwego kodu przejdzie.

-fdump-rtl-dbr
Zrzut po opóźnionym zaplanowaniu oddziałów.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 dzięki -fdump-rtl-dce2 włącz zrzucanie po dwóch martwych sklepach
eliminacja przechodzi.

-fdump-rtl-eh
Zrzut po sfinalizowaniu kodu obsługi EH.

-fdump-rtl-eh_ranges
Zrzut po konwersji regionów zasięgu obsługi EH.

-fdump-rtl-rozwiń
Zrzut po wygenerowaniu RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 dzięki -fdump-rtl-fwprop2 włącz zrzucanie po dwóch do przodu
propagacja przechodzi.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 dzięki -fdump-rtl-gcse2 włącz dumping po globalnym wspólnym
eliminacja podwyrażeń.

-fdump-rtl-init-regs
Zrzut po inicjalizacji rejestrów.

-fdump-rtl-initvals
Zrzut po obliczeniu zestawów wartości początkowych.

-fdump-rtl-into_cfglayout
Zrzuć po konwersji do trybu cfglayout.

-fdump-rtl-ira
Zrzut po iterowanym przydziale rejestru.

-fdump-rtl-skok
Zrzut po drugiej optymalizacji skoku.

-fdump-rtl-loop2
-fdump-rtl-loop2 umożliwia zrzucanie po zakończeniu optymalizacji pętli rtl.

-fdump-rtl-mach
Zrzut po wykonaniu przepustki reorganizacji zależnej od maszyny, jeśli przeszło
istnieje.

-fdump-rtl-mode_sw
Zrzut po usunięciu nadmiarowych przełączników trybu.

-fdump-rtl-rnreg
Zrzut po zmianie numeracji rejestru.

-fdump-rtl-outof_cfglayout
Zrzut po konwersji z trybu cfglayout.

-fdump-rtl-wizjer2
Wysyp po przejściu przez wizjer.

-fdump-rtl-po przeładowaniu
Zrzut po optymalizacjach po przeładowaniu.

-fdump-rtl-pro_and_epilog
Zrzut po wygenerowaniu prologów i epilogów funkcji.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 dzięki -fdump-rtl-sched2 włącz zrzucanie po podstawowym bloku
planowanie przechodzi.

-fdump-rtl-ree
Zrzut po wyeliminowaniu znaku/zera rozszerzenia.

-fdump-rtl-seqabstr
Zrzut po typowym odkryciu sekwencji.

-fdump-rtl-skrót
Wysyp po skróceniu gałęzi.

-fdump-rtl-rodzeństwo
Zrzut po optymalizacji połączeń rodzeństwa.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
Opcje te umożliwiają zrzut po pięciu rundach dzielenia instrukcji.

-fdump-rtl-sms
Zrzut po planowaniu modulo. Ta przepustka jest uruchamiana tylko na niektórych architekturach.

-fdump-rtl-stos
Zrzut po konwersji z rejestrów „płaskiego pliku rejestru” GCC do x87
rejestry stosopodobne. Ta przepustka jest uruchamiana tylko na wariantach x86.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 dzięki -fdump-rtl-subreg2 włącz zrzucanie po dwóch subreg
przechodzi ekspansję.

-fdump-rtl-unshare
Zrzuć po tym, jak wszystkie rtl zostały cofnięte.

-fdump-rtl-vartrack
Zrzut po śledzeniu zmiennych.

-fdump-rtl-vregs
Zrzut po konwersji rejestrów wirtualnych na rejestry twarde.

-fdump-rtl-web
Zrzut po podziale zasięgu na żywo.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Te zrzuty są zdefiniowane, ale zawsze tworzą puste pliki.

-W
-fdump-rtl-all
Wyprodukuj wszystkie zrzuty wymienione powyżej.

-dA Opisz dane wyjściowe asemblera różnymi informacjami dotyczącymi debugowania.

-dD Zrzuć wszystkie definicje makr, pod koniec przetwarzania wstępnego, oprócz normalnego
wyjście.

-dH Utwórz zrzut pamięci, gdy wystąpi błąd.

-dp Zanotuj wyjście asemblera komentarzem wskazującym, który wzorzec i
używana jest alternatywa. Drukowana jest również długość każdej instrukcji.

-dP Zrzuć RTL w wyjściu asemblera jako komentarz przed każdą instrukcją. Także
włącza się -dp adnotacja.

-dx Po prostu wygeneruj RTL dla funkcji zamiast ją kompilować. Zwykle używany z
-fdump-rtl-rozwiń.

-fdump-noaddr
Podczas wykonywania zrzutów debugowania pomiń wyjście adresu. To sprawia, że ​​bardziej realne jest
użyj diff na debugowaniu zrzutów dla wywołań kompilatora z różnymi plikami binarnymi kompilatora
i/lub inne lokalizacje początkowe tekstu / bss / danych / sterty / stosu / dso.

-freport-błąd
Zbierz i zrzuć informacje debugowania do pliku tymczasowego, jeśli ICE w kompilatorze C/C++
wystąpił.

-fdump-nienumerowane
Podczas wykonywania zrzutów debugowania pomiń numery instrukcji i adresuj wyjście. Ten
sprawia, że ​​łatwiej jest używać diff do debugowania zrzutów dla wywołań kompilatora z
różne opcje, w szczególności z i bez -g.

-fdump-nienumerowane-linki
Podczas debugowania zrzutów (zobacz -d opcja powyżej), pomiń numery instrukcji dla
linki do poprzedniej i następnej instrukcji w kolejności.

-fdump-jednostka-tłumaczenia (tylko C++)
-fdump-jednostka-tłumaczenia-Opcje (tylko C++)
Zrzuć reprezentację struktury drzewa dla całej jednostki tłumaczeniowej do pliku.
Nazwa pliku jest tworzona przez dołączenie .tu do nazwy pliku źródłowego, a plik to
utworzony w tym samym katalogu, co plik wyjściowy. Jeśli -Opcje używany jest formularz,
Opcje kontroluje szczegóły zrzutu zgodnie z opisem dla -fdump-drzewo Opcje.

-fdump-klasa-hierarchia (tylko C++)
-fdump-klasa-hierarchia-Opcje (tylko C++)
Zrzuć reprezentację hierarchii każdej klasy i układu tabeli funkcji wirtualnych do
plik. Nazwa pliku jest tworzona przez dołączenie .klasa do nazwy pliku źródłowego i pliku
jest tworzony w tym samym katalogu co plik wyjściowy. Jeśli -Opcje używany jest formularz,
Opcje kontroluje szczegóły zrzutu zgodnie z opisem dla -fdump-drzewo Opcje.

-fdump-ipa-wyłącznik
Kontroluj zrzucanie na różnych etapach drzewa językowego analizy międzyproceduralnej, aby:
plik. Nazwa pliku jest generowana przez dołączenie do źródła specyficznego dla przełącznika sufiksu
nazwę pliku, a plik jest tworzony w tym samym katalogu, co plik wyjściowy. ten
możliwe są następujące zrzuty:

cała kolekcja Włącza wszystkie zrzuty analiz międzyproceduralnych.

cgraf
Zrzuca informacje o optymalizacji wykresu wywołań, usuwaniu nieużywanych funkcji i
inline decyzje.

inline
Zrzut po funkcji inlining.

-fdump-passes
Zrzuć listę przebiegów optymalizacji, które są włączane i wyłączane przez prąd
opcje wiersza polecenia.

-fdump-statystyki-opcja
Włącz i kontroluj zrzucanie statystyk przejść w osobnym pliku. Nazwa pliku to
generowane przez dodanie sufiksu kończącego się na .Statystyka do nazwy pliku źródłowego, a
plik jest tworzony w tym samym katalogu co plik wyjściowy. Jeśli -opcja forma jest
używany, -statystyki powoduje, że liczniki są sumowane w całej jednostce kompilacji, podczas gdy
-Detale zrzuca każde zdarzenie, gdy przepustki je generują. Wartość domyślna bez opcji to
do sumowania liczników dla każdej skompilowanej funkcji.

-fdump-drzewo-wyłącznik
-fdump-drzewo-wyłącznik-Opcje
-fdump-drzewo-wyłącznik-Opcje=filename
Kontroluj zrzucanie na różnych etapach przetwarzania drzewa języka pośredniego, aby
plik. Nazwa pliku jest generowana przez dodanie sufiksu specyficznego dla przełącznika do
nazwa pliku źródłowego, a plik jest tworzony w tym samym katalogu, co plik wyjściowy. w
przypadek =filename opcja, zrzut jest wyprowadzany na podany plik zamiast auto
nazwane pliki zrzutu. Jeśli -Opcje używany jest formularz, Opcje to lista - rozdzielony
opcje kontrolujące szczegóły zrzutu. Nie wszystkie opcje mają zastosowanie do wszystkich
depresja; te, które nie mają znaczenia, są ignorowane. Dostępne są następujące opcje

adres
Wydrukuj adres każdego węzła. Zwykle nie ma to znaczenia, ponieważ się zmienia
zgodnie ze środowiskiem i plikiem źródłowym. Jego głównym zastosowaniem jest wiązanie
zrzutu ze środowiskiem debugowania.

asmname
Jeśli dla danego decl ustawiono „DECL_ASSEMBLER_NAME”, użyj go w zrzucie
zamiast „DECL_NAME”. Jego głównym zastosowaniem jest łatwość obsługi działająca wstecz od
zniekształcone nazwy w pliku zespołu.

szczupły
Podczas zrzucania reprezentacji pośrednich front-end, hamuj zrzucanie członków
zakres lub treść funkcji tylko dlatego, że ten zakres został osiągnięty. Tylko
zrzucaj takie elementy, gdy są bezpośrednio dostępne inną ścieżką.

Podczas zrzucania ładnie zadrukowanych drzew opcja ta zapobiega wyrzucaniu ciał
Struktury kontrolne.

Podczas zrzucania RTL, wydrukuj RTL w postaci wąskiej (skondensowanej) zamiast domyślnej
Reprezentacja podobna do LISP.

surowy Wydrukuj surową reprezentację drzewa. Domyślnie drzewa są ładnie wydrukowane
reprezentacja podobna do C.

detale
Włącz bardziej szczegółowe zrzuty (nie honorowane przez każdą opcję zrzutu). Obejmują również
informacje z przepustek optymalizacyjnych.

statystyki
Włącz zrzucanie różnych statystyk dotyczących przepustki (nie honorowane przez każde zrzuty)
opcja).

Bloki
Włącz pokazywanie podstawowych granic bloków (wyłączone w nieprzetworzonych zrzutach).

wykres
Dla każdego z pozostałych wskazanych plików zrzutu (-fdump-rtl-przechodzić), zrzuć
reprezentacja wykresu przepływu sterowania odpowiednia do przeglądania za pomocą GraphViz to
plik.passid.passid.dot. Każda funkcja w pliku jest ładnie wydrukowana jako podgraf,
aby GraphViz mógł renderować je wszystkie na jednym wykresie.

Ta opcja obecnie działa tylko w przypadku zrzutów RTL, a RTL jest zawsze zrzucany w
smukła forma.

vops
Włącz pokazywanie wirtualnych operandów dla każdej instrukcji.

lineno
Włącz wyświetlanie numerów wierszy dla wyciągów.

uid Włącz wyświetlanie unikalnego identyfikatora („DECL_UID”) dla każdej zmiennej.

gadatliwy
Włącz wyświetlanie zrzutu drzewa dla każdej instrukcji.

eh Włącz wyświetlanie numeru regionu EH, w którym znajduje się każdy wyciąg.

scev
Włącz pokazywanie szczegółów analizy ewolucji skalarnej.

zoptymalizowane
Włącz wyświetlanie informacji o optymalizacji (dostępne tylko w niektórych kartach).

nieodebranych
Włącz wyświetlanie pominiętych informacji o optymalizacji (dostępne tylko w niektórych przepustkach).

noty
Włącz inne szczegółowe informacje dotyczące optymalizacji (dostępne tylko w niektórych kartach).

=filename
Zamiast automatycznie nazwanego pliku zrzutu, wyprowadzaj dane do podanej nazwy pliku. Plik
Nazwy stdout dzięki stderr są traktowane specjalnie i są uważane za już otwarte
standardowe strumienie. Na przykład,

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

wyprowadza zrzut wektoryzatora do foo.dump, podczas gdy zrzut PRE jest wysyłany do stderr.
Jeśli dla tego samego przebiegu podane są dwie sprzeczne nazwy plików zrzutu, to drugie
opcja zastępuje wcześniejszą.

cała kolekcja Włącz wszystkie opcje z wyjątkiem surowy, szczupły, gadatliwy dzięki lineno.

optall
Włącz wszystkie opcje optymalizacji, tj. zoptymalizowane, nieodebranych, noty.

Możliwe są następujące zrzuty drzew:

oryginalny
Zrzuć przed optymalizacją opartą na drzewie, aby plik.oryginalny.

zoptymalizowane
Zrzuć po wszystkich optymalizacjach opartych na drzewie, aby plik.zoptymalizowany.

prostować
Zrzuć każdą funkcję przed i po przejściu gimplifikacyjnym do pliku. Plik
nazwa jest tworzona przez dołączenie .gimple do nazwy pliku źródłowego.

cfg Zrzuć wykres przepływu sterowania każdej funkcji do pliku. Nazwa pliku została stworzona przez
dołączanie .cfg do nazwy pliku źródłowego.

ch Zrzuć każdą funkcję po skopiowaniu nagłówków pętli. Nazwa pliku jest tworzona przez dołączenie
.ch do nazwy pliku źródłowego.

ssa Zrzuć informacje związane z SSA do pliku. Nazwa pliku jest tworzona przez dołączenie .ssa
do nazwy pliku źródłowego.

alias
Zrzuć informacje o aliasach dla każdej funkcji. Nazwa pliku jest tworzona przez dołączenie
.Alias do nazwy pliku źródłowego.

CCP Zrzuć każdą funkcję po CCP. Nazwa pliku jest tworzona przez dołączenie .ccp do
nazwa pliku źródłowego.

sklepccp
Zrzuć każdą funkcję po STORE-CCP. Nazwa pliku jest tworzona przez dołączenie .storeccp
do nazwy pliku źródłowego.

dla Zrzucaj drzewa po częściowej eliminacji nadmiarowości. Nazwa pliku została stworzona przez
dołączanie .przed do nazwy pliku źródłowego.

fre Zrzuć drzewa po całkowitym wyeliminowaniu nadmiarowości. Nazwa pliku jest tworzona przez dołączenie
.fre do nazwy pliku źródłowego.

copyprop
Zrzucaj drzewa po rozmnożeniu kopii. Nazwa pliku jest tworzona przez dołączenie .copyprop
do nazwy pliku źródłowego.

store_copyprop
Zrzucaj drzewa po rozmnażaniu kopii sklepu. Nazwa pliku jest tworzona przez dołączenie
.store_copyprop do nazwy pliku źródłowego.

dce Zrzuć każdą funkcję po usunięciu martwego kodu. Nazwa pliku została stworzona przez
dołączanie .dce do nazwy pliku źródłowego.

SRA Zrzuć każdą funkcję po wykonaniu skalarnej wymiany agregatów. Plik
nazwa jest tworzona przez dołączenie .sra do nazwy pliku źródłowego.

tonąć
Zrzuć każdą funkcję po wykonaniu zalewania kodu. Nazwa pliku została stworzona przez
dołączanie .tonąć do nazwy pliku źródłowego.

Słońce Zrzuć każdą funkcję po zastosowaniu optymalizacji drzewa dominatora. Nazwa pliku to
wykonane przez dołączenie .dom do nazwy pliku źródłowego.

dse Zrzuć każdą funkcję po zastosowaniu eliminacji martwego magazynu. Nazwa pliku jest stworzona
przez dołączenie .dse do nazwy pliku źródłowego.

fiopta
Zrzuć każdą funkcję po zoptymalizowaniu węzłów PHI do kodu prostego. Plik
nazwa jest tworzona przez dołączenie .phiopt do nazwy pliku źródłowego.

śmigło przednie
Zrzuć każdą funkcję po propagowaniu do przodu zmiennych jednorazowego użytku. Nazwa pliku
jest tworzony przez dołączenie .forwprop do nazwy pliku źródłowego.

copyrename
Zrzuć każdą funkcję po zastosowaniu optymalizacji zmiany nazwy kopii. Nazwa pliku to
wykonane przez dołączenie .nazwa_kopii do nazwy pliku źródłowego.

nrv Zrzuć każdą funkcję po zastosowaniu optymalizacji nazwanej wartości zwracanej na generycznej
drzewa. Nazwa pliku jest tworzona przez dołączenie .nrv do nazwy pliku źródłowego.

vect
Zrzuć każdą funkcję po zastosowaniu wektoryzacji pętli. Nazwa pliku jest stworzona
przez dołączenie .vect do nazwy pliku źródłowego.

slp Zrzuć każdą funkcję po zastosowaniu wektoryzacji podstawowych bloków. Nazwa pliku to
wykonane przez dołączenie .slp do nazwy pliku źródłowego.

VRP Zrzuć każdą funkcję po propagacji zakresu wartości (VRP). Nazwa pliku została stworzona przez
dołączanie .vrp do nazwy pliku źródłowego.

cała kolekcja Włącz wszystkie dostępne zrzuty drzewa z flagami przewidzianymi w tej opcji.

-fopt-informacje
-fopt-informacje-Opcje
-fopt-informacje-Opcje=filename
Kontroluje zrzuty optymalizacji z różnych przebiegów optymalizacji. Jeśli -Opcje forma jest
używany, Opcje to lista - oddzielne słowa kluczowe opcji, aby wybrać szczegóły zrzutu i
optymalizacje.

Pandemia Opcje można podzielić na dwie grupy: opcje opisujące szczegółowość
dump oraz opcje opisujące, które optymalizacje powinny być uwzględnione. Opcje od
obie grupy można dowolnie mieszać, ponieważ nie zachodzą na siebie. Jednak w przypadku
jakiekolwiek konflikty, późniejsze opcje zastępują wcześniejsze opcje w wierszu poleceń.

Następujące opcje sterują szczegółowością zrzutu:

zoptymalizowane
Wydrukuj informacje po pomyślnym zastosowaniu optymalizacji. To do przepustki
zdecydować, które informacje są istotne. Na przykład wektoryzator przekazuje print
źródłowe położenie pętli, które zostały pomyślnie zwektoryzowane.

nieodebranych
Drukuj informacje o pominiętych optymalizacjach. Poszczególne przechodzi kontrolę, która
informacje, które należy uwzględnić w danych wyjściowych.

noty
Drukuj pełne informacje o optymalizacjach, takich jak niektóre przekształcenia,
bardziej szczegółowe komunikaty o decyzjach itp.

cała kolekcja Wydrukuj szczegółowe informacje dotyczące optymalizacji. To zawiera zoptymalizowane, nieodebranych,
noty.

Co najmniej jedno z poniższych słów kluczowych opcji może być użyte do opisania grupy
optymalizacje:

IPA Włącz zrzuty ze wszystkich optymalizacji międzyproceduralnych.

pętla
Włącz zrzuty ze wszystkich optymalizacji pętli.

inline
Włącz zrzuty ze wszystkich wbudowanych optymalizacji.

vec Włącz zrzuty ze wszystkich optymalizacji wektoryzacji.

optall
Włącz zrzuty ze wszystkich optymalizacji. To jest nadzbiór grup optymalizacyjnych
wymienione powyżej.

If Opcje jest pominięty, domyślnie zoptymalizowany-optall, co oznacza zrzucenie wszystkich informacji
o udanych optymalizacjach ze wszystkich przejść.

Jeśli filename jest zapewnione, wtedy zrzuty ze wszystkich odpowiednich optymalizacji są
połączone w filename. W przeciwnym razie zrzut jest wyprowadzany na stderr, Chociaż
wielokrotność -fopt-informacje opcje są akceptowane, tylko jedna z nich może zawierać filename. Jeśli
podane są inne nazwy plików, wtedy wszystkie oprócz pierwszej takiej opcji są ignorowane.

Zauważ, że wyjście filename jest nadpisywany w przypadku wielu jednostek tłumaczeniowych. Gdyby
pożądane jest połączone wyjście z wielu jednostek tłumaczeniowych, stderr powinien być używany
zamiast.

W poniższym przykładzie informacje o optymalizacji są wyprowadzane do stderr:

gcc -O3 -fopt-informacje

Ten przykład:

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

generuje raport o pominiętej optymalizacji ze wszystkich przejść do brakowało.wszystkich, i ten:

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

drukuje informacje o utraconych możliwościach optymalizacji z przepustek do wektoryzacji
on stderr, Należy pamiętać, że -fopt-info-vec-pominięty odpowiada -fopt-informacje-pominięte-vec.

Jako kolejny przykład

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

wyświetla informacje o pominiętych optymalizacjach, a także zoptymalizowanych lokalizacjach ze wszystkich
inlining przechodzi w inline.txt.

Na koniec rozważ:

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

Tutaj dwie nazwy plików wyjściowych vec.miss dzięki loop.opt są w konflikcie, ponieważ tylko jeden
plik wyjściowy jest dozwolony. W takim przypadku obowiązuje tylko pierwsza opcja, a
kolejne opcje są ignorowane. Tak więc tylko vec.miss jest produkowany, który zawiera zrzuty
z wektoryzatora o utraconych szansach.

-frandom-seed=numer
Ta opcja zapewnia ziarno, którego GCC używa zamiast liczb losowych podczas generowania
pewne nazwy symboli, które muszą być różne w każdym skompilowanym pliku. To jest również
służy do umieszczania unikalnych stempli w plikach danych pokrycia i plikach obiektowych, które tworzą
im. Możesz użyć -frandom-seed możliwość produkcji powtarzalnie identycznego przedmiotu
akta.

Pandemia numer powinien być inny dla każdego kompilowanego pliku.

-fsched-verbose=n
W obiektach docelowych korzystających z planowania instrukcji ta opcja kontroluje ilość
debugowanie wydruków programu planującego. Ta informacja jest zapisywana z błędem standardowym,
chyba że -fdump-rtl-sched1 or -fdump-rtl-sched2 jest określony, w takim przypadku jest wyprowadzany
do zwykłego pliku listy zrzutów, .zaplanowany1 or .zaplanowany2 odpowiednio. Jednak dla n
większe niż dziewięć, wyjście jest zawsze drukowane z błędem standardowym.

Dla n większe od zera, -fsched-gadatliwy wyświetla te same informacje, co
-fdump-rtl-sched1 dzięki -fdump-rtl-sched2. Forum n większe niż jeden, to również wyprowadza podstawowe
prawdopodobieństwa bloków, szczegółowe informacje o gotowej liście i informacje o jednostce/wyjeździe. Do n
większa niż dwa, zawiera RTL w punkcie przerwania, informacje o przepływie sterowania i regionach. I
dla n powyżej czterech, -fsched-gadatliwy zawiera również informacje o zależnościach.

-save-temps
-save-temps=cwd
Przechowuj zwykłe „tymczasowe” pliki pośrednie na stałe; umieść je w nurcie
katalogu i nazwij je na podstawie pliku źródłowego. Tak więc kompilacja foo.c z -c
-save-temps produkuje pliki foo.i dzięki foo.s, jak również foo.o. To tworzy
wstępnie przetworzone foo.i plik wyjściowy, mimo że kompilator normalnie używa teraz
zintegrowany preprocesor.

W połączeniu z -x opcja wiersza poleceń, -save-temps jest rozsądne
wystarczy, aby uniknąć nadpisywania wejściowego pliku źródłowego o tym samym rozszerzeniu co
plik pośredni. Odpowiedni plik pośredni można uzyskać przez zmianę nazwy
plik źródłowy przed użyciem -save-temps.

Jeśli wywołasz GCC równolegle, kompilujesz kilka różnych plików źródłowych, które współdzielą a
wspólna nazwa podstawowa w różnych podkatalogach lub ten sam plik źródłowy skompilowany dla
wiele miejsc docelowych wyjścia, prawdopodobne jest, że różne kompilatory równoległe będą
kolidować ze sobą i nadpisywać pliki tymczasowe. Na przykład:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

może spowodować foo.i dzięki foo.o są zapisywane jednocześnie przez oba kompilatory.

-save-temps=obj
Przechowuj zwykłe „tymczasowe” pliki pośrednie na stałe. Jeśli -o używana jest opcja,
pliki tymczasowe są oparte na pliku obiektowym. Jeśli -o opcja nie jest używana,
-save-temps=obj przełącznik zachowuje się jak -save-temps.

Na przykład:

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

tworzy foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s,
dir2/yfoobar.o.

-czas[=filet]
Raportuj czas procesora zajęty przez każdy podproces w sekwencji kompilacji. Dla C
plików źródłowych, jest to właściwy kompilator i asembler (plus linker, jeśli linkowanie jest
Gotowe).

Bez specyfikacji pliku wyjściowego wynik wygląda tak:

# cc1 0.12 0.01
# jako 0.00 0.01

Pierwsza liczba w każdym wierszu to „czas użytkownika”, czyli czas spędzony na wykonywaniu
sam program. Druga liczba to „czas systemowy”, czas spędzony na wykonywaniu operacji
procedury systemowe w imieniu programu. Obie liczby podane są w sekundach.

Wraz ze specyfikacją pliku wyjściowego dane wyjściowe są dołączane do nazwanego pliku,
i wygląda to tak:

0.12 0.01 cc1
0.00 0.01 as

„Czas użytkownika” i „czas systemowy” są przesuwane przed nazwą programu, a
wyświetlane są opcje przekazane do programu, dzięki czemu można później stwierdzić, jaki plik był
kompilowana i z jakimi opcjami.

-fvar-śledzenie
Uruchom przebieg śledzenia zmiennych. Oblicza, gdzie zmienne są przechowywane w każdej pozycji
W kodzie. Następnie generowane są lepsze informacje debugowania (jeśli informacje debugowania
format obsługuje te informacje).

Jest on domyślnie włączony podczas kompilacji z optymalizacją (-Os, -O, -O2, ...),
informacje debugowania (-g) i obsługuje go format informacji debugowania.

-przypisania-śledzenia-fvar
Opisz przypisania do zmiennych użytkownika na początku kompilacji i spróbuj przeprowadzić
adnotacje przez całą kompilację aż do końca, w próbie
aby poprawić informacje debugowania podczas optymalizacji. Zastosowanie -gdwarf-4 jest zalecane razem
z nim.

Można go włączyć, nawet jeśli śledzenie zmiennych jest wyłączone, w takim przypadku adnotacje są
tworzone i utrzymywane, ale na końcu odrzucone. Domyślnie ta flaga jest włączona
Wraz z -fvar-śledzenie, z wyjątkiem sytuacji, gdy włączone jest planowanie selektywne.

-Przełącznik-przypisania-śledzenia-fvar
Przełączanie -przypisania-śledzenia-fvar, w taki sam sposób jak -przełączanie włącza -g.

-print-nazwa-pliku=biblioteka
Wydrukuj pełną nazwę bezwzględną pliku biblioteki biblioteka które byłyby używane, gdy
łączenie --- i nie rób nic więcej. Dzięki tej opcji GCC nie kompiluje ani nie łączy
wszystko; po prostu drukuje nazwę pliku.

-print-multi-directory
Wydrukuj nazwę katalogu odpowiadającą multilib wybranej przez inne przełączniki
obecny w wierszu poleceń. Ten katalog powinien istnieć w GCC_EXEC_PREFIX.

-print-multi-lib
Wydrukuj mapowanie z nazw katalogów multilib na przełączniki kompilatora, które je umożliwiają.
Nazwa katalogu jest oddzielona od przełączników przez ;, a każdy przełącznik zaczyna się od
@ zamiast tego -, bez spacji między wieloma przełącznikami. To ma
ułatwić przetwarzanie powłoki.

-print-multi-os-directory
Wydrukuj ścieżkę do bibliotek systemu operacyjnego dla wybranego multilib, względem niektórych lib
podkatalog. Jeśli biblioteki systemu operacyjnego są obecne w lib podkatalog i brak multilibs
są używane, zwykle jest to po prostu ., jeśli biblioteki systemu operacyjnego są obecne w libsuffix rodzeństwo
katalogi, które to wypisuje np. ../lib64, ../ lib or ../lib32, lub jeśli biblioteki systemu operacyjnego są
obecny w lib/podkatalog podkatalogi, które drukuje np. amd64, sparcv9 or ev6.

-print-multiarch
Wydrukuj ścieżkę do bibliotek systemu operacyjnego dla wybranego multiarch, względem niektórych lib
podkatalogu.

-print-nazwa-programu=program
Polub -print-nazwa-pliku, ale szuka programu takiego jak Cpp.

-print-nazwa-pliku-libgcc
Taki sam jak -print-nazwa-pliku=libgcc.a.

Jest to przydatne, gdy używasz -nostdlib or -nodefaultlibs ale chcesz się połączyć z
libgcc.a. Możesz to zrobić:

gcc -nostdlib ... `gcc -print-libgcc-nazwa-pliku`

-print-search-dirs
Wydrukuj nazwę skonfigurowanego katalogu instalacyjnego oraz listę programów i
katalogi biblioteczne gcc wyszukiwania --- i nie rób nic więcej.

Jest to przydatne, gdy gcc wyświetla komunikat o błędzie instalacja problem, nie może exec
cpp0: Nie taki filet or katalog. Aby rozwiązać ten problem, musisz albo umieścić cpp0 oraz
inne komponenty kompilatora gdzie gcc spodziewa się je znaleźć, lub możesz ustawić
zmienna środowiskowa GCC_EXEC_PREFIX do katalogu, w którym je zainstalowałeś. Nie
zapomnij o skończeniu /.

-print-sysroot
Wydrukuj docelowy katalog sysroot używany podczas kompilacji. To jest
docelowy sysroot określony w czasie konfiguracji lub przy użyciu --główny system opcja,
ewentualnie z dodatkowym sufiksem, który zależy od opcji kompilacji. Jeśli nie ma celu
sysroot jest podany, opcja nic nie wypisuje.

-print-sysroot-headers-suffix
Wydrukuj przyrostek dodany do docelowego sysroot podczas wyszukiwania nagłówków lub podaj
błąd, jeśli kompilator nie jest skonfigurowany z takim sufiksem ---i nic nie rób
jeszcze.

-wywrotka
Wydrukuj maszynę docelową kompilatora (na przykład i686-pc-linux-gnu)---i nie rób
coś jeszcze.

-dumpwersja
Wydrukuj wersję kompilatora (na przykład 3.0) ---i nie rób nic więcej.

-dumpspecs
Wydrukuj wbudowane specyfikacje kompilatora ---i nie rób nic więcej. (Jest używany, gdy
Samo GCC jest budowane.)

-fno-eliminacja-nieużywanych-typów-debugowania
Normalnie, podczas tworzenia wyjścia DWARF 2, GCC unika tworzenia wyjścia symbolu debugowania dla
typy, które nie są nigdzie używane w kompilowanym pliku źródłowym. Czasami się przydaje
aby GCC emitowało informacje debugowania dla wszystkich typów zadeklarowanych w jednostce kompilacji,
niezależnie od tego, czy są faktycznie używane w tej jednostce kompilacji, na przykład
na przykład, jeśli w debuggerze chcesz rzutować wartość na typ, który w rzeczywistości nie jest
używany w twoim programie (ale jest zadeklarowany). Częściej jednak skutkuje to a
znaczna ilość zmarnowanej przestrzeni.

Opcje Że Kontrola Optymalizacja
Te opcje sterują różnymi rodzajami optymalizacji.

Bez opcji optymalizacji celem kompilatora jest zmniejszenie kosztów kompilacji
i sprawić, by debugowanie przyniosło oczekiwane rezultaty. Oświadczenia są niezależne: jeśli
zatrzymaj program z punktem przerwania między instrukcjami, możesz następnie przypisać nową wartość do
dowolną zmienną lub zmień licznik programu na dowolną inną instrukcję w funkcji i pobierz
dokładnie takie wyniki, jakich oczekujesz od kodu źródłowego.

Włączenie flag optymalizacji powoduje, że kompilator próbuje poprawić wydajność i/lub
rozmiar kodu kosztem czasu kompilacji i ewentualnie możliwości debugowania
program.

Kompilator przeprowadza optymalizację na podstawie posiadanej wiedzy o programie.
Kompilowanie wielu plików jednocześnie do trybu pojedynczego pliku wyjściowego pozwala kompilatorowi na użycie
informacje uzyskane ze wszystkich plików podczas kompilacji każdego z nich.

Nie wszystkie optymalizacje są kontrolowane bezpośrednio przez flagę. Tylko optymalizacje, które mają
flagi są wymienione w tej sekcji.

Większość optymalizacji jest włączona tylko wtedy, gdy -O poziom jest ustawiany w wierszu poleceń. Inaczej
są wyłączone, nawet jeśli określone są poszczególne flagi optymalizacji.

W zależności od celu i konfiguracji GCC, nieco inny zestaw
optymalizacje mogą być włączone w każdym -O poziom niż te wymienione tutaj. Możesz wywołać GCC
z -Q --help=optymalizatory aby znaleźć dokładny zestaw optymalizacji, które są włączone w
na każdym poziomie.

-O
-O1 Optymalizować. Optymalizacja kompilacji zajmuje nieco więcej czasu i dużo więcej pamięci na
duża funkcja.

Z -O, kompilator próbuje zmniejszyć rozmiar kodu i czas wykonania bez wykonywania
wszelkie optymalizacje, które zajmują dużo czasu na kompilację.

-O włącza następujące flagi optymalizacji:

-fauto-inc-dec -fbranch-count-reg -fcombine-regulacje-stosu -fporównaj-elim
-fcprop-rejestry -fdce -fdefer-pop -fdelayed-branch -fdse -forward-propaguj
-odgadnięcie-gałęzi-prawdopodobieństwa -fif-konwersja2 -fif-konwersja
-finline-functions- wywołane-raz -fipa-pure-const -fipa-profil -Fipa-referencja
-fmerge-stałe -fmove-loop-niezmiennicze -fshrink-wrap -fsplit-wide-types
-fttree-bit-ccp -fttree-ccp -fssa-phiopt -ftree-ch -bezpłatna kopia-prop -fttree-copyrename
-czterech-dce -bez-dominujący-opcje -ftree-dse -ftree-forwprop -bezpłatny -fttree-phiprop
-umywalka -ftre-slsr -ftree-sra -czterech-pta -fraterka -zabawa-na-czas

-O też się włącza -fomit-frame-pointer na maszynach, gdzie nie przeszkadza to
z debugowaniem.

-O2 Zoptymalizuj jeszcze więcej. GCC wykonuje prawie wszystkie obsługiwane optymalizacje, które nie
wiążą się z kompromisem między szybkością kosmiczną. W porównaniu do -O, ta opcja zwiększa oba
czas kompilacji i wydajność wygenerowanego kodu.

-O2 włącza wszystkie flagi optymalizacji określone przez -O. Włącza również następujące
flagi optymalizacji: -przeskoki do nitki -Falign-funkcje -falign-skoki -falign-pętle
-falign-etykiety -fcaller-zapisuje -skoki przełajowe -fcse-follow-skoki -fcse-pomiń bloki
-fdelete-null-pointer-checks -fdewirtualizuj -fdewirtualizuj-spekulatywnie
-kosztowna-optymalizacje -fgcse -fgcse-lm -podnośniki-sąsiadujące-obciążenia
-finline-małe-funkcje -findirect-inlining -fipa-cp -wyrównanie fipa-cp -fipa-sra
-fipa-icf -fisolate-błędnych-ścieżek-odniesienia -flra-remat -foptimize-rodzeństwo-połączenia
-foptimize-strlen -częściowa inlining -fpeephole2 -bloki-freorder
-bloki-freorder-i-partycja -funkcje-freorder -frerun-cse-po-pętli
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing
-przepełnienie-przepełnienie -fttree-wbudowany-call-dce -konwersja-przełącznika-ftree -Ftree-tail-scalanie
-bezpłatny -ftree-vrp -fipa-ra

Zwróć uwagę na ostrzeżenie pod -fgcse o wywoływaniu -O2 w programach korzystających z obliczeń
idź do s.

UWAGA: W Ubuntu 8.10 i nowszych wersjach, -D_FORTIFY_SOURCE=2 jest ustawiony domyślnie i jest
aktywowany, gdy -O jest ustawiony na 2 lub więcej. Umożliwia to dodatkowy czas kompilacji i
sprawdza w czasie wykonywania kilka funkcji libc. Aby wyłączyć, określ albo
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 Zoptymalizuj jeszcze więcej. -O3 włącza wszystkie optymalizacje określone przez -O2 i też się włącza
die,en -finline-funkcje, -funswitch-pętle, -fpredictive-commoning, -fgcse-po-przeładowaniu,
-wektoryzacja pętli trójstronnej, -wzorce-dystrybucji-pętli-w-pętli, -ftree-slp-vectorize,
-fvect-model-kosztowy, -bezpłatna-częściowa-przed dzięki -fipa-cp-klon Opcje.

-O0 Skróć czas kompilacji i spraw, aby debugowanie przyniosło oczekiwane rezultaty. To jest
domyślna.

-Os Optymalizacja pod kątem rozmiaru. -Os umożliwia wszystko -O2 optymalizacje, które zazwyczaj nie rosną
rozmiar kodu. Wykonuje również dalsze optymalizacje mające na celu zmniejszenie rozmiaru kodu.

-Os wyłącza następujące flagi optymalizacji: -Falign-funkcje -falign-skoki
-falign-pętle -falign-etykiety -bloki-freorder -bloki-freorder-i-partycja
-fprefetch-loop-arrays

-Ofast
Zignoruj ​​ścisłe przestrzeganie norm. -Ofast umożliwia wszystko -O3 optymalizacje. To również
umożliwia optymalizacje, które nie są prawidłowe dla wszystkich programów zgodnych ze standardami. Ono
włącza się -fast-matematyka i specyficzny dla Fortran -fno-protect-parens dzięki -fstack-tablice.

-Og Zoptymalizuj środowisko debugowania. -Og umożliwia optymalizacje, które nie kolidują z
debugowanie. Powinien to być wybrany poziom optymalizacji dla standardowej edycji-
cykl kompilacji i debugowania, oferujący rozsądny poziom optymalizacji przy zachowaniu
szybka kompilacja i dobre wrażenia podczas debugowania.

Jeśli używasz wielu -O opcje, z numerami poziomów lub bez, ostatnią taką opcją jest
ten, który jest skuteczny.

Opcje formularza -fflaga określić flagi niezależne od komputera. Większość flag ma oba rodzaje
formy pozytywne i negatywne; negatywna forma -ffoo is -fno-foo. W poniższej tabeli
na liście znajduje się tylko jeden z formularzy --- ten, którego zwykle używasz. Możesz rozgryźć inne
formularz przez usunięcie no- lub dodanie go.

Poniższe opcje sterują określonymi optymalizacjami. Są albo aktywowane przez -O
opcje lub są powiązane z tymi, które są. W rzadkich możesz użyć następujących flag
przypadkach, w których pożądane jest „dostrojenie” optymalizacji do wykonania.

-fno-defer-pop
Zawsze przenoś argumenty do każdego wywołania funkcji, gdy tylko ta funkcja powróci. Do
maszyny, które muszą pop argumenty po wywołaniu funkcji, kompilator zwykle pozwala
argumenty gromadzą się na stosie dla kilku wywołań funkcji i zrzucają je wszystkie w
pewnego razu.

Niepełnosprawni na poziomach -O, -O2, -O3, -Os.

-forward-propaguj
Wykonaj przepustkę propagacji w przód na RTL. Karnet próbuje połączyć dwie instrukcje
i sprawdza, czy wynik można uprościć. Jeśli rozwijanie pętli jest aktywne, dwa przebiegi
są wykonywane, a drugi jest planowany po rozwinięciu pętli.

Ta opcja jest domyślnie włączona na poziomach optymalizacji -O, -O2, -O3, -Os.

-ffp-umowa=styl
-ffp-umowa=off wyłącza skrócenie wyrażenia zmiennoprzecinkowego. -ffp-kontrakt=szybko
umożliwia skrócenie wyrażeń zmiennoprzecinkowych, takich jak tworzenie skondensowanego mnożenia-dodawania
operacji, jeśli cel ma dla nich natywną obsługę. -ffp-umowa=wł. Umożliwia
skrócenie wyrażenia zmiennoprzecinkowego, jeśli jest to dozwolone przez standard języka. To jest
obecnie niewdrożone i traktowane na równi -ffp-umowa=off.

Wartość domyślna to -ffp-kontrakt=szybko.

-fomit-frame-pointer
Nie trzymaj wskaźnika ramki w rejestrze dla funkcji, które go nie potrzebują. Ten
unika instrukcji zapisywania, konfigurowania i przywracania wskaźników ramek; to również sprawia, że
dodatkowy rejestr dostępny w wielu funkcjach. It również sprawia, że debugowania niemożliwy on
kilka maszyn.

Na niektórych maszynach, takich jak VAX, ta flaga nie działa, ponieważ standard
sekwencja wywoływania automatycznie obsługuje wskaźnik ramki i nic nie jest zapisywane przez
udając, że nie istnieje. Makro opisu maszyny „FRAME_POINTER_REQUIRED”
kontroluje, czy maszyna docelowa obsługuje tę flagę.

Domyślne ustawienie (jeśli nie jest optymalizowane pod kątem rozmiaru) dla 32-bitowego GNU/Linux x86 i 32-bitowego
Cele Darwin x86 to -fomit-frame-pointer. Możesz skonfigurować GCC za pomocą
--enable-frame-pointer skonfigurować opcję, aby zmienić ustawienie domyślne.

Włączone na poziomach -O, -O2, -O3, -Os.

-foptimize-rodzeństwo-połączenia
Zoptymalizuj połączenia rekurencyjne dla rodzeństwa i ogona.

Włączone na poziomach -O2, -O3, -Os.

-foptimize-strlen
Zoptymalizuj różne standardowe funkcje ciągów C (np. „strlen”, „strchr” lub „strcpy”) i
ich odpowiedniki "_FORTIFY_SOURCE" na szybsze alternatywy.

Włączone na poziomach -O2, -O3.

-fno-inline
Nie rozwijaj żadnych funkcji wbudowanych poza tymi oznaczonymi „always_inline”
atrybut. Jest to ustawienie domyślne w przypadku braku optymalizacji.

Pojedyncze funkcje mogą być wyłączone z inliningu poprzez oznaczenie ich „noinline”
atrybutów.

-finline-małe-funkcje
Zintegruj funkcje z ich wywołującymi, gdy ich ciało jest mniejsze niż oczekiwano
kod wywołania funkcji (więc ogólny rozmiar programu jest mniejszy). Kompilator
heurystycznie decyduje, które funkcje są na tyle proste, że warto je zintegrować w
tą drogą. Ta inline ma zastosowanie do wszystkich funkcji, nawet tych, które nie są zadeklarowane inline.

Włączone na poziomie -O2.

-findirect-inlining
Inline również pośrednie wywołania, o których wiadomo, że są znane w czasie kompilacji dzięki
poprzednia inlining. Ta opcja działa tylko wtedy, gdy włączone jest samo wstawianie
przez -finline-funkcje or -finline-małe-funkcje Opcje.

Włączone na poziomie -O2.

-finline-funkcje
Rozważ wszystkie funkcje do wstawiania, nawet jeśli nie są zadeklarowane w tekście. ten
kompilator heurystycznie decyduje, które funkcje warto integrować w ten sposób.

Jeśli wszystkie wywołania danej funkcji są zintegrowane, a funkcja jest zadeklarowana
"statyczny", wtedy funkcja normalnie nie jest wyprowadzana jako kod asemblera.

Włączone na poziomie -O3.

-finline-functions- wywołane-raz
Rozważ wszystkie "statyczne" funkcje wywołane raz w celu wbudowania w ich obiekt wywołujący, nawet jeśli
nie są oznaczone jako „inline”. Jeśli wywołanie danej funkcji jest zintegrowane, to
funkcja nie jest wyprowadzana jako samodzielny kod asemblera.

Włączone na poziomach -O1, -O2, -O3 dzięki -Os.

-strasznie-inlining
Funkcje śródliniowe oznaczone przez „always_inline” oraz funkcje, których ciało wydaje się mniejsze niż
narzut wywołania funkcji wcześniej przed wykonaniem -fprofil-generuj oprzyrządowanie i
prawdziwy karnet na inlining. Dzięki temu profilowanie jest znacznie tańsze i zwykle
szybsze wstawianie w programach posiadających duże łańcuchy zagnieżdżonych funkcji opakowujących.

Domyślnie włączone.

-fipa-sra
Wykonywanie międzyoperacyjnej wymiany skalarnej agregatów, usuwanie niewykorzystanych parametrów
i zastąpienie parametrów przekazanych przez odwołanie przez parametry przekazane przez wartość.

Włączone na poziomach -O2, -O3 dzięki -Os.

-finline-limit=n
Domyślnie GCC ogranicza rozmiar funkcji, które mogą być wstawiane. Ta flaga pozwala
zgrubna kontrola tego limitu. n to rozmiar funkcji, które można wstawić w
liczba pseudo instrukcji.

Inlining jest w rzeczywistości kontrolowany przez szereg parametrów, które można określić
indywidualnie za pomocą --param Nazwa=wartość, -finline-limit=n opcja ustawia niektóre z
te parametry w następujący sposób:

max-inline-insns-single
jest ustawione na n/ 2.

max-inline-insns-auto
jest ustawione na n/ 2.

Poniżej znajduje się dokumentacja poszczególnych parametrów kontrolujących inlining i
dla wartości domyślnych tych parametrów.

Uwaga: może nie mieć wartości -finline-limit skutkuje to zachowaniem domyślnym.

Uwaga: pseudoinstrukcja reprezentuje w tym konkretnym kontekście abstrakcję
pomiar wielkości funkcji. W żaden sposób nie reprezentuje liczby zgromadzeń
instrukcji i jako takie jego dokładne znaczenie może się zmienić z jednego wydania na jeden
drugiego.

-fno-keep-inline-dllexport
To jest bardziej drobnoziarnista wersja -fkeep-inline-functions, który dotyczy tylko
funkcje, które są zadeklarowane przy użyciu atrybutu „dllexport” lub declspec

-fkeep-inline-functions
W C emituj "statyczne" funkcje, które są zadeklarowane "inline" do pliku obiektowego, nawet jeśli:
funkcja została wbudowana we wszystkich jej wywołaniach. Ten przełącznik nie ma wpływu
funkcje wykorzystujące rozszerzenie "extern inline" w GNU C90. W C++ emituj wszystko i wszystko
wbudowane funkcje do pliku obiektowego.

-fkeep-static-consts
Emituj zmienne zadeklarowane jako „stała statyczna”, gdy optymalizacja nie jest włączona, nawet jeśli
zmienne nie są przywoływane.

GCC domyślnie włącza tę opcję. Jeśli chcesz zmusić kompilator do sprawdzenia, czy
przywoływana jest zmienna, niezależnie od tego, czy optymalizacja jest włączona, użyj
die,en -fno-keep-static-consts opcja.

-fmerge-stałe
Próba połączenia identycznych stałych (stałych łańcuchowych i stałych zmiennoprzecinkowych)
w jednostkach kompilacji.

Ta opcja jest domyślna dla zoptymalizowanej kompilacji, jeśli asembler i linker
Wspieraj to. Posługiwać się -fno-scalanie-stałe powstrzymać to zachowanie.

Włączone na poziomach -O, -O2, -O3, -Os.

-fmerge-all-constans
Spróbuj połączyć identyczne stałe i identyczne zmienne.

Ta opcja oznacza -fmerge-stałe, Oprócz -fmerge-stałe to
uwzględnia np. nawet stałe inicjalizowane tablice lub inicjalizowane stałe zmienne z
typy całkowite lub zmiennoprzecinkowe. Języki takie jak C lub C++ wymagają każdej zmiennej,
uwzględnienie wielu wystąpień tej samej zmiennej w wywołaniach rekurencyjnych, aby mieć różne
lokalizacji, więc użycie tej opcji skutkuje zachowaniem niezgodnym.

-fmodulo-sched
Wykonaj harmonogram modulo swing bezpośrednio przed pierwszym przebiegiem harmonogramu. Ten
pass przegląda najbardziej wewnętrzne pętle i zmienia kolejność ich instrukcji, nakładając się na różne
iteracje.

-fmodulo-sched-allow-regmoves
Wykonuj bardziej agresywne harmonogramowanie modulo oparte na SMS z dozwolonymi ruchami rejestru. Za pomocą
ustawienie tej flagi powoduje usunięcie pewnych krawędzi antyzależności, co powoduje
generowanie reg-moves w oparciu o analizę zakresu życia. Ta opcja jest skuteczna
tylko z -fmodulo-sched włączone.

-fno-liczba-oddziałów-reg
Nie używaj instrukcji „dekrementacja i rozgałęzienie” w rejestrze licznika, ale zamiast tego
wygeneruj sekwencję instrukcji, które dekrementują rejestr, porównaj go z
zero, a następnie gałąź na podstawie wyniku. Ta opcja ma znaczenie tylko w przypadku
architektury obsługujące takie instrukcje, w tym x86, PowerPC, IA-64 i
S/390.

Włączone domyślnie w -O1 i wyżej.

Wartość domyślna to -fbranch-count-reg.

-fno-funkcja-cse
Nie umieszczaj adresów funkcji w rejestrach; wykonaj każdą instrukcję, która wywołuje a
funkcja stała zawiera jawnie adres funkcji.

Ta opcja powoduje mniej wydajny kod, ale kilka dziwnych hacków, które zmieniają
dane wyjściowe asemblera mogą być mylone przez optymalizacje wykonywane, gdy ta opcja jest
nieużywany.

Wartość domyślna to -ffunkcja-cse

-fno-zero-inicjalizowane-w-bss
Jeśli cel obsługuje sekcję BSS, GCC domyślnie umieszcza zmienne, które są
zainicjowane na zero w BSS. Może to zaoszczędzić miejsce w wynikowym kodzie.

Ta opcja wyłącza to zachowanie, ponieważ niektóre programy jawnie polegają na zmiennych
przechodząc do sekcji danych --- na przykład, aby wynikowy plik wykonywalny mógł znaleźć
początku tej sekcji i/lub poczynić na tej podstawie założenia.

Wartość domyślna to -fzero-zainicjalizowany-w-bss.

-przeskoki do nitki
Wykonaj optymalizacje, które sprawdzają, czy skok rozgałęzia się do lokalizacji, w której inny
porównanie podciągnięte przez pierwsze zostało znalezione. Jeśli tak, pierwsza gałąź jest przekierowywana do
albo miejsce docelowe drugiego oddziału, albo punkt bezpośrednio po nim,
w zależności od tego, czy warunek jest prawdziwy czy fałszywy.

Włączone na poziomach -O2, -O3, -Os.

-fsplit-wide-types
Podczas korzystania z typu, który zajmuje wiele rejestrów, np. „long long” na 32-bitowym
systemu, rozdziel rejestry i przydzielaj je niezależnie. To normalnie
generuje lepszy kod dla tych typów, ale może utrudnić debugowanie.

Włączone na poziomach -O, -O2, -O3, -Os.

-fcse-follow-skoki
We wspólnej eliminacji podwyrażeń (CSE) przejrzyj instrukcje skoku, gdy
cel skoku nie zostanie osiągnięty żadną inną ścieżką. Na przykład, gdy CSE napotyka
instrukcja „if” z klauzulą ​​„else”, CSE następuje po skoku, gdy warunek
testowany jest fałszywy.

Włączone na poziomach -O2, -O3, -Os.

-fcse-pomiń bloki
Jest to podobne do -fcse-follow-skoki, ale powoduje, że CSE podąża za skokami, które
warunkowo pomijaj bloki. Gdy CSE napotka proste stwierdzenie „if” z no
klauzula inaczej, -fcse-pomiń bloki powoduje, że CSE podąża za skokiem wokół ciała
"Jeśli".

Włączone na poziomach -O2, -O3, -Os.

-frerun-cse-po-pętli
Ponownie uruchom eliminację wspólnych podwyrażeń po przeprowadzeniu optymalizacji pętli.

Włączone na poziomach -O2, -O3, -Os.

-fgcse
Wykonaj globalny wspólny przebieg eliminacji podwyrażenia. Ta przepustka również działa
globalna stała i propagacja kopii.

Uwaga: Podczas kompilowania programu przy użyciu obliczonego goto, rozszerzenia GCC, możesz otrzymać
lepsza wydajność w czasie wykonywania, jeśli wyłączysz globalną eliminację wspólnych podwyrażeń
przejść przez dodanie -fno-gcse do wiersza poleceń.

Włączone na poziomach -O2, -O3, -Os.

-fgcse-lm
Gdy -fgcse-lm jest włączona, globalna eliminacja wspólnego podwyrażenia próbuje się poruszać
ładunki, które sklepy zabijają tylko same w sobie. Pozwala to na pętlę zawierającą a
sekwencja ładowania/przechowywania do zmiany na ładunek poza pętlą i kopia/przechowywanie wewnątrz
pętla.

Domyślnie włączone, gdy -fgcse jest włączony.

-fgcse-sm
Gdy -fgcse-sm jest włączone, zapis ruchu jest uruchamiany po globalnym wspólnym
eliminacja podwyrażeń. Ten przebieg próbuje usunąć sklepy z pętli. Kiedy jest używany
w połączeniu z -fgcse-lmpętle zawierające sekwencję ładowania/przechowywania można zmienić
na ładunek przed pętlą i magazyn za pętlą.

Nie włączone na żadnym poziomie optymalizacji.

-fgcse-las
Gdy -fgcse-las jest włączona, globalna wspólna eliminacja podwyrażeń jest włączona
eliminuje nadmiarowe obciążenia, które przychodzą po sklepach do tej samej lokalizacji pamięci (oba
częściowe i pełne zwolnienia).

Nie włączone na żadnym poziomie optymalizacji.

-fgcse-po-przeładowaniu
Gdy -fgcse-po-przeładowaniu jest włączone, wykonywane jest nadmiarowe przejście eliminacji obciążenia
po przeładowaniu. Celem tej przepustki jest usunięcie zbędnych rozlań.

-faggressive-loop-optymalizacje
Ta opcja mówi optymalizatorowi pętli, aby użył ograniczeń językowych do wyprowadzenia granic dla
liczba iteracji pętli. Zakłada się, że kod pętli nie wywołuje
niezdefiniowane zachowanie, na przykład powodowanie przepełnienia liczby całkowitej ze znakiem lub przekroczenia granicy
dostępy do tablicy. Granice liczby iteracji pętli służą do prowadzenia
Optymalizacje testów rozwijania i obierania pętli i wyjścia z pętli. Ta opcja jest włączona
domyślnie.

-optymalizacje funsafe-loop
Ta opcja mówi optymalizatorowi pętli, aby założył, że indeksy pętli nie przepełniają się, i
że pętle z nietrywialnym warunkiem zakończenia nie są nieskończone. Umożliwia to szerszy
zakres optymalizacji pętli, nawet jeśli sam optymalizator pętli nie może udowodnić, że te
założenia są prawidłowe. Jeśli użyjesz - Optymalizacje pętli Wunsafe, kompilator cię ostrzega
jeśli znajdzie tego rodzaju pętlę.

-skoki przełajowe
Wykonaj przeskok krzyżowy. Ta transformacja ujednolica równoważny kod i
zapisuje rozmiar kodu. Wynikowy kod może, ale nie musi, działać lepiej niż bez
skoki.

Włączone na poziomach -O2, -O3, -Os.

-fauto-inc-dec
Połącz przyrosty lub dekrementacje adresów z dostępem do pamięci. Ta przepustka jest
zawsze pomijane na architekturach, które nie mają instrukcji obsługi tego.
Włączone domyślnie w -O i wyższe na architekturach, które to obsługują.

-fdce
Wykonaj eliminację martwego kodu (DCE) na RTL. Włączone domyślnie w -O i wyżej.

-fdse
Wykonaj eliminację martwego magazynu (DSE) na RTL. Włączone domyślnie w -O i wyżej.

-fif-konwersja
Próba przekształcenia skoków warunkowych w odpowiedniki bez rozgałęzień. To zawiera
użycie ruchów warunkowych, min, max, set flag i instrukcji abs oraz kilka sztuczek
wykonalne za pomocą standardowej arytmetyki. Wykorzystanie wykonania warunkowego na żetonach tam, gdzie jest
dostępny jest kontrolowany przez -fif-konwersja2.

Włączone na poziomach -O, -O2, -O3, -Os.

-fif-konwersja2
Użyj wykonania warunkowego (jeśli jest dostępne), aby przekształcić skoki warunkowe w
odpowiedniki bez gałęzi.

Włączone na poziomach -O, -O2, -O3, -Os.

-fdeclone-ctor-dtor
C++ ABI wymaga wielu punktów wejścia dla konstruktorów i destruktorów: jeden dla a
podobiekt bazowy, jeden dla kompletnego obiektu i jeden dla wirtualnego destruktora, który wywołuje
operator usunąć później. W przypadku hierarchii z wirtualnymi bazami, podstawowa i kompletna
warianty to klony, co oznacza dwie kopie funkcji. Dzięki tej opcji,
warianty podstawowe i kompletne są zmieniane na części, które wywołują wspólną implementację.

Włączone przez -Os.

-fdelete-null-pointer-checks
Załóżmy, że programy nie mogą bezpiecznie wyłuskać wskaźników zerowych i że nie ma kodu ani danych
mieszka tam element. Umożliwia to w ogóle prostą stałą optymalizację składania
poziomy optymalizacji. Ponadto inne przebiegi optymalizacji w GCC używają tej flagi do
kontrolować globalne analizy przepływu danych, które eliminują bezużyteczne sprawdzanie wskaźników zerowych;
zakładają one, że jeśli wskaźnik jest sprawdzany po tym, jak został już wyłuskany, to
nie może być zero.

Należy jednak pamiętać, że w niektórych środowiskach to założenie nie jest prawdziwe. Posługiwać się
-fno-delete-null-pointer-checks aby wyłączyć tę optymalizację dla programów, które są zależne
na to zachowanie.

Niektóre cele, zwłaszcza te osadzone, wyłączają tę opcję na wszystkich poziomach. Inaczej
jest włączony na wszystkich poziomach: -O0, -O1, -O2, -O3, -Os. Karnety wykorzystujące informacje
są włączane niezależnie na różnych poziomach optymalizacji.

-fdewirtualizuj
Spróbuj przekonwertować wywołania na funkcje wirtualne na wywołania bezpośrednie. Odbywa się to zarówno
w ramach procedury i interprocesowo w ramach inliningu pośredniego
(-findirect-inlining) i stała propagacja międzyoperacyjna (-fipa-cp). Włączone w
poziomy -O2, -O3, -Os.

-fdewirtualizuj-spekulatywnie
Spróbuj przekonwertować wywołania na funkcje wirtualne na spekulacyjne wywołania bezpośrednie. Oparte na
analiza grafu dziedziczenia typu, określ dla danego wywołania zbiór
prawdopodobne cele. Jeśli zestaw jest mały, najlepiej w rozmiarze 1, zmień wywołanie na a
warunkowe decydowanie między połączeniami bezpośrednimi i pośrednimi. Połączenia spekulacyjne umożliwiają
więcej optymalizacji, takich jak inline. Kiedy później wydają się bezużyteczne
optymalizacji, są one konwertowane z powrotem do pierwotnej postaci.

-fdevirtualize-at-ltrans
Przesyłaj dodatkowe informacje potrzebne do agresywnej dewirtualizacji podczas uruchamiania łącza
optymalizator czasu w trybie transformacji lokalnej. Ta opcja umożliwia więcej
dewirtualizacja, ale znacznie zwiększa rozmiar przesyłanych strumieniowo danych. Dla tego
powód jest domyślnie wyłączony.

-kosztowna-optymalizacje
Wykonaj szereg drobnych optymalizacji, które są stosunkowo drogie.

Włączone na poziomach -O2, -O3, -Os.

-wolny
Spróbuj usunąć zbędne instrukcje rozszerzeń. Jest to szczególnie przydatne w przypadku
architektura x86-64, która niejawnie rozszerza się o zero w rejestrach 64-bitowych po
pisanie do ich dolnej 32-bitowej połowy.

Włączone dla Alpha, AArch64 i x86 na poziomach -O2, -O3, -Os.

-fno-lifetime-dse
W C++ na wartość obiektu mają wpływ tylko zmiany w czasie jego życia: kiedy
rozpoczyna się konstruktor, obiekt ma nieokreśloną wartość, a wszelkie zmiany w trakcie
żywotność obiektu jest martwa, gdy obiekt jest zniszczony. Zwykle martwy sklep
eliminacja skorzysta z tego; jeśli twój kod opiera się na wartości
przechowywanie obiektów trwające dłużej niż czas życia obiektu, możesz użyć tej flagi, aby
wyłącz tę optymalizację.

-skurcz-zasięg-przelotowy
Próba zmniejszenia ciśnienia rejestrów poprzez kurczenie się zakresu rejestrów na żywo. To jest
pomocne dla szybkich procesorów z małymi lub średnimi zestawami rejestrów.

-fira-algorytm=algorytm
Użyj określonego algorytmu kolorowania dla zintegrowanego podzielnika rejestrów. ten
algorytm argument może być priorytet, który określa kolorowanie priorytetu Chowa, lub CB,
który określa kolorystykę Chaitina-Briggsa. Kolorystyka Chaitina-Briggsa nie jest zaimplementowana
dla wszystkich architektur, ale dla celów, które to obsługują, jest to ustawienie domyślne
ponieważ generuje lepszy kod.

-fira-region=region
Użyj określonych regionów dla zintegrowanego alokatora rejestrów. ten region argument
powinien być jednym z następujących:

cała kolekcja Użyj wszystkich pętli jako regionów alokacji rejestru. Może to dać najlepsze wyniki dla
maszyny z małym i/lub nieregularnym zestawem registrów.

mieszany
Jako regiony użyj wszystkich pętli z wyjątkiem pętli z małą presją rejestru. Ten
wartość zwykle daje najlepsze wyniki w większości przypadków i dla większości architektur, oraz
jest domyślnie włączone podczas kompilacji z optymalizacją pod kątem szybkości (-O, -O2, ...).

jeden Użyj wszystkich funkcji jako jednego regionu. Zwykle daje to najmniejszy kod
rozmiar i jest domyślnie włączony dla -Os or -O0.

-fira-wciągnik-nacisk
Użyj IRA, aby ocenić ciśnienie w rejestrze w przepustce do podnoszenia kodu w celu podjęcia decyzji o podniesieniu
wyrażenia. Ta opcja zwykle powoduje zmniejszenie kodu, ale może spowolnić
kompilator nie działa.

Ta opcja jest włączona na poziomie -Os dla wszystkich celów.

-fira-pętla-ciśnienie
Użyj IRA, aby ocenić ciśnienie rejestrów w pętlach w celu podjęcia decyzji o przesunięciu niezmienników pętli.
Ta opcja zwykle powoduje generowanie szybszego i mniejszego kodu na maszynach z
duże pliki rejestrów (>= 32 rejestry), ale może to spowolnić kompilator.

Ta opcja jest włączona na poziomie -O3 dla niektórych celów.

-fno-ira-share-save-slots
Wyłącz udostępnianie slotów stosu używanych do zapisywania przetrwania twardych rejestrów używanych przez połączenia
wezwanie. Każdy twardy rejestr otrzymuje osobne gniazdo stosu, a w rezultacie stos funkcji
ramki są większe.

-fno-ira-share-spill-slots
Wyłącz udostępnianie gniazd stosu przydzielonych dla pseudorejestrów. Każdy pseudorejestr
który nie otrzymuje twardego rejestru, otrzymuje osobne miejsce na stos, a w rezultacie funkcja
ramki stosu są większe.

-fira-gadatliwa=n
Kontroluj szczegółowość pliku zrzutu dla zintegrowanego alokatora rejestrów. ten
domyślna wartość to 5. Jeśli wartość n jest większa lub równa 10, wysyłane są dane wyjściowe zrzutu
na stderr używając tego samego formatu co n minus 10.

-flra-remat
Włącz rematerializację wrażliwą na CFG w LRA. Zamiast ładować wartości rozlane
pseudos, LRA próbuje rematerializować (przeliczać) wartości, jeśli jest to opłacalne.

Włączone na poziomach -O2, -O3, -Os.

-fdelayed-branch
Jeśli jest obsługiwane dla maszyny docelowej, spróbuj zmienić kolejność instrukcji do wykorzystania
szczeliny na instrukcje dostępne po opóźnionych instrukcjach rozgałęzień.

Włączone na poziomach -O, -O2, -O3, -Os.

-fschedule-insns
Jeśli jest obsługiwane na komputerze docelowym, spróbuj zmienić kolejność instrukcji, aby wyeliminować
wstrzymanie realizacji z powodu braku wymaganych danych. Pomaga to maszynom, które
mieć wolne instrukcje zmiennoprzecinkowe lub instrukcje ładowania pamięci, umożliwiając innym instrukcjom
być wydawane do czasu, gdy wymagany jest wynik obciążenia lub instrukcji zmiennoprzecinkowej.

Włączone na poziomach -O2, -O3.

-fschedule-insns2
Podobny do -fschedule-insns, ale żąda dodatkowego planowania przebiegu instrukcji
po dokonaniu przydziału rejestru. Jest to szczególnie przydatne na komputerach z
stosunkowo mała liczba rejestrów i gdzie instrukcje ładowania pamięci zajmują więcej niż
jeden cykl.

Włączone na poziomach -O2, -O3, -Os.

-fno-sched-interblock
Nie planuj instrukcji w podstawowych blokach. Jest to zwykle domyślnie włączone
przy planowaniu przed przydziałem rejestru, tj. z -fschedule-insns lub -O2 or
wyższy.

-fno-sched-spec
Nie zezwalaj na ruch spekulacyjny instrukcji nieobciążających. Jest to zwykle włączone przez
domyślnie przy planowaniu przed alokacją rejestru, tj. z -fschedule-insns lub
-O2 lub więcej.

-fsched-ciśnienie
Włącz planowanie rejestrów zależne od nacisku przed alokacją rejestrów. Ten
ma sens tylko przy planowaniu przed włączeniem alokacji rejestrów, tj. z
-fschedule-insns lub -O2 lub wyżej. Użycie tej opcji może poprawić generowaną
kodu i zmniejszyć jego rozmiar, zapobiegając wzrostowi ciśnienia rejestru powyżej liczby
dostępnych twardych rejestrów i kolejnych wycieków w alokacji rejestrów.

-fsched-spec-load
Zezwalaj na ruch spekulacyjny niektórych instrukcji ładowania. Ma to sens tylko wtedy, gdy
planowanie przed alokacją rejestru, czyli z -fschedule-insns lub -O2 lub więcej.

-fsched-spec-load-niebezpieczne
Zezwalaj na ruch spekulacyjny większej liczby instrukcji ładowania. Ma to sens tylko wtedy, gdy
planowanie przed alokacją rejestru, czyli z -fschedule-insns lub -O2 lub więcej.

-fsched-stalled-insns
-fsched-stalled-insns=n
Określ, ile zajazdów (jeśli w ogóle) można przedwcześnie przenieść z kolejki zatrzymanych
wpisuje się do gotowej listy podczas drugiego przejścia harmonogramu. -fno-sched-stalled-insns
oznacza, że ​​żadne karczmy nie są przesuwane przedwcześnie, -fsched-stalled-insns=0 oznacza, że ​​nie ma
limit liczby kolejek, które mogą zostać przeniesione przedwcześnie. -fsched-stalled-insns
bez wartości jest równoznaczne z -fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
Określ, ile grup insn (cykli) jest sprawdzanych pod kątem zależności od zablokowanej insn
czyli kandydat do przedwczesnego usunięcia z kolejki zatrzymanych zajazdów. To ma
efekt tylko podczas drugiego przejścia harmonogramu i tylko wtedy, gdy -fsched-stalled-insns is
używany. -fno-sched-stalled-insns-dep odpowiada -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep bez wartości jest równoznaczne z
-fsched-stalled-insns-dep=1.

-fsched2-użyj-superbloków
Podczas planowania po przydzieleniu rejestru, użyj planowania superblokowego. To pozwala
ruch w poprzek podstawowych granic bloków, co skutkuje szybszymi harmonogramami. Ta opcja to
eksperymentalne, ponieważ nie wszystkie opisy maszyn używane przez GCC modelują procesor wystarczająco dokładnie
aby uniknąć niewiarygodnych wyników algorytmu.

Ma to sens tylko przy planowaniu po przydziale rejestru, czyli z
-fschedule-insns2 lub -O2 lub więcej.

-fsched-group-heurystyka
Włącz heurystykę grupy w harmonogramie. Ta heurystyka faworyzuje instrukcję
należący do grupy harmonogramów. Jest to domyślnie włączone, gdy harmonogram jest
włączone, czyli z -fschedule-insns or -fschedule-insns2 lub -O2 lub więcej.

-fsched-heurystyka-ścieżki-krytycznej
Włącz heurystykę ścieżki krytycznej w harmonogramie. Ta heurystyka sprzyja
instrukcje na ścieżce krytycznej. Jest to domyślnie włączone, gdy harmonogram jest
włączone, czyli z -fschedule-insns or -fschedule-insns2 lub -O2 lub więcej.

-fsched-spec-insn-heurystyka
Włącz heurystykę instrukcji spekulacyjnych w harmonogramie. Ta heurystyka sprzyja
instrukcje spekulacyjne z większą słabością zależności. Jest to domyślnie włączone
gdy planowanie jest włączone, tj. z -fschedule-insns or -fschedule-insns2 lub -O2
lub więcej.

-fsched-rank-heurystyka
Włącz heurystykę rang w harmonogramie. Ta heurystyka faworyzuje instrukcję
należący do bloku podstawowego o większym rozmiarze lub częstotliwości. Jest to domyślnie włączone
gdy planowanie jest włączone, tj. z -fschedule-insns or -fschedule-insns2 lub -O2
lub więcej.

-fsched-last-insn-heurystyka
Włącz heurystykę ostatniej instrukcji w harmonogramie. Ta heurystyka sprzyja
instrukcję, która jest mniej zależna od ostatniej zaplanowanej instrukcji. To jest włączone
domyślnie, gdy planowanie jest włączone, tj. z -fschedule-insns or -fschedule-insns2
lub -O2 lub więcej.

-fsched-dep-count-heurystyka
Włącz heurystykę liczby zależnej w harmonogramie. Ta heurystyka sprzyja
instrukcja, która ma więcej instrukcji w zależności od tego. Jest to domyślnie włączone
gdy planowanie jest włączone, tj. z -fschedule-insns or -fschedule-insns2 lub -O2
lub więcej.

-freschedule-modulo-scheduled-loops
Planowanie Modulo jest wykonywane przed tradycyjnym planowaniem. Jeśli pętla jest modulo
zaplanowane, późniejsze rozkładowe karnety mogą zmienić jego harmonogram. Użyj tej opcji, aby
kontrolować to zachowanie.

-fplanowanie-selektywne
Zaplanuj instrukcje za pomocą algorytmu planowania selektywnego. Selektywne planowanie przebiegów
zamiast pierwszego przebiegu harmonogramu.

-f planowanie-selektywne2
Zaplanuj instrukcje za pomocą algorytmu planowania selektywnego. Selektywne planowanie przebiegów
zamiast drugiej przepustki harmonogramu.

-fsel-sched-pipelining
Włącz potokowanie programowe najbardziej wewnętrznych pętli podczas planowania selektywnego. Ten
opcja nie ma żadnego efektu, chyba że jedna z -fplanowanie-selektywne or -f planowanie-selektywne2
jest włączony.

-fsel-sched-pipelining-outer-loops
W przypadku pętli rurociągowych podczas planowania selektywnego, również zewnętrzne pętle rurociągu. Ten
opcja nie ma żadnego efektu, chyba że -fsel-sched-pipelining jest włączony.

-fsemantyczna-interpozycja
Niektóre formaty obiektów, takie jak ELF, pozwalają na wstawianie symboli przez dynamiczny linker.
Oznacza to, że dla symboli wyeksportowanych z DSO kompilator nie może wykonać
propagacja międzyproceduralna, inlining i inne optymalizacje w oczekiwaniu, że
kwestionowana funkcja lub zmienna może ulec zmianie. Chociaż ta funkcja jest przydatna, dla
na przykład, aby przepisać funkcje alokacji pamięci przez implementację debugowania, jest to
drogie pod względem jakości kodu. Z -fno-semantyczna-interpozycja kompilator
zakłada, że ​​jeśli interpozycja nastąpi dla funkcji, funkcja nadpisywania będzie miała
dokładnie ta sama semantyka (i skutki uboczne). Podobnie, jeśli zdarzy się interpozycja
dla zmiennych konstruktor zmiennej będzie taki sam. Flaga nie ma
efekt dla funkcji wyraźnie zadeklarowanych inline (gdzie nigdy nie jest to dozwolone)
interpozycja do zmiany semantyki) oraz dla symboli wyraźnie zadeklarowanych jako słabe.

-fshrink-wrap
Emituj prologi funkcji tylko przed częściami funkcji, które tego potrzebują, a nie w
na górze funkcji. Ta flaga jest domyślnie włączona w -O i wyżej.

-fcaller-zapisuje
Włącz alokację wartości do rejestrów, które są obciążone wywołaniami funkcji, przez
emitowanie dodatkowych instrukcji zapisywania i przywracania rejestrów wokół takich wywołań. Taki
alokacja odbywa się tylko wtedy, gdy wydaje się, że daje lepszy kod.

Ta opcja jest zawsze domyślnie włączona na niektórych komputerach, zwykle tych, które mają:
zamiast tego nie można używać rejestrów z zachowaniem połączeń.

Włączone na poziomach -O2, -O3, -Os.

-fcombine-regulacje-stosu
Śledzi korekty stosu (wypycha i wyskakuje) oraz odwołania do pamięci stosu, a następnie próbuje
znaleźć sposoby na ich połączenie.

Włączone domyślnie w -O1 i wyżej.

-fipa-ra
Użyj rejestrów zapisywania rozmówców do alokacji, jeśli te rejestry nie są używane przez żadnego z wywołanych
funkcjonować. W takim przypadku nie jest konieczne zapisywanie i przywracanie ich wokół połączeń.
Jest to możliwe tylko wtedy, gdy wywoływane funkcje są częścią tej samej jednostki kompilacji co current
funkcji i są kompilowane przed nią.

Włączone na poziomach -O2, -O3, -Os.

-fkonserwuj-stosu
Spróbuj zminimalizować użycie stosu. Kompilator próbuje nawet użyć mniej miejsca na stosie
jeśli to spowalnia program. Ta opcja oznacza ustawienie rama z dużym stosem
parametr na 100 i duży-stack-frame-wzrost parametr na 400.

-ftree-reassoc
Wykonaj ponowne połączenie na drzewach. Ta flaga jest domyślnie włączona w -O i wyżej.

-bezpłatny
Wykonaj częściową eliminację nadmiarowości (PRE) na drzewach. Ta flaga jest włączona przez
domyślnie w -O2 dzięki -O3.

-bezpłatna-częściowa-przed
Spraw, aby eliminacja częściowej nadmiarowości (PRE) była bardziej agresywna. Ta flaga jest włączona przez
domyślnie w -O3.

-ftree-forwprop
Wykonuj propagację do przodu na drzewach. Ta flaga jest domyślnie włączona w -O dzięki
wyższy.

-bezpłatny
Wykonaj pełną eliminację nadmiarowości (FRE) na drzewach. Różnica między FRE a
PRE oznacza, że ​​FRE uwzględnia tylko wyrażenia, które są obliczane na wszystkich ścieżkach prowadzących do
zbędne obliczenia. Ta analiza jest szybsza niż PRE, chociaż ujawnia mniej
zwolnienia. Ta flaga jest domyślnie włączona w -O i wyżej.

-fttree-phiprop
Wykonuj podnoszenie ładunków ze wskaźników warunkowych na drzewach. Ta przepustka jest włączona przez
domyślnie w -O i wyżej.

-podnośniki-sąsiadujące-obciążenia
Spekulująco podnoś ładunki z obu gałęzi funkcji „jeśli to inaczej”, jeśli ładunki pochodzą z
sąsiednie lokalizacje w tej samej strukturze, a docelowa architektura ma warunkowe
instrukcja ruchu. Ta flaga jest domyślnie włączona w -O2 i wyżej.

-bezpłatna kopia-prop
Wykonaj propagację kopii na drzewach. Ten przebieg eliminuje niepotrzebne operacje kopiowania.
Ta flaga jest domyślnie włączona w -O i wyżej.

-fipa-pure-const
Odkryj, które funkcje są czyste lub stałe. Włączone domyślnie w -O i wyżej.

-Fipa-referencja
Odkryj, które zmienne statyczne nie są pomijane w jednostce kompilacji. Włączone przez
domyślnie w -O i wyżej.

-fipa-pta
Przeprowadź międzyproceduralną analizę wskaźnikową i międzyproceduralną modyfikację oraz
analiza referencyjna. Ta opcja może spowodować nadmierne użycie pamięci i czasu kompilacji
duże jednostki kompilacyjne. Nie jest domyślnie włączone na żadnym poziomie optymalizacji.

-fipa-profil
Wykonaj propagację profilu między procedurami. Funkcje wywoływane tylko z zimna
funkcje są oznaczone jako zimne. Również funkcje wykonywane raz (takie jak "zimne",
"noreturn", statyczne konstruktory lub destruktory). Funkcje zimne i
mniej pętli części funkcji wykonanych raz jest następnie optymalizowane pod kątem rozmiaru. Włączone przez
domyślnie w -O i wyżej.

-fipa-cp
Wykonaj stałą propagację międzyoperacyjną. Ta optymalizacja analizuje program
aby określić, kiedy wartości przekazywane do funkcji są stałymi, a następnie optymalizować
odpowiednio. Ta optymalizacja może znacznie zwiększyć wydajność, jeśli:
aplikacja ma stałe przekazywane do funkcji. Ta flaga jest domyślnie włączona w
-O2, -Os dzięki -O3.

-fipa-cp-klon
Wykonaj klonowanie funkcji, aby wzmocnić stałą propagację między procedurami. Kiedy
włączone, międzyproceduralna stała propagacja wykonuje klonowanie funkcji, gdy
zewnętrznie widoczna funkcja może być wywołana ze stałymi argumentami. Ponieważ to
optymalizacja może tworzyć wiele kopii funkcji, może znacząco wzrosnąć
rozmiar kodu (patrz --param wzrost-jednostek-ipcp=wartość). Ta flaga jest domyślnie włączona w
-O3.

-wyrównanie fipa-cp
Po włączeniu ta optymalizacja propaguje wyrównanie parametrów funkcji do obsługi
lepsza wektoryzacja i operacje na ciągach.

Ta flaga jest domyślnie włączona w -O2 dzięki -Os. Wymaga tego -fipa-cp jest włączony.

-fipa-icf
Wykonaj identyczne składanie kodu dla funkcji i zmiennych tylko do odczytu. ten
optymalizacja zmniejsza rozmiar kodu i może przeszkadzać w rozwijaniu stosów poprzez zamianę funkcji
przez odpowiednik o innej nazwie. Optymalizacja działa skuteczniej z
włączona optymalizacja czasu linku.

Niemniej jednak zachowanie jest podobne do optymalizacji Gold Linker ICF, GCC ICF działa dalej
różne poziomy, a zatem optymalizacje nie są takie same - istnieją równoważności, które
są znajdowane tylko przez GCC, a odpowiedniki tylko przez Gold.

Ta flaga jest domyślnie włączona w -O2 dzięki -Os.

-fisolate-błędnych-ścieżek-odniesienia
Wykryj ścieżki, które wywołują błędne lub niezdefiniowane zachowanie z powodu wyłuskania wartości null
wskaźnik. Wyizoluj te ścieżki z głównego przepływu kontrolnego i zamień instrukcję za pomocą
błędne lub nieokreślone zachowanie w pułapkę. Ta flaga jest domyślnie włączona w -O2
i wyżej.

-fisolate-błędnych-ścieżek-atrybut
Wykryj ścieżki, które wywołują błędne lub niezdefiniowane zachowanie z powodu użycia wartości null
w sposób zabroniony przez atrybut „returns_nonnull” lub „nonnull”. Wyizoluj te ścieżki
z głównego przepływu kontrolnego i odwróć instrukcję z błędnym lub niezdefiniowanym zachowaniem
w pułapkę. To nie jest obecnie włączone, ale może być włączone przez -O2 w przyszłości.

-umywalka
Wykonuj ruch sklepu do przodu na drzewach. Ta flaga jest domyślnie włączona w -O dzięki
wyższy.

-fttree-bit-ccp
Wykonaj rzadką warunkową propagację bitową na drzewach i propaguj wskaźnik
informacje o wyrównaniu. To przejście działa tylko na lokalnych zmiennych skalarnych i jest
domyślnie włączone o -O i wyżej. Wymaga tego -fttree-ccp jest włączony.

-fttree-ccp
Wykonaj rzadką warunkową stałą propagację (CCP) na drzewach. Tylko ta przepustka
działa na lokalnych zmiennych skalarnych i jest domyślnie włączony w -O i wyżej.

-fssa-phiopt
Wykonaj dopasowanie wzorców w węzłach SSA PHI, aby zoptymalizować kod warunkowy. Ta przepustka jest
domyślnie włączone o -O i wyżej.

-konwersja-przełącznika-ftree
Wykonaj konwersję prostych inicjalizacji w przełączniku do inicjalizacji z a
tablica skalarna. Ta flaga jest domyślnie włączona w -O2 i wyżej.

-Ftree-tail-scalanie
Poszukaj identycznych sekwencji kodu. Po znalezieniu zastąp jeden skokiem na drugi.
Ta optymalizacja jest znana jako łączenie ogonów lub przeskakiwanie. Ta flaga jest włączona przez
domyślnie w -O2 i wyżej. Czas kompilacji w tym karnecie można ograniczyć za pomocą
max-tail-merge-porównania parametr i max-tail-merge-iterations parametr.

-czterech-dce
Wykonaj eliminację martwego kodu (DCE) na drzewach. Ta flaga jest domyślnie włączona w -O
i wyżej.

-fttree-wbudowany-call-dce
Wykonaj warunkową eliminację martwego kodu (DCE) dla wywołań funkcji wbudowanych, które:
mogą ustawić "errno", ale poza tym są wolne od skutków ubocznych. Ta flaga jest domyślnie włączona
at -O2 i wyżej jeśli -Os nie jest również określony.

-bez-dominujący-opcje
Wykonuj różne proste porządki skalarne (stałe/kopiuj propagację, redundancję)
eliminacja, propagacja zasięgu i uproszczenie ekspresji) w oparciu o dominator
przemierzanie drzew. Wykonuje to również skok wątków (w celu zredukowania skoków do skoków). Ten
flaga jest domyślnie włączona w -O i wyżej.

-ftree-dse
Wykonaj eliminację martwych zapasów (DSE) na drzewach. Martwy sklep to sklep w pamięci
lokalizacja, która jest później nadpisywana przez inny sklep bez żadnych interweniujących ładunków. w
w takim przypadku wcześniejszy sklep może zostać usunięty. Ta flaga jest domyślnie włączona w -O dzięki
wyższy.

-ftree-ch
Wykonaj kopiowanie nagłówków pętli na drzewach. Jest to korzystne, ponieważ wzrasta
efektywność optymalizacji ruchu kodu. Oszczędza też jeden skok. Ta flaga to
domyślnie włączone o -O i wyżej. Nie jest włączony dla -Os, ponieważ zwykle
zwiększa rozmiar kodu.

-optymalizacja-pętla okrężna
Wykonuj optymalizacje pętli na drzewach. Ta flaga jest domyślnie włączona w -O dzięki
wyższy.

-ftree-loop-linear
Wykonuj przekształcenia wymiany pętli na drzewie. Taki sam jak -floop-wymiana. Używać
ta transformacja kodu, GCC musi być skonfigurowany z --z-isl włączyć
Infrastruktura transformacji pętli grafitu.

-floop-wymiana
Wykonuj przekształcenia wymiany pętli w pętlach. Zamiana dwóch zagnieżdżonych pętli
przełącza wewnętrzną i zewnętrzną pętlę. Na przykład, mając pętlę taką jak:

DO J = 1, M
DO I = 1, N
A(J,I) = A(J,I) * C
KONIEC
KONIEC

wymiana pętli przekształca pętlę tak, jakby została napisana:

DO I = 1, N
DO J = 1, M
A(J,I) = A(J,I) * C
KONIEC
KONIEC

co może być korzystne, gdy „N” jest większe niż pamięci podręczne, ponieważ w Fortranie
elementy tablicy są przechowywane w pamięci w sposób ciągły po kolumnie, a oryginał
pętla iteruje po wierszach, potencjalnie tworząc przy każdym dostępie brak pamięci podręcznej. Ten
optymalizacja dotyczy wszystkich języków obsługiwanych przez GCC i nie ogranicza się do
Fortran. Aby użyć tej transformacji kodu, GCC musi być skonfigurowane z --z-isl do
włączyć infrastrukturę transformacji pętli Graphite.

-floop-strip-mine
Wykonuj przekształcenia wyszukiwania pasków pętli na pętlach. Wydobywanie pasów dzieli pętlę na
dwie zagnieżdżone pętle. Zewnętrzna pętla ma kroki równe rozmiarowi paska, a wewnętrzna
pętla zawiera kroki oryginalnej pętli w pasku. Długość paska można zmienić
używając pętla-blok-rozmiar-kafelka parametr. Na przykład, mając pętlę taką jak:

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

Lokowanie pasków pętli przekształca pętlę tak, jakby została napisana:

DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(I) = A(I) + C
KONIEC
KONIEC

Ta optymalizacja dotyczy wszystkich języków obsługiwanych przez GCC i nie ogranicza się do
Fortran. Aby użyć tej transformacji kodu, GCC musi być skonfigurowane z --z-isl do
włączyć infrastrukturę transformacji pętli Graphite.

-floop-block
Wykonuj przekształcenia blokujące pętle na pętlach. Blokujący pasek kopie każdą pętlę w
gniazdo pętli tak, że dostępy do pamięci z pętli elementów mieszczą się w pamięciach podręcznych. ten
długość paska można zmienić za pomocą pętla-blok-rozmiar-kafelka parametr. Na przykład,
mając pętlę, taką jak:

DO I = 1, N
DO J = 1, M
A(J,I) = B(I) + C(J)
KONIEC
KONIEC

blokowanie pętli przekształca pętlę tak, jakby została napisana:

DO II = 1, N, 51
DO JJ = 1, M, 51
DO I = II, min (II + 50, N)
DO J = JJ, min (JJ + 50, M)
A(J,I) = B(I) + C(J)
KONIEC
KONIEC
KONIEC
KONIEC

co może być korzystne, gdy „M” jest większe niż pamięci podręczne, ponieważ najbardziej wewnętrzna pętla
iteruje na mniejszej ilości danych, które mogą być przechowywane w pamięci podręcznej. Ten
optymalizacja dotyczy wszystkich języków obsługiwanych przez GCC i nie ogranicza się do
Fortran. Aby użyć tej transformacji kodu, GCC musi być skonfigurowane z --z-isl do
włączyć infrastrukturę transformacji pętli Graphite.

-fgrafit-tożsamość
Włącz transformację tożsamości dla grafitu. Dla każdego SCoP generujemy
wielościenna reprezentacja i przekształć ją z powrotem w gimple. Za pomocą -fgrafit-tożsamość
możemy sprawdzić koszty lub korzyści transformacji GIMPLE -> GRAPHITE -> GIMPLE.
Niektóre minimalne optymalizacje są również wykonywane przez generator kodu ISL, na przykład indeks
dzielenie i eliminacja martwego kodu w pętlach.

-floop-nest-optymalizuj
Włącz optymalizator gniazd pętli oparty na protokole ISL. Jest to ogólny optymalizator gniazd pętli oparty
na algorytmach optymalizacji Plutona. Oblicza strukturę pętli zoptymalizowaną dla
lokalność danych i równoległość. Ta opcja jest eksperymentalna.

-floop-rozwiń-i-zacięcie
Włącz rozwijanie i zacinanie dla optymalizatora gniazd pętli opartego na protokole ISL. Współczynnik rozwijania może być
zmieniono za pomocą pętla-rozwijanie-dżem-rozmiar parametr. Wymiar rozwinięty (liczenie
od najbardziej wewnętrznego) można zmienić za pomocą pętla-rozwijanie-dżem-głębokość parametr.
.

-floop-parallelize-all
Użyj analizy zależności danych Graphite, aby zidentyfikować pętle, które można zrównoleglić.
Zrównolegle wszystkie pętle, które można analizować, aby nie zawierały zależności przenoszonych przez pętlę
bez sprawdzania, czy zrównoleglenie pętli jest opłacalne.

-fcheck-data-deps
Porównaj wyniki kilku analizatorów zależności danych. Ta opcja jest używana do
debugowanie analizatorów zależności danych.

-ftree-loop-jeśli-konwertuj
Próba przekształcenia skoków warunkowych w najbardziej wewnętrznych pętlach na bezrozgałęzione
odpowiedniki. Celem jest usunięcie przepływu sterowania z najbardziej wewnętrznych pętli w porządku
aby poprawić zdolność przebiegu wektoryzacji do obsługi tych pętli. To jest
domyślnie włączone, jeśli włączona jest wektoryzacja.

-sklepy-o-pętli-jeśli-przekonwertują
Spróbuj także wykonać warunkowe skoki, które zawierają zapisy w pamięci. Ten
transformacja może być niebezpieczna dla programów wielowątkowych, ponieważ przekształca warunkowe
pamięć zapisuje bezwarunkowe zapisy w pamięci. Na przykład,

dla (i = 0; i < N; i++)
jeśli (warunki)
A[i] = wyrażenie;

przekształca się w

dla (i = 0; i < N; i++)
A[i] = przew ? wyrażenie : A[i];

potencjalnie produkujących wyścigi danych.

-dystrybucja-pętla-o-pętli
Wykonaj dystrybucję pętli. Ta flaga może poprawić wydajność pamięci podręcznej w dużych ciałach pętli
i zezwól na dalsze optymalizacje pętli, takie jak równoległość lub wektoryzacja,
miejsce. Na przykład pętla

DO I = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
KONIEC

przekształca się w

DO I = 1, N
A(I) = B(I) + C
KONIEC
DO I = 1, N
D(I) = E(I) * F
KONIEC

-wzorce-dystrybucji-pętli-w-pętli
Wykonaj dystrybucję w pętli wzorców, które można wygenerować kodem za pomocą wywołań a
Biblioteka. Ta flaga jest domyślnie włączona w -O3.

Ten przebieg rozdziela pętle inicjujące i generuje wywołanie memset zero.
Na przykład pętla

DO I = 1, N
A(I) = 0
B(I) = A(I) + I
KONIEC

przekształca się w

DO I = 1, N
A(I) = 0
KONIEC
DO I = 1, N
B(I) = A(I) + I
KONIEC

a pętla inicjująca jest przekształcana w wywołanie memset zero.

-ftree-loop-im
Wykonuj ruch niezmienniczy pętli na drzewach. Ten pas porusza tylko niezmienniki, które są trudne
do obsługi na poziomie RTL (wywołania funkcji, operacje rozszerzające się na nietrywialne sekwencje)
zajazdów). Z -funswitch-pętle porusza również operandy warunków, które są
niezmiennicze poza pętlą, dzięki czemu możemy użyć tylko trywialnej analizy niezmienności in
rozłączanie pętli. Karnet obejmuje również ruch sklepu.

-ftree-loop-ivcanon
Utwórz licznik kanoniczny dla liczby iteracji w pętlach, dla których wyznaczenie
liczba iteracji wymaga skomplikowanej analizy. Późniejsze optymalizacje mogą wtedy
łatwo określić liczbę. Przydatne zwłaszcza w połączeniu z rozwijaniem.

-fivopts
Wykonaj optymalizacje zmiennych indukcyjnych (redukcja siły, zmienna indukcyjna
scalanie i indukcyjna eliminacja zmiennych) na drzewach.

-fttree-parallelize-loops=n
Paralelizuj pętle, tj. podziel ich przestrzeń iteracji, aby działały w n wątkach. To jest
możliwe tylko dla pętli, których iteracje są niezależne i mogą być dowolnie
zmieniono kolejność. Optymalizacja jest opłacalna tylko na maszynach wieloprocesorowych, pętle for
które intensywnie obciążają procesor, a nie są ograniczone np. przez przepustowość pamięci. Ta opcja
sugeruje -pthread, a zatem jest obsługiwany tylko w obiektach docelowych, które obsługują
-pthread.

-czterech-pta
Przeprowadź analizę funkcji lokalnych punktów na drzewach. Ta flaga jest domyślnie włączona
at -O i wyżej.

-ftree-sra
Wykonywanie skalarnej wymiany agregatów. Ta przepustka zastępuje odniesienia do struktur
ze skalarami, aby zapobiec zbyt wczesnemu zapisywaniu struktur w pamięci. Ta flaga to
domyślnie włączone o -O i wyżej.

-fttree-copyrename
Wykonaj zmianę nazwy kopii na drzewach. Ten przebieg próbuje zmienić nazwy tymczasowych kompilatorów na
inne zmienne w lokalizacjach kopiowania, zwykle skutkujące nazwami zmiennych, które więcej
bardzo przypominają oryginalne zmienne. Ta flaga jest domyślnie włączona w -O dzięki
wyższy.

-ftree-coalesce-inlined-vars
Powiedz hasło copyrename (zobacz -fttree-copyrename) próbować połączyć małego użytkownika-
również zdefiniowane zmienne, ale tylko wtedy, gdy są wbudowane w inne funkcje. To jest
bardziej ograniczona forma -ftree-coalesce-vars. Może to zaszkodzić informacjom debugowania takich
zmienne śródliniowe, ale zachowuje zmienne funkcji śródliniowej oddzielnie od siebie
inne, aby z większym prawdopodobieństwem zawierały oczekiwane wartości podczas debugowania
sesja.

-ftree-coalesce-vars
Powiedz hasło copyrename (zobacz -fttree-copyrename) próbować połączyć małego użytkownika-
również zdefiniowane zmienne, a nie tylko tymczasowe kompilatory. Może to poważnie ograniczyć
możliwość debugowania zoptymalizowanego programu skompilowanego z -fno-var-tracking-assignments.
W formie zanegowanej ta flaga zapobiega łączeniu SSA zmiennych użytkownika, w tym
te w linii. Opcja jest wyłączona domyślnie.

-fraterka
Wykonaj tymczasową zamianę ekspresji podczas fazy SSA->normalnej. Pojedynczy
czasy tymczasowe use/single def są zastępowane w miejscu ich użycia wraz z ich zdefiniowaniem
wyrażenie. Daje to kod inny niż GIMPLE, ale daje ekspanderom znacznie więcej
złożone drzewa do pracy, co skutkuje lepszym generowaniem RTL. Jest to możliwe dzięki
domyślnie w -O i wyżej.

-ftre-slsr
Wykonaj redukcję wytrzymałości w linii prostej na drzewach. To rozpoznaje pokrewne
wyrażeń zawierających mnożenia i zastępujących je tańszymi obliczeniami
kiedy możliwe. Jest to domyślnie włączone w -O i wyżej.

-ftree-wektoryzuj
Wykonaj wektoryzację na drzewach. Ta flaga umożliwia -wektoryzacja pętli trójstronnej dzięki
-ftree-slp-vectorize jeśli nie określono wyraźnie.

-wektoryzacja pętli trójstronnej
Wykonaj wektoryzację pętli na drzewach. Ta flaga jest domyślnie włączona w -O3 i kiedy
-ftree-wektoryzuj jest włączony.

-ftree-slp-vectorize
Wykonaj podstawową wektoryzację blokową na drzewach. Ta flaga jest domyślnie włączona w -O3 dzięki
gdy -ftree-wektoryzuj jest włączony.

-fvect-model-kosztów=model
Zmień model kosztów używany do wektoryzacji. ten model argument powinien być jednym z
nieograniczony, dynamiczny or tani, Z nieograniczony modeluje zwektoryzowaną ścieżkę kodu
zakłada się, że będzie opłacalny, podczas gdy dynamiczny model runtime check chroni
wektoryzowaną ścieżkę kodu, aby włączyć ją tylko dla zliczeń iteracji, które prawdopodobnie zostaną wykonane
szybciej niż podczas wykonywania oryginalnej pętli skalarnej. ten tani model wyłącza
wektoryzacja pętli, gdy byłoby to kosztowne, na przykład ze względu na:
wymagane sprawdzanie w czasie wykonywania pod kątem zależności danych lub wyrównania, ale poza tym jest równe
dynamiczny Model. Domyślny model kosztów zależy od innych flag optymalizacji i jest
bądź dynamiczny or tani.

-fsimd-model-kosztów=model
Zmień model kosztów używany do wektoryzacji pętli oznaczonych OpenMP lub Cilk
Plus dyrektywa SIMD. ten model argument powinien być jednym z nieograniczony, dynamiczny, tani.
Wszystkie wartości model mają takie samo znaczenie jak opisane w -fvect-model-kosztowy i przez
domyślnie model kosztów zdefiniowany za pomocą -fvect-model-kosztowy Jest używane.

-ftree-vrp
Wykonaj propagację zakresu wartości na drzewach. Jest to podobne do stałej propagacji
pass, ale zamiast wartości propagowane są zakresy wartości. Pozwala to na
optymalizatory usuwające niepotrzebne kontrole zakresu, takie jak kontrole związane z tablicą i wskaźnik zerowy
czeki. Jest to domyślnie włączone w -O2 i wyżej. Eliminacja sprawdzania wskaźnika zerowego
jest zrobione tylko wtedy, gdy -fdelete-null-pointer-checks jest włączony.

-fsplit-ivs-in-unroller
Umożliwia wyrażenie wartości zmiennych indukcyjnych w późniejszych iteracjach
rozwinięta pętla przy użyciu wartości z pierwszej iteracji. To łamie długą zależność
łańcuchów, poprawiając w ten sposób efektywność przebiegów harmonogramowania.

Połączenie -fweb a CSE często wystarcza do uzyskania tego samego efektu.
Jednak nie jest to niezawodne w przypadkach, w których treść pętli jest bardziej skomplikowana niż a
pojedynczy blok podstawowy. Nie działa też w ogóle na niektórych architekturach z powodu
ograniczenia w przepustce CSE.

Ta optymalizacja jest domyślnie włączona.

-fvariable-expansion-in-unroller
Dzięki tej opcji kompilator tworzy wiele kopii niektórych zmiennych lokalnych, gdy
rozwijanie pętli, co może skutkować lepszym kodem.

-częściowa inlining
Inline części funkcji. Ta opcja działa tylko wtedy, gdy samo wstawianie jest
włączony przez -finline-funkcje or -finline-małe-funkcje Opcje.

Włączone na poziomie -O2.

-fpredictive-commoning
Przeprowadź optymalizację predykcyjnego uwspólniania, tj. ponowne wykorzystanie obliczeń (zwłaszcza
ładuje i przechowuje pamięć) wykonane w poprzednich iteracjach pętli.

Ta opcja jest włączona na poziomie -O3.

-fprefetch-loop-arrays
Jeśli jest obsługiwane przez maszynę docelową, wygeneruj instrukcje wstępnego pobrania pamięci do
poprawić wydajność pętli, które uzyskują dostęp do dużych tablic.

Ta opcja może generować lepszy lub gorszy kod; wyniki są wysoce zależne od
struktura pętli w kodzie źródłowym.

Wyłączone na poziomie -Os.

-fno-wizjer
-fno-wizjer2
Wyłącz wszelkie optymalizacje wizjera specyficzne dla maszyny. Różnica pomiędzy
-fno-wizjer dzięki -fno-wizjer2 jest w jaki sposób są zaimplementowane w kompilatorze; Niektóre
cele używają jednego, niektórzy drugiego, niektórzy używają obu.

-Wizjer jest domyślnie włączone. -fpeephole2 włączone na poziomach -O2, -O3, -Os.

-fno-zgadnij-oddział-prawdopodobieństwo
Nie zgaduj prawdopodobieństw gałęzi za pomocą heurystyki.

GCC używa heurystyki do odgadywania prawdopodobieństw gałęzi, jeśli nie są one dostarczane przez
profilowanie opinii (-f-łuki-profilu). Te heurystyki są oparte na przepływie sterowania
wykres. Jeśli niektóre prawdopodobieństwa gałęzi są określone przez „__builtin_expect”, wtedy
heurystyki są używane do odgadywania prawdopodobieństw gałęzi dla reszty przepływu sterowania
wykres, z uwzględnieniem informacji „__builtin_expect”. Interakcje między
heurystyki i „__builtin_expect” mogą być złożone, a w niektórych przypadkach mogą być przydatne
aby wyłączyć heurystykę, aby efekty „__builtin_expect” były łatwiejsze do
Rozumiesz.

Wartość domyślna to -odgadnięcie-gałęzi-prawdopodobieństwa na poziomach -O, -O2, -O3, -Os.

-bloki-freorder
Zmień kolejność podstawowych bloków w skompilowanej funkcji w celu zmniejszenia liczby pobranych
oddziałów i poprawić lokalizację kodu.

Włączone na poziomach -O2, -O3.

-bloki-freorder-i-partycja
Oprócz zmiany kolejności podstawowych bloków w skompilowanej funkcji, w celu zmniejszenia
ilość pobranych gałęzi, przegród gorące i zimne podstawowe bloki na osobne sekcje
zestawu i plików .o, aby poprawić wydajność stronicowania i lokalizacji pamięci podręcznej.

Ta optymalizacja jest automatycznie wyłączana w przypadku obsługi wyjątków,
dla sekcji linkonce, dla funkcji z atrybutem sekcji zdefiniowanym przez użytkownika i dla dowolnych
architektura, która nie obsługuje nazwanych sekcji.

Włączone dla x86 na poziomach -O2, -O3.

-funkcje-freorder
Zmień kolejność funkcji w pliku obiektowym w celu poprawy lokalizacji kodu. To jest
realizowane za pomocą specjalnych podsekcji ".text.hot" dla najczęściej wykonywanych
funkcji i ".text.unlikely" dla mało prawdopodobnych wykonywanych funkcji. Zmiana kolejności odbywa się przez
linker, więc format pliku obiektowego musi obsługiwać nazwane sekcje, a linker musi być umieszczony
je w rozsądny sposób.

Aby ta opcja była skuteczna, musi być również dostępna opinia o profilu. Widzieć
-f-łuki-profilu dla szczegółów.

Włączone na poziomach -O2, -O3, -Os.

-fstrict-aliasing
Zezwól kompilatorowi na przyjęcie najsurowszych reguł aliasingu mających zastosowanie do języka
kompilacja. Dla C (i C++) aktywuje to optymalizacje w oparciu o typ
wyrażenia. W szczególności zakłada się, że obiekt jednego typu nigdy nie znajduje się w
taki sam adres jak obiekt innego typu, chyba że typy są prawie takie same.
Na przykład, "unsigned int" może być aliasem "int", ale nie "void*" lub "double". A
typ znaku może być aliasem dowolnego innego typu.

Zwróć szczególną uwagę na taki kod:

związek a_unia {
wew;
podwójne d;
};

int f() {
związek a_unia t;
td = 3.0;
powrót ti;
}

Praktyka czytania od innego członka związku niż ostatnio
napisane do (tzw. „typowanie”) jest powszechne. Nawet z -fstrict-aliasing, rodzaj-
punning jest dozwolony, pod warunkiem, że dostęp do pamięci uzyskuje się za pośrednictwem typu union. Więc
powyższy kod działa zgodnie z oczekiwaniami. Jednak ten kod może nie:

int f() {
związek a_unia t;
int* ip;
td = 3.0;
ip = &t.i;
powrót *ip;
}

Podobnie, dostęp przez pobranie adresu, rzutowanie wynikowego wskaźnika i
wyłuskiwanie wyniku ma niezdefiniowane zachowanie, nawet jeśli rzutowanie używa typu union,
na przykład:

int f() {
podwójne d = 3.0;
return ((union a_union *) &d)->i;
}

Pandemia -fstrict-aliasing opcja jest włączona na poziomach -O2, -O3, -Os.

-przepełnienie-przepełnienie
Zezwól kompilatorowi na przyjęcie ścisłych reguł przepełnienia podpisu, w zależności od języka
kompilacja. Dla C (i C++) oznacza to przepełnienie podczas wykonywania arytmetyki z
liczby ze znakiem jest niezdefiniowane, co oznacza, że ​​kompilator może założyć, że nie
zdarzyć. Pozwala to na różne optymalizacje. Na przykład kompilator zakłada, że
wyrażenie takie jak „i + 10 > i” jest zawsze prawdziwe dla znaku „i”. To założenie jest
ważne tylko wtedy, gdy przepełnienie ze znakiem jest niezdefiniowane, ponieważ wyrażenie jest fałszywe, jeśli „i + 10”
przepełnienia przy użyciu arytmetyki dopełniania dwójek. Kiedy ta opcja obowiązuje dowolna
próba ustalenia, czy operacja na przepełnieniach liczb ze znakiem musi zostać napisana
ostrożnie, aby nie powodować przepełnienia.

Ta opcja pozwala również kompilatorowi na założenie ścisłej semantyki wskaźnika: podane a
wskaźnik do obiektu, jeśli dodanie przesunięcia do tego wskaźnika nie daje wskaźnika
do tego samego obiektu dodawanie jest nieokreślone. Pozwala to kompilatorowi na stwierdzenie
że "p + u > p" jest zawsze prawdziwe dla wskaźnika "p" i liczby całkowitej bez znaku "u". Ten
założenie jest poprawne tylko dlatego, że zawijanie wskaźnika jest niezdefiniowane, ponieważ wyrażenie jest
false jeśli "p + u" przepełnia się przy użyciu arytmetyki dopełniania dwójek.

Zobacz też -fwrapv opcja. Za pomocą -fwrapv oznacza, że ​​przepełnienie ze znakiem liczby całkowitej to
w pełni zdefiniowany: otula. Kiedy -fwrapv jest używany, nie ma różnicy między
-przepełnienie-przepełnienie dzięki -fno-strict-przepełnienie dla liczb całkowitych. Z -fwrapv pewne rodzaje
przepełnienia są dozwolone. Na przykład, jeśli kompilator przepełni się podczas wykonywania
arytmetyka na stałych, przepełniona wartość może być nadal używana z -fwrapv, Lecz nie
Inaczej.

Pandemia -przepełnienie-przepełnienie opcja jest włączona na poziomach -O2, -O3, -Os.

-Falign-funkcje
-falign-funkcje=n
Wyrównaj początek funkcji do następnej potęgi dwójki większej niż n, przeskakując do n
bajty. Na przykład, -falign-funkcje=32 wyrównuje funkcje do następnych 32 bajtów
granica, ale -falign-funkcje=24 wyrównuje się do następnej granicy 32-bajtów tylko wtedy, gdy to
można to zrobić pomijając 23 bajty lub mniej.

-fno-align-functions dzięki -falign-funkcje=1 są równoważne i oznaczają, że funkcje
nie są wyrównane.

Niektóre asemblery obsługują tę flagę tylko wtedy, gdy n jest potęgą dwóch; w takim razie jest
z zaokrągleniem w górę.

If n nie jest określony lub wynosi zero, użyj wartości domyślnej zależnej od maszyny.

Włączone na poziomach -O2, -O3.

-falign-etykiety
-falign-etykiety=n
Wyrównaj wszystkie cele rozgałęzień do granicy potęgi dwóch, przeskakując do n bajtów jak
-Falign-funkcje. Ta opcja może łatwo spowolnić kod, ponieważ trzeba go wstawić
fikcyjne operacje, gdy cel rozgałęzienia zostanie osiągnięty w zwykłym przepływie kodu.

-fno-align-etykiety dzięki -falign-etykiety=1 są równoważne i oznaczają, że etykiety nie są
wyrównane.

If -falign-pętle or -falign-skoki mają zastosowanie i są większe od tej wartości, to
zamiast tego używane są ich wartości.

If n nie jest określony lub wynosi zero, użyj wartości domyślnej zależnej od maszyny, co jest bardzo prawdopodobne
być 1, co oznacza brak wyrównania.

Włączone na poziomach -O2, -O3.

-falign-pętle
-falign-loops=n
Wyrównaj pętle do granicy potęgi dwóch, przeskakując do n bajtów jak -Falign-funkcje.
Jeśli pętle są wykonywane wiele razy, rekompensuje to wykonanie manekina
operacje.

-fno-align-loops dzięki -falign-loops=1 są równoważne i oznaczają, że pętle nie są
wyrównane.

If n nie jest określony lub wynosi zero, użyj wartości domyślnej zależnej od maszyny.

Włączone na poziomach -O2, -O3.

-falign-skoki
-falign-skoki=n
Wyrównaj cele rozgałęzień do granicy potęgi dwóch, w przypadku rozgałęzień celów, w których cele
można dosięgnąć tylko skacząc, przeskakując do n bajtów jak -Falign-funkcje, w
w tym przypadku nie trzeba wykonywać żadnych fikcyjnych operacji.

-fno-align-skoki dzięki -falign-skoki=1 są równoważne i oznaczają, że pętle nie są
wyrównane.

If n nie jest określony lub wynosi zero, użyj wartości domyślnej zależnej od maszyny.

Włączone na poziomach -O2, -O3.

-zabawa-na-czas
Ta opcja jest pozostawiona ze względu na kompatybilność. -zabawa-na-czas nie ma żadnego efektu, podczas gdy
-fno-jednostka-na-czas sugeruje -fno-toplevel-reorder dzięki -fno-kotwy-sekcji.

Domyślnie włączone.

-fno-toplevel-reorder
Nie zmieniaj kolejności funkcji, zmiennych i instrukcji „asm” najwyższego poziomu. Wypisz je w
w tej samej kolejności, w jakiej pojawiają się w pliku wejściowym. Gdy ta opcja jest używana,
zmienne statyczne, do których nie ma odwołań, nie są usuwane. Ta opcja ma na celu wsparcie
istniejący kod, który opiera się na określonej kolejności. W przypadku nowego kodu lepiej użyć
atrybuty, jeśli to możliwe.

Włączone na poziomie -O0. Gdy jest wyraźnie wyłączone, oznacza to również: -fno-kotwy-sekcji,
co jest w inny sposób włączone w -O0 na niektórych celach.

-fweb
Konstruuje sieci powszechnie używane do celów alokacji rejestrów i przypisuje każdą sieć
indywidualny pseudorejestr. Pozwala to na działanie przepustki alokacji rejestru
pseudos bezpośrednio, ale także wzmacnia kilka innych przejść optymalizacyjnych, takich jak CSE,
Optymalizator pętli i usuwanie trywialnego martwego kodu. Może jednak spowodować debugowanie
niemożliwe, ponieważ zmienne nie pozostają już w „rejestrze domowym”.

Włączone domyślnie z -funroll-pętle.

-cały-program
Załóżmy, że bieżąca jednostka kompilacji reprezentuje cały kompilowany program.
Wszystkie funkcje i zmienne publiczne z wyjątkiem „main” i połączonych przez
atrybut "externally_visible" staje się funkcjami statycznymi i w efekcie zostaje zoptymalizowany
bardziej agresywnie przez optymalizatory międzyproceduralne.

Ta opcja nie powinna być używana w połączeniu z -flto. Zamiast polegać na linkerze
wtyczka powinna dostarczać bezpieczniejszych i dokładniejszych informacji.

-flto[=n]
Ta opcja uruchamia standardowy optymalizator czasu łącza. Po wywołaniu z kodem źródłowym, to
generuje GIMPLE (jedna z wewnętrznych reprezentacji GCC) i zapisuje go do specjalnego ELF
sekcje w pliku obiektowym. Gdy pliki obiektów są ze sobą połączone, wszystkie
ciała funkcji są odczytywane z tych sekcji ELF i tworzone tak, jakby były
część tej samej jednostki tłumaczeniowej.

Aby użyć optymalizatora czasu łącza, -flto a opcje optymalizacji należy określić w
czas kompilacji i podczas końcowego linku. Na przykład:

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

Pierwsze dwa wywołania GCC zapisują reprezentację kodu bajtowego GIMPLE w special
Sekcje ELF wewnątrz foo.o dzięki bar.o. Ostatnie wywołanie odczytuje kod bajtowy GIMPLE
od foo.o dzięki bar.o, łączy oba pliki w jeden wewnętrzny obraz i kompiluje
wynik jak zwykle. Od kiedy oboje foo.o dzięki bar.o są połączone w jeden obraz, to
powoduje, że wszystkie analizy i optymalizacje międzyproceduralne w GCC działają w całym obszarze
dwa pliki, jakby były jednym. Oznacza to na przykład, że wkładka jest
w stanie wbudować funkcje w bar.o na funkcje w foo.o i wzajemnie.

Innym (prostszym) sposobem włączenia optymalizacji czasu łącza jest:

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

Powyższe generuje kod bajtowy dla foo.c dzięki bar.c, łączy je w jedno
Reprezentacja GIMPLE i optymalizuje je jak zwykle do produkcji mójprog.

Jedyną ważną rzeczą, o której należy pamiętać, jest to, że aby umożliwić optymalizację czasu linku, należy
trzeba użyć sterownika GCC, aby wykonać krok linku. GCC następnie wykonuje automatycznie
optymalizacja czasu łącza, jeśli którykolwiek z zaangażowanych obiektów został skompilowany z -flto
opcja wiersza poleceń. Generalnie powinieneś określić opcje optymalizacji, które mają być używane
do optymalizacji czasu łącza, chociaż GCC stara się sprytnie zgadywać optymalizację
poziom do użycia z opcji używanych w czasie kompilacji, jeśli nie określisz jednego w link-
czas. Zawsze możesz pominąć automatyczną decyzję o optymalizacji czasu łącza w
czas linku przez przejście -fno-lto do polecenia łącza.

Aby optymalizacja całego programu była skuteczna, konieczne jest stworzenie pewnej całości
założenia programu. Kompilator musi wiedzieć, jakie mogą być funkcje i zmienne
dostępne dla bibliotek i środowiska wykonawczego poza jednostką zoptymalizowaną pod kątem czasu łącza. Kiedy
obsługiwana przez linker, wtyczka linkera (patrz -fuse-linker-plugin) Karnety
informacje dla kompilatora o używanych i widocznych z zewnątrz symbolach. Kiedy
wtyczka linkera nie jest dostępna, -cały-program powinien być używany, aby umożliwić kompilatorowi
poczynić te założenia, co prowadzi do bardziej agresywnych decyzji optymalizacyjnych.

Gdy -fuse-linker-plugin nie jest wtedy włączone, gdy plik jest skompilowany za pomocą -fltoThe
wygenerowany plik obiektowy jest większy niż zwykły plik obiektowy, ponieważ zawiera GIMPLE
kody bajtowe i zwykły kod końcowy (patrz -ffat-lto-obiekty. Oznacza to, że obiekt
pliki z informacjami LTO można łączyć jako zwykłe pliki obiektowe; Jeśli -fno-lto jest zdany
do linkera nie są stosowane żadne optymalizacje międzyproceduralne. Zauważ, że kiedy
-fno-fat-lto-obiekty jest włączona, etap kompilacji jest szybszy, ale nie można wykonać
na nich zwykłe łącze inne niż LTO.

Dodatkowo flagi optymalizacji używane do kompilacji poszczególnych plików nie są
koniecznie powiązane z tymi używanymi w czasie łączenia. Na przykład,

gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o

Daje to pojedyncze pliki obiektowe z niezoptymalizowanym kodem asemblera, ale
wynikowy plik binarny mójprog jest zoptymalizowany w -O3. Jeśli zamiast tego ostateczna wersja binarna to
wygenerowane za pomocą -fno-lto, następnie mójprog nie jest zoptymalizowany.

Podczas tworzenia ostatecznego pliku binarnego GCC stosuje do nich tylko optymalizacje czasu łącza
pliki zawierające kod bajtowy. Dlatego możesz mieszać i dopasowywać pliki obiektowe i
biblioteki z kodami bajtowymi GIMPLE i końcowym kodem wynikowym. GCC wybiera automatycznie
które pliki zoptymalizować w trybie LTO, a które bez dalszych linków
przetwarzanie.

Istnieją pewne flagi generowania kodu zachowywane przez GCC podczas generowania kodów bajtowych, ponieważ
muszą być używane na końcowym etapie łączenia. Ogólnie opcje określone w
czas linku zastępuje te określone w czasie kompilacji.

Jeśli nie określisz opcji poziomu optymalizacji -O w czasie połączenia, a następnie oblicza GCC
jeden oparty na poziomach optymalizacji użytych podczas kompilacji plików obiektowych. ten
wygrywa tutaj najwyższy poziom optymalizacji.

Obecnie następujące opcje i ich ustawienia są pobierane z pierwszego pliku obiektowego
który wyraźnie to określił: -fPIC, -fpic, -fpie, -fwspólny, -wyjątki,
-fnon-call-Exceptions, -fgnu-tm i wszystkie -m flagi docelowe.

Pewne flagi zmiany ABI są wymagane do dopasowania we wszystkich jednostkach kompilacji i próbach
zastąpienie tego w czasie połączenia wartością powodującą konflikt jest ignorowane. To zawiera
opcje takie jak -freg-struct-return dzięki -fpcc-struct-return.

Inne opcje, takie jak -umowa-ffp, -fno-strict-przepełnienie, -fwrapv, -fno-trapv or
-fno-strict-aliasing są przekazywane do etapu łączenia i łączone w sposób zachowawczy
w przypadku sprzecznych jednostek tłumaczeniowych. konkretnie -fno-strict-przepełnienie, -fwrapv dzięki
-fno-trapv mieć pierwszeństwo i na przykład -ffp-umowa=off ma pierwszeństwo przed
-ffp-kontrakt=szybko. Możesz je zastąpić w czasie linkowania.

Zaleca się skompilowanie wszystkich plików uczestniczących w tym samym łączu za pomocą
te same opcje, a także określ te opcje w czasie łączenia.

Jeśli LTO napotka obiekty z powiązaniem C zadeklarowane z niekompatybilnymi typami w oddzielnych
jednostki tłumaczeniowe do połączenia (niezdefiniowane zachowanie zgodnie z ISO C99
6.2.7), może zostać wydana diagnostyka niezakończona zgonem. Zachowanie jest nadal niezdefiniowane w biegu
czas. Podobna diagnostyka może zostać podniesiona dla innych języków.

Kolejną cechą LTO jest możliwość zastosowania optymalizacji międzyproceduralnych
na plikach napisanych w różnych językach:

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

Zauważ, że ostatni link jest zrobiony za pomocą g ++ aby pobrać biblioteki wykonawcze C++ i
-lgfortran został dodany, aby pobrać biblioteki wykonawcze Fortran. Ogólnie podczas mieszania
języki w trybie LTO, powinieneś używać tych samych opcji poleceń linku, jak podczas miksowania
języki w regularnej (nie LTO) kompilacji.

Jeśli pliki obiektowe zawierające kod bajtowy GIMPLE są przechowywane w archiwum biblioteki, powiedzmy
libfoo.a, można je wyodrębnić i użyć w łączu LTO, jeśli używasz a
linker z obsługą wtyczek. Aby utworzyć biblioteki statyczne odpowiednie dla LTO, użyj gcc-ar
dzięki gcc-ranlib zamiast ar dzięki ranlib; aby pokazać symbole plików obiektowych za pomocą
Kod bajtowy GIMPLE, użyj gcc-nm. Te polecenia wymagają tego ar, ranlib dzięki nm były
skompilowany z obsługą wtyczek. W czasie łączenia użyj flagi -fuse-linker-plugin do
zapewnić, aby biblioteka uczestniczyła w procesie optymalizacji LTO:

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

Po włączeniu wtyczki linkera, linker wyodrębnia potrzebne pliki GIMPLE z
libfoo.a i przekazuje je do działającego GCC, aby stały się częścią zagregowanego
Obraz GIMPLE do optymalizacji.

Jeśli nie używasz linkera z obsługą wtyczek i/lub nie włączasz linkera
wtyczka, a następnie obiekty w środku libfoo.a są wyodrębniane i łączone jak zwykle, ale
nie brać udziału w procesie optymalizacji LTO. Aby stworzyć statyczną bibliotekę
nadaje się zarówno do optymalizacji LTO, jak i zwykłego połączenia, kompiluj pliki obiektowe za pomocą
-flto -ffat-lto-obiekty.

Optymalizacje czasu łącza nie wymagają do działania obecności całego programu.
Jeżeli program nie wymaga eksportu żadnych symboli, istnieje możliwość łączenia
-flto dzięki -cały-program aby umożliwić optymalizatorom międzyproceduralnym korzystanie z większej ilości
agresywne założenia, które mogą prowadzić do lepszych możliwości optymalizacji. Zastosowanie
-cały-program nie jest potrzebne, gdy wtyczka linkera jest aktywna (zobacz -fuse-linker-plugin).

Obecna implementacja LTO nie próbuje wygenerować kodu bajtowego, który jest
przenośny między różnymi typami hostów. Pliki kodu bajtowego są wersjonowane i tam
to ścisła kontrola wersji, więc pliki kodu bajtowego wygenerowane w jednej wersji GCC nie
pracować ze starszą lub nowszą wersją GCC.

Optymalizacja czasu łącza nie działa dobrze z generowaniem informacji debugowania.
łącząc -flto z -g jest obecnie eksperymentalny i oczekuje się, że przyniesie nieoczekiwane
wyników.

Jeśli określisz opcjonalne n, optymalizacja i generowanie kodu wykonywane w czasie linkowania
jest wykonywany równolegle za pomocą n równoległe zadania z wykorzystaniem zainstalowanego robić program.
Zmienna środowiskowa MAKE może służyć do zastąpienia używanego programu. Domyślny
wartość dla n to 1.

Możesz również określić -flto=serwer zadań użyć trybu serwera zadań GNU make do określenia
liczba równoległych zadań. Jest to przydatne, gdy wywołanie GCC Makefile jest już
wykonywane równolegle. Musisz dodać + do przepisu polecenia w rodzicu
Makefile, aby to zadziałało. Ta opcja prawdopodobnie działa tylko wtedy, gdy MAKE to marka GNU.

-flto-partycja=ALG
Określ algorytm partycjonowania używany przez optymalizator czasu łącza. Wartość to
bądź 1to1 aby określić partycjonowanie odzwierciedlające oryginalne pliki źródłowe lub zrównoważony
określić partycjonowanie na porcje o jednakowej wielkości (jeśli to możliwe) lub max tworzyć
w miarę możliwości nową partycję dla każdego symbolu. Określanie Żaden jako algorytm
całkowicie wyłącza partycjonowanie i przesyłanie strumieniowe. Domyślna wartość to zrównoważony. Podczas
1to1 może być używany jako obejście różnych problemów z porządkowaniem kodu, max
partycjonowanie jest przeznaczone wyłącznie do testów wewnętrznych. Wartość jeden określa to
należy użyć dokładnie jednej partycji, podczas gdy wartość Żaden omija partycjonowanie i
wykonuje krok optymalizacji czasu łącza bezpośrednio z fazy WPA.

-scalanie typu flto-odr
Włącz strumieniowanie zniekształconych nazw typów typów C++ i ich unifikację w
czas połączenia. Zwiększa to rozmiar plików obiektów LTO, ale umożliwia diagnostykę dotyczącą One
Definicja Naruszenia reguł.

-flto-poziom-kompresji=n
Ta opcja określa poziom kompresji używany dla pisanego języka średnio zaawansowanego
do plików obiektowych LTO i ma znaczenie tylko w połączeniu z trybem LTO (-flto).
Prawidłowe wartości to od 0 (brak kompresji) do 9 (maksymalna kompresja). Wartości poza tym
zakres jest ograniczony do 0 lub 9. Jeśli opcja nie jest podana, domyślnie zrównoważony
używane jest ustawienie kompresji.

-flto-raport
Drukuje raport z wewnętrznymi szczegółami działania optymalizatora czasu łącza. ten
zawartość tego raportu różni się w zależności od wersji. Ma to być przydatne dla GCC
programiści podczas przetwarzania plików obiektowych w trybie LTO (przez -flto).

Domyślnie wyłączone.

-flto-raport-wpa
Polub -flto-raport, ale drukuj tylko dla fazy WPA optymalizacji czasu łącza.

-fuse-linker-plugin
Umożliwia korzystanie z wtyczki linkera podczas optymalizacji czasu linkowania. Ta opcja opiera się
na obsługę wtyczek w linkerze, który jest dostępny w wersji gold lub GNU ld 2.21 lub
nowsza.

Ta opcja umożliwia wyodrębnienie plików obiektowych z kodem bajtowym GIMPLE z biblioteki
archiwa. Poprawia to jakość optymalizacji poprzez eksponowanie większej ilości kodu na link-
optymalizator czasu. Informacje te określają, do jakich symboli można uzyskać dostęp z zewnątrz
(przez obiekt inny niż LTO lub podczas dynamicznego łączenia). Wynikowe ulepszenia jakości kodu włączone
pliki binarne (i biblioteki współdzielone, które używają ukrytej widoczności) są podobne do
-cały-program. Zobaczyć -flto po opis efektu tej flagi i jak
Użyj tego.

Ta opcja jest domyślnie włączona, gdy obsługa LTO w GCC jest włączona, a GCC było
skonfigurowany do użytku z linkerem obsługującym wtyczki (GNU ld 2.21 lub nowszy lub złoty).

-ffat-lto-obiekty
Obiekty Fat LTO to pliki obiektowe, które zawierają zarówno język pośredni, jak i
kod obiektu. Dzięki temu można je wykorzystać zarówno do łączenia LTO, jak i normalnego łączenia. Ten
opcja działa tylko podczas kompilacji z -flto i jest ignorowane w czasie łączenia.

-fno-fat-lto-obiekty poprawia czas kompilacji w porównaniu ze zwykłym LTO, ale wymaga
kompletny zestaw narzędzi, aby być świadomym LTO. Wymaga linkera z obsługą wtyczki linkera
dla podstawowej funkcjonalności. Dodatkowo, nm, ar dzięki ranlib trzeba wesprzeć linker
wtyczki umożliwiające w pełni funkcjonalne środowisko kompilacji (zdolne do budowania statycznych
biblioteki itp.). GCC zapewnia gcc-ar, gcc-nm, gcc-ranlib opakowania do przekazania
odpowiednie opcje do tych narzędzi. W przypadku beztłuszczowych plików makefile LTO należy je zmodyfikować, aby można było ich używać
Im.

Wartość domyślna to -fno-fat-lto-obiekty na celach z obsługą wtyczki linkera.

-fporównaj-elim
Po alokacji rejestru i podziale instrukcji alokacji porejestrowej, zidentyfikuj
instrukcje arytmetyczne, które obliczają flagi procesora podobne do operacji porównania
na podstawie tej arytmetyki. Jeśli to możliwe, wyeliminuj jawną operację porównania.

Ta przepustka dotyczy tylko niektórych celów, które nie mogą wyraźnie reprezentować
operacja porównania przed zakończeniem przydzielania rejestru.

Włączone na poziomach -O, -O2, -O3, -Os.

-fcprop-rejestry
Po alokacji rejestru i podziale instrukcji alokacji porejestrowej wykonaj
przepustka do propagacji kopii, aby spróbować zredukować zależności planowania i od czasu do czasu
wyeliminować kopię.

Włączone na poziomach -O, -O2, -O3, -Os.

-f-korekta-profilu
Profile zebrane przy użyciu oprzyrządowanego pliku binarnego dla programów wielowątkowych mogą być
niespójne z powodu pominiętych aktualizacji liczników. Gdy ta opcja jest określona, ​​GCC używa
heurystyki w celu skorygowania lub wygładzenia takich niespójności. Domyślnie GCC emituje
komunikat o błędzie po wykryciu niespójnego profilu.

-f-katalog-profilu=ścieżka
Ustaw katalog do wyszukiwania plików danych profilu na ścieżka. Ta opcja
wpływa tylko na dane profilu generowane przez -fprofil-generuj, -pokrycie-ftest,
-f-łuki-profilu i używane przez -f-użycie-profilu dzięki -prawdopodobieństwa-oddziału i pokrewne
opcje. Można używać zarówno ścieżek bezwzględnych, jak i względnych. Domyślnie GCC używa
bieżący katalog jako ścieżka, dlatego plik danych profilu pojawia się w tym samym katalogu, co
plik obiektowy.

-fprofil-generuj
-fprofil-generuj=ścieżka
Włącz opcje zwykle używane do oprzyrządowania aplikacji w celu uzyskania przydatnego profilu
do późniejszej rekompilacji z optymalizacją opartą na informacjach zwrotnych z profilu. Musisz użyć
-fprofil-generuj zarówno podczas kompilowania, jak i łączenia programu.

Włączone są następujące opcje: -f-łuki-profilu, -f-wartości-profilu, -fvpt.

If ścieżka jest określony, GCC sprawdza ścieżka aby znaleźć pliki danych opinii o profilu.
Widzieć -fprofile-dir.

-f-użycie-profilu
-f-użycie-profilu=ścieżka
Włącz optymalizacje oparte na opiniach profilu oraz następujące optymalizacje, które:
są generalnie opłacalne tylko wtedy, gdy dostępne są informacje zwrotne na temat profilu: -prawdopodobieństwa-oddziału,
-fvpt, -funroll-pętle, -pętle-odczuwania, -ftracer, -ftree-wektoryzuj, pętla trójdzielna-
dystrybucja-wzorów.

Domyślnie GCC wyświetla komunikat o błędzie, jeśli profile opinii nie są zgodne z
kod źródłowy. Ten błąd można zmienić w ostrzeżenie, używając -Niezgodność zasięgu.
Pamiętaj, że może to skutkować słabo zoptymalizowanym kodem.

If ścieżka jest określony, GCC sprawdza ścieżka aby znaleźć pliki danych opinii o profilu.
Widzieć -fprofile-dir.

-fauto-profil
-fauto-profil=ścieżka
Włącz optymalizacje oparte na próbkowaniu oparte na informacjach zwrotnych oraz następujące optymalizacje
które są generalnie opłacalne tylko wtedy, gdy dostępne są informacje zwrotne na temat profilu:
-prawdopodobieństwa-oddziału, -fvpt, -funroll-pętle, -pętle-odczuwania, -ftracer,
-ftree-wektoryzuj, -finline-funkcje, -fipa-cp, -fipa-cp-klon,
-fpredictive-commoning, -funswitch-pętle, -fgcse-po-przeładowaniu,
-wzorce-dystrybucji-pętli-w-pętli.

ścieżka to nazwa pliku zawierającego informacje o profilu AutoFDO. Jeśli zostanie pominięty, to
domyślnie to fbdata.afdo w bieżącym katalogu.

Utworzenie pliku danych profilu AutoFDO wymaga uruchomienia programu z perf
na obsługiwanym systemie docelowym GNU/Linux. Aby uzyskać więcej informacji, zobacz
<https://perf.wiki.kernel.org/>.

Na przykład

rekord perf -e br_inst_retired:near_taken -b -o perf.data \
-- twój_program

Następnie użyj utwórz_gcov narzędzie do konwersji surowych danych profilu do formatu, który może być
używane przez GCC. Musisz również dostarczyć do tego nieokrojony plik binarny dla swojego programu
narzędzie. Widziećhttps://github.com/google/autofdo>.

Na przykład

create_gcov --binary=twój_program.unstripped --profile=perf.data \
--gcov=profil.afdo

Poniższe opcje sterują zachowaniem kompilatora w odniesieniu do arytmetyki zmiennoprzecinkowej.
Te opcje stanowią kompromis między szybkością a poprawnością. Wszystkie muszą być specjalnie włączone.

-sklep-float
Nie przechowuj zmiennych zmiennoprzecinkowych w rejestrach i wstrzymuj inne opcje, które:
może zmienić, czy wartość zmiennoprzecinkowa jest pobierana z rejestru lub pamięci.

Ta opcja zapobiega niepożądanej nadmiernej precyzji na maszynach takich jak 68000, gdzie
rejestry zmiennoprzecinkowe (z 68881) zachowują większą precyzję niż przypuszcza się, że „podwójne”
mieć. Podobnie dla architektury x86. W przypadku większości programów nadmierna precyzja
działa tylko dobrze, ale kilka programów opiera się na dokładnej definicji zmiennej IEEE
punkt. Posługiwać się -sklep-float dla takich programów, po zmodyfikowaniu ich do przechowywania wszystkich
odpowiednie pośrednie obliczenia na zmienne.

-fexcess-precyzja=styl
Ta opcja pozwala na dalszą kontrolę nad nadmierną precyzją na maszynach, w których
rejestry punktowe mają większą precyzję niż typy „float” i „double” IEEE, a
procesor nie obsługuje operacji zaokrąglania do tych typów. Domyślnie,
-Fexcess-precyzja=szybko obowiązuje; oznacza to, że operacje przeprowadzane są w
dokładność rejestrów i nieprzewidywalność przy zaokrąglaniu do typów
określone w kodzie źródłowym ma miejsce. Podczas kompilacji C, jeśli
-fexcess-precyzja=standard jest określony, to nadmierna precyzja jest zgodna z zasadami
określone w ISO C99; w szczególności zarówno rzuty, jak i przypisania powodują, że wartości są
zaokrąglone do ich typów semantycznych (podczas gdy -sklep-float dotyczy tylko przydziałów).
Ta opcja jest domyślnie włączona dla C, jeśli opcja ścisłej zgodności, taka jak
-std=c99 Jest używane.

-fexcess-precyzja=standard nie jest zaimplementowany dla języków innych niż C i nie ma
efekt, jeśli -funsafe-matematyczne optymalizacje or -fast-matematyka jest specyficzne. Na x86 to
również nie ma wpływu, jeśli -mfpmath=sse or -mfpmath=sse+387 jest specyficzne; w pierwszym
przypadku semantyka IEEE jest stosowana bez nadmiernej precyzji, a w tym drugim przypadku zaokrąglanie jest
nieobliczalny.

-fast-matematyka
Ustawia opcje -fno-matma-errno, -funsafe-matematyczne optymalizacje, -finite-tylko matematyka,
-fno-zaokrąglanie-matematyka, -fno-sygnalizacji-nans dzięki -fcx-ograniczony-zakres.

Ta opcja powoduje zdefiniowanie makra preprocesora „__FAST_MATH__”.

Ta opcja nie jest włączona przez żadnego -O opcja poza tym -Ofast ponieważ może to spowodować
nieprawidłowe wyjście dla programów, które zależą od dokładnej implementacji IEEE lub ISO
zasady/specyfikacje dotyczące funkcji matematycznych. Może jednak dać szybszy kod dla
programy, które nie wymagają gwarancji określonych w tych specyfikacjach.

-fno-matma-errno
Nie ustawiaj "errno" po wywołaniu funkcji matematycznych, które są wykonywane za pomocą pojedynczego
instrukcja, np. „sqrt”. Program, który opiera się na wyjątkach IEEE dla błędów matematycznych
obsługa może chcieć użyć tej flagi dla szybkości przy zachowaniu arytmetyki IEEE
kompatybilność.

Ta opcja nie jest włączona przez żadnego -O opcja, ponieważ może to spowodować nieprawidłowe wyjście
dla programów, które zależą od dokładnej implementacji IEEE lub ISO
zasady/specyfikacje dotyczące funkcji matematycznych. Może jednak dać szybszy kod dla
programy, które nie wymagają gwarancji określonych w tych specyfikacjach.

Wartość domyślna to -fmath-errno.

W systemach Darwin biblioteka matematyczna nigdy nie ustawia „errno”. Dlatego nie ma powodu
aby kompilator rozważył możliwość, że może, i -fno-matma-errno jest
domyślna.

-funsafe-matematyczne optymalizacje
Zezwalaj na optymalizacje arytmetyki zmiennoprzecinkowej, które (a) zakładają, że argumenty i
wyniki są prawidłowe i (b) mogą naruszać standardy IEEE lub ANSI. W przypadku użycia w czasie połączenia,
może zawierać biblioteki lub pliki startowe, które zmieniają domyślne słowo sterujące FPU lub
inne podobne optymalizacje.

Ta opcja nie jest włączona przez żadnego -O opcja, ponieważ może to spowodować nieprawidłowe wyjście
dla programów, które zależą od dokładnej implementacji IEEE lub ISO
zasady/specyfikacje dotyczące funkcji matematycznych. Może jednak dać szybszy kod dla
programy, które nie wymagają gwarancji określonych w tych specyfikacjach. Pozwala
-fno-podpisane-zera, -fno-trapping-matematyka, -matematyka-łącznikowa dzięki - matematyka częsta.

Wartość domyślna to -fno-unsafe-matematyczne optymalizacje.

-matematyka-łącznikowa
Zezwalaj na ponowne skojarzenie operandów w serii operacji zmiennoprzecinkowych. Ten
narusza standard języka ISO C i C++, prawdopodobnie zmieniając wynik obliczeń.
UWAGA: zmiana kolejności może zmienić znak zera, a także zignorować NaNs i zahamować lub
utworzyć niedomiar lub przepełnienie (i dlatego nie można go używać w kodzie, który opiera się na zaokrąglaniu)
zachowanie takie jak „(x + 2**52) - 2**52”. Może również zmienić kolejność porównań zmiennoprzecinkowych i
dlatego nie mogą być używane, gdy wymagane są uporządkowane porównania. Ta opcja wymaga, aby
obie -fno-podpisane-zera dzięki -fno-trapping-matematyka obowiązywać. Co więcej, nie robi
dużo sensu z -frounding-matematyka. W przypadku Fortran opcja jest automatycznie włączana, gdy
obie -fno-podpisane-zera dzięki -fno-trapping-matematyka obowiązują.

Wartość domyślna to -fno-skojarzeniowa-matematyka.

- matematyka częsta
Zezwól na użycie odwrotności wartości zamiast dzielenia przez wartość, jeśli to
umożliwia optymalizacje. Na przykład „x / y” można zastąpić „x * (1/y)”, co oznacza
przydatne, jeśli „(1/r)” podlega wspólnej eliminacji podwyrażeń. Zauważ, że to
traci precyzję i zwiększa liczbę flopów operujących na wartości.

Wartość domyślna to -fno-odwrotność-matematyka.

-finite-tylko matematyka
Zezwalaj na optymalizacje arytmetyki zmiennoprzecinkowej, które zakładają, że argumenty i
wyniki nie są NaNs ani +-Infs.

Ta opcja nie jest włączona przez żadnego -O opcja, ponieważ może to spowodować nieprawidłowe wyjście
dla programów, które zależą od dokładnej implementacji IEEE lub ISO
zasady/specyfikacje dotyczące funkcji matematycznych. Może jednak dać szybszy kod dla
programy, które nie wymagają gwarancji określonych w tych specyfikacjach.

Wartość domyślna to -fno-skończona-tylko matematyka.

-fno-podpisane-zera
Zezwalaj na optymalizacje arytmetyki zmiennoprzecinkowej, które ignorują znak zero.
Arytmetyka IEEE określa zachowanie odrębnych wartości +0.0 i -0.0, które następnie
zabrania uproszczenia wyrażeń takich jak x+0.0 lub 0.0*x (nawet z
-finite-tylko matematyka). Ta opcja oznacza, że ​​znak wyniku zerowego nie jest
istotne.

Wartość domyślna to -fsigned-zeros.

-fno-trapping-matematyka
Skompiluj kod, zakładając, że operacje zmiennoprzecinkowe nie mogą generować widoczne dla użytkownika
majdan. Pułapki te obejmują dzielenie przez zero, przepełnienie, niedopełnienie, niedokładny wynik i
Nieprawidłowa operacja. Ta opcja wymaga, aby -fno-sygnalizacji-nans obowiązywać.
Ustawienie tej opcji może pozwolić na szybsze kodowanie, jeśli polega się na „non-stop” arytmetyce IEEE,
na przykład.

Ta opcja nigdy nie powinna być włączana przez nikogo -O opcja, ponieważ może to spowodować
nieprawidłowe wyjście dla programów, które zależą od dokładnej implementacji IEEE lub ISO
zasady/specyfikacje dotyczące funkcji matematycznych.

Wartość domyślna to -ftrapping-matematyka.

-frounding-matematyka
Wyłącz przekształcenia i optymalizacje, które zakładają domyślne zaokrąglanie zmiennoprzecinkowe
zachowanie. Jest to zaokrąglanie do zera dla wszystkich konwersji zmiennoprzecinkowych na liczby całkowite, i
od zaokrąglania do najbliższej dla wszystkich innych obcinań arytmetycznych. Ta opcja powinna być
określone dla programów, które dynamicznie zmieniają tryb zaokrąglania PR lub które mogą być:
wykonywane z innym niż domyślny tryb zaokrąglania. Ta opcja wyłącza ciągłe składanie
wyrażenia zmiennoprzecinkowe w czasie kompilacji (na co może mieć wpływ tryb zaokrąglania)
i przekształcenia arytmetyczne, które są niebezpieczne w obecności znaków zależnych od znaku
tryby zaokrąglania.

Wartość domyślna to -fno-zaokrąglanie-matematyka.

Ta opcja jest eksperymentalna i obecnie nie gwarantuje wyłączenia wszystkich GCC
optymalizacje, na które ma wpływ tryb zaokrąglania. Przyszłe wersje GCC mogą zapewniać
dokładniejsza kontrola tego ustawienia przy użyciu pragma C99 „FENV_ACCESS”. Ta linia poleceń
opcja zostanie użyta do określenia stanu domyślnego dla „FENV_ACCESS”.

-fsygnalizacja-nans
Skompiluj kod, zakładając, że sieci NaN sygnalizacyjne IEEE mogą generować pułapki widoczne dla użytkownika podczas:
operacje zmiennoprzecinkowe. Ustawienie tej opcji wyłącza optymalizacje, które mogą ulec zmianie
liczba wyjątków widocznych przy sygnalizacji NaN. Ta opcja oznacza
-ftrapping-matematyka.

Ta opcja powoduje zdefiniowanie makra preprocesora „__SUPPORT_SNAN__”.

Wartość domyślna to -fno-sygnalizacji-nans.

Ta opcja jest eksperymentalna i obecnie nie gwarantuje wyłączenia wszystkich GCC
optymalizacje, które wpływają na zachowanie sygnalizacji NaN.

-fsingle-precyzja-stała
Traktuj stałe zmiennoprzecinkowe jako pojedynczą precyzję zamiast niejawnej konwersji
je do stałych podwójnej precyzji.

-fcx-ograniczony-zakres
Po włączeniu ta opcja określa, że ​​krok redukcji zasięgu nie jest potrzebny, gdy:
wykonywanie złożonego podziału. Ponadto nie ma sprawdzania, czy wynik a
złożone mnożenie lub dzielenie to „NaN + I*NaN”, z próbą ratowania
sytuacji w tym przypadku. Wartość domyślna to -fno-cx-ograniczony-zakres, ale jest włączony przez
-fast-matematyka.

Ta opcja steruje domyślnym ustawieniem pragmy ISO C99 „CX_LIMITED_RANGE”.
Niemniej jednak opcja dotyczy wszystkich języków.

-fcx-fortran-zasady
Złożone mnożenie i dzielenie są zgodne z zasadami Fortrana. Redukcja zasięgu odbywa się jako
część złożonego podziału, ale nie ma sprawdzania, czy wynik kompleksu
mnożenie lub dzielenie to „NaN + I*NaN”, z próbą ratowania sytuacji
w tym wypadku.

Wartość domyślna to -fno-cx-fortran-zasady.

Poniższe opcje kontrolują optymalizacje, które mogą poprawić wydajność, ale nie są
włączone przez dowolny -O opcje. Ta sekcja zawiera opcje eksperymentalne, które mogą powodować
zepsuty kod.

-prawdopodobieństwa-oddziału
Po uruchomieniu programu skompilowanego z -f-łuki-profilu, możesz go skompilować po raz drugi
za pomocą -prawdopodobieństwa-oddziału, aby poprawić optymalizacje na podstawie liczby razy
każda gałąź została podjęta. Gdy program skompilowany z -f-łuki-profilu wychodzi, to oszczędza
wykonanie łuku liczy się do pliku o nazwie nazwaźródła.gcda dla każdego pliku źródłowego. ten
informacje w tym pliku danych są bardzo zależne od struktury wygenerowanego
kod, więc musisz użyć tego samego kodu źródłowego i tych samych opcji optymalizacji dla obu
kompilacje.

Z -prawdopodobieństwa-oddziału, GCC stawia REG_BR_PROB uwaga na każdy JUMP_INSN dzięki
CALL_INSN. Można je wykorzystać do poprawy optymalizacji. Obecnie są używane tylko
w jednym miejscu: w reorg.c, zamiast zgadywać, którą ścieżkę gałąź jest najbardziej prawdopodobna
weź, REG_BR_PROB wartości są używane do dokładnego określenia, która ścieżka jest obierana więcej
często.

-f-wartości-profilu
W połączeniu z -f-łuki-profilu, dodaje kod, dzięki czemu niektóre dane o wartościach
wyrażenia w programie są zbierane.

Z -prawdopodobieństwa-oddziału, odczytuje dane zebrane z wartości profilowania
wyrażenia do wykorzystania w optymalizacji.

Włączone z -fprofil-generuj dzięki -f-użycie-profilu.

-fprofile-reorder-functions
Zmiana kolejności funkcji w oparciu o instrumentację profilu zbiera pierwszy czas wykonania
funkcji i porządkuje te funkcje w porządku rosnącym.

Włączone z -f-użycie-profilu.

-fvpt
W połączeniu z -f-łuki-profilu, ta opcja nakazuje kompilatorowi dodanie kodu do
zbierać informacje o wartościach wyrażeń.

Z -prawdopodobieństwa-oddziału, odczytuje zebrane dane i faktycznie je wykonuje
oparte na nich optymalizacje. Obecnie optymalizacje obejmują specjalizację
operacje dzielenia z wykorzystaniem wiedzy o wartości mianownika.

-rejestry-nazwisk
Próba uniknięcia fałszywych zależności w zaplanowanym kodzie poprzez wykorzystanie pozostałych rejestrów
po przydzieleniu rejestru. Ta optymalizacja jest najbardziej korzystna dla procesorów z dużą ilością
rejestrów. W zależności od formatu informacji debugowania przyjętego przez cel,
może jednak uniemożliwić debugowanie, ponieważ zmienne nie pozostają już w „domu”.
Zarejestruj się".

Włączone domyślnie z -funroll-pętle dzięki -pętle-odczuwania.

-fschedule-fusion
Wykonuje zależne od celu przekazywanie strumienia instrukcji w celu zaplanowania instrukcji
tego samego typu razem, ponieważ maszyna docelowa może je wykonać wydajniej, jeśli
sąsiadują ze sobą w przepływie instrukcji.

Włączone na poziomach -O2, -O3, -Os.

-ftracer
Wykonaj duplikację ogona, aby powiększyć rozmiar superbloku. Ta transformacja upraszcza
przepływ sterowania funkcji, umożliwiający innym optymalizacje wykonanie lepszej pracy.

Włączone z -f-użycie-profilu.

-funroll-pętle
Pętle rozwijania, których liczbę iteracji można określić w czasie kompilacji lub w dniu
wejście do pętli. -funroll-pętle sugeruje -frerun-cse-po-pętli, -fweb dzięki
-rejestry-nazwisk. Włącza również całkowite obieranie pętli (tj. całkowite usunięcie
pętle o małej stałej liczbie iteracji). Ta opcja sprawia, że ​​kod jest większy i
może, ale nie musi, sprawić, że będzie działać szybciej.

Włączone z -f-użycie-profilu.

-funroll-all-loops
Rozwiń wszystkie pętle, nawet jeśli ich liczba iteracji jest niepewna, gdy pętla jest
weszła. Zwykle powoduje to wolniejsze działanie programów. -funroll-all-loops implikuje
te same opcje co -funroll-pętle.

-pętle-odczuwania
Odkleja pętle, dla których jest wystarczająco dużo informacji, że nie toczą się zbytnio (od
informacje zwrotne dotyczące profilu). Włącza również całkowite obieranie pętli (tj. całkowite usunięcie
pętle o małej stałej liczbie iteracji).

Włączone z -f-użycie-profilu.

-fmove-loop-niezmiennicze
Włącza niezmienne przejście ruchu w pętli w optymalizatorze pętli RTL. Włączone na poziomie
-O1

-funswitch-pętle
Przenieś gałęzie z niezmiennymi warunkami pętli poza pętlę, z duplikatami
pętla na obu gałęziach (zmodyfikowana zgodnie z wynikiem warunku).

-sekcje-funkcji
-fdata-sekcje
Umieść każdą funkcję lub element danych w osobnej sekcji w pliku wyjściowym, jeśli cel
obsługuje dowolne sekcje. Nazwa funkcji lub nazwa elementu danych
określa nazwę sekcji w pliku wyjściowym.

Użyj tych opcji w systemach, w których linker może przeprowadzać optymalizacje w celu poprawy
lokalizacja odniesienia w przestrzeni instrukcji. Większość systemów korzystających z obiektu ELF
Procesory formatu i SPARC z systemem Solaris 2 mają linkery z takimi optymalizacjami.
AIX może mieć te optymalizacje w przyszłości.

Korzystaj z tych opcji tylko wtedy, gdy przyniesie to znaczące korzyści. Kiedy ty
określ te opcje, asembler i linker utworzy większy obiekt i plik wykonywalny
pliki i są również wolniejsze. Nie możesz użyć gprof we wszystkich systemach, jeśli to określisz
i możesz mieć problemy z debugowaniem, jeśli określisz zarówno tę opcję, jak i
-g.

-fbranch-target-load-optymalizuj
Przeprowadź optymalizację obciążenia rejestru docelowego oddziału przed wątkowaniem prologu/epilogu.
Użycie rejestrów docelowych może być zwykle ujawnione tylko podczas przeładowania, a tym samym podnoszenia
ładowanie poza pętlami i wykonywanie harmonogramów międzyblokowych wymaga osobnej optymalizacji
przechodzić.

-fbranch-target-load-optimize2
Przeprowadź optymalizację obciążenia rejestru docelowego oddziału po wątkach prologu/epilogu.

-fbtr-bb-exclusive
Podczas przeprowadzania optymalizacji obciążenia rejestru docelowego oddziału nie używaj ponownie celu oddziału
rejestry w dowolnym bloku podstawowym.

-fstack-protector
Emituj dodatkowy kod, aby sprawdzić, czy nie występują przepełnienia bufora, takie jak ataki polegające na rozbijaniu stosu. Ten
odbywa się poprzez dodanie zmiennej ochronnej do funkcji z podatnymi obiektami. Ten
zawiera funkcje, które wywołują „alloca” i funkcje z buforami większymi niż 8 bajtów.
Strażnicy są inicjowani po wejściu do funkcji, a następnie sprawdzani, gdy
wyjście z funkcji. Jeśli kontrola ochrony nie powiedzie się, zostanie wydrukowany komunikat o błędzie, a program
wyjść.

-fstack-protector-all
Polub -fstack-protector z wyjątkiem tego, że wszystkie funkcje są chronione.

-fstack-protector-silny
Polub -fstack-protector ale zawiera dodatkowe funkcje, które mają być chronione --- te
które mają lokalne definicje tablic lub odniesienia do lokalnych adresów ramek.

-fstack-protector-wyraźny
Polub -fstack-protector ale chroni tylko te funkcje, które mają
Atrybut „stack_protect”

-fstdarg-opt
Optymalizacja prologu funkcji argumentów wariadycznych w odniesieniu do ich użycia
argumenty.

UWAGA: W Ubuntu 14.10 i nowszych wersjach, -fstack-protector-silny jest włączony przez
domyślnie dla C, C++, ObjC, ObjC++, jeśli żaden z -fno-stack-protector, -nostdlib, ani
-wolnostojący są znalezione.

-kotwy-fsekcji
Spróbuj zmniejszyć liczbę obliczeń adresu symbolicznego za pomocą wspólnej „kotwicy”
symbole dotyczące pobliskich obiektów. Ta transformacja może pomóc w zmniejszeniu liczby
wpisów GOT i dostępów GOT w niektórych celach.

Na przykład implementacja następującej funkcji „foo”:

statyczne int a, b, c;
int foo (unieważnij) { return a + b + c; }

zwykle oblicza adresy wszystkich trzech zmiennych, ale jeśli skompilujesz to za pomocą
-kotwy-fsekcji, zamiast tego uzyskuje dostęp do zmiennych ze wspólnego punktu zakotwiczenia. ten
efekt jest podobny do następującego pseudokodu (który nie jest poprawny w C):

int foo (nieważne)
{
zarejestruj int *xr = &x;
zwróć xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Nie wszystkie cele obsługują tę opcję.

--param Nazwa=wartość
W niektórych miejscach GCC używa różnych stałych do kontrolowania ilości optymalizacji, która:
skończone. Na przykład GCC nie zawiera funkcji wbudowanych, które zawierają więcej niż pewną
liczba instrukcji. Niektóre z tych stałych można kontrolować w wierszu poleceń
używając --param opcja.

Nazwy poszczególnych parametrów i znaczenie wartości są powiązane z
wewnętrzne elementy kompilatora i mogą ulec zmianie bez powiadomienia w przyszłości
Wydania.

W każdym przypadku wartość jest liczbą całkowitą. Dopuszczalne wybory dla Nazwa należą:

przewidywalny-oddział-wynik
Gdy przewiduje się, że gałąź zostanie podjęta z prawdopodobieństwem niższym niż ten próg
(w procentach), wtedy uważa się, że jest dobrze przewidywalny. Wartość domyślna to 10.

max-crossjump-edges
Maksymalna liczba nadchodzących krawędzi, które należy wziąć pod uwagę przy przeskakiwaniu. Algorytm
wykorzystane przez -skoki przełajowe jest O(N^2) w liczbie krawędzi przychodzących do każdego bloku.
Rosnące wartości oznaczają bardziej agresywną optymalizację, skracając czas kompilacji
wzrost z prawdopodobnie niewielką poprawą rozmiaru pliku wykonywalnego.

min-crossjump-insns
Minimalna liczba instrukcji, które muszą być dopasowane na końcu dwóch bloków
przed wykonaniem na nich skoków. Ta wartość jest ignorowana w przypadku
gdzie wszystkie instrukcje w bloku, z którego są przeskakiwane, są dopasowane. ten
wartość domyślna to 5.

max-grow-copy-bb-insns
Maksymalny współczynnik rozszerzenia rozmiaru kodu podczas kopiowania podstawowych bloków zamiast
skoki. Rozszerzenie odnosi się do instrukcji skoku. Domyślna wartość to
8.

max-goto-duplikacja-insns
Maksymalna liczba instrukcji do zduplikowania w bloku, który przeskakuje do
obliczone goto. Aby uniknąć zachowania O(N^2) w wielu przejściach, czynniki GCC
obliczone goto na wczesnym etapie procesu kompilacji i defaktoryzuje je dopiero
możliwy. Tylko skoki obliczane na końcu podstawowych bloków z nie więcej niż max-
goto-duplication-insns nie są rozłożone na czynniki. Wartość domyślna to 8.

max-delay-slot-insn-search
Maksymalna liczba instrukcji, które należy wziąć pod uwagę, szukając instrukcji do:
wypełnić szczelinę opóźnienia. Jeśli jest więcej niż ta dowolna liczba instrukcji
wyszukiwane, oszczędność czasu na zapełnieniu szczeliny opóźnienia jest minimalna, więc zatrzymaj się
badawczy. Rosnące wartości oznaczają bardziej agresywną optymalizację, dzięki czemu
wzrost czasu kompilacji z prawdopodobnie niewielką poprawą czasu wykonania.

max-delay-slot-live-search
Podczas próby wypełnienia przedziałów opóźnień, maksymalna liczba instrukcji do rozważenia
podczas wyszukiwania bloku z ważnymi informacjami o bieżącym rejestrze. Zwiększając to
dowolnie wybrana wartość oznacza bardziej agresywną optymalizację, zwiększając
czas kompilacji. Ten parametr powinien zostać usunięty, gdy kod gniazda opóźnienia jest
przepisany, aby zachować wykres przepływu sterowania.

max-gcse-pamięć
Przybliżona maksymalna ilość pamięci, którą można przydzielić w celu wykonania
globalna optymalizacja eliminacji wspólnych podwyrażeń. Jeśli więcej pamięci niż
określony jest wymagany, optymalizacja nie jest wykonywana.

współczynnik wstawiania max-gcse
Jeśli stosunek wstawienia ekspresji do usunięć jest większy niż ta wartość dla
dowolne wyrażenie, a następnie RTL PRE wstawia lub usuwa wyrażenie, a tym samym pozostawia
częściowo nadmiarowe obliczenia w strumieniu instrukcji. Domyślna wartość to
10.

maksymalna-długość-listy-oczekującej
Maksymalna liczba oczekujących zależności, na które pozwala planowanie przed opróżnieniem
aktualny stan i rozpoczęcie od nowa. Duże funkcje z kilkoma oddziałami lub połączeniami mogą
tworzyć nadmiernie duże listy, które niepotrzebnie zużywają pamięć i zasoby.

max-modulo-backtrack-próby
Maksymalna liczba prób cofania, które planista powinien wykonać, gdy modulo
planowanie pętli. Większe wartości mogą wykładniczo wydłużyć czas kompilacji.

max-inline-insns-single
Kilka parametrów steruje inlinerem drzewa używanym w GCC. Ta liczba określa
maksymalna liczba instrukcji (liczona w wewnętrznej reprezentacji GCC) w a
pojedyncza funkcja, którą inliner drzewa traktuje jako inline. Dotyczy to tylko
funkcje zadeklarowane inline i metody zaimplementowane w deklaracji klasy (C++).
Wartość domyślna to 400.

max-inline-insns-auto
Podczas korzystania -finline-funkcje (zawarte w -O3), wiele funkcji, które
w przeciwnym razie nie będą brane pod uwagę do tworzenia wstawek przez kompilator. Do
te funkcje, inny (bardziej restrykcyjny) limit w porównaniu do funkcji
można zastosować zadeklarowaną inline. Wartość domyślna to 40.

inline-min-speedup
Gdy szacowana poprawa wydajności Caller + Callee Runtime przekracza tę wartość
próg (w procentach), funkcja może być wbudowana niezależnie od limitu na
--param max-inline-insns-single dzięki --param max-inline-insns-auto.

duża-funkcja-insns
Limit określający naprawdę duże funkcje. Dla funkcji większych niż ten limit
po inliningu inlining jest ograniczony przez --param wielkofunkcyjny-wzrost, To
parametr jest przydatny przede wszystkim w celu uniknięcia ekstremalnego czasu kompilacji spowodowanego
algorytmy liniowe używane przez zaplecze. Wartość domyślna to 2700.

wielkofunkcyjny-wzrost
Określa w procentach maksymalny przyrost dużej funkcji spowodowany przez wstawianie. ten
domyślna wartość to 100, co ogranicza duży wzrost funkcji do 2.0 razy w stosunku do oryginału
rozmiar.

duża jednostka-insns
Limit określający dużą jednostkę tłumaczeniową. Wzrost spowodowany inliningiem jednostek
większy niż ten limit jest ograniczony przez --param wzrost-inline-jednostek. Dla małych jednostek
to może być za ciasne. Rozważmy na przykład jednostkę składającą się z funkcji A
to jest inline i B, który po prostu wywołuje A trzy razy. Jeśli B jest małe w stosunku do A,
przyrost jednostki wynosi 300\%, a jednak taka inlining jest bardzo rozsądna. Dla bardzo dużych
jednostki składające się z małych funkcji nieliniowych, jednak ogólny przyrost jednostki
limit jest potrzebny, aby uniknąć wykładniczej eksplozji rozmiaru kodu. Tak więc dla mniejszych
jednostek, rozmiar zwiększa się do --param duża jednostka-insns przed złożeniem wniosku --param
wzrost-inline-jednostek. Wartość domyślna to 10000.

wzrost-inline-jednostek
Określa maksymalny ogólny wzrost jednostki kompilacji spowodowany przez wstawianie. ten
domyślna wartość to 20, co ogranicza wzrost jednostki do 1.2-krotności oryginalnego rozmiaru. Przeziębienie
funkcje (oznaczone jako zimne przez atrybut lub przez informację zwrotną profilu) nie są
wliczane do wielkości jednostki.

wzrost-jednostki-ipcp
Określa maksymalny ogólny wzrost jednostki kompilacji spowodowany interprocedural
stała propagacja. Domyślna wartość to 10, co ogranicza wzrost jednostek do 1.1
razy większy od oryginalnego rozmiaru.

rama z dużym stosem
Limit określający duże ramki stosu. Podczas wstawiania algorytm próbuje
aby nie przekroczyć tego limitu za bardzo. Wartość domyślna to 256 bajtów.

duży-stack-frame-wzrost
Określa w procentach maksymalny wzrost ramek o dużym stosie spowodowany przez wstawianie.
Domyślna wartość to 1000, co ogranicza wzrost liczby klatek dużego stosu do 11-krotności
oryginalny rozmiar.

max-inline-insns-recursive
max-inline-insns-recursive-auto
Określa maksymalną liczbę instrukcji w kopii out-of-line samo-
rekurencyjna funkcja inline może rozwinąć się, wykonując rekurencyjne inline.

--param max-inline-insns-recursive dotyczy funkcji zadeklarowanych inline. Do
funkcje nie zadeklarowane inline, rekurencyjne inline ma miejsce tylko wtedy, gdy
-finline-funkcje (zawarte w -O3) jest włączony; --param max-inline-insns-
rekurencyjne-auto stosuje się zamiast tego. Wartość domyślna to 450.

max-inline-recursive-depth
max-inline-recursive-depth-auto
Określa maksymalną głębokość rekurencji używaną do rekurencyjnego wstawiania.

--param max-inline-recursive-depth dotyczy funkcji zadeklarowanych inline. Do
funkcje nie zadeklarowane inline, rekurencyjne inline ma miejsce tylko wtedy, gdy
-finline-funkcje (zawarte w -O3) jest włączony; --param max-inline-rekurencyjne-
głębokość-auto stosuje się zamiast tego. Wartość domyślna to 8.

min-inline-rekurencyjne-prawdopodobieństwo
Inlining rekurencyjny jest opłacalny tylko dla funkcji posiadającej głęboką rekurencję w
średnia i może zaszkodzić funkcji o małej głębokości rekurencji, zwiększając
rozmiar prologu lub złożoność treści funkcji innym optymalizatorom.

Gdy dostępna jest opinia o profilu (zobacz -fprofil-generuj) rzeczywista rekurencja
głębokość można odgadnąć na podstawie prawdopodobieństwa, że ​​funkcja rekursuje się przez dane wywołanie
wyrażenie. Ten parametr ogranicza tworzenie wstawek tylko do wyrażeń wywołań, których
prawdopodobieństwo przekracza podany próg (w procentach). Wartość domyślna to 10.

Early-inlining-insns
Określ wzrost, który może wywołać wczesny wkład. W efekcie zwiększa ilość
inliningu w przypadku kodu obarczonego dużą karą za abstrakcję. Wartość domyślna to 14.

max-early-inliner-iterations
Limit iteracji wczesnego inlinera. To zasadniczo ogranicza liczbę
zagnieżdżone wywołania pośrednie, które może rozwiązać wczesna inliner. Głębsze łańcuchy są nadal
obsługiwane przez późne podszycie.

prawdopodobieństwo-udostępniania comdat
Prawdopodobieństwo (w procentach), że funkcja inline C++ z widocznością comdat jest
współużytkowane przez wiele jednostek kompilacji. Wartość domyślna to 20.

profil-func-wewnętrzny-id
Parametr określający, czy używać wewnętrznego identyfikatora funkcji w bazie danych profili
spojrzeć w górę. Jeśli wartość wynosi 0, kompilator używa identyfikatora opartego na funkcji
nazwa asemblera i nazwa pliku, co sprawia, że ​​dane starego profilu są bardziej tolerancyjne w stosunku do źródła
zmiany, takie jak zmiana kolejności funkcji itp. Wartość domyślna to 0.

Związane z pętlą min-vect
Minimalna liczba iteracji, przy której pętle nie są wektoryzowane, gdy
-ftree-wektoryzuj jest używany. Liczba iteracji po wektoryzacji musi być
być większa niż wartość określona przez tę opcję, aby umożliwić wektoryzację. ten
wartość domyślna to 0.

gcse-koszt-odległość-współczynnik
Współczynnik skalowania w obliczaniu maksymalnej odległości, o jaką można przesunąć wyrażenie
Optymalizacje GCSE. Jest to obecnie obsługiwane tylko w przepustce do podnoszenia kodu.
Im wyższy współczynnik, tym bardziej agresywne przenoszenie kodu jest proste
wyrażenia, tj. wyrażenia, które kosztują mniej niż gcse-bez ograniczeń-
koszt. Określenie 0 wyłącza przenoszenie prostych wyrażeń. Domyślna wartość to
10.

gcse-nieograniczony-koszt
Koszt, z grubsza mierzony jako koszt pojedynczej typowej instrukcji obsługi maszyny, w
których optymalizacje GCSE nie ograniczają odległości, jaką może przebyć wyrażenie.
Jest to obecnie obsługiwane tylko w przepustce do podnoszenia kodu. Im mniejszy koszt,
tym bardziej agresywne jest przenoszenie kodu. Określenie 0 pozwala wszystkim wyrażeniom na
podróżuj na nieograniczone odległości. Wartość domyślna to 3.

max-głębokość-wciągnika
Głębokość poszukiwań w drzewie dominatorów w poszukiwaniu wyrażeń do podniesienia. To jest używane
aby uniknąć kwadratowego zachowania w algorytmie podnoszenia. Wartość 0 nie ogranicza
na wyszukiwanie, ale może spowolnić kompilację ogromnych funkcji. Wartość domyślna
to 30.

max-tail-merge-porównania
Maksymalna ilość podobnych kulek, z którymi można porównać kulkę. Służy do unikania
kwadratowe zachowanie w łączeniu ogonów drzew. Wartość domyślna to 10.

max-tail-merge-iterations
Maksymalna liczba iteracji przejścia nad funkcją. Służy do
ograniczyć czas kompilacji w łączeniu ogonów drzewa. Wartość domyślna to 2.

max-rozwinięte-insns
Maksymalna liczba instrukcji, które może wymagać rozwinięcia pętli. Jeśli pętla
jest rozwinięty, ten parametr określa również, ile razy kod pętli jest
rozwinięty.

max-average-unrolled-insns
Maksymalna liczba instrukcji obciążona prawdopodobieństwem ich wykonania, która
może być konieczne rozwinięcie pętli. Jeśli pętla jest rozwinięta, ten parametr również
określa, ile razy kod pętli jest rozwijany.

maksymalne-czasy-rozwijania
Maksymalna liczba rozwinięć pojedynczej pętli.

max-obrane-insns
Maksymalna liczba instrukcji, które pętla może wymagać oderwania. Jeśli pętla
jest obierany, ten parametr określa również, ile razy kod pętli jest obierany.

maksymalne-czasy-obierania
Maksymalna liczba peelingów pojedynczej pętli.

max-gałązki-peel
Maksymalna liczba gałęzi na gorącej ścieżce w sekwencji obranej.

max-całkowicie-obrane-insns
Maksymalna liczba insins całkowicie obranej pętli.

max-całkowite-czasy-obierania
Maksymalna liczba iteracji pętli, która jest odpowiednia do całkowitego obierania.

max-completely-peel-loop-nest-depth
Maksymalna głębokość gniazda pętelki odpowiednia do całkowitego obierania.

max-unswitch-insns
Maksymalna liczba wejść w niekomutowanej pętli.

max-unswitch-level
Maksymalna liczba gałęzi niepodłączonych w jednej pętli.

bardzo drogie
Minimalny koszt drogiego wyrażenia w ruchu niezmiennym pętli.

iv-rozważ-wszyscy-kandydaci-związani
Związany z liczbą kandydatów na zmienne indukcyjne, poniżej której wszyscy kandydaci
są brane pod uwagę dla każdego zastosowania w optymalizacji zmiennych indukcyjnych. Jeśli tam są
więcej kandydatów niż ta, uważa się, że należy unikać tylko najbardziej odpowiednich
złożoność czasu kwadratowego.

iv-max-rozważane-zastosowania
Optymalizacje zmiennych indukcyjnych rezygnują z pętli, które zawierają więcej indukcji
zmienne zastosowania.

iv-always-prune-cand-set-bound
Jeśli liczba kandydatów w zbiorze jest mniejsza niż ta wartość, zawsze staraj się:
usuń niepotrzebne ivy z zestawu podczas dodawania nowego.

sev-max-expr-rozmiar
Związany z wielkością wyrażeń używanych w analizatorze ewolucji skalarnych. Duży
wyrażenia spowalniają analizator.

scev-max-expr-złożoność
Związany ze złożonością wyrażeń w analizatorze ewolucji skalarnych.
Złożone wyrażenia spowalniają analizator.

omega-max-vars
Maksymalna liczba zmiennych w systemie ograniczeń Omega. Wartość domyślna
to 128.

omega-max-geqs
Maksymalna liczba nierówności w systemie ograniczeń Omega. Domyślny
wartość wynosi 256.

omega-max-eqs
Maksymalna liczba równości w systemie ograniczeń Omega. Wartość domyślna
to 128.

omega-max-dzikie-karty
Maksymalna liczba zmiennych wieloznacznych, jaką może wstawić solver Omega.
Wartość domyślna to 18.

omega-hash-table-size
Rozmiar tablicy mieszającej w solverze Omega. Wartość domyślna to 550.

klucze omega-max
Maksymalna liczba kluczy używanych przez solver Omega. Wartość domyślna to 500.

omega-wyeliminuj-zbędne-ograniczenia
Po ustawieniu na 1 użyj kosztownych metod, aby wyeliminować wszystkie nadmiarowe ograniczenia. ten
wartość domyślna to 0.

vect-max-wersja-do-kontroli-dopasowania
Maksymalna liczba sprawdzeń w czasie wykonywania, które można wykonać podczas wykonywania pętli
wersjonowanie dla wyrównania w wektoryzatorze.

vect-max-wersja-do-sprawdzania-aliasów
Maksymalna liczba sprawdzeń w czasie wykonywania, które można wykonać podczas wykonywania pętli
wersjonowanie aliasu w wektoryzatorze.

vect-max-peeling-do-wyrównania
Maksymalna liczba zdarć pętli w celu zwiększenia wyrównania dostępu dla wektoryzatora. Wartość
-1 oznacza „bez limitu”.

max-iteracje-do-śledzenia
Maksymalna liczba iteracji pętli algorytmu brute-force do analizy
liczby iteracji pętli, które próbuje ocenić.

hot-bb-count-ws-permille
Podstawowa liczba profili bloków jest uważana za „gorącą”, jeśli przyczynia się do podanego
permillage (tj. 0...1000) całego wyprofilowanego wykonania.

gorąca-bb-częstotliwość-ułamek
Wybierz ułamek częstotliwości bloku wejściowego wykonania bloku podstawowego w
funkcja podana w bloku podstawowym musi być uważana za gorącą.

max-przewidywane-iteracje
Maksymalna liczba iteracji pętli, które przewidujemy statycznie. Jest to przydatne w
przypadki, w których funkcja zawiera pojedynczą pętlę ze znanym wiązaniem i inną pętlę
z nieznanym wiązaniem. Znana liczba iteracji jest przewidziana poprawnie, podczas gdy
nieznana liczba iteracji wynosi średnio około 10. Oznacza to, że pętla
bez granic wydaje się sztucznie zimna w stosunku do drugiej.

wbudowane prawdopodobieństwo-oczekiwania
Kontroluj prawdopodobieństwo wyrażenia o określonej wartości. Ten
parametr przyjmuje wartość procentową (tj. 0 ... 100) jako dane wejściowe. Prawdopodobieństwo niewykonania zobowiązania
90 uzyskuje się empirycznie.

próg wyrównania
Wybierz ułamek maksymalnej częstotliwości wykonania bloku podstawowego w a
funkcja wyrównania bloku podstawowego.

wyrównywanie-iteracji-pętli
Pętla, która ma wykonać co najmniej wybraną liczbę iteracji, jest wyrównywana.

znacznik-dynamic-pokrycie
tracer-dynamic-coverage-feedback
Ta wartość jest używana do ograniczenia tworzenia superbloków, gdy określony procent
wykonane instrukcje są objęte gwarancją. Ogranicza to niepotrzebne rozszerzanie rozmiaru kodu.

Pandemia tracer-dynamic-coverage-feedback parametr jest używany tylko w przypadku informacji zwrotnej z profilu
jest dostępny. Profile rzeczywiste (w przeciwieństwie do szacowanych statycznie) to:
znacznie mniej zrównoważony, dzięki czemu próg ma większą wartość.

znacznik-max-kod-wzrost
Zatrzymaj duplikację ogona, gdy wzrost kodu osiągnie określony procent. To jest
raczej sztuczny limit, ponieważ większość duplikatów jest eliminowana później w krzyżu
skoki, więc może być ustawiony na znacznie wyższe wartości niż pożądany wzrost kodu.

wskaźnik-min-oddziału
Zatrzymaj odwrotny wzrost, gdy prawdopodobieństwo odwrotu najlepszej krawędzi jest mniejsze niż to
próg (w procentach).

wskaźnik-min-oddziału
znacznik-min-oddział-wskaźnik-sprzężenie zwrotne
Zatrzymaj wzrost w przód, jeśli najlepsza krawędź ma prawdopodobieństwo niższe niż ten próg.

Podobny do znacznik-dynamic-pokrycie obecne są dwie wartości, jedna do kompilacji
do opinii o profilu i jeden do kompilacji bez. Wartość do kompilacji
z informacją zwrotną profilu musi być bardziej konserwatywna (wyższa), aby
skuteczny znacznik.

max-cse-path-length
Maksymalna liczba podstawowych bloków na ścieżce, którą uwzględnia CSE. Wartość domyślna to 10.

max-cse-insns
Maksymalna liczba instrukcji przetwarzanych przez CSE przed opróżnieniem. Wartość domyślna to
10.

ggc-min-rozwiń
GCC używa garbage collectora do zarządzania alokacją własnej pamięci. Ten parametr
określa minimalny procent, o jaki powinna wynosić sterta śmieciarza
pozwoliło na rozbudowę między kolekcjami. Dostrojenie tego może poprawić szybkość kompilacji;
nie ma wpływu na generowanie kodu.

Wartość domyślna to 30% + 70% * (RAM/1 GB) z górną granicą 100%, gdy pamięć RAM >= 1 GB.
Jeśli dostępny jest „getrlimit”, pojęcie „RAM” jest najmniejszą z rzeczywistej pamięci RAM i
„RLIMIT_DATA” lub „RLIMIT_AS”. Jeśli GCC nie jest w stanie obliczyć pamięci RAM w konkretnym przypadku
platforma, stosuje się dolną granicę 30%. Ustawienie tego parametru i ggc-min-
rozmiar w biodrach do zera powoduje, że przy każdej okazji pojawia się pełna kolekcja. To jest
bardzo powolny, ale może być przydatny do debugowania.

ggc-min-heapsize
Minimalny rozmiar śmietnika zanim zacznie się kłopocze zbierać
Śmieci. Pierwsze zbieranie następuje po rozszerzeniu sterty o ggc-min-rozwiń%
Poza ggc-min-heapsize. Ponownie, dostrojenie może poprawić szybkość kompilacji i
nie ma wpływu na generowanie kodu.

Wartość domyślna to mniejsza z RAM/8, RLIMIT_RSS lub limit, który próbuje zapewnić
że RLIMIT_DATA lub RLIMIT_AS nie są przekroczone, ale z dolną granicą 4096
(cztery megabajty) i górną granicę 131072 (128 megabajtów). Jeśli GCC nie jest w stanie
do obliczenia pamięci RAM na konkretnej platformie używana jest dolna granica. Ustawienie tego
parametr bardzo duży skutecznie wyłącza odśmiecanie. Ustawienie tego
parametr i ggc-min-rozwiń zero powoduje, że pełna kolekcja występuje co
okazja.

max-reload-search-insns
Maksymalna liczba przeładowań instrukcji powinna szukać równoważności wstecz
Zarejestruj się. Rosnące wartości oznaczają bardziej agresywną optymalizację, dzięki czemu
wydłużenie czasu kompilacji z prawdopodobnie nieco lepszą wydajnością. Domyślny
wartość wynosi 100.

max-cselib-memory-locations
Należy wziąć pod uwagę maksymalną liczbę lokalizacji w pamięci cselib.
Rosnące wartości oznaczają bardziej agresywną optymalizację, skracając czas kompilacji
wzrost z prawdopodobnie nieco lepszą wydajnością. Wartość domyślna to 500.

zmiana kolejności bloków-duplikat
zmiana kolejności bloków zduplikowanych opinii
Używany przez podstawowy przebieg zmiany kolejności bloków, aby zdecydować, czy użyć bezwarunkowego
oddział lub zduplikować kod w miejscu przeznaczenia. Kod jest duplikowany, gdy jego
szacowany rozmiar jest mniejszy niż ta wartość pomnożona przez szacowany rozmiar
bezwarunkowy skok w gorących punktach programu.

Pandemia zmiana kolejności blokowania duplikatów opinii parametr jest używany tylko w przypadku informacji zwrotnej z profilu
jest dostępny. Może być ustawiony na wyższe wartości niż zmień kolejność-blok-duplikat ponieważ
informacje o gorących punktach są dokładniejsze.

max-sched-ready-insns
Maksymalna liczba instrukcji gotowych do wysłania planista powinien:
rozważyć w dowolnym momencie podczas pierwszego przejścia harmonogramu. Rosnące wartości
oznaczają dokładniejsze wyszukiwania, dzięki czemu czas kompilacji wydłuży się z prawdopodobnie
niewielka korzyść. Wartość domyślna to 100.

max-sched-region-blocks
Maksymalna liczba bloków w regionie, które należy uwzględnić w przypadku interblock
planowanie. Wartość domyślna to 10.

max-potokowe-regiony-bloki
Maksymalna liczba bloków w regionie, które należy wziąć pod uwagę przy rurociągach w regionie
selektywny harmonogram. Wartość domyślna to 15.

max-sched-region-insns
Maksymalna liczba zajazdów w regionie, które należy uwzględnić w interblock
planowanie. Wartość domyślna to 100.

max-pipeline-region-insns
Maksymalna liczba zajazdów w regionie, które należy wziąć pod uwagę przy rurociągach w
selektywny harmonogram. Wartość domyślna to 200.

min-spec-prob
Minimalne prawdopodobieństwo (w procentach) osiągnięcia bloku źródłowego dla interbloku
planowanie spekulacyjne. Wartość domyślna to 40.

max-sched-extend-regions-iters
Maksymalna liczba iteracji przez CFG w celu rozszerzenia regionów. Wartość 0 (
domyślnie) wyłącza rozszerzenia regionu.

max-sched-insn-conflict-delay
Maksymalne opóźnienie konfliktu dla insn, które należy uwzględnić w przypadku ruchu spekulacyjnego.
Wartość domyślna to 3.

sched-spec-prob-cutoff
Minimalne prawdopodobieństwo powodzenia spekulacji (w procentach), więc spekulacja
zajazdy są zaplanowane. Wartość domyślna to 40.

sched-spec-state-edge-prob-cutoff
Minimalne prawdopodobieństwo, jakie musi mieć krawędź, aby program planujący zapisał swój stan
W poprzek. Wartość domyślna to 10.

sched-mem-true-dep-cost
Minimalna odległość (w cyklach procesora) między sklepem a ładowaniem w tej samej pamięci
lokalizacje. Wartość domyślna to 1.

selsched-max-lookahead
Maksymalny rozmiar okna wyprzedzenia planowania selektywnego. To jest głębia
wyszukiwania dostępnych instrukcji. Wartość domyślna to 50.

selsched-max-sched-times
Maksymalna liczba zaplanowanych zleceń podczas selektywnego
planowanie. Jest to limit liczby iteracji, przez które
instrukcja może być potokowa. Wartość domyślna to 2.

selsched-max-insns-do-zmiany nazwy
Maksymalna liczba najlepszych instrukcji na gotowej liście, które są brane pod uwagę
zmiana nazwy w selektywnym harmonogramie. Wartość domyślna to 2.

sms-min-sc
Minimalna wartość liczby etapów, którą generuje program planujący swing modulo. ten
wartość domyślna to 2.

max-ostatnia-wartość-rtl
Maksymalny rozmiar mierzony jako liczba RTL, które można zarejestrować w wyrażeniu
w sumatorze dla pseudo rejestru jako ostatnią znaną wartość tego rejestru. ten
wartość domyślna to 10000.

max-combine-insns
Maksymalna liczba instrukcji, które sumator RTL próbuje połączyć. Domyślny
wartość to 2 at -Og i 4 inaczej.

całkowity-udział-limit
Małe stałe całkowite mogą używać wspólnej struktury danych, zmniejszając kompilator
wykorzystanie pamięci i zwiększenie jej szybkości. Ustawia to maksymalną wartość udostępnionego
stała całkowita. Wartość domyślna to 256.

ssp-rozmiar-bufora
Minimalny rozmiar buforów (tj. tablic), które otrzymują ochronę przed rozbiciem stosu
gdy -fstack-ochrona Jest używane.

Ta wartość domyślna przed Ubuntu 10.10 wynosiła „8”. Obecnie jest to „4”, aby zwiększyć
liczba funkcji chronionych przez zabezpieczenie stosu.

minimalny rozmiar do współdzielenia stosu
Minimalny rozmiar zmiennych biorących udział w współdzieleniu slotów stosu, gdy nie
optymalizacja. Wartość domyślna to 32.

max-jump-thread-duplikacja-stmts
Maksymalna liczba instrukcji dozwolona w bloku, która musi zostać zduplikowana, gdy
skoki gwintowania.

max-pola-dla-wrażliwych na pola
Maksymalna liczba pól w strukturze traktowanej w sposób wrażliwy na pola podczas
analiza wskaźnikowa. Wartość domyślna to zero dla -O0 dzięki -O1, i 100 dla -Os, -O2,
-O3.

opóźnienie pobierania z wyprzedzeniem
Oszacuj średnią liczbę instrukcji wykonywanych przed pobieraniem wstępnym
kończy. Odległość pobrana z wyprzedzeniem jest proporcjonalna do tej stałej.
Zwiększenie tej liczby może również prowadzić do zmniejszenia liczby wstępnie pobieranych strumieni (patrz
symultaniczne pobranie).

symultaniczne pobranie
Maksymalna liczba pobierań wstępnych, które mogą być uruchomione w tym samym czasie.

l1-rozmiar linii pamięci podręcznej
Rozmiar linii pamięci podręcznej w pamięci podręcznej L1 w bajtach.

l1-rozmiar pamięci podręcznej
Rozmiar pamięci podręcznej L1 w kilobajtach.

l2-rozmiar pamięci podręcznej
Rozmiar pamięci podręcznej L2 w kilobajtach.

stosunek min-insn-to-prefetch
Minimalny stosunek liczby instrukcji do liczby pobrań wstępnych
aby włączyć pobieranie z wyprzedzeniem w pętli.

prefetch-min-insn-to-mem-stosunek
Minimalny stosunek liczby instrukcji do liczby pamięci
referencje umożliwiające wstępne pobieranie w pętli.

use-canonical-types
Czy kompilator powinien używać systemu typów „kanonicznych”. Domyślnie to
powinna zawsze wynosić 1, co wykorzystuje bardziej wydajny wewnętrzny mechanizm porównywania
typy w C++ i Objective-C++. Jeśli jednak błędy w systemie typów kanonicznych są
powodując błędy kompilacji, ustaw tę wartość na 0, aby wyłączyć typy kanoniczne.

przełącznik-konwersji-maksymalny-wskaźnik-oddziału
Konwersja inicjalizacji przełącznika odmawia tworzenia tablic większych niż
przełącznik-konwersji-maksymalny-wskaźnik-oddziału razy liczba gałęzi w przełączniku.

maksymalna-częściowa-antyczna-długość
Maksymalna długość częściowego zbioru antycznego obliczona podczas częściowego drzewa
optymalizacja eliminacji nadmiarowości (-bezpłatny) podczas optymalizacji w -O3 i powyżej.
W przypadku niektórych rodzajów kodu źródłowego ulepszona eliminacja częściowej nadmiarowości
optymalizacja może uciec, zużywając całą dostępną pamięć na hoście
maszyna. Ten parametr określa limit długości zestawów, które są obliczane,
co zapobiega niekontrolowanemu zachowaniu. Ustawienie wartości 0 dla tego parametru
pozwala na nieograniczoną długość zestawu.

sccvn-max-scc-size
Maksymalny rozmiar silnie połączonego komponentu (SCC) podczas przetwarzania SCCVN. Gdyby
ten limit został osiągnięty, przetwarzanie SCCVN dla całej funkcji nie zostało wykonane i
optymalizacje w zależności od tego są wyłączone. Domyślny maksymalny rozmiar SCC to
10.

sccvn-max-alias-zapytania-na-dostęp
Maksymalna liczba zapytań alias-oracle, które wykonujemy, szukając zwolnień
dla ładunków i sklepów. Jeśli ten limit zostanie osiągnięty, wyszukiwanie zostanie przerwane, a ładowanie lub
sklep nie jest uważany za zbędny. Liczba zapytań jest algorytmicznie
ograniczone do liczby sklepów na wszystkich ścieżkach od obciążenia do wejścia funkcji.
Domyślna maksymalna liczba zapytań to 1000.

ira-max-loops-num
IRA domyślnie korzysta z alokacji rejestru regionalnego. Jeśli funkcja zawiera więcej
pętle niż liczba podana przez ten parametr, tylko co najwyżej podana liczba
najczęściej wykonywane pętle tworzą regiony do alokacji rejestru regionalnego.
Domyślna wartość parametru to 100.

ira-max-konflikt-rozmiar-tabeli
Chociaż IRA używa zaawansowanego algorytmu do kompresji tabeli konfliktów,
tabela może nadal wymagać nadmiernej ilości pamięci dla dużych funkcji. Jeśli
tabela konfliktów dla funkcji może być większa niż podany przez to rozmiar w MB
parametr, alokator rejestru zamiast tego używa szybszego, prostszego i niższego
algorytm jakości, który nie wymaga budowania tabeli konfliktów pseudorejestrów.
Domyślna wartość parametru to 2000.

ira-loop-reserved-regs
IRA może być używany do oceny dokładniejszych nacisków rejestrów w pętlach dla decyzji
aby przenieść niezmienniki pętli (patrz -O3). Liczba dostępnych rejestrów zarezerwowanych dla
niektóre inne cele są podane przez ten parametr. Domyślna wartość
parametr wynosi 2, co oznacza minimalną liczbę rejestrów potrzebnych przez typowy
instrukcje. Ta wartość jest najlepiej znaleziona w licznych eksperymentach.

lra-inheritance-ebb-probability-cutoff
LRA próbuje ponownie wykorzystać wartości przeładowane w rejestrach w kolejnych insns. Ten
optymalizacja nazywa się dziedziczeniem. EBB jest używany jako region do tego
optymalizacja. Parametr określa minimalne prawdopodobieństwo przebicia krawędzi w
procent użyty do dodania BB do dziedziczenia EBB w LRA. Domyślna wartość
parametr wynosi 40. Wartość została wybrana z wielu uruchomień SPEC2000 na x86-64.

niezmiennicze-pętli-max-bbs-w-pętli
Ruch niezmienniczy w pętli może być bardzo kosztowny, zarówno pod względem czasu kompilacji, jak i czasu
ilość potrzebnej pamięci czasu kompilacji, z bardzo dużymi pętlami. Pętle z więcej
podstawowe bloki niż ten parametr nie będą miały optymalizacji ruchu niezmiennego w pętli
wykonywane na nich. Domyślna wartość parametru to 1000 dla -O1 i 10000
dla -O2 i powyżej.

loop-max-datarefs-for-datadeps
Budowanie zależności danych jest kosztowne w przypadku bardzo dużych pętli. Ten parametr
ogranicza liczbę odwołań do danych w pętlach, które są brane pod uwagę dla danych
analiza zależności. Te duże pętle nie są obsługiwane przez optymalizacje za pomocą
zależności danych pętli. Wartość domyślna to 1000.

max-vartrack-rozmiar
Ustawia maksymalną liczbę boksów tabeli haszowania do użycia podczas przepływu danych śledzenia zmiennych
analiza dowolnej funkcji. Jeśli ten limit zostanie przekroczony przy śledzeniu zmiennych w
przypisania włączone, analiza dla tej funkcji jest ponawiana bez tego, po
usunięcie wszystkich błędów debugowania z funkcji. Jeśli limit zostanie przekroczony nawet bez
debug insns, analiza śledzenia var jest całkowicie wyłączona dla funkcji.
Ustawienie parametru na zero sprawia, że ​​jest on nieograniczony.

max-vartrack-expr-depth
Ustawia maksymalną liczbę poziomów rekurencji podczas próby mapowania nazw zmiennych lub
debuguj tymczasowe do wyrażeń wartości. To zamienia czas kompilacji na więcej
pełne informacje debugowania. Jeśli jest ustawiony zbyt nisko, wyrażenia wartości, które są
dostępne i mogą być reprezentowane w informacjach debugowania, mogą nie być używane;
ustawienie tego wyższego może umożliwić kompilatorowi znalezienie bardziej złożonego debugowania
wyrażeń, ale czas kompilacji i użycie pamięci mogą wzrosnąć. Wartość domyślna to 12.

min-nondebug-insn-uid
Użyj identyfikatorów uid zaczynających się od tego parametru dla niedebugowanych insns. Zakres poniżej
parametr jest zarezerwowany wyłącznie dla debugowania insns stworzonych przez
-przypisania-śledzenia-fvar, ale debugowanie insns może otrzymać (nie nakładające się) identyfikatory uid powyżej
jeśli zarezerwowany zakres zostanie wyczerpany.

ipa-sra-ptr-czynnik-wzrostu
IPA-SRA zastępuje wskaźnik do agregatu tylko jednym lub kilkoma nowymi parametrami
gdy ich łączny rozmiar jest mniejszy lub równy ipa-sra-ptr-czynnik-wzrostu razy
rozmiar oryginalnego parametru wskaźnika.

sra-max-skalaryzacja-rozmiar-Ospeed
sra-max-skalaryzacja-rozmiar-Osize
Dwie przepustki skalarnej redukcji agregatów (SRA i IPA-SRA) mają na celu zastąpienie
części skalarne agregatów z wykorzystaniem niezależnych zmiennych skalarnych. Te
parametry kontrolują maksymalną wielkość w jednostkach magazynowych kruszywa, które jest
brane pod uwagę do wymiany podczas kompilacji pod kątem szybkości (sra-max-skalaryzacja-rozmiar-
Ospeed) lub rozmiar (sra-max-skalaryzacja-rozmiar-Osize) odpowiednio.

tm-max-rozmiar-agregatu
Podczas tworzenia kopii zmiennych lokalnych wątków w transakcji, ten parametr
określa rozmiar w bajtach, po jakim zmienne są zapisywane wraz z logowaniem
funkcje w przeciwieństwie do zapisywania/przywracania par sekwencji kodów. Tylko ta opcja
ma zastosowanie podczas używania -fgnu-tm.

grafit-max-nb-scop-params
Aby uniknąć efektów wykładniczych w przekształceniach pętli grafitu, liczba
parametry w Statycznej Części Sterowania (SCoP) są ograniczone. Domyślna wartość to 10
parametry. Zmienna, której wartość jest nieznana w czasie kompilacji i zdefiniowana
poza SCoP jest parametrem SCoP.

grafit-max-bbs-na-funkcję
Aby uniknąć wykładniczych efektów w wykrywaniu SCoP, rozmiar funkcji
analizowany przez Graphite jest ograniczony. Wartość domyślna to 100 bloków podstawowych.

pętla-blok-rozmiar-kafelka
Blokowanie pętli lub przekształcenia eksploracji pasków, dostępne dzięki -floop-block or
-floop-strip-mine, rozebrać każdą pętlę w gnieździe pętli o podaną liczbę
iteracje. Długość paska można zmienić za pomocą pętla-blok-rozmiar-kafelka
parametr. Wartość domyślna to 51 iteracji.

pętla-rozwijanie-dżem-rozmiar
Określ współczynnik rozwijania dla -floop-rozwiń-i-zacięcie opcja. Wartość domyślna
to 4.

pętla-rozwijanie-dżem-głębokość
Określ wymiar do rozwinięcia (licząc od najbardziej wewnętrznej pętli) dla
-floop-rozwiń-i-zacięcie. Wartość domyślna to 2.

rozmiar-listy-wartości-ipa-cp
IPA-CP próbuje śledzić wszystkie możliwe wartości i typy przekazywane do funkcji
parametr w celu ich rozpropagowania i przeprowadzenia dewirtualizacji. ipa-wartość-cp-
rozmiar listy to maksymalna liczba wartości i typów, które przechowuje w jednym formalnym
parametr funkcji.

ipa-cp-eval-próg
IPA-CP oblicza własny wynik heurystyk opłacalności klonowania i wykonuje
te możliwości klonowania z wynikami przekraczającymi ipa-cp-eval-próg.

ipa-cp-rekurencja-kara
Procentowa kara, jaką otrzymają funkcje rekurencyjne, gdy zostaną ocenione
do klonowania.

ipa-cp-single-call-kara
Funkcje kary procentowej zawierające pojedyncze wywołanie innej funkcji będą
otrzymują, gdy są oceniane pod kątem klonowania.

ipa-max-agg-items
IPA-CP jest również w stanie propagować pewną liczbę wartości skalarnych przekazywanych w
agregat. ipa-max-agg-items kontroluje maksymalną liczbę takich wartości na jedną
parametr.

ipa-cp-loop-podpowiedź-bonus
Gdy IPA-CP ustali, że kandydat do klonowania stworzyłby liczbę
iteracje znanej pętli, dodaje bonus ipa-cp-loop-podpowiedź-bonus do
ocena rentowności kandydata.

ipa-cp-array-index-podpowiedź-bonus
Gdy IPA-CP ustali, że kandydat do klonowania utworzyłby indeks tablicy
dostęp znany, dodaje bonus w wysokości ipa-cp-array-index-podpowiedź-bonus do
ocena rentowności kandydata.

ipa-max-aa-steps
Podczas analizy organów funkcyjnych IPA-CP stosuje analizę aliasów w celu:
śledzić wartości wskazywane przez parametry funkcji. Aby nie spędzać za dużo czasu
analizując ogromne funkcje, poddaje się i bierze pod uwagę całą pamięć zaśmieconą po
badanie ipa-max-aa-steps oświadczenia modyfikujące pamięć.

partycje lto
Określ żądaną liczbę partycji tworzonych podczas kompilacji WHOPR. ten
liczba partycji powinna przekraczać liczbę procesorów używanych do kompilacji. ten
wartość domyślna to 32.

lto-minpartycja
Rozmiar minimalnej partycji dla WHOPR (w szacunkowych instrukcjach). Zapobiega to
koszty dzielenia bardzo małych programów na zbyt wiele partycji.

cxx-max-przestrzenie-nazw-dla-pomocy-diagnostycznej
Maksymalna liczba przestrzeni nazw, które należy sprawdzić w celu uzyskania sugestii podczas wyszukiwania nazw w C++
nie powiedzie się dla identyfikatora. Wartość domyślna to 1000.

próg częstotliwości zlewu
Maksymalna względna częstotliwość wykonywania (w procentach) bloku docelowego
względem oryginalnego bloku instrukcji, aby umożliwić zatonięcie instrukcji a
oświadczenie. Większe liczby powodują bardziej agresywne tonięcie wypowiedzi. ten
wartość domyślna to 75. Mała korekta dodatnia jest stosowana dla wyciągów z
operandy pamięci, ponieważ są jeszcze bardziej opłacalne, więc toną.

max-sklepy-do-zlewu
Maksymalna liczba par magazynów warunkowych, które można zatopić. Ustaw na 0, jeśli
albo wektoryzacja (-ftree-wektoryzuj) lub konwersja jeśli (-ftree-loop-jeśli-konwertuj)
jest niepełnosprawny. Wartość domyślna to 2.

zezwalaj-przechowuj-wyścigi-danych
Pozwól optymalizatorom wprowadzić nowe wyścigi danych w sklepach. Ustaw na 1, aby zezwolić,
w przeciwnym razie do 0. Ta opcja jest domyślnie włączona na poziomie optymalizacji -Ofast.

próg wielkości liter
Najmniejsza liczba różnych wartości, dla których najlepiej jest użyć tabeli przeskoków
zamiast drzewa warunkowych gałęzi. Jeśli wartość wynosi 0, użyj wartości domyślnej dla
maszyna. Wartość domyślna to 0.

szerokość-ponownego połączenia drzewa
Ustaw maksymalną liczbę instrukcji wykonywanych równolegle w ponownie skojarzonym drzewie.
Ten parametr zastępuje heurystykę zależną od celu, używaną domyślnie, jeśli nie ma wartości
zerowa wartość.

algorytm-zaplanowanego-ciśnienia
Wybierz jedną z dwóch dostępnych implementacji -fsched-ciśnienie. Algorytm 1
jest pierwotną implementacją i jest bardziej prawdopodobne, że uniemożliwi wykonanie instrukcji
zostanie ponownie uporządkowana. Algorytm 2 został zaprojektowany jako kompromis między
stosunkowo konserwatywne podejście algorytmu 1 i raczej agresywne
podejście przyjęte przez domyślny planista. W większym stopniu opiera się na posiadaniu
regularny plik rejestru i dokładne klasy ciśnienia rejestru. Widzieć haifa-sched.c
w źródłach GCC po więcej szczegółów.

Domyślny wybór zależy od celu.

max-slsr-cand-scan
Ustaw maksymalną liczbę istniejących kandydatów branych pod uwagę podczas szukania
podstawa dla nowego kandydata do redukcji wytrzymałości w linii prostej.

asan-globals
Włącz wykrywanie przepełnienia bufora dla obiektów globalnych. Ten rodzaj ochrony jest
domyślnie włączone, jeśli używasz -fsanitize=adres opcja. Aby wyłączyć globalne
wykorzystanie ochrony obiektów --param asan-globale=0.

asan-stos
Włącz wykrywanie przepełnienia bufora dla obiektów stosu. Ten rodzaj ochrony jest
włączone domyślnie podczas używania-fsanitize=adres. Aby wyłączyć ochronę stosu, użyj
--param asan-stos=0 opcja.

asan-instrument-odczyty
Włącz wykrywanie przepełnienia bufora dla odczytów pamięci. Ten rodzaj ochrony jest
włączone domyślnie podczas używania -fsanitize=adres. Aby wyłączyć odczyty pamięci
zastosowanie ochrony --param asan-instrument-odczyty=0.

asan-instrument-pisze
Włącz wykrywanie przepełnienia bufora dla zapisów w pamięci. Ten rodzaj ochrony jest
włączone domyślnie podczas używania -fsanitize=adres. Aby wyłączyć zapisy w pamięci
zastosowanie ochrony --param asan-instrument-zapis=0 opcja.

asan-memintrina
Włącz wykrywanie funkcji wbudowanych. Ten rodzaj ochrony umożliwia:
domyślnie podczas używania -fsanitize=adres. Aby wyłączyć wbudowane funkcje ochrony
posługiwać się --param asan-memintryna=0.

asan-użyj-po-powrocie
Włącz wykrywanie użycia po zwrocie. Ten rodzaj ochrony umożliwia:
domyślnie podczas używania -fsanitize=adres opcja. Aby wyłączyć użycie po zwrocie
zastosowanie wykrywania --param asan-użyj-po- powrocie=0.

asan-instrumentacja-z-progiem-rozmowy
Jeśli liczba dostępów do pamięci w instrumentowanej funkcji jest większa lub równa
tego numeru, użyj wywołań zwrotnych zamiast sprawdzania w linii. Np. aby wyłączyć kod wbudowany
posługiwać się --param asan-instrumentacja-z-progiem-rozmowy=0.

chkp-max-ctor-size
Konstruktory statyczne generowane przez Pointer Bounds Checker mogą stać się bardzo duże i
znacząco wydłużyć czas kompilacji na poziomie optymalizacji -O1 i wyżej. Ten
parametr to maksymalna liczba instrukcji w jednym wygenerowanym konstruktorze.
Wartość domyślna to 5000.

max-fsm-thread-path-insns
Maksymalna liczba instrukcji do skopiowania podczas duplikowania bloków w skończonym stanie
automatyczna ścieżka wątku skoku. Wartość domyślna to 100.

max-fsm-długość-wątku
Maksymalna liczba podstawowych bloków na ścieżce przeskoku wątku automatu skończonego. ten
wartość domyślna to 10.

max-fsm-thread-paths
Maksymalna liczba nowych ścieżek przeskoku wątków do utworzenia dla automatu skończonego.
Wartość domyślna to 50.

Opcje Sterowanie die,en Preprocesor
Te opcje kontrolują preprocesor C, który jest uruchamiany na każdym pliku źródłowym C przed rzeczywistym
kompilacja.

Jeśli używasz -E opcja, nic nie jest robione poza przetwarzaniem wstępnym. Niektóre z tych opcji
mają sens tylko razem z -E ponieważ powodują, że wyjście preprocesora jest
nie nadaje się do rzeczywistej kompilacji.

-Wp,opcja
Możesz użyć -Wp,opcja aby ominąć sterownik kompilatora i przejść opcja bezpośrednio przez
do preprocesora. Gdyby opcja zawiera przecinki, jest podzielony na wiele opcji w
przecinki. Jednak wiele opcji jest modyfikowanych, tłumaczonych lub interpretowanych przez
sterownik kompilatora przed przekazaniem do preprocesora i -Wp siłą omija
tej fazie. Bezpośredni interfejs preprocesora jest nieudokumentowany i podlega
zmienić, więc jeśli to możliwe, powinieneś unikać używania -Wp i niech kierowca zajmie się
zamiast tego opcje.

-Xpreprocesor opcja
Przechodzić opcja jako opcja dla preprocesora. Możesz użyć tego do zasilania systemu-
konkretne opcje preprocesora, których GCC nie rozpoznaje.

Jeśli chcesz przekazać opcję, która wymaga argumentu, musisz użyć -Xpreprocesor
dwa razy, raz dla opcji i raz dla argumentu.

-brak zintegrowanego-cpp
Wykonaj wstępne przetwarzanie jako oddzielny przebieg przed kompilacją. Domyślnie GCC wykonuje
przetwarzanie wstępne jako integralna część tokenizacji danych wejściowych i parsowania. Jeśli ta opcja
jest zapewniony odpowiedni interfejs językowy (cc1, cc1pluslub cc1obj dla C, C++,
i Cel-C) jest wywoływana dwukrotnie, raz tylko w celu wstępnego przetwarzania
i raz dla rzeczywistej kompilacji wstępnie przetworzonych danych wejściowych. Ta opcja może być przydatna
w związku z -B or -obwoluta opcje do określenia alternatywnego preprocesora lub
wykonać dodatkowe przetwarzanie źródła programu między normalnym przetwarzaniem wstępnym a
kompilacja.

-D Nazwa
Wstępnie zdefiniować Nazwa jako makro, z definicją 1.

-D Nazwa=definicja
Zawartość definicja są tokenizowane i przetwarzane tak, jakby pojawiły się w trakcie
faza translacji trzecia w a #definiować dyrektywa. W szczególności definicja będzie
obcięte przez osadzone znaki nowego wiersza.

Jeśli wywołujesz preprocesor z powłoki lub programu podobnego do powłoki, możesz potrzebować
używać składni cytowania powłoki do ochrony znaków, takich jak spacje, które mają
znaczenie w składni powłoki.

Jeśli chcesz zdefiniować makro podobne do funkcji w wierszu poleceń, napisz jego argument
lista z otaczającymi nawiasami przed znakiem równości (jeśli istnieje). Nawiasy są
ma znaczenie dla większości powłok, więc musisz zacytować tę opcję. Z sh dzięki csh,
-D'Nazwa(argumenty...)=definicja' działa.

-D dzięki -U opcje są przetwarzane w kolejności podanej w wierszu poleceń. Wszystko
-makros filet dzięki -zawierać filet opcje są w końcu przetwarzane -D dzięki -U Opcje.

-U Nazwa
Anuluj poprzednią definicję Nazwa, wbudowane lub wyposażone w -D opcja.

-undef
Nie predefiniuj żadnych makr specyficznych dla systemu lub GCC. Wstępnie zdefiniowany standard
makra pozostają zdefiniowane.

-I reż
Dodaj katalog reż do listy katalogów do przeszukania plików nagłówkowych.
Katalogi nazwane przez -I są przeszukiwane przed standardowym systemem zawierającym katalogi.
Jeśli katalog reż to standardowy system zawierający katalog, opcja jest ignorowana, aby
upewnij się, że domyślna kolejność wyszukiwania katalogów systemowych i specjalne traktowanie
nagłówków systemowych nie zostanie pokonanych. Gdyby reż zaczyna się od „=”, następnie „=” będzie
zastąpiony przedrostkiem sysroot; zobaczyć --główny system dzięki -isysroot.

-o filet
Zapisz dane wyjściowe do filet. To to samo, co określanie filet jako drugi brak opcji
argument drugi Cpp. gcc ma inną interpretację drugiego argumentu nieopcji,
więc musisz użyć -o aby określić plik wyjściowy.

-Ściana
Włącza wszystkie opcjonalne ostrzeżenia, które są pożądane dla normalnego kodu. Obecnie to
is -Wkomentarz, -Wtrygrafy, -Wwieloznakowy i ostrzeżenie o promocji liczby całkowitej powodującej
zmiana znaku w wyrażeniach "#if". Zauważ, że wiele ostrzeżeń preprocesora
są domyślnie włączone i nie mają możliwości ich kontrolowania.

-Wkomentarz
-Wkomentarze
Ostrzegaj, gdy rozpoczyna się sekwencja komentarza /* pojawia się w /* komentarz, lub kiedy
odwrotny ukośnik-nowa linia pojawia się w // komentarz. (Obie formy mają ten sam efekt.)

-Wtrygrafy
Większość trigrafów w komentarzach nie może wpływać na znaczenie programu. Jednak
trigraf, który utworzyłby znak nowej linii ze znakami ucieczki (??/ na końcu wiersza) może, by
zmiana miejsca rozpoczęcia lub zakończenia komentarza. Dlatego tylko trygrafy, które by się utworzyły
Znaki nowej linii ze znakami ucieczki generują ostrzeżenia wewnątrz komentarza.

Ta opcja jest implikowana przez -Ściana. Jeśli -Ściana nie podano, ta opcja jest nadal włączona
chyba że trigrafy są włączone. Aby uzyskać konwersję trygrafu bez ostrzeżeń, ale uzyskaj
Inne -Ściana ostrzeżenia, użyj -trygrafy -Ściana -Wno-trygrafy.

-Wtradycyjne
Ostrzegaj o pewnych konstrukcjach, które zachowują się inaczej w tradycyjnym i ISO C. Również
ostrzegaj o konstrukcjach ISO C, które nie mają tradycyjnego odpowiednika w C i są problematyczne
konstrukty, których należy unikać.

-Wundef
Ostrzegaj w przypadku napotkania identyfikatora, który nie jest makrem w #Jeśli dyrektywy,
poza zdefiniowane. Takie identyfikatory są zastępowane zerem.

-Wunused-makra
Ostrzegaj o nieużywanych makrach zdefiniowanych w pliku głównym. Makro to używany Jeśli to jest
rozszerzona lub przynajmniej raz przetestowana pod kątem istnienia. Preprocesor wyświetli również ostrzeżenie, jeśli:
makro nie było używane w momencie przedefiniowania lub niezdefiniowania.

Wbudowane makra, makra zdefiniowane w wierszu poleceń i makra zdefiniowane w include
pliki nie są ostrzegane.

Uwaga: Jeśli makro jest faktycznie używane, ale używane tylko w pominiętych blokach warunkowych, to
CPP zgłosi go jako nieużywany. Aby uniknąć ostrzeżenia w takim przypadku, możesz poprawić
zakres definicji makra poprzez np. przeniesienie go do pierwszego pominiętego
blok. Alternatywnie możesz zapewnić fikcyjną funkcję z czymś takim jak:

#jeśli zdefiniowano_makro_powodujące_ostrzeżenie
#endif

-Etykiety Wendif
Ostrzegaj, gdy #else lub #endif następuje tekst. Zwykle dzieje się to w
kod formularza

#jeśli GŁUPIA
...
#inny FOO
...
#endif FOO

Drugi i trzeci „FOO” powinien być w komentarzach, ale często nie ma go w starszych programach.
To ostrzeżenie jest domyślnie włączone.

-Błąd
Przekształć wszystkie ostrzeżenia w twarde błędy. Kod źródłowy, który wyzwala ostrzeżenia, będzie
odrzucone

-Wsystem-nagłówki
Ostrzeżenia dotyczące kodu w nagłówkach systemowych. Zwykle nie są one pomocne w znalezieniu
błędy we własnym kodzie, dlatego są pomijane. Jeśli jesteś odpowiedzialny za system
bibliotekę, możesz chcieć je zobaczyć.

-w Pomiń wszystkie ostrzeżenia, w tym te, które domyślnie wydaje GNU CPP.

-pedantyczny
Wydaj całą obowiązkową diagnostykę wymienioną w standardzie C. Część z nich została
domyślnie wyłączone, ponieważ często uruchamiają się na nieszkodliwym kodzie.

-pedantyczne-błędy
Wydaj całą obowiązkową diagnostykę i zamień całą obowiązkową diagnostykę na błędy.
Obejmuje to obowiązkową diagnostykę, której GCC wydaje bez -pedantyczny ale traktuje jako
ostrzeżenia.

-M Zamiast wyprowadzać wynik przetwarzania wstępnego, wypisz regułę odpowiednią dla robić
opisujący zależności głównego pliku źródłowego. Preprocesor wyprowadza jeden
robić reguła zawierająca nazwę pliku obiektowego dla tego pliku źródłowego, dwukropek i nazwy
wszystkich dołączonych plików, w tym pochodzących z -zawierać or -makros Komenda-
opcje linii.

O ile nie określono wyraźnie (z -MT or -MQ), nazwa pliku obiektu składa się z
nazwa pliku źródłowego z dowolnym sufiksem zastąpionym sufiksem pliku obiektowego i dowolnym
usunięto wiodące części katalogu. Jeśli jest wiele dołączonych plików, reguła brzmi:
podziel na kilka linii za pomocą \-Nowa linia. Reguła nie ma poleceń.

Ta opcja nie blokuje danych wyjściowych debugowania preprocesora, takich jak -dM. Unikać
mieszając takie dane wyjściowe debugowania z regułami zależności, należy wyraźnie określić
plik wyjściowy zależności z -MFlub użyj zmiennej środowiskowej, takiej jak
DEPENDENCIES_OUTPUT. Dane wyjściowe debugowania będą nadal wysyłane do zwykłego strumienia wyjściowego, ponieważ
Normal.

Przechodzący -M do kierowcy sugeruje -Ei pomija ostrzeżenia z niejawnym -w.

-MM Polub -M ale nie wspominaj o plikach nagłówkowych, które znajdują się w systemowych katalogach nagłówkowych,
ani pliki nagłówkowe, które są dołączone bezpośrednio lub pośrednio z takiego nagłówka.

Oznacza to, że wybór nawiasów ostrych lub cudzysłowów w an #zawierać
dyrektywa sama w sobie nie określa, czy ten nagłówek pojawi się w -MM
wyjście zależności. Jest to niewielka zmiana semantyki w stosunku do wersji GCC 3.0 i
wcześniej.

-MF filet
Kiedy jest używany z -M or -MM, określa plik do zapisania zależności. Jeśli nie -MF
przełącznik otrzymuje preprocesor wysyła reguły w to samo miejsce, w którym by wysłał
wstępnie przetworzone dane wyjściowe.

W przypadku korzystania z opcji sterownika -MD or -MMD, -MF nadpisuje domyślną zależność
plik wyjściowy.

-MG W połączeniu z opcją taką jak -M żądanie generowania zależności, -MG zakłada
brakujące pliki nagłówkowe są plikami generowanymi i dodaje je do listy zależności bez
zgłaszanie błędu. Nazwa pliku zależności jest pobierana bezpośrednio z „#include”
dyrektywy bez poprzedzania żadnej ścieżki. -MG tłumi również wstępnie przetworzone dane wyjściowe, ponieważ a
brakujący plik nagłówkowy czyni to bezużytecznym.

Ta funkcja jest używana w automatycznej aktualizacji plików makefile.

-POSEŁ Ta opcja nakazuje CPP dodanie fałszywego celu dla każdej zależności innej niż
głównego pliku, powodując, że każdy z nich nie jest zależny od niczego. Te fałszywe reguły omijają błędy
robić daje, jeśli usuniesz pliki nagłówkowe bez aktualizacji Makefile pasować.

To jest typowy wynik:

test.o: test.c test.h

test.h:

-MT cel
Zmień cel reguły emitowany przez generowanie zależności. Domyślnie CPP trwa
nazwa głównego pliku wejściowego, usuwa wszystkie składniki katalogu i dowolny przyrostek pliku
jak na przykład .ci dołącza zwykły sufiks obiektu platformy. Rezultatem jest cel.

An -MT opcja ustawi cel na dokładnie taki ciąg znaków. Jeśli chcesz
wiele celów, możesz określić je jako pojedynczy argument, aby -MTlub użyj wielu
-MT Opcje.

Na przykład, -MT '$(objpfx)foo.o' może dać

$(objpfx)foo.o: foo.c

-MQ cel
Taki sam jak -MT, ale cytuje wszystkie znaki, które są specjalne dla programu Make.
-MQ '$(objpfx)foo.o' daje

$$(objpfx)foo.o: foo.c

Domyślny cel jest automatycznie cytowany, tak jakby został podany z -MQ.

-MD -MD odpowiada -M -MF filet, oprócz tego -E nie jest dorozumiana. Kierowca
określa filet na podstawie tego, czy -o podana jest opcja. Jeśli tak, kierowca używa swojego
argument, ale z sufiksem .d, w przeciwnym razie przyjmuje nazwę pliku wejściowego,
usuwa wszystkie składniki katalogu i przyrostki oraz stosuje a .d przyrostek.

If -MD jest używany w połączeniu z -E, dowolne -o przełącznik jest rozumiany jako określenie
plik wyjściowy zależności, ale jeśli jest używany bez -E, każdy -o rozumie się jako określenie
docelowy plik obiektu.

Ponieważ -E nie jest dorozumiana, -MD może być użyty do wygenerowania pliku wyjściowego zależności jako
efekt uboczny procesu kompilacji.

-MMD
Polub -MD z wyjątkiem wymieniania tylko plików nagłówkowych użytkownika, a nie systemowych plików nagłówkowych.

-fpch-deps
Podczas korzystania z prekompilowanych nagłówków ta flaga spowoduje, że flagi danych wyjściowych zależności będą
wypisz także pliki z zależności prekompilowanego nagłówka. Jeśli nie określono tylko
prekompilowany nagłówek zostanie wyświetlony, a nie pliki, które zostały użyte do jego utworzenia
ponieważ te pliki nie są sprawdzane, gdy używany jest prekompilowany nagłówek.

-fpch-preproces
Ta opcja pozwala na użycie prekompilowanego nagłówka razem z -E. Wstawia specjalny
"#pragma", "#pragma GCC pch_preprocess "Nazwa pliku"" w wyjściu, aby zaznaczyć miejsce
gdzie znaleziono prekompilowany nagłówek i jego filename. Kiedy -fwstępnie przetworzony jest w
użycia, GCC rozpoznaje ten "#pragma" i ładuje PCH.

Ta opcja jest domyślnie wyłączona, ponieważ wynikowe wstępnie przetworzone dane wyjściowe to tylko
naprawdę nadaje się jako dane wejściowe do GCC. Jest włączany przez -save-temps.

Nie powinieneś pisać tego "#pragma" we własnym kodzie, ale możesz bezpiecznie edytować
nazwa pliku, jeśli plik PCH jest dostępny w innej lokalizacji. Nazwa pliku może być
bezwzględna lub może być względna do bieżącego katalogu GCC.

-x c
-x c ++
-x cel C
-x assembler-z-cpp
Określ język źródłowy: C, C++, Objective-C lub zestaw. To nie ma nic wspólnego
ze zgodnością z normami lub rozszerzeniami; wybiera jedynie podstawową składnię do
oczekiwać. Jeśli nie podasz żadnej z tych opcji, cpp wydedukuje język z
rozszerzenie pliku źródłowego: .c, . DC, .mlub .S. Niektóre inne popularne rozszerzenia dla
Rozpoznawane są również C++ i asembler. Jeśli cpp nie rozpoznaje rozszerzenia, to
potraktuje plik jako C; jest to najbardziej ogólny tryb.

Uwaga: Poprzednie wersje cpp akceptowane a -długie opcja, która wybrała zarówno
język i poziom zgodności z normami. Ta opcja została usunięta, ponieważ
to jest w konflikcie z -l opcja.

-std=standard
-ansi
Określ standard, z którym powinien być zgodny kod. Obecnie CPP wie o C
i standardy C++; inne mogą zostać dodane w przyszłości.

standard może być jednym z:

"c90"
"c89"
"izo9899:1990"
Norma ISO C z 1990 roku. c90 jest zwyczajowym skrótem tej wersji
standard.

Pandemia -ansi opcja jest równoważna -std=c90.

"izo9899:199409"
Norma C z 1990 r., zmieniona w 1994 r.

"izo9899:1999"
"c99"
"izo9899:199x"
"c9x"
Zmieniona norma ISO C, opublikowana w grudniu 1999. Przed publikacją ta
był znany jako C9X.

"izo9899:2011"
"c11"
"c1x"
Zmieniona norma ISO C, opublikowana w grudniu 2011. Przed publikacją ta
był znany jako C1X.

"gnu90"
"gnu89"
Standard C z 1990 r. plus rozszerzenia GNU. To jest ustawienie domyślne.

"gnu99"
"gnu9x"
Standard C z 1999 r. plus rozszerzenia GNU.

"gnu11"
"gnu1x"
Standard C z 2011 r. plus rozszerzenia GNU.

„c++98”
Standard ISO C++ z 1998 roku wraz z poprawkami.

"gnu++98"
Taki sam jak -std=c++98 plus rozszerzenia GNU. Jest to ustawienie domyślne dla kodu C++.

-JA- Podziel ścieżkę dołączania. Wszelkie katalogi określone za pomocą -I opcje przed -JA-
szukano tylko nagłówków żądanych z "#include "plik""; nie są wyszukiwane
"#włączaćplik>". Jeśli dodatkowe katalogi są określone za pomocą -I opcje po
-JA-, te katalogi są przeszukiwane dla wszystkich #zawierać dyrektyw.

Dodatkowo, -JA- blokuje użycie katalogu bieżącego katalogu plików jako
pierwszy katalog wyszukiwania dla "#include "plik"". Ta opcja została wycofana.

-nostdinc
Nie przeszukuj standardowych katalogów systemowych w poszukiwaniu plików nagłówkowych. Tylko katalogi
określiłeś z -I opcje (i katalog bieżącego pliku, jeśli
odpowiednie) są przeszukiwane.

-nostdinc++
Nie szukaj plików nagłówkowych w standardowych katalogach specyficznych dla C++, ale nadal szukaj
przeszukaj inne standardowe katalogi. (Ta opcja jest używana podczas budowania C++
Biblioteka.)

-zawierać filet
Drewna filet jakby "#include "plik"" pojawił się jako pierwszy wiersz podstawowego źródła
plik. Jednak pierwszy wyszukiwany katalog filet czy preprocesor działa?
katalog zamiast of katalog zawierający główny plik źródłowy. Jeśli nie znaleziono
tam jest wyszukiwany w pozostałej części łańcucha wyszukiwania „#include „...”” jako
Normal.

Jeśli wiele -zawierać podane są opcje, pliki są umieszczane w kolejności, w jakiej
pojawiają się w wierszu poleceń.

-makros filet
Dokładnie jak -zawierać, z wyjątkiem wszelkich danych wyjściowych powstałych w wyniku skanowania filet Jest rzucony
z dala. Makra, które definiuje, pozostają zdefiniowane. Pozwala to na zdobycie wszystkich makr
z nagłówka bez przetwarzania jego deklaracji.

Wszystkie pliki określone przez -makros są przetwarzane przed wszystkimi plikami określonymi przez -zawierać.

-idirafter reż
Szukaj reż dla plików nagłówkowych, ale zrób to po wszystkie katalogi określone za pomocą -I oraz
standardowe katalogi systemowe zostały wyczerpane. reż jest traktowany jako system m.in.
informator. Gdyby reż zaczyna się od „=”, następnie „=” zostanie zastąpiony przez sysroot
prefiks; zobaczyć --główny system dzięki -isysroot.

-iprefiks prefiks
Sprecyzować prefiks jako przedrostek dla kolejnych -iwithprefix opcje. Jeśli przedrostek
reprezentuje katalog, powinieneś dołączyć końcowy /.

-iwithprefix reż
-iwithprefixbefore reż
Dodać reż do prefiksu określonego wcześniej za pomocą -iprefiksi dodaj wynikowy
do katalogu dołączania ścieżki wyszukiwania. -iwithprefixbefore umieszcza go w tym samym miejscu -I
zrobiłbym; -iwithprefix kładzie to gdzie -idirafter doskonałe.

-isysroot reż
Ta opcja jest podobna do --główny system opcja, ale dotyczy tylko plików nagłówkowych (z wyjątkiem
Celami Darwina, gdzie dotyczy zarówno plików nagłówkowych, jak i bibliotek). Zobacz
--główny system opcja, aby uzyskać więcej informacji.

-imultilib reż
Zastosowanie reż jako podkatalog katalogu zawierającego nagłówki C++ specyficzne dla celu.

-isystem reż
Szukaj reż dla plików nagłówkowych, po wszystkich katalogach określonych przez -I ale przed
standardowe katalogi systemowe. Oznacz go jako katalog systemowy, aby był taki sam
specjalne traktowanie, jak w przypadku standardowych katalogów systemowych. Gdyby reż zaczyna się
z „=", to „=" zostanie zastąpione przedrostkiem sysroot; zobaczyć --główny system dzięki
-isysroot.

-Cytuję reż
Szukaj reż tylko dla plików nagłówkowych żądanych z "#include "plik""; oni nie są
szukano „#includeplik>", przed wszystkimi katalogami określonymi przez -I i przed
standardowe katalogi systemowe. Gdyby reż zaczyna się od „=”, następnie „=” zostanie zastąpiony przez
przedrostek sysroot; zobaczyć --główny system dzięki -isysroot.

-f-dyrektywy-tylko
Podczas przetwarzania wstępnego obsługuj dyrektywy, ale nie rozwijaj makr.

Zachowanie opcji zależy od -E dzięki -fwstępnie przetworzony Opcje.

Z -E, wstępne przetwarzanie ogranicza się do obsługi dyrektyw, takich jak „#define”,
„#ifdef” i „#błąd”. Inne operacje preprocesora, takie jak rozszerzanie makr i
konwersja trigrafu nie jest wykonywana. Ponadto -dD opcja jest domyślnie
włączone.

Z -fwstępnie przetworzony, predefinicja wiersza poleceń i większości wbudowanych makr to
wyłączone. Obsługiwane są makra, takie jak „__LINE__”, które są zależne od kontekstu
normalnie. Umożliwia to kompilację plików wcześniej przetworzonych za pomocą „-E
-f-tylko dyrektywy".

Z obydwoma -E dzięki -fwstępnie przetworzony, zasady dotyczące -fwstępnie przetworzony mają pierwszeństwo. Ten
umożliwia pełne wstępne przetwarzanie plików wcześniej przetworzonych za pomocą „-E
-f-tylko dyrektywy".

-fdolary-w-identyfikatorach
Akceptuj $ w identyfikatorach.

-rozszerzone-identyfikatory
Akceptuj uniwersalne nazwy znaków w identyfikatorach. Opcja jest wyłączona domyślnie
dla C99 (i późniejszych standardowych wersji C) i C++.

-fno-canonical-system-headers
Podczas przetwarzania wstępnego nie skracaj ścieżek nagłówków systemowych za pomocą kanonizacji.

-fwstępnie przetworzony
Wskaż preprocesorowi, że plik wejściowy został już przetworzony. Ten
pomija takie rzeczy, jak rozwijanie makr, konwersja trigrafu, unikanie łączenia znaków nowej linii,
i przetwarzanie większości dyrektyw. Preprocesor nadal rozpoznaje i usuwa
komentarze, dzięki czemu można przekazać plik wstępnie przetworzony za pomocą -C do kompilatora bez
problemy. W tym trybie zintegrowany preprocesor to niewiele więcej niż tokenizer
na frontach.

-fwstępnie przetworzony jest niejawna, jeśli plik wejściowy ma jedno z rozszerzeń .i, .ii or .mi.
Są to rozszerzenia używane przez GCC dla wstępnie przetworzonych plików utworzonych przez -save-temps.

-ftabstop=szerokość
Ustaw odległość między tabulatorami. Pomaga to preprocesorowi raportować poprawną kolumnę
liczby w ostrzeżeniach lub błędach, nawet jeśli w wierszu pojawiają się tabulatory. Jeśli wartość jest mniejsza
niż 1 lub więcej niż 100, opcja jest ignorowana. Wartość domyślna to 8.

-fdebug-cpp
Ta opcja jest przydatna tylko do debugowania GCC. W przypadku użycia z -E, debugowanie zrzutów
informacje o mapach lokalizacji. Każdy token na wyjściu jest poprzedzony zrzutem
mapa, do której należy jego lokalizacja. Zrzut mapy z lokalizacją tokena
byłoby:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"MI": ,"lok": }

W przypadku użycia bez -E, ta opcja nie ma żadnego efektu.

-ftrack-makro-rozszerzenie[=poziom]
Śledź lokalizacje tokenów w rozszerzeniach makro. Pozwala to kompilatorowi na emisję
diagnostyka bieżącego stosu rozszerzeń makr, gdy wystąpi błąd kompilacji w
rozszerzenie makro. Użycie tej opcji powoduje, że preprocesor i kompilator zużywają
więcej pamięci. ten poziom parametr może służyć do wyboru poziomu precyzji tokena
śledzenie lokalizacji, zmniejszając w ten sposób zużycie pamięci, jeśli to konieczne. Wartość 0 of
poziom dezaktywuje tę opcję, tak jakby nie -ftrack-makro-rozszerzenie był obecny
wiersz poleceń. Wartość 1 śledzi lokalizacje tokenów w trybie zdegradowanym ze względu na
minimalne obciążenie pamięci. W tym trybie wszystkie tokeny wynikające z ekspansji an
argument makra podobnego do funkcji mają tę samą lokalizację. Wartość 2 śledzi tokeny
lokalizacje całkowicie. Ta wartość jest najbardziej głodna pamięci. Kiedy ta opcja jest podana
bez argumentu, domyślna wartość parametru to 2.

Zauważ, że "-ftrack-macro-expansion=2" jest domyślnie włączone.

-fexec-charset=charset
Ustaw zestaw znaków wykonania, używany dla stałych łańcuchowych i znakowych. Domyślny
to UTF-8. charset może być dowolnym kodowaniem obsługiwanym przez systemową bibliotekę „iconv”
rutyna.

-fwide-exec-charset=charset
Ustawia szeroki zestaw znaków wykonywania, używany dla szerokich ciągów i stałych znakowych.
Wartość domyślna to UTF-32 lub UTF-16, w zależności od tego, co odpowiada szerokości „wchar_t”. Jak
z -fexec-charset, charset może być dowolnym kodowaniem obsługiwanym przez "iconv" systemu
rutyna biblioteczna; jednak będziesz mieć problemy z kodowaniem, które nie będzie pasować
dokładnie w "wchar_t".

-finput-charset=charset
Ustaw zestaw znaków wejściowych, używany do tłumaczenia z zestawu znaków wejściowego
plik do źródłowego zestawu znaków używanego przez GCC. Jeśli ustawienia regionalne nie określają, lub GCC
nie można uzyskać tych informacji z ustawień regionalnych, domyślnie jest to UTF-8. To może być
zastępowane przez ustawienia regionalne lub tę opcję wiersza polecenia. Obecnie polecenie-
opcja line ma pierwszeństwo w przypadku konfliktu. charset może być dowolnym kodowaniem
obsługiwane przez procedurę biblioteki „iconv” systemu.

-fworking-katalog
Włącz generowanie znaczników linii na wyjściu preprocesora, które pozwolą kompilatorowi
znać bieżący katalog roboczy w czasie przetwarzania wstępnego. Kiedy ta opcja to
włączony, preprocesor wyemituje, po początkowym znaczniku linii, drugi znacznik linii
z bieżącym katalogiem roboczym, po którym następują dwa ukośniki. GCC użyje tego
katalog, gdy jest obecny we wstępnie przetworzonym wejściu, ponieważ katalog wyemitowany jako
bieżący katalog roboczy w niektórych formatach informacji debugowania. Ta opcja to
niejawnie włączone, jeśli informacje debugowania są włączone, ale można to powstrzymać za pomocą
zanegowana forma -fno-katalog-roboczy, Jeśli -P flaga jest obecna w poleceniu
line, ta opcja nie ma żadnego efektu, ponieważ żadne dyrektywy "#line" nie są emitowane.

-fno-pokaż kolumnę
Nie drukuj numerów kolumn w diagnostyce. Może to być konieczne, jeśli diagnostyka jest
skanowanie przez program, który nie rozumie numerów kolumn, na przykład
dejagn.

-A orzec=odpowiedź
Dokonaj asercji z predykatem orzec i odpowiedź odpowiedź. Ten formularz jest
preferowana w stosunku do starszej formy -A orzec(odpowiedź), który jest nadal obsługiwany, ponieważ
nie używa znaków specjalnych powłoki.

-A -orzec=odpowiedź
Anuluj asercję z predykatem orzec i odpowiedź odpowiedź.

-dCHARS
ZNAKI jest sekwencją co najmniej jednego z następujących znaków i nie może być
poprzedzony spacją. Inne znaki są interpretowane przez właściwy kompilator lub
zarezerwowane dla przyszłych wersji GCC i dlatego są po cichu ignorowane. Jeśli określisz
postacie, których zachowanie jest sprzeczne, wynik jest niezdefiniowany.

M Zamiast normalnego wyjścia wygeneruj listę #definiować dyrektywy dla wszystkich
makra zdefiniowane podczas wykonywania preprocesora, w tym predefiniowane
makra. Dzięki temu możesz dowiedzieć się, co jest wstępnie zdefiniowane w Twojej wersji
preprocesor. Zakładając, że nie masz pliku foo.h, Komenda

dotknij foo.h; cpp -dM foo.h

pokaże wszystkie predefiniowane makra.

Jeśli używasz -dM bez -E opcja, -dM jest interpretowany jako synonim słowa
-fdump-rtl-mach.

D Polub M z wyjątkiem dwóch aspektów: to robi nie zawierać predefiniowane makra, a to
Wyjścia obie die,en #definiować dyrektywy i wynik przetwarzania wstępnego. Oba rodzaje
wyjścia przejdź do standardowego pliku wyjściowego.

N Polub D, ale emitują tylko nazwy makr, a nie ich rozwinięcia.

I Wydajność #zawierać dyrektywy oprócz wyniku przetwarzania wstępnego.

U Polub D z wyjątkiem tego, że tylko makra, które są rozwinięte lub których zdefiniowanie jest testowane
w dyrektywach preprocesora są wyprowadzane; wyjście jest opóźnione do momentu użycia lub
test makra; oraz #niedef dyrektywy są również wyprowadzane dla przetestowanych makr, ale
nieokreślone w tym czasie.

-P Zablokuj generowanie znaczników linii na wyjściu preprocesora. To może być
przydatne podczas uruchamiania preprocesora na czymś, co nie jest kodem C i zostanie wysłane
do programu, który może być zdezorientowany przez znaczniki linii.

-C Nie odrzucaj komentarzy. Wszystkie komentarze są przekazywane do pliku wyjściowego, z wyjątkiem
dla komentarzy w przetworzonych dyrektywach, które są usuwane wraz z dyrektywą.

Powinieneś być przygotowany na skutki uboczne podczas używania -C; powoduje to, że preprocesor
traktuj komentarze jako osobne tokeny. Na przykład komentarze pojawiające się na
początek tego, co byłoby wierszem dyrektywy, powoduje przekształcenie tego wiersza w
zwykła linia źródłowa, ponieważ pierwszy token w linii nie jest już a #.

-CC Nie odrzucaj komentarzy, także podczas rozwijania makr. To jest jak -C, z wyjątkiem
że komentarze zawarte w makrach są również przekazywane do pliku wyjściowego, gdzie
makro jest rozwinięte.

Oprócz skutków ubocznych -C opcja, -CC opcja powoduje, że wszystko w stylu C++
komentarze wewnątrz makra, które mają zostać przekonwertowane na komentarze w stylu C. Ma to zapobiec później
użycie tego makra przed nieumyślnym zakomentowaniem pozostałej części wiersza źródłowego.

Pandemia -CC opcja jest zwykle używana do obsługi komentarzy lint.

-tradycyjny-cpp
Spróbuj naśladować zachowanie staromodnych preprocesorów C, w przeciwieństwie do ISO C
preprocesory.

-trygrafy
Sekwencje trigrafu procesowego. Są to trzyznakowe sekwencje, wszystkie zaczynające się od
??, które są zdefiniowane przez ISO C jako pojedyncze znaki. Na przykład, ??/ stojaki
dla \, więc '??/n' jest stałą znakową dla nowej linii. Domyślnie GCC ignoruje
trygrafy, ale w trybach zgodnych ze standardem konwertuje je. Zobacz -std dzięki -ansi
Opcje.

Dziewięć trygrafów i ich zamienniki to

Trigraf: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Zastąpienie: [ ] { } # \ ^ | ~

-remap
Włącz specjalny kod, aby obejść systemy plików, które dopuszczają tylko bardzo krótkie pliki
nazwy, takie jak MS-DOS.

--help
--cel-pomoc
Wypisuje tekst opisujący wszystkie opcje wiersza poleceń zamiast wstępnego przetwarzania czegokolwiek.

-v Tryb szczegółowy. Wydrukuj numer wersji GNU CPP na początku wykonania i
zgłoś ostateczną formę ścieżki dołączania.

-H Wydrukuj nazwę każdego używanego pliku nagłówkowego, oprócz innych normalnych czynności. Każdy
nazwa jest wcięta, aby pokazać, jak głęboko w #zawierać stos to jest. Prekompilowany nagłówek
pliki są również drukowane, nawet jeśli okaże się, że są nieprawidłowe; nieprawidłowy prekompilowany
plik nagłówkowy jest drukowany z ...x i ważny z ! ... .

-wersja
--wersja
Wydrukuj numer wersji GNU CPP. Za pomocą jednej kreski przejdź do wstępnego przetwarzania w normalny sposób.
Z dwoma myślnikami natychmiast wyjdź.

Przechodzący Opcje do die,en Assembler
Możesz przekazać opcje do asemblera.

-Wa,opcja
Przechodzić opcja jako opcja dla montera. Gdyby opcja zawiera przecinki, jest podzielona
na wiele opcji w przecinkach.

-Xassembler opcja
Przechodzić opcja jako opcja dla montera. Możesz użyć tego do dostarczenia specyficznego systemu
opcje asemblera, których GCC nie rozpoznaje.

Jeśli chcesz przekazać opcję, która wymaga argumentu, musisz użyć -Xassembler dwa razy,
raz dla opcji i raz dla argumentu.

Opcje dla Łączenie
Te opcje wchodzą w grę, gdy kompilator łączy pliki obiektowe w plik wykonywalny
plik wyjściowy. Nie mają znaczenia, jeśli kompilator nie wykonuje kroku linku.

nazwa-pliku-obiektu
Nazwa pliku, która nie kończy się specjalnym rozpoznawanym sufiksem, jest uważana za nazwę i
plik obiektowy lub biblioteka. (Pliki obiektowe są odróżniane od bibliotek przez linker
zgodnie z zawartością pliku.) Jeśli linkowanie jest wykonane, te pliki obiektowe są używane jako
dane wejściowe do konsolidatora.

-c
-S
-E Jeśli którakolwiek z tych opcji zostanie użyta, linker nie zostanie uruchomiony, a nazwy plików obiektów
nie powinny być używane jako argumenty.

-bezpiecznik-ld=bfd
Użyj bfd linker zamiast domyślnego linkera.

-bezpiecznik-ld=złoto
Użyj złoto linker zamiast domyślnego linkera.

-lbiblioteka
-l biblioteka
Przeszukaj bibliotekę o nazwie biblioteka podczas łączenia. (Druga alternatywa z
biblioteka jako osobny argument jest tylko dla zgodności z POSIX i nie jest zalecana.)

To ma znaczenie, gdzie w poleceniu napiszesz tę opcję; wyszukiwania linkera
i przetwarza biblioteki i pliki obiektowe w kolejności, w jakiej zostały określone. Zatem, foo.o
-lz bar.o przeszukuje bibliotekę z po pliku foo.o ale przedtem bar.o. Jeśli bar.o odnosi się do
działa w z, te funkcje mogą nie zostać załadowane.

Linker przeszukuje standardową listę katalogów dla biblioteki, która w rzeczywistości jest
plik o nazwie biblioteka.a. Następnie linker używa tego pliku tak, jakby został określony
dokładnie według nazwy.

Przeszukiwane katalogi obejmują kilka standardowych katalogów systemowych oraz wszystkie, które:
określić za pomocą -L.

Zwykle pliki znalezione w ten sposób są plikami bibliotecznymi --- plikami archiwalnymi, których członkowie są
pliki obiektowe. Linker obsługuje plik archiwum, skanując go w poszukiwaniu członków
które definiują symbole, które do tej pory były przywoływane, ale nie zostały zdefiniowane. Ale jeśli
znaleziony plik to zwykły plik obiektowy, połączony w zwykły sposób. ten
jedyna różnica między używaniem a -l opcja i określenie nazwy pliku jest takie -l
otacza biblioteka z lib dzięki .a i przeszukuje kilka katalogów.

-lobjc
Potrzebujesz tego specjalnego przypadku -l opcja, aby połączyć Cel-C lub
Program Cel-C++.

-nostartfiles
Podczas łączenia nie używaj standardowych plików startowych systemu. System standardowy
biblioteki są używane normalnie, chyba że -nostdlib or -nodefaultlibs Jest używane.

-nodefaultlibs
Podczas łączenia nie należy używać standardowych bibliotek systemowych. Tylko biblioteki, które określisz
są przekazywane do konsolidatora, a opcje określające powiązanie bibliotek systemowych, takie jak
as -static-libgcc or -shared-libgcc, są ignorowane. Używane są standardowe pliki startowe
normalnie, chyba że -nostartfiles Jest używane.

Kompilator może generować wywołania „memcmp”, „memset”, „memcpy” i „memmove”. Te
wpisy są zwykle rozwiązywane przez wpisy w libc. Te punkty wejścia powinny być:
dostarczane przez inny mechanizm, gdy ta opcja jest określona.

-nostdlib
Podczas łączenia nie należy używać standardowych plików ani bibliotek startowych systemu. Brak uruchamiania
pliki i tylko określone biblioteki są przekazywane do konsolidatora, a opcje
określenie powiązania bibliotek systemowych, takich jak -static-libgcc or -shared-libgcc,
są ignorowane.

Kompilator może generować wywołania „memcmp”, „memset”, „memcpy” i „memmove”. Te
wpisy są zwykle rozwiązywane przez wpisy w libc. Te punkty wejścia powinny być:
dostarczane przez inny mechanizm, gdy ta opcja jest określona.

Jedna ze standardowych bibliotek ominięta -nostdlib dzięki -nodefaultlibs is libgcc.a, A
biblioteka podprogramów wewnętrznych, które GCC wykorzystuje do przezwyciężenia niedociągnięć poszczególnych
maszyny lub specjalne potrzeby dla niektórych języków.

W większości przypadków potrzebujesz libgcc.a nawet jeśli chcesz uniknąć innych standardowych bibliotek.
Innymi słowy, kiedy określisz -nostdlib or -nodefaultlibs powinieneś zwykle
sprecyzować -lgcc także. Gwarantuje to, że nie masz nierozwiązanych odwołań do
wewnętrzne podprogramy biblioteki GCC. (Przykładem takiego wewnętrznego podprogramu jest
"__main", używany do zapewnienia wywołania konstruktorów C++.)

-ciasto
Stwórz niezależną pozycję wykonywalną na celach, które ją wspierają. Za przewidywalne
wyniki, należy również określić ten sam zestaw opcji, który jest używany do kompilacji (-fpie,
-fPIElub podopcje modelu) po określeniu tej opcji konsolidatora.

-nie-pie
Nie twórz pliku wykonywalnego niezależnego od pozycji.

-rdynamic
Podaj flagę -eksport-dynamika do linkera ELF na celach, które go obsługują. Ten
nakazuje linkerowi dodać wszystkie symbole, nie tylko używane, do symbolu dynamicznego
Tabela. Ta opcja jest potrzebna w przypadku niektórych zastosowań „dlopen” lub w celu umożliwienia uzyskania
ślady wsteczne z programu.

-s Usuń całą tablicę symboli i informacje o relokacji z pliku wykonywalnego.

-statyczny
W systemach obsługujących dynamiczne łączenie uniemożliwia to łączenie z udostępnionym
biblioteki. W innych systemach ta opcja nie ma wpływu.

-wspólny
Utwórz wspólny obiekt, który można następnie połączyć z innymi obiektami w celu utworzenia
wykonywalny. Nie wszystkie systemy obsługują tę opcję. Aby uzyskać przewidywalne wyniki, musisz
określ również ten sam zestaw opcji, który jest używany do kompilacji (-fpic, -fPIC, lub model
podopcje) po określeniu tej opcji konsolidatora.[1]

-shared-libgcc
-static-libgcc
W systemach, które zapewniają libgcc jako biblioteka współdzielona opcje te wymuszają użycie
odpowiednio w wersji udostępnionej lub statycznej. Jeśli nie ma udostępnionej wersji libgcc był
zbudowane podczas konfigurowania kompilatora, opcje te nie działają.

Istnieje kilka sytuacji, w których aplikacja powinna korzystać z udostępnionego libgcc
zamiast wersji statycznej. Najczęstszym z nich jest sytuacja, gdy aplikacja
chce rzucać i łapać wyjątki w różnych bibliotekach współdzielonych. W tym wypadku,
każda z bibliotek jak i sama aplikacja powinna korzystać z udostępnionego libgcc.

Dlatego sterowniki G++ i GCJ automatycznie dodają -shared-libgcc kiedykolwiek budujesz
biblioteka współdzielona lub główny plik wykonywalny, ponieważ programy C++ i Java zazwyczaj używają
wyjątki, więc jest to właściwe rozwiązanie.

Jeśli zamiast tego użyjesz sterownika GCC do tworzenia bibliotek współdzielonych, może się okazać, że
nie zawsze są połączone z udostępnionym libgcc. Jeśli GCC znajdzie, w swojej konfiguracji
czas, że masz linker inny niż GNU lub linker GNU, który nie obsługuje opcji
--eh-frame-hdr, łączy udostępnioną wersję libgcc do bibliotek współdzielonych przez
domyślny. W przeciwnym razie wykorzystuje linker i optymalizuje linkowanie
z udostępnioną wersją libgcc, łącząc się ze statyczną wersją libgcc by
domyślny. Pozwala to na propagację wyjątków przez takie biblioteki współdzielone, bez
ponoszenie kosztów relokacji w czasie ładowania biblioteki.

Jeśli jednak biblioteka lub główny plik wykonywalny ma rzucać lub łapać wyjątki,
musi połączyć go za pomocą sterownika G++ lub GCJ, odpowiednio do języków używanych w
program lub za pomocą opcji -shared-libgcc, tak, że jest połączony z udostępnionym
libgcc.

-static-libasan
Podczas -fsanitize=adres opcja służy do łączenia programu, sterownika GCC
automatycznie łączy przeciwko libasan. Jeśli libasan jest dostępna jako biblioteka współdzielona i
die,en -statyczny opcja nie jest używana, to linki do udostępnionej wersji libasan.
Pandemia -static-libasan opcja kieruje sterownik GCC do linku libasan statycznie, bez
koniecznie łączenie innych bibliotek statycznie.

-static-libtsan
Podczas -fsanitize=wątek opcja służy do łączenia programu, sterownika GCC
automatycznie łączy przeciwko libtsana. Jeśli libtsana jest dostępna jako biblioteka współdzielona i
die,en -statyczny opcja nie jest używana, to linki do udostępnionej wersji libtsana.
Pandemia -static-libtsan opcja kieruje sterownik GCC do linku libtsana statycznie, bez
koniecznie łączenie innych bibliotek statycznie.

-static-liblsan
Podczas -fsanitize=wyciek opcja służy do łączenia programu, sterownika GCC
automatycznie łączy przeciwko Liblsan. Jeśli Liblsan jest dostępna jako biblioteka współdzielona i
die,en -statyczny opcja nie jest używana, to linki do udostępnionej wersji Liblsan.
Pandemia -static-liblsan opcja kieruje sterownik GCC do linku Liblsan statycznie, bez
koniecznie łączenie innych bibliotek statycznie.

-statyczna-libbsan
Podczas -fsanitize=nieokreślony opcja służy do łączenia programu, sterownika GCC
automatycznie łączy przeciwko libubana. Jeśli libubana jest dostępna jako biblioteka współdzielona,
oraz -statyczny opcja nie jest używana, to linki do udostępnionej wersji
libubana, -statyczna-libbsan opcja kieruje sterownik GCC do linku libubana
statycznie, bez konieczności statycznego łączenia innych bibliotek.

-static-libmpx
Podczas -f wskaźnik kontrolny miedza dzięki -mmpx opcje są używane do łączenia programu, GCC
sterownik automatycznie łączy się z libmpx. Jeśli libmpx jest dostępny jako udostępniony
biblioteka i -statyczny opcja nie jest używana, to te linki przeciwko udostępnionym
wersja libmpx, -static-libmpx opcja kieruje sterownik GCC do linku libmpx
statycznie, bez konieczności statycznego łączenia innych bibliotek.

-static-libmpxwrappers
Podczas -f wskaźnik kontrolny miedza dzięki -mmpx opcje są używane do łączenia programu bez
również używając -fno-chkp-use-wrappers, sterownik GCC automatycznie łączy się z
libmpxwrappers. Jeśli libmpxwrappers jest dostępna jako biblioteka współdzielona, ​​a -statyczny
opcja nie jest używana, to linki do udostępnionej wersji libmpxwrappers,
-static-libmpxwrappers opcja kieruje sterownik GCC do linku libmpxwrappers
statycznie, bez konieczności statycznego łączenia innych bibliotek.

-static-libstdc++
Podczas g ++ Program służy do łączenia programu w C++, zwykle łączy się automatycznie
przed libstdc++. Jeśli libstdc++ jest dostępna jako biblioteka współdzielona, ​​a -statyczny
opcja nie jest używana, to linki do udostępnionej wersji libstdc++, To jest
normalnie dobrze. Czasami jednak warto zamrozić wersję libstdc++
używane przez program bez przechodzenia do w pełni statycznego łącza. ten
-static-libstdc++ opcja kieruje g ++ sterownik do połączenia libstdc++ statycznie, bez
koniecznie łączenie innych bibliotek statycznie.

-symboliczny
Powiąż odniesienia do symboli globalnych podczas budowania obiektu współdzielonego. Ostrzegaj o wszelkich
nierozwiązane odniesienia (chyba że zostały nadpisane przez opcję edytora linków) -Xlinker -z
-Xlinker defs). Tylko kilka systemów obsługuje tę opcję.

-T scenariusz
Zastosowanie scenariusz jako skrypt linkera. Ta opcja jest obsługiwana przez większość systemów korzystających z
Konsolidator GNU. W przypadku niektórych celów, takich jak cele typu bare-board bez systemu operacyjnego,
die,en -T opcja może być wymagana podczas łączenia, aby uniknąć odniesień do niezdefiniowanych symboli.

-Xlinker opcja
Przechodzić opcja jako opcja do linkera. Możesz użyć tego do dostarczenia specyficznego systemu
opcje konsolidatora, których GCC nie rozpoznaje.

Jeśli chcesz przekazać opcję, która wymaga osobnego argumentu, musisz użyć -Xlinker
dwa razy, raz dla opcji i raz dla argumentu. Na przykład przekazać -zapewniać
definicje, musisz napisać -Xlinker -zapewniać -Xlinker definicje. To nie działa
napisać -Xlinker "-zapewniać definicje", ponieważ cały ciąg jest przekazywany jako a
pojedynczy argument, czego nie oczekuje linker.

Używając linkera GNU, zwykle wygodniej jest przekazać argumenty linkerowi
opcje za pomocą opcja=wartość składni niż jako oddzielne argumenty. Na przykład ty
może określić -Xlinker -Mapa=output.map zamiast -Xlinker -Mapa -Xlinker mapa.wyjściowa.
Inne konsolidatory mogą nie obsługiwać tej składni dla opcji wiersza polecenia.

-Wl,opcja
Przechodzić opcja jako opcja do linkera. Gdyby opcja zawiera przecinki, jest podzielony na
wiele opcji na przecinkach. Możesz użyć tej składni, aby przekazać argument do
opcja. Na przykład, -Wl,-Map,output.map przebiegi -Mapa mapa.wyjściowa do konsolidatora. Kiedy
używając linkera GNU, możesz również uzyskać ten sam efekt za pomocą -Wl,-Map=output.map.

UWAGA: W Ubuntu 8.10 i nowszych wersjach dla LDFLAGS opcja -Wl,-z,relro Jest używane.
Aby wyłączyć, użyj -Wl,-z,norelro.

-u symbol
Udawaj symbol symbol jest niezdefiniowane, aby wymusić łączenie modułów bibliotecznych w celu zdefiniowania
to. Możesz użyć -u wielokrotnie z różnymi symbolami, aby wymusić ładowanie
dodatkowe moduły biblioteczne.

-z keyword
-z jest przekazywany bezpośrednio do linkera wraz ze słowem kluczowym keyword. Zobacz sekcję
w dokumentacji twojego linkera dla dozwolonych wartości i ich znaczenia.

Opcje dla Informator Szukaj
Te opcje określają katalogi do wyszukiwania plików nagłówkowych, bibliotek i części
kompilatora:

-Ireż
Dodaj katalog reż do nagłówka listy katalogów do przeszukania nagłówka
pliki. Może to być użyte do zastąpienia systemowego pliku nagłówkowego, zastępując swój własny
wersji, ponieważ te katalogi są przeszukiwane przed systemowym plikiem nagłówkowym
katalogi. Nie należy jednak używać tej opcji do dodawania katalogów zawierających
systemowe pliki nagłówkowe dostarczone przez dostawcę (użyj -isystem za to). Jeśli używasz więcej niż jednego
-I opcja, katalogi są skanowane w kolejności od lewej do prawej; standardowy system
katalogi są po.

Jeśli standardowy system zawiera katalog lub katalog określony za pomocą -isystem, jest
również określone z -IThe -I opcja jest ignorowana. Katalog jest nadal przeszukiwany, ale
jako katalog systemowy w swojej normalnej pozycji w systemie zawiera łańcuch. To jest do
upewnij się, że procedura GCC naprawiania błędnych nagłówków systemowych i kolejność
Dyrektywy „include_next” nie zostały przypadkowo zmienione. Jeśli naprawdę potrzebujesz się zmienić
kolejność wyszukiwania katalogów systemowych, użyj -nostdinc i / lub -isystem Opcje.

-iplugindir=reż
Ustaw katalog do wyszukiwania wtyczek, które są przekazywane -fplugin=Nazwa zamiast
-fplugin=ścieżka/Nazwa.so. Ta opcja nie jest przeznaczona dla użytkownika, a jedynie
minął kierowca.

-Cytujęreż
Dodaj katalog reż do nagłówka listy katalogów do przeszukania nagłówka
pliki tylko dla przypadku "#include "plik""; nie są wyszukiwane dla „#include
<plik>", w przeciwnym razie tak jak -I.

-Lreż
Dodaj katalog reż do listy wyszukiwanych katalogów -l.

-Bprefiks
Ta opcja określa, gdzie znaleźć pliki wykonywalne, biblioteki, pliki dołączane i
pliki danych samego kompilatora.

Program sterownika kompilatora uruchamia jeden lub więcej podprogramów Cpp, cc1, as dzięki ld.
Próbuje prefiks jako przedrostek dla każdego programu, który próbuje uruchomić, zarówno z, jak i bez
maszyna/wersja/.

Dla każdego uruchomionego podprogramu sterownik kompilatora najpierw próbuje wykonać -B prefiks, jeśli istnieje.
Jeśli ta nazwa nie zostanie znaleziona lub jeśli -B nie określono, kierowca próbuje dwóch standardowych
przedrostki, /usr/lib/gcc/ dzięki /usr/local/lib/gcc/. Jeśli żaden z tych wyników nie daje
znaleziona nazwa pliku, niezmodyfikowana nazwa programu jest wyszukiwana za pomocą
katalogi określone w twoim PATH zmienna środowiskowa.

Kompilator sprawdza, czy ścieżka dostarczona przez -B odnosi się do katalogu, a jeśli
konieczne dodaje znak separatora katalogu na końcu ścieżki.

-B przedrostki, które skutecznie określają nazwy katalogów, dotyczą również bibliotek w
linker, ponieważ kompilator tłumaczy te opcje na -L opcje dla konsolidatora.
Dotyczą one również włączania plików do preprocesora, ponieważ kompilator tłumaczy
te opcje do -isystem opcje dla preprocesora. W tym przypadku kompilator
dołącza zawierać do prefiksu.

Plik wsparcia środowiska uruchomieniowego libgcc.a można również wyszukiwać za pomocą -B przedrostek, jeśli
potrzebne. Jeśli nie zostanie tam znaleziony, wypróbowane zostaną dwa standardowe przedrostki powyżej, i to
to wszystko. Plik jest pomijany w linku, jeśli nie zostanie znaleziony w ten sposób.

Inny sposób na określenie przedrostka, podobnie jak -B prefiksem jest używanie środowiska
zmienna GCC_EXEC_PREFIX.

Jako specjalny klude, jeśli ścieżka zapewniona przez -B is [reż/]etapN/, Gdzie N to liczba
w zakresie od 0 do 9, to jest zastępowane przez [katalog/]uwzględnij. Ma to pomóc w rozruchu
spinanie kompilatora.

-specyfikacje=filet
Drewna filet po tym, jak kompilator odczyta standard okular plik, w celu nadpisania
wartości domyślne, które gcc program sterownika używa podczas określania, które przełączniki mają zostać przekazane
do cc1, cc1plus, as, ld, itd. Więcej niż jeden -specyfikacje=filet można określić na
wiersza poleceń i są przetwarzane w kolejności od lewej do prawej.

--sysroot=reż
Zastosowanie reż jako logiczny katalog główny dla nagłówków i bibliotek. Na przykład, jeśli
kompilator zwykle szuka nagłówków w / Usr / include i biblioteki w / Usr / lib, To
zamiast tego wyszukuje dir/usr/include dzięki katalog/usr/lib.

Jeśli używasz zarówno tej opcji, jak i -isysroot opcja, to --główny system opcja
dotyczy bibliotek, ale -isysroot opcja dotyczy plików nagłówkowych.

Linker GNU (począwszy od wersji 2.16) ma do tego niezbędne wsparcie
opcja. Jeśli twój linker nie obsługuje tej opcji, aspekt pliku nagłówkowego z
--główny system nadal działa, ale aspekt biblioteczny nie.

--no-sysroot-suffix
W przypadku niektórych celów do katalogu głównego określonego za pomocą dodawany jest przyrostek --główny system,
w zależności od innych użytych opcji, tak że nagłówki mogą być na przykład znalezione w
dir/suffix/usr/include zamiast dir/usr/include. Ta opcja wyłącza dodawanie
takiego przyrostka.

-JA- Ta opcja została wycofana. Proszę użyć -Cytuję zamiast tego -I katalogi przed
die,en -JA- i usuń -JA- opcja. Wszelkie katalogi, które określisz za pomocą -I opcje przed
die,en -JA- opcje są przeszukiwane tylko dla przypadku "#include "plik""; oni nie są
szukano „#includeplik>".

Jeśli dodatkowe katalogi są określone za pomocą -I opcje po -JA- opcja, te
katalogi są przeszukiwane pod kątem wszystkich dyrektyw "#include". (Zwykle cała kolekcja -I
katalogi są używane w ten sposób).

Dodatkowo -JA- opcja blokuje użycie bieżącego katalogu (gdzie
z którego pochodzi bieżący plik wejściowy) jako pierwszy katalog wyszukiwania dla „#include ”plik"".
Nie ma możliwości zignorowania tego efektu -JA-. Z -I. możesz określić wyszukiwanie
katalog, który jest aktualny w momencie wywołania kompilatora. To nie jest dokładnie to
tak samo, jak domyślnie robi preprocesor, ale często jest to zadowalające.

-JA- nie zabrania używania standardowych katalogów systemowych dla plików nagłówkowych.
A zatem, -JA- dzięki -nostdinc są niezależne.

Określanie cel Maszyna dzięki kompilator Wersja
Zwykłym sposobem uruchomienia GCC jest uruchomienie pliku wykonywalnego o nazwie gcclub maszyna-gcc kiedy krzyż-
kompilacja, lub maszyna-gcc-wersja uruchomić inną wersję niż ta, która została zainstalowana
ostatni, ubiegły, zeszły.

sprzęt komputerowy modele dzięki Konfiguracje
Każdy typ maszyny docelowej może mieć własne opcje specjalne, zaczynając od -m, wybierać
wśród różnych modeli sprzętu lub konfiguracji --- na przykład 68010 vs 68020, pływające
koprocesor lub żaden. Pojedyncza zainstalowana wersja kompilatora może skompilować się dla dowolnego modelu
lub konfiguracji, zgodnie z określonymi opcjami.

Niektóre konfiguracje kompilatora obsługują również dodatkowe opcje specjalne, zwykle dla
kompatybilność z innymi kompilatorami na tej samej platformie.

AAArch64 Opcje

Te opcje są zdefiniowane dla implementacji AArch64:

-mabi=Nazwa
Wygeneruj kod dla określonego modelu danych. Dopuszczalne wartości to ip32 dla SysV-
jak model danych, w którym int, long int i wskaźnik są 32-bitowe i lp64 dla sysV-podobnego
model danych, w którym int jest 32-bitowy, ale long int i wskaźnik są 64-bitowe.

Wartość domyślna zależy od konkretnej konfiguracji docelowej. Zwróć uwagę, że LP64 i
Interfejsy ABI ILP32 nie są kompatybilne z łączami; musisz skompilować cały program z tym samym
ABI i link z kompatybilnym zestawem bibliotek.

-mbig-endian
Generuj kod big-endian. Jest to ustawienie domyślne, gdy GCC jest skonfigurowane dla
aarch64_be-*-* target.

-mgeneral-regs-only
Wygeneruj kod, który korzysta tylko z rejestrów ogólnych.

-mlittle-endian
Generuj kod little-endian. Jest to ustawienie domyślne, gdy GCC jest skonfigurowane dla
aarch64-*-* ale nie aarch64_be-*-* target.

-mcmodel=mały
Wygeneruj kod dla małego modelu kodu. Program i jego statycznie zdefiniowane symbole
muszą znajdować się w odległości 1 GB od siebie. Wskaźniki mają 64 bity. Programy mogą być statycznie
lub połączone dynamicznie. Model ten nie jest w pełni zaimplementowany i w większości traktowany jako
mały.

-mcmodel=mały
Generuj kod dla małego modelu kodu. Program i jego statycznie zdefiniowane
symbole muszą znajdować się w odległości nie większej niż 4 GB od siebie. Wskaźniki mają 64 bity. Programy mogą być
połączone statycznie lub dynamicznie. To jest domyślny model kodu.

-mcmodel=duży
Generuj kod dla dużego modelu kodu. Nie ma żadnych założeń dotyczących adresów i
rozmiary przekrojów. Wskaźniki mają 64 bity. Programy można łączyć tylko statycznie.

-mstrict-wyrównaj
Nie należy zakładać, że system obsługuje niewyrównane odwołania do pamięci.

-momit-leaf-frame-pointer
-mno-pomiń-liść-wskaźnik-ramki
Pomiń lub zachowaj wskaźnik ramki w funkcjach liści. Pierwsze zachowanie to
domyślna.

-mtls-dialekt=opis
Użyj deskryptorów TLS jako wątkowego lokalnego mechanizmu przechowywania dla dynamicznego dostępu do TLS
zmienne. To jest ustawienie domyślne.

-mtls-dialect=tradycyjny
Użyj tradycyjnego TLS jako wątkowego lokalnego mechanizmu przechowywania dla dynamicznego dostępu do TLS
zmiennych.

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Włącz lub wyłącz obejście problemu ARM Cortex-A53 o numerze 835769
polega na wstawieniu instrukcji NOP między instrukcje pamięci a 64-bitową liczbę całkowitą
pomnóż akumuluj instrukcje.

-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
Włącz lub wyłącz obejście problemu ARM Cortex-A53 o numerze 843419
Obejście erratum jest wykonywane w czasie połączenia i przekaże tylko odpowiednią flagę
do konsolidatora.

-marzec=Nazwa
Podaj nazwę architektury docelowej, opcjonalnie z jednym lub kilkoma przyrostkami
modyfikatory cech. Ta opcja ma postać -marzec=łuk{+[Nie]cecha}*, gdzie
tylko dopuszczalna wartość dla łuk is armv8-a. Dopuszczalne wartości dla cecha
udokumentowane w podsekcji poniżej.

Tam, gdzie określone są sprzeczne modyfikatory elementów, używany jest element znajdujący się najbardziej po prawej stronie.

GCC używa tej nazwy do określenia, jakie instrukcje może emitować podczas generowania
kod zespołu.

gdzie -Marsz jest określony bez żadnego z -mtune or -mcpu również określone,
kod jest dostrojony tak, aby działał dobrze na różnych procesorach docelowych implementujących
architektura docelowa.

-mtune=Nazwa
Podaj nazwę procesora docelowego, dla którego GCC ma dostroić wydajność
kod. Dopuszczalne wartości dla tej opcji to: ogólny, kora-a53, kora-a57,
kora-a72, exynos-m1, grzmot, xgen1.

Dodatkowo ta opcja może określać, że GCC powinno dostroić wydajność kodu
dla systemu big.LITTLE. Dopuszczalne wartości dla tej opcji to:
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

Gdzie żaden z -mtune=, -mcpu= or -marzec= są określone, kod jest dostrojony do działania
dobrze w wielu procesorach docelowych.

Ta opcja nie może być uzupełniona przez modyfikatory elementów.

-mcpu=Nazwa
Podaj nazwę procesora docelowego, opcjonalnie z dodatkiem jednej lub więcej funkcji
modyfikatory. Ta opcja ma postać -mcpu=cpu{+[Nie]cecha}*, gdzie dopuszczalne
wartości dla cpu są takie same jak te dostępne dla -mtune.

Dopuszczalne wartości dla cecha są udokumentowane w podsekcji poniżej.

Tam, gdzie określone są sprzeczne modyfikatory elementów, używany jest element znajdujący się najbardziej po prawej stronie.

GCC używa tej nazwy do określenia, jakie instrukcje może emitować podczas generowania
kod asemblera (jak by -Marsz) i określić procesor docelowy, dla którego należy
dostroić się do występu (jak gdyby -mtune). Gdzie ta opcja jest używana w połączeniu z
-Marsz or -mtune, te opcje mają pierwszeństwo przed odpowiednią częścią tego
opcja.

-Marsz dzięki -mcpu Modyfikatory funkcji

Modyfikatory funkcji używane z -Marsz dzięki -mcpu może być jednym z następujących:

Crc Włącz rozszerzenie CRC.

Crypto
Włącz rozszerzenie Crypto. Oznacza to, że zaawansowana karta SIMD jest włączona.

fp Włącz instrukcje zmiennoprzecinkowe.

simd
Włącz zaawansowane instrukcje SIMD. Oznacza to, że instrukcje zmiennoprzecinkowe są
włączony. Jest to wartość domyślna dla wszystkich aktualnych możliwych wartości opcji -Marsz dzięki
-mcpu=.

Adapteva Święto Trzech Króli Opcje

Te -m opcje są zdefiniowane dla Adapteva Epiphany:

-mhalf-reg-plik
Nie przydzielaj żadnego rejestru z zakresu "r32"..."r63". To pozwala na działanie kodu
warianty sprzętowe bez tych rejestrów.

-mprefer-short-insn-regs
Preferencyjnie przydzielaj rejestry, które umożliwiają generowanie krótkich instrukcji. To może
powoduje zwiększenie liczby instrukcji, więc może to zmniejszyć lub zwiększyć ogólną ilość
rozmiar kodu.

-koszt-oddzialu=num
Ustaw koszt oddziałów na mniej więcej num „proste” instrukcje. Ten koszt to tylko
heurystyczne i nie gwarantuje uzyskania spójnych wyników w różnych wydaniach.

-mcmove
Włącz generowanie ruchów warunkowych.

-mnops=num
Wydzielać num NOP przed każdą inną wygenerowaną instrukcją.

-mno-miękkie-cmpsf
W przypadku porównań zmiennoprzecinkowych o pojedynczej precyzji wyemituj instrukcję „fsub” i przetestuj
flagi. Jest to szybsze niż porównanie oprogramowania, ale może dać nieprawidłowe wyniki
w obecności NaN lub gdy porównuje się dwie różne małe liczby tak, że
ich różnica jest obliczana jako zero. Wartość domyślna to -msoft-cmpsf, Który używa
wolniejsze, ale zgodne z IEEE porównania oprogramowania.

-mstack-przesunięcie=num
Ustaw przesunięcie między szczytem stosu a wskaźnikiem stosu. Np. wartość 8
oznacza, że ​​osiem bajtów z zakresu „sp+0...sp+7” może być używanych przez funkcje liści
bez alokacji stosu. Wartości inne niż 8 or 16 są nieprzetestowane i mało prawdopodobne
Praca. Zauważ również, że ta opcja zmienia ABI; kompilowanie programu z
inne przesunięcie stosu niż biblioteki, z którymi zostały skompilowane, generalnie nie
Praca. Ta opcja może być przydatna, jeśli chcesz ocenić, czy inne przesunięcie stosu
dałoby ci lepszy kod, ale aby faktycznie użyć innego przesunięcia stosu do kompilacji
działających programów, zaleca się skonfigurowanie toolchaina z odpowiednim
--with-przesunięcie-stosu=num opcja.

-mno-okrągła-najbliższa
Niech planista założy, że tryb zaokrąglania został ustawiony na obcinanie. ten
wartość domyślna to -mround-najbliższy.

-mlong-rozmowy
Jeśli atrybut nie określa inaczej, załóżmy, że wszystkie wywołania mogą wykraczać poza
zakres przesunięcia instrukcji "b" / "bl", a zatem załaduj adres funkcji
do rejestru przed wykonaniem (inaczej bezpośredniego) połączenia. To jest ustawienie domyślne.

-mshort-połączenia
Jeśli atrybut nie określa inaczej, załóż, że wszystkie połączenia bezpośrednie znajdują się w zakresie
instrukcji "b" / "bl", więc użyj tych instrukcji dla połączeń bezpośrednich. ten
wartość domyślna to -mlong-rozmowy.

-msmall16
Załóżmy, że adresy mogą być ładowane jako 16-bitowe wartości bez znaku. Nie dotyczy to
adresy funkcji, dla których -mlong-rozmowy semantyki.

-tryb-mfp=tryb
Ustaw dominujący tryb jednostki zmiennoprzecinkowej. To determinuje pływające-
tryb punktowy, który jest dostarczany i oczekiwany w momencie wywołania funkcji i powrotu. Zrobienie
ten tryb pasuje do trybu, którego głównie potrzebujesz na początku funkcji, może sprawić, że twój
programy mniejsze i szybsze, unikając niepotrzebnych przełączeń trybów.

tryb można ustawić na jedną z następujących wartości:

dzwoniący
Dowolny tryb przy wejściu do funkcji jest ważny i zachowany lub przywrócony, gdy funkcja
zwraca, a kiedy wywołuje inne funkcje. Ten tryb jest przydatny do kompilacji
biblioteki lub inne jednostki kompilacji, które możesz chcieć włączyć do innych
programy z różnymi dominującymi trybami FPU i wygodą możliwości
użycie jednego pliku obiektowego przeważa nad rozmiarem i prędkością dla dowolnego dodatkowego trybu
zmiana, która może być potrzebna, w porównaniu z tym, co byłoby potrzebne w przypadku więcej
specyficzny wybór dominującego trybu FPU.

ścięty
Jest to tryb używany do obliczeń zmiennoprzecinkowych z obcinaniem (np. round
w kierunku zera) tryb zaokrąglania. Obejmuje to konwersję z liczby zmiennoprzecinkowej na
liczba całkowita.

okrągła-najbliższa
Jest to tryb używany do obliczeń zmiennoprzecinkowych z zaokrągleniem do najbliższego lub
równomierny tryb zaokrąglania.

int Jest to tryb używany do wykonywania obliczeń liczb całkowitych w FPU, np. integer
pomnóż lub liczba całkowita pomnóż i akumuluj.

Wartość domyślna to -tryb-mfp=rozmówca

-mnosplit-lohi
-mno-postinc
-mno-postmodyfikacja
Ulepszenia generowania kodu, które wyłączają odpowiednio podział obciążeń 32-bitowych,
generowanie adresów postinkrementacyjnych i generowanie adresów postmodyfikacyjnych. ten
wartości domyślne to msplit-lohi, -mpost-inc, -mpost-modyfikacja.

-mnovect-podwójny
Zmień preferowany tryb SIMD na SIMmode. Wartość domyślna to -mvect-podwójny, Który używa
DImode jako preferowany tryb SIMD.

-max-vect-align=num
Maksymalne wyrównanie dla typów trybu wektorowego SIMD. num może wynosić 4 lub 8. Wartość domyślna to
8. Zauważ, że jest to zmiana ABI, mimo że wiele interfejsów funkcji bibliotecznych jest
nie ma wpływu, jeśli nie używają trybów wektorowych SIMD w miejscach, które wpływają na rozmiar i/lub
dostosowanie odpowiednich typów.

-msplit-vecmove-wcześnie
Podział wektora przesuwa się na pojedyncze ruchy słowa przed ponownym załadowaniem. Teoretycznie może to dać
lepsza alokacja rejestrów, ale jak dotąd wydaje się, że jest na odwrót.

-m1reg-reg
Określ rejestr do przechowywania stałej -1, co powoduje, że ładowanie jest niewielkie
stałe i niektóre maski bitowe szybciej. Dopuszczalne wartości dla regr43 dzięki r63,
które określają użycie tego rejestru jako rejestru stałego, oraz Żaden, co oznacza, że ​​nie
służy do tego rejestr. Wartość domyślna to -m1reg-none.

ARC Opcje

Następujące opcje sterują wariantem architektury, dla którego kompilowany jest kod:

-mbarrel-shifter
Generuj instrukcje obsługiwane przez dźwignię zmiany biegów. To jest ustawienie domyślne, chyba że
-mcpu=ARC601 obowiązuje.

-mcpu=cpu
Ustaw typ architektury, użycie rejestru i parametry planowania instrukcji dla cpu.
Dostępne są również opcje aliasów skrótów zapewniające zgodność z poprzednimi wersjami oraz
wygoda. Obsługiwane wartości dla cpu

ARC600
Skompiluj dla ARC600. Skróty: -mA6, -mARC600.

ARC601
Skompiluj dla ARC601. Alias: -mARC601.

ARC700
Skompiluj dla ARC700. Skróty: -mA7, -mARC700. Jest to ustawienie domyślne po skonfigurowaniu
z --with-cpu=arc700.

-mdpfp
-mdpfp-kompaktowy
FPX: Generuj instrukcje FPX o podwójnej precyzji, dostosowane do kompaktowej implementacji.

-mdpfp-szybki
FPX: Generuj instrukcje FPX o podwójnej precyzji, dostosowane do szybkiej implementacji.

-mno-dpfp-lrsr
Wyłącz instrukcje LR i SR przed używaniem dodatkowych rejestrów rozszerzeń FPX.

-śr
Generuj rozszerzone instrukcje arytmetyczne. Obecnie tylko "divaw", "add", "subs",
i "sat16" są obsługiwane. To jest zawsze włączone dla -mcpu=ARC700.

-mno-mpy
Nie generuj instrukcji mpy dla ARC700.

-mmul32x16
Generuj 32x16-bitowe instrukcje mnożenia i mac.

-mmul64
Generuj instrukcje mul64 i mulu64. Ważne tylko dla -mcpu=ARC600.

-mnorma
Wygeneruj instrukcję normy. To jest domyślne, jeśli -mcpu=ARC700 obowiązuje.

-mspfp
-mspfp-kompaktowy
FPX: generuj instrukcje FPX o pojedynczej precyzji, dostosowane do kompaktowej implementacji.

-mspfp-szybki
FPX: generuj instrukcje FPX o pojedynczej precyzji, dostosowane do szybkiej implementacji.

-msimd
Włącz generowanie instrukcji ARC SIMD za pomocą wbudowanych funkcji docelowych. Tylko ważne
dla -mcpu=ARC700.

-msoft-float
Ta opcja została zignorowana; jest dostarczany wyłącznie w celu zapewnienia kompatybilności. Oprogramowanie
kod zmiennoprzecinkowy jest emitowany domyślnie i to ustawienie domyślne może zostać nadpisane przez FPX
opcje; mspfp, mspfp-kompaktowylub mspfp-szybki dla pojedynczej precyzji i mdpfp, mdpfp-
kompaktowylub mdpfp-szybki dla podwójnej precyzji.

-mswap
Generuj instrukcje wymiany.

Następujące opcje są przekazywane do asemblera, a także definiują preprocesor
symbole makr.

-mdsp-pakiet
Przekazywane do asemblera, aby włączyć rozszerzenia DSP Pack A. Ustawia również
symbol preprocesora „__Xdsp_packa”.

-mdvbf
Przekazywane monterowi, aby umożliwić rozszerzenie podwójnego motyla viterbi. Także
ustawia symbol preprocesora "__Xdvbf".

-mlock
Przekazywane do asemblera, aby włączyć rozszerzenie Locked Load/Store Conditional.
Ustawia również symbol preprocesora „__Xlock”.

-mmac-d16
Przekazany monterowi. Ustawia również symbol preprocesora „__Xxmac_d16”.

-mmac-24
Przekazany monterowi. Ustawia również symbol preprocesora „__Xxmac_24”.

-mrtsc
Przekazywane do asemblera, aby włączyć 64-bitowe rozszerzenie Time-Stamp Counter
instrukcja. Ustawia również symbol preprocesora „__Xrtsc”.

-mswape
Przekazywana do asemblera, aby włączyć instrukcję rozszerzenia kolejności kolejności bajtów wymiany.
Ustawia również symbol preprocesora „__Xswape”.

-telefonia
Przekazywane do asemblera, aby umożliwić instrukcje dwu- i jedno-argumentowe dla
telefonia. Ustawia również symbol preprocesora „__Xtelephony”.

-mxy
Przekazywane do asemblera, aby umożliwić rozszerzenie pamięci XY. Ustawia również
symbol preprocesora „__Xxy”.

Następujące opcje kontrolują sposób opisywania kodu zespołu:

-niewielkość
Opisz instrukcje asemblera szacunkowymi adresami.

-mannotate-wyrównaj
Wyjaśnij, jakie względy dotyczące dostosowania prowadzą do decyzji o wydaniu instrukcji
krótki lub długi.

Następujące opcje są przekazywane do konsolidatora:

-marclinux
Przekazywane do konsolidatora, aby określić użycie emulacji "arclinux". Ta opcja
jest domyślnie włączone w łańcuchach narzędzi zbudowanych dla "arc-linux-uclibc" i
"arceb-linux-uclibc", gdy nie jest wymagane profilowanie.

-marclinux_prof
Przekazywane do konsolidatora, aby określić użycie emulacji "arclinux_prof". Ten
opcja jest domyślnie włączona w łańcuchach narzędzi zbudowanych dla "arc-linux-uclibc" i
"arceb-linux-uclibc" cele, gdy wymagane jest profilowanie.

Następujące opcje sterują semantyką generowanego kodu:

-mepilog-cfi
Włącz generowanie informacji o ramkach wywołań dla epilogów.

-mno-epilog-cfi
Wyłącz generowanie informacji o ramkach wywołań dla epilogów.

-mlong-rozmowy
Generuj połączenia insns jako rejestrację połączeń pośrednich, zapewniając w ten sposób dostęp do pełnego
32-bitowy zakres adresów.

-mmedium-połączenia
Nie używaj mniej niż 25-bitowego zakresu adresowania dla połączeń, który jest dostępnym przesunięciem
dla bezwarunkowej instrukcji branch-and-link. Warunkowe wykonanie funkcji
wywołania są tłumione, aby umożliwić korzystanie z zakresu 25-bitowego zamiast 21-bitowego
z warunkowym rozgałęzieniem i dowiązaniem. Jest to ustawienie domyślne dla łańcuchów narzędzi zbudowanych dla
Cele „arc-linux-uclibc” i „arceb-linux-uclibc”.

-mno-sdata
Nie generuj odwołań sdata. Jest to ustawienie domyślne dla łańcuchów narzędzi zbudowanych dla
Cele „arc-linux-uclibc” i „arceb-linux-uclibc”.

-mucb-mcount
Instrument z wywołaniami mcount stosowany w kodzie UCB. Czyli liczę w callee,
nie dzwoniący. Domyślnie oprzyrządowanie ARC liczy się w dzwoniącym.

-mvolatile-cache
Używaj zwykle dostępów do pamięci podręcznej w przypadku odwołań niestabilnych. To jest ustawienie domyślne.

-mno-ulotna-cache
Włącz pomijanie pamięci podręcznej dla nietrwałych odwołań.

Następujące opcje pozwalają precyzyjnie dostroić generowanie kodu:

-malign-call
Wykonaj optymalizacje wyrównania dla instrukcji wywołania.

-mauto-modyfikacja-reg
Włącz użycie modyfikacji pre/post z przesunięciem rejestru.

-mbbit-wizjer
Włącz wizjer bbit2.

-mno-brcc
Ta opcja wyłącza przepustkę specyficzną dla celu w arc_reorg wygenerować "BRcc"
instrukcje. Nie ma to wpływu na generację "BRcc" sterowaną przez przejście sumatora.

-mcase-vector-pcrel
Użyj tabel przypadków przełącznika względem komputera — umożliwia to skrócenie tabeli przypadków. To jest
domyślny dla -Os.

-mcompact-casesi
Włącz kompaktowy wzorzec casei. To jest domyślne dla -Os.

-mno-cond-exec
Wyłącz określone przejście ARCompact, aby wygenerować instrukcje wykonania warunkowego. Należny
opóźnić planowanie slotów i interakcje między liczbami operandów, rozmiarami literalnymi,
długości instrukcji i wsparcie dla wykonania warunkowego, niezależne od celu
często brakuje pass do generowania wykonania warunkowego, więc port ARC zachował
specjalne przejście, które próbuje znaleźć bardziej warunkowe generowanie egzekucji
możliwości po alokacji rejestru, skróceniu oddziałów i zaplanowaniu opóźnień
zostało zrobione. To przejście ogólnie, ale nie zawsze, poprawia wydajność i kod
rozmiar, kosztem dodatkowego czasu kompilacji, dlatego istnieje możliwość zmiany
to wyłączyć. Jeśli masz problem z instrukcjami wywołania przekraczającymi ich dopuszczalny offset
zakres, ponieważ są warunkowe, powinieneś rozważyć użycie -mmedium-połączenia
zamiast.

-marly-cbranchsi
Włącz użycie wzorca cbranchsi przed ponownym załadowaniem.

-mexpand-adddi
Rozwiń „adddi3” i „subdi3” w czasie generowania rtl do „add.f”, „adc” itp.

-mindexed-loads
Włącz korzystanie z obciążeń indeksowanych. Może to być problematyczne, ponieważ wtedy niektóre optymalizatory
załóżmy, że istnieją indeksowane sklepy, co nie jest prawdą.

-mlra
Włącz alokację rejestru lokalnego. To wciąż jest eksperymentalne dla ARC, więc domyślnie
kompilator używa standardowego przeładowania (tj -mno-lra).

-mlra-priorytet-brak
Nie podawaj żadnego priorytetu dla rejestrów docelowych.

-mlra-priorytet-kompaktowy
Wskaż priorytet rejestru docelowego dla r0..r3 / r12..r15.

-mlra-priorytet-niekompaktowy
Zmniejsz priorytet rejestru docelowego dla r0..r3 / r12..r15.

-mno-milikod
Podczas optymalizacji pod kątem rozmiaru (przy użyciu -Os), prologi i epilogi, które mają ratować lub
przywracanie dużej liczby rejestrów jest często skracane za pomocą wezwania specjalnego
funkcja w libgcc; jest to określane jako milikod połączenie. Ponieważ te połączenia mogą stanowić
problemy z wydajnością i/lub powodować problemy z łączeniem przy łączeniu w niestandardowy sposób,
ta opcja służy do wyłączania generowania wywołań milikodowych.

-Mmixed-kod
Dostosuj alokację rejestrów, aby pomóc w generowaniu instrukcji 16-bitowych. To na ogół ma
efekt zmniejszenia średniej wielkości instrukcji przy jednoczesnym zwiększeniu instrukcji
liczyć.

-mq-klasa
Włącz alternatywy instrukcji 'q'. To jest domyślne dla -Os.

-mRcq
Włącz obsługę ograniczeń Rcq — większość krótkich generacji kodu zależy od tego. To jest
domyślny.

-mRcw
Włącz obsługę ograniczeń Rcw — od tego głównie zależy ccfsm condexec. To jest
domyślna.

-mrozmiar-poziom=poziom
Precyzyjna optymalizacja rozmiaru w odniesieniu do długości instrukcji i wyrównania. ten
uznane wartości dla poziom należą:

0 Brak optymalizacji rozmiaru. Ten poziom jest przestarzały i traktowany jak 1.

1 Krótkie instrukcje są stosowane oportunistycznie.

2 Ponadto wyrównanie pętli i kodu po usunięciu barier.

3 Ponadto porzucono opcjonalne wyrównanie danych, a opcja Os jest włączony.

To domyślnie 3 gdy -Os obowiązuje. W przeciwnym razie zachowanie, gdy tak nie jest
zestaw jest odpowiednikiem poziomu 1.

-mtune=cpu
Ustaw parametry planowania instrukcji dla cpu, zastępując wszelkie sugerowane przez -mcpu=.

Obsługiwane wartości dla cpu

ARC600
Dostrój do procesora ARC600.

ARC601
Dostrój do procesora ARC601.

ARC700
Dostrój do procesora ARC700 ze standardowym blokiem mnożnika.

ARC700-xmac
Dostrój do procesora ARC700 z blokiem XMAC.

ARC725D
Dostrój do procesora ARC725D.

ARC750D
Dostrój do procesora ARC750D.

-multcost=num
Koszt do przyjęcia dla instrukcji mnożenia, z 4 jest równy normalnej instrukcji.

-munalign-prob-threshold=prawdopodobieństwo
Ustaw próg prawdopodobieństwa dla rozgałęzień. Podczas strojenia ARC700 dzięki
optymalizacja pod kątem prędkości, najlepiej emitowane są gałęzie bez wypełnionego slotu opóźnienia
niewyrównane i długie, chyba że profilowanie wskazuje, że prawdopodobieństwo
być brane jest poniżej prawdopodobieństwo. Wartość domyślna to (REG_BR_PROB_BASE/2), czyli 5000.

Poniższe opcje zostały zachowane w celu zapewnienia zgodności z poprzednimi wersjami, ale są teraz przestarzałe
i zostanie usunięty w przyszłej wersji:

-margonauta
Przestarzałe FPX.

-mbig-endian
-EB Skompiluj kod dla celów big endian. Korzystanie z tych opcji jest teraz przestarzałe. Użytkownicy
chcąc kod big-endian, powinien użyć celów „arceb-elf32” i „arceb-linux-uclibc”
podczas budowania łańcucha narzędzi, dla którego big-endian jest wartością domyślną.

-mlittle-endian
-EL Skompiluj kod dla celów little endian. Korzystanie z tych opcji jest teraz przestarzałe.
Użytkownicy chcący uzyskać kod little-endian powinni używać „arc-elf32” i „arc-linux-uclibc”
cele podczas budowania łańcucha narzędzi, dla którego little-endian jest wartością domyślną.

-mbarrel_shifter
Zastąpione przez -mbarrel-shifter.

-mdpfp_compact
Zastąpione przez -mdpfp-kompaktowy.

-mdpfp_szybko
Zastąpione przez -mdpfp-szybki.

-mdsp_packa
Zastąpione przez -mdsp-pakiet.

-mEA
Zastąpione przez -śr.

-mmac_24
Zastąpione przez -mmac-24.

-mmac_d16
Zastąpione przez -mmac-d16.

-mspfp_compact
Zastąpione przez -mspfp-kompaktowy.

-mspfp_szybko
Zastąpione przez -mspfp-szybki.

-mtune=cpu
Wartości Arc600, Arc601, Arc700 dzięki arc700-xmac dla cpu są zastąpione przez ARC600, ARC601,
ARC700 dzięki ARC700-xmac odpowiednio

-koszt wielokrotny=num
Zastąpione przez -koszt wielokrotności.

ARM Opcje

Te -m opcje są zdefiniowane dla portu ARM:

-mabi=Nazwa
Wygeneruj kod dla określonego ABI. Dopuszczalne wartości to: apcs-gnu, wszt., aapcs,
aapcs-linux dzięki iwmmxt.

-mapcs-rama
Wygeneruj ramkę stosu zgodną ze standardem wywoływania procedur ARM dla wszystkich
funkcji, nawet jeśli nie jest to bezwzględnie konieczne do prawidłowego wykonania kodu.
Określanie -fomit-frame-pointer ta opcja powoduje, że ramki stosu nie będą
generowane dla funkcji liścia. Wartość domyślna to -mno-apcs-rama. Ta opcja to
przestarzałe.

-maszt
To jest synonim słowa -mapcs-rama i jest przestarzały.

-mkciuk-współpraca
Wygeneruj kod obsługujący wywoływanie między zestawami instrukcji ARM i Thumb.
Bez tej opcji, w architekturach wcześniejszych niż v5, dwa zestawy instrukcji nie mogą być:
niezawodnie używane w jednym programie. Wartość domyślna to -mno-kciuk-interwork, ponieważ nieznacznie
większy kod jest generowany, gdy -mkciuk-współpraca jest specyficzne. W konfiguracjach AAPCS
ta opcja jest bez znaczenia.

-mno-sched-prolog
Zapobiegaj zmianie kolejności instrukcji w prologu funkcji lub łączeniu
te instrukcje z instrukcjami w treści funkcji. Oznacza to, że wszystkie
funkcje zaczynają się od rozpoznawalnego zestawu instrukcji (a właściwie jednej z wyboru)
z małego zestawu prologów różnych funkcji), a informacje te można wykorzystać do:
zlokalizuj początek funkcji wewnątrz wykonywalnego fragmentu kodu. Wartość domyślna to
-msched-prolog.

-mfloat-abi=Nazwa
Określa, który zmiennoprzecinkowy ABI ma być używany. Dopuszczalne wartości to: miękki, softfp dzięki
ciężko.

Określanie miękki powoduje, że GCC generuje dane wyjściowe zawierające wywołania biblioteki dla zmiennoprzecinkowych
operacje punktowe. softfp umożliwia generowanie kodu za pomocą sprzętowej liczby zmiennoprzecinkowej
instrukcji, ale nadal używa konwencji wywoływania soft-float. ciężko pozwala
generowanie instrukcji zmiennoprzecinkowych i używa konwencji wywoływania specyficznych dla FPU.

Wartość domyślna zależy od konkretnej konfiguracji docelowej. Zwróć uwagę, że twardy pływak
i soft-float ABI nie są kompatybilne z łączami; musisz skompilować cały program za pomocą
ten sam ABI i łączy się z kompatybilnym zestawem bibliotek.

-mlittle-endian
Wygeneruj kod dla procesora działającego w trybie little-endian. To jest domyślne dla
wszystkie standardowe konfiguracje.

-mbig-endian
Generuj kod dla procesora działającego w trybie big-endian; domyślnie kompilacja
kod dla procesora little-endian.

-marzec=Nazwa
Określa nazwę docelowej architektury ARM. GCC używa tej nazwy do
określić, jaki rodzaj instrukcji może emitować podczas generowania kodu asemblera. Ten
opcja może być używana w połączeniu z lub zamiast -mcpu= opcja. Dopuszczalny
imiona to: ramięv2, armv2a, ramięv3, ramięv3m, ramięv4, armv4t, ramięv5, armv5t, armv5e,
armv5te, ramięv6, armv6j, armv6t2, armv6z, armv6zk, ramięv6-m, ramięv7, armv7-a, armv7-r,
ramięv7-m, armv7e-m, armv7ve, armv8-a, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.

-marzec=armv7ve to architektura armv7-a z rozszerzeniami wirtualizacji.

-marzec=armv8-a+crc umożliwia generowanie kodu dla architektury ARMv8-A wraz z
opcjonalne rozszerzenia CRC32.

-marzec=rodzimy powoduje, że kompilator automatycznie wykrywa architekturę kompilacji
komputer. Obecnie ta funkcja jest obsługiwana tylko w systemie GNU/Linux i nie we wszystkich
architektury są rozpoznawane. Jeśli automatyczne wykrywanie nie powiedzie się, opcja nie ma
efekt.

-mtune=Nazwa
Ta opcja określa nazwę docelowego procesora ARM, dla którego GCC ma się dostroić
wydajność kodu. W przypadku niektórych implementacji ARM może być lepsza wydajność
uzyskane przy użyciu tej opcji. Dopuszczalne nazwy to: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, ramię7m, ramię7d, ramię7dm, ramię7di, ramię7dmi, arm70,
arm700, ramię700i, arm710, ramię710c, arm7100, arm720, arm7500, ramię7500fe, ramię7tdmi,
ramię7tdmi-s, ramię710t, ramię720t, ramię740t, silne ramie, siłacz110, siłacz1100,
siłacz1110, arm8, arm810, arm9, ramię9e, arm920, ramię920t, ramię922t, ramię946e-s,
ramię966e-s, ramię968e-s, ramię926ej-s, ramię940t, ramię9tdmi, ramię10tdmi, ramię1020t, ramię1026ej-s,
ramię10e, ramię1020e, ramię1022e, ramię1136j-s, ramię1136jf-s, mpcore, mpcorenovfp, ramię1156t2-s,
ramię1156t2f-s, ramię1176jz-s, ramię1176jzf-s, kora-a5, kora-a7, kora-a8, kora-a9,
kora-a12, kora-a15, kora-a53, kora-a57, kora-a72, kora-r4, kora-r4f,
kora-r5, kora-r7, Cortex-m7, Cortex-m4, Cortex-m3, Cortex-m1, Cortex-m0,
cortex-m0plus, cortex-m1.small-multiply, cortex-m0.small-multiply,
cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xskala, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgen1.

Dodatkowo ta opcja może określać, że GCC powinno dostroić wydajność kodu
dla systemu big.LITTLE. Dopuszczalne nazwy to: cortex-a15.cortex-a7,
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

-mtune=ogólny-łuk określa, że ​​GCC powinno dostroić wydajność do mieszanki
procesory w architekturze łuk. Celem jest wygenerowanie kodu, który działa dobrze na
obecnie najpopularniejsze procesory, balansowanie pomiędzy optymalizacjami, które przynoszą korzyści niektórym
Procesory w zakresie i unikanie pułapek wydajnościowych innych procesorów. Efekty czegoś
ta opcja może ulec zmianie w przyszłych wersjach GCC w miarę pojawiania się i znikania modeli procesorów.

-mtune=natywny powoduje, że kompilator automatycznie wykrywa procesor komputera kompilacji. Na
obecnie ta funkcja jest obsługiwana tylko w systemie GNU/Linux i nie wszystkie architektury są
rozpoznane. Jeśli automatyczne wykrywanie nie powiedzie się, opcja nie ma żadnego efektu.

-mcpu=Nazwa
Określa nazwę docelowego procesora ARM. GCC używa tej nazwy do wyprowadzenia
nazwa docelowej architektury ARM (jakby określona przez -Marsz) i procesor ARM
typ, dla którego należy dostroić wydajność (jak określono przez -mtune). Gdzie ta opcja
jest używany w połączeniu z -Marsz or -mtune, te opcje mają pierwszeństwo przed
odpowiednią część tej opcji.

Dopuszczalne nazwy dla tej opcji są takie same jak dla -mtune.

-mcpu=ogólny-łuk jest również dopuszczalne i jest równoważne z -marzec=łuk
-mtune=ogólny-łuk. Zobaczyć -mtune po więcej informacji.

-mcpu=natywny powoduje, że kompilator automatycznie wykrywa procesor komputera kompilacji. Na
obecnie ta funkcja jest obsługiwana tylko w systemie GNU/Linux i nie wszystkie architektury są
rozpoznane. Jeśli automatyczne wykrywanie nie powiedzie się, opcja nie ma żadnego efektu.

-mfpu=Nazwa
Określa, jaki sprzęt zmiennoprzecinkowy (lub emulacja sprzętu) jest dostępny na
cel. Dopuszczalne nazwy to: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, neon, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8, krypto-neon-fp-armv8.

If -msoft-float jest określony, określa format wartości zmiennoprzecinkowych.

Jeśli wybrany sprzęt zmiennoprzecinkowy zawiera rozszerzenie NEON (np -mfpu=neon),
zauważ, że operacje zmiennoprzecinkowe nie są generowane przez przebieg automatycznej wektoryzacji GCC
chyba że -funsafe-matematyczne optymalizacje jest również określony. Dzieje się tak, ponieważ sprzęt NEON
nie w pełni implementuje standard IEEE 754 dla arytmetyki zmiennoprzecinkowej (w
poszczególne wartości nienormalne są traktowane jako zero), więc użycie instrukcji NEON może:
prowadzić do utraty precyzji.

-mfp16-format=Nazwa
Określ format typu zmiennoprzecinkowego o połowie precyzji „__fp16”. Dopuszczalny
imiona to Żaden, eee, alternatywny; domyślnie Żaden, w takim przypadku „__fp16”
typ nie jest zdefiniowany.

-mstruktura-rozmiar-granica=n
Rozmiary wszystkich struktur i związków są zaokrąglane w górę do wielokrotności liczby
bity ustawione przez tę opcję. Dopuszczalne wartości to 8, 32 i 64. Wartość domyślna
różni się dla różnych łańcuchów narzędzi. W przypadku ukierunkowanego zestawu narzędzi COFF domyślną wartością jest
8. Wartość 64 jest dozwolona tylko wtedy, gdy bazowy ABI ją obsługuje.

Podanie większej liczby może dać szybszy i wydajniejszy kod, ale może również
zwiększyć rozmiar programu. Różne wartości są potencjalnie niezgodne.
Kod skompilowany z jedną wartością niekoniecznie musi działać z kodem lub bibliotekami
skompilowane z inną wartością, jeśli wymieniają informacje za pomocą struktur lub związków.

-mabort-on-noreturn
Wygeneruj wywołanie funkcji „przerwij” na końcu funkcji „noreturn”. To jest
wykonywane, jeśli funkcja próbuje zwrócić.

-mlong-rozmowy
-mno-długie-rozmowy
Nakazuje kompilatorowi wykonanie wywołań funkcji przez wczytanie adresu
funkcji do rejestru, a następnie wykonanie wywołania podprogramu w tym rejestrze. Ten
przełącznik jest potrzebny, jeśli funkcja docelowa znajduje się poza adresowaniem 64-megabajtowym
zakres opartej na offsecie wersji instrukcji wywołania podprogramu.

Nawet jeśli ten przełącznik jest włączony, nie wszystkie wywołania funkcji zamieniają się w długie wywołania.
Heurystyka polega na tym, że funkcje statyczne, funkcje, które mają „short_call”
atrybut, funkcje znajdujące się w zakresie dyrektywy „#pragma no_long_calls”,
i funkcje, których definicje zostały już skompilowane w ramach bieżącego
jednostki kompilacji nie zamieniają się w długie rozmowy. Wyjątkiem od tej reguły jest to, że
słabe definicje funkcji, funkcje z atrybutem „long_call” lub „sekcja”
atrybut i funkcje, które są objęte zakresem dyrektywy „#pragma long_calls”
są zawsze zamieniane w długie rozmowy.

Ta funkcja nie jest domyślnie włączona. Określanie -mno-długie-rozmowy przywraca
zachowanie domyślne, podobnie jak umieszczanie wywołań funkcji w zakresie „#pragma
dyrektywa long_calls_off". Zauważ, że te przełączniki nie mają wpływu na sposób, w jaki kompilator
generuje kod do obsługi wywołań funkcji za pomocą wskaźników do funkcji.

-msingle-pic-base
Traktuj rejestr używany do adresowania PIC jako tylko do odczytu, zamiast ładować go w
prolog dla każdej funkcji. Za inicjowanie tego odpowiada system wykonawczy
zarejestruj się z odpowiednią wartością przed rozpoczęciem wykonywania.

-mpic-register=reg
Określ rejestr, który ma być używany do adresowania PIC. W przypadku standardowego przypadku podstawowego PIC,
default to dowolny odpowiedni rejestr określony przez kompilator. Dla pojedynczego przypadku podstawowego PIC,
domyślnie R9 jeśli cel jest oparty na EABI lub włączone jest sprawdzanie stosu, w przeciwnym razie
wartość domyślna to R10.

-mpic-data-jest-tekst-względna
Załóż, że każdy segment danych jest powiązany z segmentem tekstu w czasie ładowania. W związku z tym,
umożliwia adresowanie danych przy użyciu operacji związanych z komputerem PC. Ta opcja jest domyślnie włączona
dla celów innych niż VxWorks RTP.

-mpoke-nazwa-funkcji
Wpisz nazwę każdej funkcji w sekcji tekstowej, bezpośrednio przed funkcją
prolog. Wygenerowany kod jest podobny do tego:

t0
.ascii "nazwa_funkcji_poke_arm", 0
.wyrównywać
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4

Podczas wykonywania śledzenia wstecznego stosu kod może sprawdzić wartość „pc” przechowywanego w „fp +
0”. Jeśli funkcja śledzenia spojrzy na lokalizację „pc - 12”, a 8 górnych bitów to
zestaw, to wiemy, że bezpośrednio przed tym osadzona jest nazwa funkcji
lokalizacja i ma długość „((pc[-3]) & 0xff000000)”.

-mkciuk
-marm
Wybierz między generowaniem kodu, który jest wykonywany w stanach ARM i Thumb. Domyślnie dla
większość konfiguracji polega na generowaniu kodu, który jest wykonywany w stanie ARM, ale domyślnie
można zmienić, konfigurując GCC za pomocą --z-trybem=były skonfigurować opcję.

-mtpcs-rama
Wygeneruj ramkę stosu zgodną ze standardem Thumb Procedure Call Standard for
wszystkie funkcje niebędące liśćmi. (Funkcja liścia to taka, która nie wywołuje żadnej innej
funkcje.) Domyślnie jest -mno-tpcs-rama.

-mtpcs-ramka-liść
Wygeneruj ramkę stosu zgodną ze standardem Thumb Procedure Call Standard for
wszystkie funkcje liścia. (Funkcja liścia to taka, która nie wywołuje żadnych innych funkcji).
Wartość domyślna to -mno-apcs-ramka-liść.

-mcallee-super-interworking
Nadaje wszystkim widocznym z zewnątrz funkcjom w kompilowanym pliku instrukcję ARM
ustawia nagłówek, który przełącza się w tryb kciuka przed wykonaniem reszty funkcji.
Pozwala to na wywoływanie tych funkcji z kodu niewspółpracującego. Ta opcja to
nie działa w konfiguracjach AAPCS, ponieważ współdziałanie jest domyślnie włączone.

-mcaller-super-interworking
Umożliwia poprawne wykonywanie wywołań za pomocą wskaźników funkcji (w tym funkcji wirtualnych)
niezależnie od tego, czy kod docelowy został skompilowany do współpracy, czy nie.
Jeśli ta opcja wiąże się z niewielkim kosztem wykonania wskaźnika do funkcji
jest włączony. Ta opcja nie jest prawidłowa w konfiguracjach AAPCS, ponieważ współdziałanie jest
domyślnie włączone.

-mtp=Nazwa
Określ model dostępu dla wskaźnika pamięci lokalnej wątku. Obowiązujące modele to
miękki, który generuje wywołania „__aeabi_read_tp”, cp15, który pobiera wątek
wskaźnik bezpośrednio z „cp15” (obsługiwane w architekturze arm6k) i samochód, który
wykorzystuje najlepszą dostępną metodę dla wybranego procesora. Ustawienie domyślne to
samochód.

-mtls-dialekt=dialekt
Określ dialekt, który ma być używany do uzyskiwania dostępu do lokalnej pamięci wątków. Dwa dialekts są
utrzymany---gnu antylopa dzięki gnu2, gnu antylopa dialekt wybiera oryginalny schemat GNU dla
wspieranie lokalnych i globalnych dynamicznych modeli TLS. ten gnu2 dialekt wybiera GNU
schemat deskryptora, który zapewnia lepszą wydajność bibliotek współdzielonych. GNU
schemat deskryptora jest zgodny z oryginalnym schematem, ale wymaga nowego
assembler, linker i obsługa bibliotek. Początkowe i lokalne modele exec TLS są
nie ma wpływu na tę opcję i zawsze używaj oryginalnego schematu.

-mword-relokacje
Generuj bezwzględne relokacje tylko dla wartości wielkości słowa (tj. R_ARM_ABS32). To jest
domyślnie włączone na targetach (uClinux, SymbianOS), na które nakłada się loader runtime
to ograniczenie i kiedy -fpic or -fPIC jest specyficzne.

-mfix-cortex-m3-ldrd
Niektóre rdzenie Cortex-M3 mogą powodować uszkodzenie danych, gdy instrukcje „ldrd” z
używane są nakładające się rejestry docelowe i podstawowe. Ta opcja pozwala uniknąć generowania
niniejsze instrukcje. Ta opcja jest domyślnie włączona, gdy -mcpu=kora-m3 is
określony.

- dostęp do munaligned
-mno-unaligned-access
Włącza (lub wyłącza) odczyt i zapis 16- i 32-bitowych wartości z adresów
które nie są wyrównane 16- lub 32-bitowo. Domyślnie niewyrównany dostęp jest wyłączony dla wszystkich
Pre-ARMv6 i wszystkie architektury ARMv6-M oraz włączone dla wszystkich innych architektur. Gdyby
niewyrównany dostęp nie jest włączony, dostęp do słów w spakowanych strukturach danych a
bajt na raz.

Atrybut ARM „Tag_CPU_unaligned_access” jest ustawiony w wygenerowanym pliku obiektowym na
prawda lub fałsz, w zależności od ustawienia tej opcji. Jeśli niewyrównany dostęp
jest włączone, wtedy zdefiniowany jest również symbol preprocesora „__ARM_FEATURE_UNALIGNED”.

-mneon-dla-64bitów
Umożliwia używanie Neon do obsługi 64-bitowych operacji skalarnych. Domyślnie jest to wyłączone
ponieważ koszt przeniesienia danych z rejestrów podstawowych do Neon jest wysoki.

-mslow-flash-data
Załóżmy, że ładowanie danych z pamięci flash jest wolniejsze niż pobieranie instrukcji. Dlatego dosłowne
obciążenie jest zminimalizowane dla lepszej wydajności. Ta opcja jest obsługiwana tylko wtedy, gdy
kompilacja dla profilu ARMv7 M i domyślnie wyłączona.

-masm-składnia-ujednolicona
Załóżmy, że wbudowany asembler używa zunifikowanej składni asm. Domyślnie jest to obecnie wyłączone
co implikuje dzieloną składnię. Obecnie ta opcja jest dostępna tylko dla Kciuka1 i
nie ma wpływu na stan ARM i Thumb2. Może się to jednak zmienić w przyszłych wydaniach
GCC. Podzieloną składnię należy uznać za przestarzałą.

-mrestrict-it
Ogranicza generowanie bloków IT zgodnie z zasadami ARMv8. Bloki IT mogą
zawierają tylko pojedynczą 16-bitową instrukcję z wybranego zestawu instrukcji. Ten
opcja jest domyślnie włączona dla trybu kciuka ARMv8.

-mprint-tune-informacje
Wydrukuj informacje dotyczące strojenia procesora jako komentarz w pliku asemblera. To jest używana opcja
tylko do testowania regresji kompilatora i nie jest przeznaczony do zwykłego użytku w
kompilowanie kodu. Ta opcja jest domyślnie wyłączona.

AVR Opcje

Te opcje są zdefiniowane dla wdrożeń AVR:

-mmcu=mcu
Określ architekturę zestawu instrukcji Atmel AVR (ISA) lub typ MCU.

Wartość domyślna dla tej opcji to@tie{}śr2.

GCC obsługuje następujące urządzenia AVR i ISA:

„śr2”
„Klasyczne” urządzenia z maksymalnie 8@tie{}KiB pamięci programu. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

„śr25”
„Klasyczne” urządzenia z maksymalnie 8@tie{}KiB pamięci programu i z „MOVW”
instrukcja. mcu@tie{}= "ata5272", "ata6616c", "attiny13", "attiny13a",
„attiny2313”, „attiny2313a”, „attiny24”, „attiny24a”, „attiny25”, „attiny261”,
„attiny261a”, „attiny43u”, „attiny4313”, „attiny44”, „attiny44a”, „attiny441”,
„attiny45”, „attiny461”, „attiny461a”, „attiny48”, „attiny828”, „attiny84”,
„attiny84a”, „attiny841”, „attiny85”, „attiny861”, „attiny861a”, „attiny87”,
„attiny88”, „at86rf401”.

„śr3”
„Klasyczne” urządzenia z 16@tie{}KiB do 64@tie{}KiB pamięci programu.
mcu@tie{}= "at43usb355", "at76c711".

„śr31”
„Klasyczne” urządzenia z 128@tie{}KiB pamięci programu. mcu@tie{}= "atmega103",
„at43usb320”.

„śr35”
„Klasyczne” urządzenia z 16@tie{}KiB do 64@tie{}KiB pamięci programu i z
instrukcja „MOVW”. mcu@tie{}= "ata5505", "ata6617c", "ata664251",
„atmega16u2”, „atmega32u2”, „atmega8u2”, „attiny1634”, „attiny167”, „at90usb162”,
„at90usb82”.

„śr4”
„Ulepszone” urządzenia z maksymalnie 8@tie{}KiB pamięci programu. mcu@tie{}= "ata6285",
„ata6286”, „ata6289”, „ata6612c”, „atmega48”, „atmega48a”, „atmega48p”,
„atmega48pa”, „atmega8”, „atmega8a”, „atmega8hva”, „atmega8515”, „atmega8535”,
„atmega88”, „atmega88a”, „atmega88p”, „atmega88pa”, „at90pwm1”, „at90pwm2”,
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

„śr5”
„Ulepszone” urządzenia z 16@tie{}KiB do 64@tie{}KiB pamięci programu.
mcu@tie{}= "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831",
„ata6613c”, „ata6614q”, „atmega16”, „atmega16a”, „atmega16hva”, „atmega16hva2”,
„atmega16hvb”, „atmega16hvbrevb”, „atmega16m1”, „atmega16u4”, „atmega161”,
„atmega162”, „atmega163”, „atmega164a”, „atmega164p”, „atmega164pa”, „atmega165”,
„atmega165a”, „atmega165p”, „atmega165pa”, „atmega168”, „atmega168a”,
„atmega168p”, „atmega168pa”, „atmega169”, „atmega169a”, „atmega169p”,
„atmega169pa”, „atmega32”, „atmega32a”, „atmega32c1”, „atmega32hvb”,
„atmega32hvbrevb”, „atmega32m1”, „atmega32u4”, „atmega32u6”, „atmega323”,
„atmega324a”, „atmega324p”, „atmega324pa”, „atmega325”, „atmega325a”,
„atmega325p”, „atmega325pa”, „atmega3250”, „atmega3250a”, „atmega3250p”,
„atmega3250pa”, „atmega328”, „atmega328p”, „atmega329”, „atmega329a”,
„atmega329p”, „atmega329pa”, „atmega3290”, „atmega3290a”, „atmega3290p”,
„atmega3290pa”, „atmega406”, „atmega64”, „atmega64a”, „atmega64c1”, „atmega64hve”,
„atmega64hve2”, „atmega64m1”, „atmega64rfr2”, „atmega640”, „atmega644”,
„atmega644a”, „atmega644p”, „atmega644pa”, „atmega644rfr2”, „atmega645”,
„atmega645a”, „atmega645p”, „atmega6450”, „atmega6450a”, „atmega6450p”,
„atmega649”, „atmega649a”, „atmega649p”, „atmega6490”, „atmega6490a”,
"atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
„at90scr100”, „at90usb646”, „at90usb647”, „at94k”, „m3000”.

„śr51”
„Ulepszone” urządzenia z 128@tie{}KiB pamięci programu. mcu@tie{}= "atmega128",
„atmega128a”, „atmega128rfa1”, „atmega128rfr2”, „atmega1280”, „atmega1281”,
„atmega1284”, „atmega1284p”, „atmega1284rfr2”, „at90can128”, „at90usb1286”,
„at90usb1287”.

„śr6”
„Ulepszone” urządzenia z 3-bajtowym komputerem PC, tj. z ponad 128@tie{}KiB programu
pamięć. mcu@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".

„Avrxmega2”
Urządzenia „XMEGA” z ponad 8@tie{}KiB i do 64@tie{}KiB pamięci programu.
mcu@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".

„Avrxmega4”
Urządzenia „XMEGA” z ponad 64@tie{}KiB i do 128@tie{}KiB programu
pamięć. mcu@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

„Avrxmega5”
Urządzenia „XMEGA” z ponad 64@tie{}KiB i do 128@tie{}KiB programu
pamięci i ponad 64@tie{}KiB pamięci RAM. mcu@tie{}= "atxmega64a1",
„atxmega64a1u”.

„Avrxmega6”
Urządzenia „XMEGA” z ponad 128@tie{}KiB pamięci programu. mcu@krawat{}=
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".

„Avrxmega7”
Urządzenia „XMEGA” z ponad 128@tie{}KiB pamięci programu i więcej niż
64@tie{}KiB pamięci RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

„awrtina”
„TINY” Małe urządzenia z 512@tie{}B do 4@tie{}KiB pamięci programu.
mcu@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".

„śr1”
Ten ISA jest implementowany przez minimalny rdzeń AVR i jest obsługiwany tylko przez asembler.
mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumulate-args
Zgromadź wychodzące argumenty funkcji i zdobądź/zwolnij potrzebne miejsce na stosie dla
wychodzące argumenty funkcji raz w prologu/epilogu funkcji. Bez tej opcji
wychodzące argumenty są odkładane przed wywołaniem funkcji, a następnie wyskakiwane.

Pokazywanie argumentów po wywołaniu funkcji może być kosztowne w AVR, więc
gromadzenie miejsca na stosie może prowadzić do mniejszych plików wykonywalnych, ponieważ potrzebne są argumenty
nie do usunięcia ze stosu po takim wywołaniu funkcji.

Ta opcja może prowadzić do zmniejszenia rozmiaru kodu dla funkcji, które wykonują kilka wywołań do
funkcje, które pobierają swoje argumenty na stos, jak wywołania funkcji podobnych do printf.

-koszt-oddzialu=koszt
Ustaw koszty oddziału dla warunkowych instrukcji oddziału na koszt. Rozsądne wartości
dla koszt są małymi, nieujemnymi liczbami całkowitymi. Domyślny koszt oddziału to 0.

-mcall-prologi
Prologi/epilogi funkcji są rozwijane jako wywołania odpowiednich podprogramów. Kod
rozmiar jest mniejszy.

-miętowy8
Załóżmy, że „int” jest 8-bitową liczbą całkowitą. Ma to wpływ na rozmiary wszystkich typów: „znak” to 1
bajt, „int” to 1 bajt, „long” to 2 bajty, a „long long” to 4 bajty. Proszę
zauważ, że ta opcja nie jest zgodna ze standardami C, ale skutkuje mniejszym
rozmiar kodu.

-mn-flash=num
Załóżmy, że pamięć flash ma rozmiar num razy 64@tie{}KiB.

-mno-przerwania
Wygenerowany kod nie jest zgodny z przerwaniami sprzętowymi. Rozmiar kodu jest mniejszy.

-mrelaks
Spróbuj zastąpić "CALL" lub. Instrukcja "JMP" przez krótsze "RCALL" lub odpowiednio. „RJMP”
instrukcja, jeśli dotyczy. Ustawienie -mrelaks po prostu dodaje --mlink-relaks opcja do
wiersz poleceń asemblera i --zrelaksować się opcja do wiersza poleceń konsolidatora.

Relaksacja skoku jest wykonywana przez linker, ponieważ przesunięcia skoku nie były wcześniej znane
kod znajduje się. Dlatego kod asemblera generowany przez kompilator jest taki sam,
ale instrukcje w pliku wykonywalnym mogą różnić się od instrukcji w asemblerze
kod.

Relaksacja musi być włączona, jeśli potrzebne są skróty linkera, zobacz sekcję „EIND” i
odcinki linkera poniżej.

-mrmw
Załóżmy, że urządzenie obsługuje instrukcje odczytu, modyfikacji i zapisu „XCH”, „LAC”, „LAS”
i „LAT”.

-msp8
Traktuj rejestr wskaźnika stosu jako rejestr 8-bitowy, tj. załóż starszy bajt
wskaźnik stosu wynosi zero. Ogólnie rzecz biorąc, nie trzeba ręcznie ustawiać tej opcji.

Ta opcja jest używana wewnętrznie przez kompilator do wybierania i budowania bibliotek multilib dla
architektury „avr2” i „avr25”. Te architektury mieszają urządzenia zi bez
"SPH". Dla każdego ustawienia innego niż -mmcu=śr2 or -mmcu=śr25 sterownik kompilatora dodaje
lub usuwa tę opcję z wiersza poleceń właściwego kompilatora, ponieważ kompilator
następnie wie, czy urządzenie lub architektura ma 8-bitowy wskaźnik stosu, a zatem nie ma „SPH”
zarejestruj się lub nie.

-mstrict-X
Użyj rejestru adresowego „X” w sposób proponowany przez sprzęt. Oznacza to, że „X” to
używane tylko w adresowaniu pośrednim, post-inkrementacyjnym lub przed dekrementacyjnym.

Bez tej opcji rejestr „X” może być używany w taki sam sposób jak „Y” lub „Z”, które:
następnie jest emulowany przez dodatkowe instrukcje. Na przykład ładowanie wartości za pomocą
Adresowanie „X+const” z małą nieujemną „const < 64” do rejestru Rn is
wykonywane jako

adiw r26, const ; X += const
stary , X ; = *X
sbiw r26, const ; X -= const

-mtiny-stack
Zmieniaj tylko dolne 8@tie{}bitów wskaźnika stosu.

-nodevicelib
Nie łącz z biblioteką specyficzną dla urządzenia AVR-LibC "libdev.a".

-Waddr-spacja-konwert
Ostrzegaj o konwersjach między przestrzeniami adresowymi w przypadku, gdy wynikowy adres
przestrzeń nie jest zawarta w przychodzącej przestrzeni adresowej.

„EIND” i urządzenia z ponad 128 ki bajtów Flash

Wskaźniki w implementacji mają szerokość 16@tie{}bitów. Adres funkcji lub etykiety
jest reprezentowany jako adres słowa, dzięki czemu pośrednie skoki i wywołania mogą kierować do dowolnego kodu
adres z zakresu 64@tie{}Ki słów.

W celu ułatwienia pośredniego skoku na urządzeniach z więcej niż 128@tie{}Ki bajtów
przestrzeń pamięci programu, istnieje specjalny rejestr funkcji o nazwie "EIND", który służy jako
najbardziej znacząca część adresu docelowego, gdy instrukcje „EICALL” lub „EIJMP” są
używany.

Pośrednie skoki i wywołania na tych urządzeniach są obsługiwane przez kompilator w następujący sposób i są
z zastrzeżeniem pewnych ograniczeń:

* Kompilator nigdy nie ustawia "EIND".

* Kompilator używa "EIND" niejawnie w instrukcjach "EICALL"/"EIJMP" lub może odczytywać
„EIND” bezpośrednio w celu naśladowania pośredniego połączenia/skoku za pomocą „RET”
instrukcja.

* Kompilator zakłada, że ​​"EIND" nigdy nie zmienia się podczas kodu startowego lub podczas
podanie. W szczególności „EIND” nie jest zapisywane/przywracane w funkcji lub przerwaniu
prolog/epilog rutyny serwisowej.

* Dla pośrednich wywołań funkcji i obliczonego goto, linker generuje odcinki. Odcinki
są czasami nazywane również skoczniami trampoliny. W ten sposób pośrednie połączenie/skok przeskakuje do
taki odcinek. Odgałęzienie zawiera bezpośredni skok do żądanego adresu.

* Relaksacja linkera musi być włączona, aby linker poprawnie generował skróty
we wszystkich sytuacjach. Zobacz opcję kompilatora -mrelaks i opcja linkera --zrelaksować się.
Istnieją przypadki narożne, w których linker powinien generować skróty, ale przerywa
bez relaksu i bez pomocnego komunikatu o błędzie.

* Domyślny skrypt konsolidatora jest zaaranżowany dla kodu z "EIND = 0". Jeśli przypuszczalny jest kod
aby pracować z konfiguracją z "EIND != 0", należy użyć niestandardowego skryptu linkera w kolejności
aby umieścić sekcje, których nazwa zaczyna się od „.trampolines” w segmencie, w którym
„EIND” wskazuje na.

* Kod startowy z libgcc nigdy nie ustawia "EIND". Zauważ, że kod startowy jest mieszanką
kodu z libgcc i AVR-LibC. Aby zapoznać się z wpływem AVR-LibC na „EIND”, zobacz AVR-
Podręcznik użytkownika LibC ("http://nongnu.org/avr-libc/user-manual/").

* Uzasadnione jest wcześniejsze skonfigurowanie "EIND" specyficznego dla użytkownika kodu startowego, na przykład przez
sposób kodu inicjującego znajdujący się w sekcji „.init3”. Taki kod działa przed
ogólny kod startowy, który inicjuje pamięć RAM i wywołuje konstruktory, ale po bicie
kod startowy z AVR-LibC, który ustawia „EIND” na segment, w którym znajduje się tablica wektorów
usytuowany.

#włączać

statyczna pustka
__atrybut__((sekcja(".init3"),nagi,używany,brak_funkcji_instrumentu))
init3_set_eind (nieważne)
{
__asm ​​nietrwały ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND) : "r24", "pamięć");
}

Symbol "__trampolines_start" jest zdefiniowany w skrypcie linkera.

* Odcinki są generowane automatycznie przez linker, jeśli spełnione są następujące dwa warunki:
z:

-
(skrót od Generować odcinki) tak:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
zewnętrzne segment, w którym znajdują się odgałęzienia.

* Kompilator emituje takie modyfikatory „gs” dla etykiet kodu w następujących sytuacjach:

-
-
- -mcall-prologi>
opcja wiersza poleceń.

-
tabele, które możesz określić -fno-skok-stoliki opcja wiersza poleceń.

-
-
* Przeskakiwanie do niesymbolicznych adresów, jak to jest nie utrzymany:

int główny (unieważniony)
{
/* Wywołanie funkcji pod adresem słowa 0x2 */
return ((int(*)(nieważne)) 0x2)();
}

Zamiast tego należy ustawić skrót, tj. funkcję należy wywołać za pomocą symbolu
(w przykładzie „func_4”):

int główny (unieważniony)
{
extern int func_4 (nieważny);

/* Wywołanie funkcji pod adresem bajtu 0x4 */
zwróć func_4();
}

a aplikacja jest połączona z -Wl,--defsym,func_4=0x4. Alternatywnie „func_4”
można zdefiniować w skrypcie linkera.

Obsługa rejestrów funkcji specjalnych „RAMPD”, „RAMPX”, „RAMPY” i „RAMPZ”

Niektóre urządzenia AVR obsługują pamięci większe niż 64@tie{}zakres KiB, do którego można uzyskać dostęp
ze wskaźnikami 16-bitowymi. Aby uzyskać dostęp do lokalizacji w pamięci poza tym 64@tie{}zakresem KiB,
jako wysoka część adresu używana jest zawartość rejestru „RAMP”: „X”, „Y”, „Z”
rejestr adresowy jest powiązany z funkcją specjalną „RAMPX”, „RAMPY”, „RAMPZ”
zarejestruj się odpowiednio, aby uzyskać szeroki adres. Podobnie, „RAMPD” jest używany razem z
adresowanie bezpośrednie.

* Kod startowy inicjalizuje rejestry funkcji specjalnej „RAMP” z zerem.

* Jeśli AVR O imieniu Adres Przestrzenie, nazwane adres przestrzeń inne niż ogólne lub „__flash” to
używane, to "RAMPZ" jest ustawiane zgodnie z potrzebami przed operacją.

* Jeśli urządzenie obsługuje pamięć RAM większą niż 64@tie{}KiB i trzeba zmienić kompilator
„RAMPZ”, aby wykonać operację, „RAMPZ” jest resetowany do zera po operacji.

* Jeśli urządzenie jest dostarczane z określonym rejestrem „RAMP”, prolog/epilog ISR
zapisuje/przywraca ten SFR i inicjuje go zerem na wypadek, gdyby kod ISR mógł
(domyślnie) go używać.

* Pamięć RAM większa niż 64@tie{}KiB nie jest obsługiwana przez GCC dla celów AVR. Jeśli użyjesz
wbudowany asembler do odczytu z lokalizacji poza 16-bitowym zakresem adresów i zmiany
jeden z rejestrów „RAMP”, po uzyskaniu dostępu należy go wyzerować.

Wbudowane makra AVR

GCC definiuje kilka wbudowanych makr, aby kod użytkownika mógł testować obecność lub
brak funkcji. Prawie każde z poniższych wbudowanych makr jest dedukowane z urządzenia
możliwości, a tym samym wywołane przez -mmcu= opcja wiersza poleceń.

Aby uzyskać jeszcze więcej wbudowanych makr specyficznych dla AVR, zobacz AVR O imieniu Adres Spaces dzięki AVR Wbudowany
Funkcje.

„__AVR_ARCH__”
Wbudowane makro, które rozwiązuje do liczby dziesiętnej, która identyfikuje architekturę i
zależy od -mmcu=mcu opcja. Możliwe wartości to:

2, 25, 3, 31, 35, 4, 5, 51, 6

dla mcu="śr2", "śr25", "śr3", "śr31", "śr35", "śr4", "śr5", "śr51", "śr6",

odpowiednio i

100, 102, 104, 105, 106, 107

dla mcu="avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
odpowiednio. Gdyby mcu określa urządzenie, to wbudowane makro jest odpowiednio ustawiane. Do
przykład, z -mmcu=atmega8 makro jest zdefiniowane na 4.

„__AVR_Urządzenie__"
Oprawa -mmcu=urządzenie definiuje to wbudowane makro, które odzwierciedla nazwę urządzenia. Do
przykład, -mmcu=atmega8 definiuje wbudowane makro „__AVR_ATmega8__”, -mmcu=attiny261a
definiuje „__AVR_ATtiny261A__” itp.

Nazwy wbudowanych makr są zgodne ze schematem „__AVR_Urządzenie__" gdzie Urządzenie jest
nazwa urządzenia jak w instrukcji obsługi AVR. Różnica pomiędzy Urządzenie w zabudowie
makro i urządzenie in -mmcu=urządzenie jest to, że ta ostatnia jest zawsze pisana małymi literami.

If urządzenie nie jest urządzeniem, a jedynie podstawową architekturą jak śr51, to makro nie jest
zdefiniowane.

„__AVR_DEVICE_NAME__”
Oprawa -mmcu=urządzenie definiuje to wbudowane makro do nazwy urządzenia. Na przykład,
z -mmcu=atmega8 makro jest zdefiniowane jako "atmega8".

If urządzenie nie jest urządzeniem, a jedynie podstawową architekturą jak śr51, to makro nie jest
zdefiniowane.

„__AVR_XMEGA__”
Urządzenie/architektura należy do rodziny urządzeń XMEGA.

„__AVR_HAVE_ELPM__”
Urządzenie posiada instrukcję „ELPM”.

„__AVR_HAVE_ELPMX__”
Urządzenie posiada „ELPM Rn,Z" i „ELPM Rn,Z+" instrukcje.

„__AVR_HAVE_MOVW__”
Urządzenie posiada instrukcję "MOVW" do wykonywania 16-bitowych ruchów rejestr-rejestr.

„__AVR_HAVE_LPMX__”
Urządzenie posiada „LPM Rn,Z" i „LPM Rn,Z+" instrukcje.

„__AVR_HAVE_MUL__”
Urządzenie posiada mnożnik sprzętowy.

„__AVR_HAVE_JMP_CALL__”
Urządzenie posiada instrukcje „JMP” i „CALL”. Tak jest w przypadku urządzeń z
co najmniej 16@tie{}KiB pamięci programu.

„__AVR_HAVE_EIJMP_EICALL__”
„__AVR_3_BYTE_PC__”
Urządzenie posiada instrukcje „EIJMP” i „EICALL”. Tak jest w przypadku urządzeń
z ponad 128@tie{}KiB pamięci programu. Oznacza to również, że program
licznik (PC) ma szerokość 3@tie{}bajtów.

„__AVR_2_BYTE_PC__”
Licznik programu (PC) ma szerokość 2@tie{}bajtów. Dotyczy to urządzeń z maksymalnie
128@tie{}KiB pamięci programu.

„__AVR_HAVE_8BIT_SP__”
„__AVR_HAVE_16BIT_SP__”
Rejestr wskaźnika stosu (SP) jest traktowany jako rejestr 8-bitowy lub rejestr 16-bitowy przez
kompilator. Na definicję tych makr ma wpływ: -mtiny-stack.

„__AVR_HAVE_SPH__”
„__AVR_SP8__”
Urządzenie posiada rejestr funkcji specjalnej SPH (wysoką część wskaźnika stosu) lub posiada
odpowiednio 8-bitowy wskaźnik stosu. Na definicję tych makr ma wpływ:
-mmcu= oraz w przypadkach -mmcu=śr2 dzięki -mmcu=śr25 także przez -msp8.

„__AVR_HAVE_RAMPD__”
„__AVR_HAVE_RAMPX__”
„__AVR_HAVE_RAMPY__”
„__AVR_HAVE_RAMPZ__”
Urządzenie posiada rejestr funkcji specjalnych „RAMPD”, „RAMPX”, „RAMPY”, „RAMPZ”,
odpowiednio.

„__NIE_PRZERWANIA__”
To makro odzwierciedla -mno-przerwania opcja wiersza poleceń.

„__AVR_ERRATA_SKIP__”
„__AVR_ERRATA_SKIP_JMP_CALL__”
Niektóre urządzenia AVR (AT90S8515, ATmega103) nie mogą pomijać instrukcji 32-bitowych z powodu
errata sprzętowa. Instrukcje pominięcia to „SBRS”, „SBRC”, „SBIS”, „SBIC” i „CPSE”.
Drugie makro jest zdefiniowane tylko wtedy, gdy ustawiono również „__AVR_HAVE_JMP_CALL__”.

„__AVR_ISA_RMW__”
Urządzenie posiada instrukcje Read-Modify-Write (XCH, LAC, LAS i LAT).

"__AVR_SFR_OFFSET__=zrównoważyć"
Instrukcje, które mogą bezpośrednio adresować rejestry funkcji specjalnych we/wy, takie jak „IN”,
„OUT”, „SBI” itp. mogą używać innego adresu, tak jak w przypadku instrukcji skierowanej do
dostęp do pamięci RAM, np. „LD” lub „STS”. To przesunięcie zależy od architektury urządzenia i ma
odejmowane od adresu pamięci RAM w celu uzyskania odpowiedniego adresu I/O@tie{}.

„__Z_AVRLIBC__”
Kompilator jest skonfigurowany do współpracy z AVR-Libc. Zobacz --with-avrlibc
skonfigurować opcję.

Blackfin Opcje

-mcpu=cpu[-sirewizja]
Określa nazwę docelowego procesora Blackfin. Obecnie, cpu może być jednym z
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.

Opcjonalne sirewizja określa wersję krzemową docelowego Blackfin
edytor. Wszystkie obejścia dostępne dla docelowej wersji krzemowej są włączone.
If sirewizja is Żaden, żadne obejścia nie są włączone. Gdyby sirewizja is każdy, wszystko
obejścia dla procesora docelowego są włączone. Makro „__SILICON_REVISION__”
jest zdefiniowany jako dwie cyfry szesnastkowe reprezentujące liczby główne i podrzędne w
rewizja krzemu. Gdyby sirewizja is Żaden, „__SILICON_REVISION__” nie jest zdefiniowany.
If sirewizja is każdy, „__SILICON_REVISION__” jest zdefiniowany jako 0xffff. Jeśli to
fakultatywny sirewizja nie jest używany, GCC zakłada najnowszą znaną krzemową wersję
ukierunkowany procesor Blackfin.

GCC definiuje makro preprocesora dla określonego cpu. Dla bfin-elf łańcuch narzędzi,
ta opcja powoduje, że sprzętowy BSP dostarczany przez libgloss jest linkowany w if -msim is
Nie podarowany.

Bez tej opcji bf532 jest domyślnie używany jako procesor.

Pamiętaj, że wsparcie dla bf561 jest niekompletna. Do bf561, tylko makro preprocesora jest
zdefiniowane.

-msim
Określa, że ​​program będzie uruchamiany w symulatorze. To powoduje, że symulator
BSP dostarczony przez libgloss do linkowania. Ta opcja ma zastosowanie tylko dla bfin-elf
łańcuch narzędzi. Niektóre inne opcje, takie jak -Mid-shared-biblioteka dzięki -mfdpic, sugerować
-msim.

-momit-leaf-frame-pointer
Nie trzymaj wskaźnika ramki w rejestrze funkcji liścia. Pozwala to uniknąć
instrukcje zapisywania, konfigurowania i przywracania wskaźników ramek oraz tworzenia dodatkowego rejestru
dostępne w funkcjach liści. Opcja -fomit-frame-pointer usuwa ramkę
wskaźnik na wszystkie funkcje, co może utrudnić debugowanie.

-mspecld-anomalia
Po włączeniu kompilator zapewnia, że ​​wygenerowany kod nie zawiera:
ładunki spekulacyjne po instrukcjach skoku. Jeśli ta opcja jest używana,
Zdefiniowano „__WORKAROUND_SPECULATIVE_LOADS”.

-mno-specld-anomalia
Nie generuj dodatkowego kodu, aby zapobiec występowaniu obciążeń spekulacyjnych.

-mcsync-anomalia
Po włączeniu kompilator zapewnia, że ​​wygenerowany kod nie zawiera CSYNC lub
Instrukcje SSYNC są zbyt wcześnie po rozgałęzieniach warunkowych. Jeśli ta opcja jest używana,
Zdefiniowano „__OBEJŚCIE_SPECULATIVE_SYNCS”.

-mno-csync-anomalia
Nie generuj dodatkowego kodu, aby zapobiec występowaniu również instrukcji CSYNC lub SSYNC
wkrótce po gałęzi warunkowej.

-mlow-64k
Po włączeniu kompilator może swobodnie korzystać z wiedzy, którą cała
program mieści się w niskim 64k pamięci.

-mno-niski-64k
Załóżmy, że program jest dowolnie duży. To jest ustawienie domyślne.

-mstack-check-l1
Wykonaj sprawdzanie stosu za pomocą informacji umieszczonych w pamięci notatnika L1 przez uClinux
jądro.

-Mid-shared-biblioteka
Wygeneruj kod obsługujący biblioteki współdzielone za pomocą metody identyfikatora biblioteki. To pozwala
do wykonywania na miejscu i bibliotek współdzielonych w środowisku bez pamięci wirtualnej
kierownictwo. Ta opcja oznacza -fPIC. Z bfin-elf cel, ta opcja implikuje
-msim.

-mno-id-shared-biblioteka
Generuj kod, który nie zakłada używania bibliotek współdzielonych opartych na identyfikatorach. To jest
domyślny.

-mleaf-id-shared-biblioteka
Wygeneruj kod, który obsługuje biblioteki współdzielone za pomocą metody identyfikatora biblioteki, ale zakłada
że ta biblioteka lub plik wykonywalny nie będzie łączyła się z żadnymi innymi bibliotekami współdzielonymi ID.
Pozwala to kompilatorowi na używanie szybszego kodu do skoków i wywołań.

-mno-leaf-id-shared-biblioteka
Nie zakładaj, że kompilowany kod nie będzie łączył się z żadnymi bibliotekami współdzielonymi ID.
Wolniejszy kod jest generowany dla insns skoku i wywołania.

-id-biblioteki-mshared=n
Określa numer identyfikacyjny kompilowanej biblioteki współużytkowanej opartej na identyfikatorze.
Określenie wartości 0 generuje bardziej zwarty kod; określenie innych wartości sił
przypisanie tego numeru do bieżącej biblioteki, ale nie ma już miejsca ani czasu
skuteczne niż pominięcie tej opcji.

-msep-dane
Wygeneruj kod, który pozwala na zlokalizowanie segmentu danych w innym obszarze pamięci
z segmentu tekstu. Pozwala to na wykonanie w miejscu w środowisku bez
zarządzanie pamięcią wirtualną poprzez eliminację relokacji względem sekcji tekstowej.

-mno-sep-data
Generuj kod, który zakłada, że ​​segment danych następuje po segmencie tekstowym. To jest
domyślny.

-mlong-rozmowy
-mno-długie-rozmowy
Nakazuje kompilatorowi wykonanie wywołań funkcji przez wczytanie adresu
funkcji do rejestru, a następnie wykonanie wywołania podprogramu w tym rejestrze. Ten
przełącznik jest potrzebny, jeśli funkcja docelowa znajduje się poza 24-bitowym zakresem adresowania
oparta na przesunięciu wersja instrukcji wywołania podprogramu.

Ta funkcja nie jest domyślnie włączona. Określanie -mno-długie-rozmowy przywraca
zachowanie domyślne. Zauważ, że te przełączniki nie mają wpływu na sposób generowania kompilatora
kod do obsługi wywołań funkcji za pomocą wskaźników do funkcji.

-mfast-fp
Połącz się z szybką biblioteką zmiennoprzecinkową. Ta biblioteka relaksuje niektóre z IEEE
zasady standardu zmiennoprzecinkowego dotyczące sprawdzania danych wejściowych względem Not-a-Number (NAN), w
zainteresowanie wykonaniem.

-minline-plt
Włącz wstawianie wpisów PLT w wywołaniach funkcji do funkcji, o których nie wiadomo
wiązać lokalnie. Nie ma żadnego efektu bez -mfdpic.

-mmulticore
Zbuduj samodzielną aplikację dla wielordzeniowych procesorów Blackfin. Ta opcja powoduje
odpowiednie pliki startowe i skrypty linków obsługujące wielordzeniowe, które mają być używane, oraz definiuje
makro „__BFIN_MULTICORE”. Może być używany tylko z -mcpu=bf561[-sirewizja].

Ta opcja może być używana z -mcorea or -mcoreb, który wybiera jedną aplikację-
model programowania na rdzeń. Z pominięciem -mcorea or -mcorebThe
używany jest jednoaplikacyjny/dwurdzeniowy model programowania. W tym modelu główne
funkcja Core B powinna być nazwana „coreb_main”.

Jeśli ta opcja nie jest używana, używany jest jednordzeniowy model programowania aplikacji.

-mcorea
Zbuduj samodzielną aplikację dla rdzenia A BF561 przy użyciu jednej aplikacji na
podstawowy model programowania. Właściwe pliki startowe i skrypty linków są używane do obsługi Core
A, a makro „__BFIN_COREA” jest zdefiniowane. Ta opcja może być używana tylko w
łącznie z -mmulticore.

-mcoreb
Zbuduj samodzielną aplikację dla Core B BF561 przy użyciu jednej aplikacji na
podstawowy model programowania. Właściwe pliki startowe i skrypty linków są używane do obsługi Core
B, a makro „__BFIN_COREB” jest zdefiniowane. Gdy ta opcja jest używana, „coreb_main”
powinno być używane zamiast „głównego”. Ta opcja może być używana tylko w połączeniu z
-mmulticore.

-msdram
Zbuduj samodzielną aplikację dla SDRAM. Używane są odpowiednie pliki startowe i skrypty linków
umieścić aplikację w pamięci SDRAM, a makro „__BFIN_SDRAM” jest zdefiniowane. ten
loader powinien zainicjować SDRAM przed załadowaniem aplikacji.

-micplb
Załóżmy, że ICPLBs są włączone w czasie wykonywania. Ma to wpływ na pewną anomalię
obejścia. W przypadku systemów docelowych Linux domyślnie zakłada się, że ICPLB są włączone; dla
aplikacje autonomiczne domyślnie są wyłączone.

C6X Opcje

-marzec=Nazwa
Określa nazwę architektury docelowej. GCC używa tej nazwy do określenia
jakie instrukcje może emitować podczas generowania kodu asemblera. Dopuszczalny
imiona to: c62x, c64x, c64x+, c67x, c67x+, c674x.

-mbig-endian
Wygeneruj kod dla celu big-endian.

-mlittle-endian
Generuj kod dla celu little-endian. To jest ustawienie domyślne.

-msim
Wybierz pliki startowe i skrypt linkera odpowiednie dla symulatora.

-msdata=domyślna
Umieść małe globalne i statyczne dane w sekcji ".neardata", na którą wskazuje
zarejestrować „B14”. Umieść małe niezainicjowane dane globalne i statyczne w sekcji ".bss",
który sąsiaduje z sekcją „.neardata”. Umieść małe dane tylko do odczytu w
Sekcja „.rodata”. Odpowiednie sekcje używane dla dużych fragmentów danych to
„.fardata”, „.far” i „.const”.

-msdata=wszystkie
Umieść wszystkie dane, nie tylko małe obiekty, w sekcjach zarezerwowanych dla małych danych i
użyj adresowania względem rejestru „B14”, aby uzyskać do nich dostęp.

-msdata=brak
Nie korzystaj z sekcji zarezerwowanych dla małych danych i używaj adresów bezwzględnych, aby
dostęp do wszystkich danych. Umieść wszystkie zainicjowane globalne i statyczne dane w ".fardata"
sekcji i wszystkie niezainicjowane dane w sekcji „.far”. Umieść wszystkie stałe dane w
sekcja „.const”.

CRIS Opcje

Te opcje są zdefiniowane specjalnie dla portów CRIS.

-marzec=typ architektury
-mcpu=typ architektury
Wygeneruj kod dla określonej architektury. Wybory dla typ architektury
v3, v8 dzięki v10 odpowiednio dla ETRAX 4, ETRAX 100 i ETRAX 100 LX. Wartość domyślna to v0
z wyjątkiem cris-axis-linux-gnu, gdzie wartością domyślną jest v10.

-mtune=typ architektury
Dostrój do typ architektury wszystko, co dotyczy wygenerowanego kodu, z wyjątkiem
ABI oraz zestaw dostępnych instrukcji. Wybory dla typ architektury
taki sam jak dla -marzec=typ architektury.

-mmax-ramka-stosu=n
Ostrzegaj, gdy ramka stosu funkcji przekracza n bajty.

-metrax4
-metrax100
Opcje -metrax4 dzięki -metrax100 są synonimami słowa -marzec=v3 dzięki -marzec=v8
odpowiednio.

-mmul-bug-obejście
-mno-mul-bug-obejście
Obejdź błąd w instrukcjach „muls” i „mulu” dla modeli procesorów, w których
zastosowanie. Ta opcja jest domyślnie aktywna.

-mpdebug
Włącz szczegółowe informacje dotyczące debugowania specyficzne dla CRIS w kodzie zestawu. Ten
opcja ma również wpływ na wyłączenie #NIE_APP sformatowany wskaźnik kodu do
asembler na początku pliku asemblera.

-mcc-init
Nie używaj wyników kodu warunku z poprzedniej instrukcji; zawsze emituj porównaj i
instrukcje testowania przed użyciem kodów stanu.

-mno-efekty uboczne
Nie emituj instrukcji ze skutkami ubocznymi w trybach adresowania innych niż post-
przyrost.

-mstack-wyrównaj
-mno-stosuj-wyrównaj
-mdata-wyrównaj
-mno-data-align
-mconst-wyrównaj
-mno-const-align
Te opcje (no- opcje) ułóż (wyeliminuj układy) dla ramy stosu,
indywidualne dane i stałe do wyrównania w celu uzyskania maksymalnego rozmiaru pojedynczego dostępu do danych
dla wybranego modelu procesora. Domyślnym ustawieniem jest ustawienie wyrównania 32-bitowego. ABI
opcje te nie mają wpływu na szczegóły, takie jak układ struktury.

-m32-bitowy
-m16-bitowy
-m8-bitowy
Podobnie do powyższych opcji stack-data- i const-align, te opcje rozmieszczają
ramka stosu, zapisywalne dane i stałe, aby wszystkie były wyrównane 32-bitowe, 16-bitowe lub 8-bitowe.
Wartość domyślna to wyrównanie 32-bitowe.

-mno-prolog-epilog
-mprolog-epilog
Z -mno-prolog-epilog, normalna funkcja prologu i epilogu, który został ustanowiony
ramki stosu są pomijane i żadne instrukcje powrotu ani sekwencje powrotu nie są
wygenerowane w kodzie. Użyj tej opcji tylko razem z oględzinami
skompilowany kod: żadne ostrzeżenia ani błędy nie są generowane, gdy rejestry zapisane przez wywołanie muszą być
zapisane lub należy przydzielić pamięć dla zmiennych lokalnych.

-mno-gotplt
-mgotplt
Z -fpic dzięki -fPIC, nie generuj (nie generuj) sekwencji instrukcji, które się ładują
adresy dla funkcji z części PLT pulpitu GOT, a nie (tradycyjne na innych)
architektury) wywołania do PLT. Wartość domyślna to -mgotplt.

-melf
Starsza opcja bez operacji rozpoznawana tylko w cris-axis-elf i cris-axis-linux-gnu
Cele.

-mlinux
Starsza opcja bez operacji rozpoznawana tylko w celu cris-axis-linux-gnu.

-sim
Ta opcja, uznana za elf-osi cris, organizuje połączenie z wejściem-wyjściem
funkcje z biblioteki symulatora. Kod, dane zainicjowane i dane zainicjowane zerem
są przydzielane kolejno.

-sim2
Polub -sim, ale przekaż opcje konsolidatora, aby zlokalizować zainicjowane dane w 0x40000000 i zero-
zainicjowane dane w 0x80000000.

CR16 Opcje

Te opcje są zdefiniowane specjalnie dla portów CR16.

-mmac
Włącz korzystanie z instrukcji mnożenia akumulacji. Domyślnie wyłączone.

-mcr16cplus
-mcr16c
Wygeneruj kod dla architektury CR16C lub CR16C+. Architektura CR16C+ jest domyślna.

-msim
Linkuje bibliotekę libsim.a, która jest zgodna z symulatorem. Dotyczy ELF
tylko kompilator.

-miętowy32
Wybierz typ liczby całkowitej o szerokości 32 bitów.

-mbit-ops
Generuje instrukcje "sbit"/"cbit" do manipulacji bitami.

-mdata-model=model
Wybierz model danych. Wybory dla modelBlisko, daleko or średni. średni jest domyślny.
Jednakże, daleko nie obowiązuje z -mcr16c, ponieważ architektura CR16C nie obsługuje
daleki model danych.

Darwin Opcje

Te opcje są zdefiniowane dla wszystkich architektur z systemem operacyjnym Darwin.

FSF GCC na Darwin nie tworzy „grubych” plików obiektowych; tworzy plik obiektowy dla
pojedynczą architekturę, na którą zbudowano GCC. GCC Apple w sprawie Darwina tworzy „tłuszcz”
pliki, jeśli wiele -łuk używane są opcje; robi to, uruchamiając kompilator lub linker
wielokrotnie i łączenie wyników razem z lipo.

Podtyp tworzonego pliku (np. ppc7400 or ppc970 or i686) jest określany przez
flagi określające ISA, na który kieruje GCC, np. -mcpu or -Marsz,
-force_cpusubtype_ALL opcja może być użyta do zastąpienia tego.

Narzędzia Darwina różnią się zachowaniem, gdy zostaną przedstawione z niezgodnością ISA. ten
monter, as, zezwala na użycie tylko instrukcji, które są ważne dla podtypu
plik, który generuje, więc nie możesz umieścić 64-bitowych instrukcji w pliku ppc750 plik obiektowy. ten
linker dla bibliotek współdzielonych, /usr/bin/libtool, kończy się niepowodzeniem i wyświetla błąd, jeśli zostaniesz o to poproszony
utwórz współdzieloną bibliotekę z mniej restrykcyjnym podtypem niż jej pliki wejściowe (dla
na przykład, próbując umieścić ppc970 plik obiektowy w a ppc7400 Biblioteka). Łącznik dla
pliki wykonywalne, ld, po cichu daje plikowi wykonywalnemu najbardziej restrykcyjny podtyp dowolnego z jego
pliki wejściowe.

-Freż
Dodaj katalog framework reż do nagłówka listy katalogów do przeszukania
dla plików nagłówkowych. Te katalogi są przeplatane katalogami określonymi przez -I
opcje i są skanowane w kolejności od lewej do prawej.

Katalog frameworku to katalog, w którym znajdują się frameworki. Ramy to
katalog z Nagłówki i / lub Prywatne nagłówki katalog zawarty bezpośrednio w nim, który
kończy się w .struktura. Nazwa frameworka to nazwa tego katalogu z wyłączeniem
die,en .struktura. Nagłówki powiązane z frameworkiem znajdują się w jednym z tych dwóch
katalogi, z Nagłówki przeszukiwane jako pierwsze. Subframework to framework
katalog, który jest we frameworku Konstrukcje informator. Obejmuje ramy pomocnicze
nagłówki mogą pojawiać się tylko w nagłówku frameworka, który zawiera subframework, lub
w siostrzanym nagłówku struktury podrzędnej. Dwie podstruktury są rodzeństwem, jeśli występują w
te same ramy. Struktura podrzędna nie powinna mieć takiej samej nazwy jak struktura; a
ostrzeżenie jest wyświetlane, jeśli zostanie naruszone. Obecnie podstruktura nie może mieć
podramy; w przyszłości mechanizm może zostać rozszerzony, aby to wspierać. ten
standardowe frameworki można znaleźć w / System / Library / Frameworks dzięki
/ Library / Frameworks. Przykład to wygląda jak „#include ",
gdzie Framework oznacza nazwę struktury i header.h znajduje się w
Prywatne nagłówki or Nagłówki katalogiem.

-iframeworkreż
Polub -F z wyjątkiem tego, że katalog jest traktowany jako katalog systemowy. Podstawowa różnica
między tym -iframework dzięki -F czy to z? -iframework kompilator nie ostrzega
o konstrukcjach zawartych w plikach nagłówkowych znalezionych przez reż. Ta opcja jest prawidłowa
tylko dla rodziny języków C.

- przestraszony
Emituj informacje debugowania dla używanych symboli. W przypadku formatu debugowania stab,
to umożliwia -feliminuj-nieużywane-symbole-debugowania. To jest domyślnie włączone.

-gfull
Emituj informacje debugowania dla wszystkich symboli i typów.

-mmacosx-wersja-min=wersja
Najwcześniejsza wersja MacOS X, na której będzie działał ten plik wykonywalny, to wersja. Typowy
wartości wersja obejmują 10.1, 10.2 i 10.3.9.

Jeśli kompilator został zbudowany tak, aby domyślnie używał nagłówków systemowych, to domyślnie dla
ta opcja to wersja systemu, na którym działa kompilator, w przeciwnym razie
domyślnie jest dokonywanie wyborów, które są kompatybilne z tyloma systemami i bazami kodu, ile
możliwe.

-mkernel
Włącz tryb programowania jądra. ten -mkernel zestawy opcji -statyczny, -fno-wspólny,
-fno-use-cxa-atexit, -fno-wyjątki, -fno-non-call-Exceptions, -fapple-kext,
-fno-słaba dzięki -fno-rtti w stosownych przypadkach. Ten tryb również ustawia -mno-altivec,
-msoft-float, -fno-wbudowany dzięki -mlong-gałąź dla celów PowerPC.

-mone-byte-bool
Zastąp wartości domyślne dla „bool”, aby „sizeof(bool)==1”. Domyślnie "sizeof(bool)"
wynosi 4 przy kompilacji dla Darwin/PowerPC i 1 przy kompilacji dla Darwin/x86, więc to
opcja nie ma wpływu na x86.

Ostrzeżenie: Pandemia -mone-byte-bool przełącznik powoduje, że GCC generuje kod, który nie jest binarny
kompatybilny z kodem wygenerowanym bez tego przełącznika. Korzystanie z tego przełącznika może wymagać
rekompilacja wszystkich innych modułów w programie, w tym bibliotek systemowych. Użyj tego
przełącz, aby dostosować się do innego niż domyślny model danych.

-mfix-i-kontynuuj
-zamocuj-i-kontynuuj
-dane-bezpośrednie
Wygeneruj kod odpowiedni do szybkiego rozwoju, na przykład, aby umożliwić GDB:
ładować dynamicznie .o pliki do już uruchomionych programów. -dane-bezpośrednie dzięki
-zamocuj-i-kontynuuj zapewnia zgodność wsteczną.

-all_load
Ładuje wszystkich członków statycznych bibliotek archiwalnych. Zobacz mężczyznę ld(1), aby uzyskać więcej informacji.

-arch_errors_fatal
Powoduje, że błędy związane z plikami o niewłaściwej architekturze będą fatalne.

-bind_at_load
Powoduje, że plik wyjściowy jest oznaczony w taki sposób, że dynamiczny linker zwiąże wszystkie
niezdefiniowane odniesienia, gdy plik jest ładowany lub uruchamiany.

-pakiet
Utwórz plik w formacie pakietu Mach-o. Zobacz mężczyznę ld(1), aby uzyskać więcej informacji.

-bundle_loader plik wykonywalny
Ta opcja określa plik wykonywalny który załaduje plik wyjściowy kompilacji, który jest
połączony. Zobacz mężczyznę ld(1), aby uzyskać więcej informacji.

-dynamiclib
Po przekazaniu tej opcji, GCC tworzy bibliotekę dynamiczną zamiast pliku wykonywalnego, gdy
łączenie, za pomocą Darwin libtool dowództwo.

-force_cpusubtype_ALL
Powoduje to, że plik wyjściowy GCC ma WSZYSTKO podtyp, zamiast jednego kontrolowanego przez
die,en -mcpu or -Marsz opcja.

-dozwolony_klient Nazwa klienta
-Nazwa klienta
-wersja_zgodności
-obecna wersja
-martwy_strip
-plik-zależności
-dylib_plik
-dylinker_nazwa_instalacji
-dynamiczny
-exported_symbols_list
-lista plików
-płaska_przestrzeń nazw
-force_flat_namespace
-headerpad_max_install_names
-baza_obrazu
-w tym
- nazwa_instalacji
-keep_private_externs
-multi_moduł
-zdefiniuj_wielokrotnie
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-noprebind
- edytuj powiązanie nosowe
-pagezero_size
-prebind
- prebind_all_dwupoziomowe_moduły
-Pakiet_prywatny
-read_only_relocs
-sectalign
-sektoobiektsymbole
-dlaczego?
-seg1addr
-sectcreate
-sektoobiektsymbole
-sektora
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-pojedynczy_moduł
-statyczny
-sub_biblioteka
-sub_parasol
-dwupoziomowa_przestrzeń nazw
-parasol
-nieokreślony
-unexported_symbols_list
-weak_reference_mismatches
-co załadowano
Te opcje są przekazywane do linkera Darwina. Strona podręcznika do łączenia Darwina opisuje:
je szczegółowo.

Grudzień Alfa Opcje

Te -m opcje są zdefiniowane dla implementacji DEC Alpha:

-mno-miękki-pływak
-msoft-float
Użyj (nie używaj) sprzętowych instrukcji zmiennoprzecinkowych dla zmiennoprzecinkowych
operacje. Kiedy -msoft-float jest określony, funkcje w libgcc.a są używane do wykonywania
operacje zmiennoprzecinkowe. Chyba że zostaną zastąpione przez procedury, które naśladują
operacje zmiennoprzecinkowe lub skompilowane w taki sposób, aby wywołać takie emulacje
procedury, te procedury wykonują operacje zmiennoprzecinkowe. Jeśli kompilujesz dla
alfa bez operacji zmiennoprzecinkowych, musisz upewnić się, że biblioteka jest zbudowana
żeby ich nie nazywać.

Zauważ, że implementacje Alpha bez operacji zmiennoprzecinkowych muszą mieć
rejestry zmiennoprzecinkowe.

-mfp-reg
-mno-fp-regs
Wygeneruj kod, który używa (nie używa) zestawu rejestrów zmiennoprzecinkowych. -mno-fp-regs
sugeruje -msoft-float. Jeśli zestaw rejestrów zmiennoprzecinkowych nie jest używany, zmiennoprzecinkowe
operandy są przekazywane w rejestrach całkowitych tak, jakby były liczbami całkowitymi i zmiennoprzecinkowymi
wyniki są przekazywane w $0 zamiast $f0. To jest niestandardowa sekwencja wywołań, więc
dowolna funkcja z argumentem zmiennoprzecinkowym lub wartością zwracaną wywoływaną przez skompilowany kod
z -mno-fp-regs musi być również skompilowany z tą opcją.

Typowym zastosowaniem tej opcji jest budowanie jądra, które nie używa, a zatem potrzebuje
nie zapisuj i nie przywracaj, żadnych rejestrów zmiennoprzecinkowych.

-mieee
Architektura Alpha implementuje sprzęt zmiennoprzecinkowy zoptymalizowany pod kątem maksimum
wydajność. Jest w większości zgodny ze standardem zmiennoprzecinkowym IEEE. Jednakże,
dla pełnej zgodności wymagana jest pomoc w zakresie oprogramowania. Ta opcja generuje kod
w pełni zgodny z IEEE kod z wyjątkiem że niedokładna flaga nie jest utrzymywany (patrz poniżej).
Jeśli ta opcja jest włączona, makro preprocesora „_IEEE_FP” jest definiowane podczas
kompilacja. Otrzymany kod jest mniej wydajny, ale jest w stanie poprawnie obsługiwać
liczby zdenormalizowane i wyjątkowe wartości IEEE, takie jak not-a-number i plus/minus
nieskończoność. Inne kompilatory Alpha nazywają tę opcję -ieee_with_no_inexact.

-mieee-z-niedokładną
To jest jak -mieee poza wygenerowanym kodem zachowuje również IEEE niedokładna flaga.
Włączenie tej opcji powoduje, że wygenerowany kod implementuje pełną zgodność ze standardem IEEE
matematyka. Oprócz „_IEEE_FP”, „_IEEE_FP_EXACT” jest zdefiniowane jako makro preprocesora.
W niektórych implementacjach Alpha wynikowy kod może działać znacznie wolniej niż
kod generowany domyślnie. Ponieważ jest bardzo mało kodu, który zależy od
niedokładna flaga, zwykle nie należy określać tej opcji. Inne kompilatory Alpha dzwonią
ta opcja -ieee_with_inexact.

-tryb-pułapki-mfp=tryb pułapki
Ta opcja kontroluje, jakie pułapki zmiennoprzecinkowe są włączone. Inne alfa
kompilatory nazywają tę opcję -fptm tryb pułapki. Tryb pułapki można ustawić na jeden z czterech
wartości:

n Jest to ustawienie domyślne (normalne). Jedynymi włączonymi pułapkami są:
takie, których nie można wyłączyć w oprogramowaniu (np. dzielenie przez pułapkę zerową).

u Oprócz pułapek włączonych przez n, włączone są również pułapki niedomiaru.

su Polub u, ale instrukcje są oznaczone jako bezpieczne do ukończenia oprogramowania (zobacz
Podręcznik architektury Alpha w celu uzyskania szczegółowych informacji).

na Polub su, ale włączone są również niedokładne pułapki.

-mfp-tryb-zaokrąglania=tryb zaokrąglania
Wybiera tryb zaokrąglania IEEE. Inne kompilatory Alpha nazywają tę opcję -fprm
tryb zaokrąglania, tryb zaokrąglania może być jednym z:

n Normalny tryb zaokrąglania IEEE. Liczby zmiennoprzecinkowe są zaokrąglane do najbliższego
numer maszyny lub w kierunku parzystego numeru maszyny w przypadku remisu.

m Zaokrąglaj w kierunku minus nieskończoności.

c Posiekany tryb zaokrąglania. Liczby zmiennoprzecinkowe są zaokrąglane do zera.

d Tryb dynamicznego zaokrąglania. Pole w rejestrze sterującym zmiennoprzecinkowym (fpcr, Patrz
Podręcznik referencyjny architektury Alpha) kontroluje obowiązujący tryb zaokrąglania. C
biblioteka inicjuje ten rejestr w celu zaokrąglenia w kierunku plus nieskończoności. Zatem,
chyba że twój program modyfikuje fpcr, d odpowiada zaokrągleniu w kierunku plus
Nieskończoność.

-mtrap-precyzja=pułapka-precyzja
W architekturze Alpha pułapki zmiennoprzecinkowe są nieprecyzyjne. Oznacza to bez
pomoc programowa nie da się wydobyć z pływającej pułapki i programu
wykonanie zwykle musi zostać zakończone. GCC może generować kod, który może pomóc
obsługi pułapek systemu operacyjnego w określaniu dokładnej lokalizacji, która spowodowała a
pułapka zmiennoprzecinkowa. W zależności od wymagań aplikacji, różne
można wybrać poziomy precyzji:

p Precyzja programu. Ta opcja jest domyślna i oznacza, że ​​program obsługujący pułapki może tylko
określić, który program spowodował wyjątek zmiennoprzecinkowy.

f Precyzja funkcji. Program obsługi pułapki może określić funkcję, która spowodowała a
wyjątek zmiennoprzecinkowy.

i Dokładność instrukcji. Osoba zajmująca się pułapką może określić dokładną instrukcję, która:
spowodował wyjątek zmiennoprzecinkowy.

Inne kompilatory Alpha zapewniają równoważne opcje zwane -scope_safe dzięki
-wznawianie_bezpieczne.

-mieee-zgodny
Ta opcja oznacza wygenerowany kod jako zgodny z IEEE. Nie możesz używać tej opcji
chyba że określisz również -mtrap-precyzja=i i albo -tryb-pułapki-mfp=su or
-tryb-pułapki-mfp=sui. Jego jedynym efektem jest wyemitowanie linii .flaga 48 w funkcji
prolog wygenerowanego pliku zespołu.

-mbuild-constants
Zwykle GCC sprawdza 32- lub 64-bitową stałą całkowitą, aby sprawdzić, czy może ją skonstruować
z mniejszych stałych w dwóch lub trzech instrukcjach. Jeśli nie, wyświetla
stała jako literał i generuje kod w celu załadowania go z segmentu danych w czasie wykonywania.

Użyj tej opcji, aby wymagać GCC do konstruowania cała kolekcja stałe całkowite przy użyciu kodu, nawet jeśli
wymaga więcej instrukcji (maksymalnie sześć).

Zwykle używasz tej opcji do zbudowania dynamicznego programu ładującego biblioteki współdzielone. Sama
biblioteka współdzielona, ​​musi przenieść się w pamięci, zanim będzie mogła znaleźć zmienne i
stałe we własnym segmencie danych.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-mmmax
-mno-max
Wskaż, czy GCC ma generować kod, aby użyć opcjonalnych BWX, CIX, FIX i MAX
zestawy instrukcji. Domyślnie używane są zestawy instrukcji obsługiwane przez procesor
typ określony przez -mcpu= lub opcji procesora, na którym zbudowano GCC, jeśli żadna nie jest
określony.

-mfloat-vax
-mfloat-ieee
Wygeneruj kod, który zamiast tego używa (nie używa) arytmetyki zmiennoprzecinkowej VAX F i G
IEEE pojedynczej i podwójnej precyzji.

-mexplicit-relocs
-mno-explicit-relocs
Starsze asemblery Alpha nie zapewniały możliwości generowania relokacji symboli z wyjątkiem via
makra asemblera. Użycie tych makr nie pozwala na optymalne planowanie instrukcji.
GNU binutils od wersji 2.12 obsługuje nową składnię, która umożliwia kompilatorowi:
wyraźnie zaznacz, które delokalizacje powinny mieć zastosowanie do jakich instrukcji. Ta opcja to
głównie przydatne do debugowania, ponieważ GCC wykrywa możliwości asemblera, gdy ten
jest zbudowany i odpowiednio ustawia wartość domyślną.

-msmall-data
-mlarge-data
Gdy -mexplicit-relocs obowiązuje, dostęp do danych statycznych odbywa się przez gp-krewny
relokacje. Kiedy -msmall-data jest używane, obiekty o długości 8 bajtów lub mniejsze są umieszczane w
a mały data obszar (sekcje ".sdata" i ".sbss") i są dostępne przez 16-bitowe
relokacje poza rejestr $gp. Ogranicza to rozmiar małego obszaru danych do
64 KB, ale umożliwia bezpośredni dostęp do zmiennych za pomocą pojedynczej instrukcji.

Wartość domyślna to -mlarge-data. Dzięki tej opcji obszar danych jest ograniczony do tuż poniżej
2 GB. Programy, które wymagają więcej niż 2 GB danych, muszą używać „malloc” lub „mmap”, aby
alokuj dane w stercie zamiast w segmencie danych programu.

Podczas generowania kodu dla bibliotek współdzielonych, -fpic sugeruje -msmall-data dzięki -fPIC
sugeruje -mlarge-data.

-mały-tekst
-duży-tekst
Gdy -mały-tekst jest używany, kompilator zakłada, że ​​kod całego programu
(lub biblioteka współdzielona) mieści się w 4MB, a zatem jest osiągalna za pomocą instrukcji oddziału.
Gdy -msmall-data jest używany, kompilator może założyć, że wszystkie lokalne symbole współdzielą
taką samą wartość $gp, a tym samym zmniejszyć liczbę instrukcji wymaganych dla funkcji
zadzwoń od 4 do 1.

Wartość domyślna to -duży-tekst.

-mcpu=typ_procesora
Ustaw zestaw instrukcji i parametry planowania instrukcji dla typu maszyny
typ_procesora. Możesz określić EV nazwa stylu lub odpowiedni numer chipa.
GCC obsługuje szeregowanie parametrów dla rodziny procesorów EV4, EV5 i EV6 oraz
wybiera domyślne wartości dla zestawu instrukcji z procesora, który określisz. Gdyby
nie określisz typu procesora, GCC domyślnie do procesora, na którym
kompilator został zbudowany.

Obsługiwane wartości dla typ_procesora

ev4
ev45
21064
Planuje jako EV4 i nie ma rozszerzeń zestawu instrukcji.

ev5
21164
Planuje jako EV5 i nie ma rozszerzeń zestawu instrukcji.

ev56
21164
Planuje jako EV5 i obsługuje rozszerzenie BWX.

pca56
21164pc
21164PC
Planuje jako EV5 i obsługuje rozszerzenia BWX i MAX.

ev6
21264
Planuje jako EV6 i obsługuje rozszerzenia BWX, FIX i MAX.

ev67
21264
Planuje jako EV6 i obsługuje rozszerzenia BWX, CIX, FIX i MAX.

Natywne łańcuchy narzędzi również wspierają tę wartość rodzimy, który wybiera najlepszą architekturę
opcja dla procesora hosta. -mcpu=natywny nie działa, jeśli GCC nie rozpoznaje
procesor.

-mtune=typ_procesora
Ustaw tylko parametry planowania instrukcji dla typu maszyny typ_procesora,
zestaw instrukcji nie jest zmieniany.

Natywne łańcuchy narzędzi również wspierają tę wartość rodzimy, który wybiera najlepszą architekturę
opcja dla procesora hosta. -mtune=natywny nie działa, jeśli GCC nie rozpoznaje
procesor.

-opóźnienie-pamięci=czas
Ustawia opóźnienie, które planista powinien przyjąć dla typowych odwołań do pamięci, jak widzi
Aplikacja. Ta liczba jest wysoce zależna od używanych wzorców dostępu do pamięci
przez aplikację i rozmiar zewnętrznej pamięci podręcznej na komputerze.

Prawidłowe opcje dla czas

numer
Liczba dziesiętna reprezentująca cykle zegara.

L1
L2
L3
główny
Kompilator zawiera oszacowania liczby cykli zegara dla „typowego” EV4 i
Sprzęt EV5 dla pamięci podręcznych poziomu 1, 2 i 3 (zwanych również Dcache, Scache i
Bcache), a także do pamięci głównej. Zauważ, że L3 jest ważne tylko dla EV5.

FR30 Opcje

Te opcje są zdefiniowane specjalnie dla portu FR30.

-mały-model
Użyj modelu małej przestrzeni adresowej. Może to generować mniejszy kod, ale zakłada
że wszystkie wartości symboliczne i adresy mieszczą się w zakresie 20-bitowym.

-mno-lsim
Załóżmy, że zapewniono obsługę środowiska uruchomieniowego, więc nie ma potrzeby dołączania
biblioteka symulatorów (libsim.a) w wierszu poleceń konsolidatora.

FRV Opcje

-mgpr-32
Używaj tylko pierwszych 32 rejestrów ogólnego przeznaczenia.

-mgpr-64
Użyj wszystkich 64 rejestrów ogólnego przeznaczenia.

-mfpr-32
Użyj tylko pierwszych 32 rejestrów zmiennoprzecinkowych.

-mfpr-64
Użyj wszystkich 64 rejestrów zmiennoprzecinkowych.

-mhard-float
Użyj instrukcji sprzętowych dla operacji zmiennoprzecinkowych.

-msoft-float
Użyj procedur bibliotecznych do operacji zmiennoprzecinkowych.

-malloc-cc
Dynamicznie przydzielaj rejestry kodu warunku.

-mfixed-cc
Nie próbuj dynamicznie przydzielać rejestrów kodu warunku, używaj tylko „icc0” i
"fcc0".

-mdword
Zmień ABI, aby używał podwójnego słowa insns.

-mno-dword
Nie używaj instrukcji dwuwyrazowych.

-mdouble
Użyj podwójnych instrukcji zmiennoprzecinkowych.

-mno-podwójny
Nie używaj podwójnych instrukcji zmiennoprzecinkowych.

-mmedia
Skorzystaj z instrukcji dotyczących multimediów.

-mno-media
Nie używaj instrukcji dotyczących nośników.

-mmuladd
Użyj instrukcji mnożenia i dodawania/odejmowania.

-mno-muladd
Nie używaj instrukcji mnożenia i dodawania/odejmowania.

-mfdpic
Wybierz FDPIC ABI, który używa deskryptorów funkcji do reprezentowania wskaźników do
Funkcje. Bez żadnych opcji związanych z PIC/PIE oznacza to -fPIE. Z -fpic or
-fpie, zakłada, że ​​wpisy GOT i małe dane znajdują się w zakresie 12-bitowym od GOT
adres bazowy; z -fPIC or -fPIE, offsety GOT są obliczane za pomocą 32 bitów. Z
bfin-elf cel, ta opcja implikuje -msim.

-minline-plt
Włącz wstawianie wpisów PLT w wywołaniach funkcji do funkcji, o których nie wiadomo
wiązać lokalnie. Nie ma żadnego efektu bez -mfdpic. Jest domyślnie włączone, jeśli
optymalizacja pod kątem szybkości i kompilacja dla bibliotek współdzielonych (tj. -fPIC or -fpic), lub
gdy opcja optymalizacji, taka jak -O3 lub powyżej jest obecny w wierszu poleceń.

-mTLS
Załóż duży segment TLS podczas generowania kodu lokalnego wątku.

-mtls
Nie zakładaj dużego segmentu TLS podczas generowania kodu lokalnego wątku.

-mgprel-ro
Włącz korzystanie z relokacji „GPREL” w FDPIC ABI dla danych, o których wiadomo, że są w
sekcje tylko do odczytu. Jest domyślnie włączone, z wyjątkiem -fpic or -fpie: nawet jeśli
może to pomóc zmniejszyć globalną tabelę offsetów, zamienia 1 instrukcję na 4. Z
-fPIC or -fPIE, handluje 3 instrukcjami na 4, z których jedna może być dzielona przez wiele
symbole i pozwala uniknąć konieczności wpisu GOT dla symbolu, do którego się odwołuje, więc jest to
bardziej prawdopodobne, że będzie wygrana. Jeżeli nie jest, -mno-gprel-ro można go użyć do wyłączenia.

-multilib-biblioteka-pic
Link do bibliotek pic (biblioteki, nie FD). Wynika to z -mlibrary-pic, także
jak przez -fPIC dzięki -fpic bez -mfdpic. Nigdy nie powinieneś tego używać wprost.

-mlinked-fp
Postępuj zgodnie z wymogiem EABI, aby zawsze tworzyć wskaźnik ramki za każdym razem, gdy ramka stosu
jest przydzielony. Ta opcja jest domyślnie włączona i można ją wyłączyć za pomocą
-mno-linked-fp.

-mlong-rozmowy
Użyj adresowania pośredniego, aby wywołać funkcje poza bieżącą jednostką kompilacji. Ten
umożliwia umieszczenie funkcji w dowolnym miejscu 32-bitowej przestrzeni adresowej.

-malign-etykiety
Spróbuj wyrównać etykiety do granicy 8-bajtów, wstawiając znaki NOP do poprzedniego pakietu.
Ta opcja działa tylko wtedy, gdy włączone jest pakowanie VLIW. Nie tworzy nowych
pakiety; dodaje jedynie NOP do już istniejących.

-mlibrary-pic
Generuj kod EABI niezależny od pozycji.

-macc-4
Używaj tylko pierwszych czterech rejestrów akumulatora nośnika.

-macc-8
Użyj wszystkich ośmiu rejestrów akumulatorów mediów.

-mpack
Zapakuj instrukcje VLIW.

-mno-pakiet
Nie pakuj instrukcji VLIW.

-mno-flagi
Nie zaznaczaj przełączników ABI w e_flagach.

-mcond-ruch
Włącz użycie instrukcji warunkowego przenoszenia (domyślnie).

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mno-cond-ruch
Wyłącz użycie instrukcji ruchu warunkowego.

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mscc
Włącz korzystanie z instrukcji zestawu warunkowego (domyślnie).

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mno-scc
Wyłącz użycie instrukcji zestawu warunkowego.

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mcond-exec
Włącz korzystanie z wykonywania warunkowego (domyślnie).

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mno-cond-exec
Wyłącz korzystanie z wykonywania warunkowego.

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mvliw-oddział
Uruchom przepustkę, aby spakować gałęzie do instrukcji VLIW (domyślnie).

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mno-vliw-oddział
Nie uruchamiaj przepustki, aby pakować gałęzie do instrukcji VLIW.

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mmulti-cond-exec
Włącz optymalizację „&&” i „||” w wykonaniu warunkowym (domyślnie).

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mno-multi-cond-exec
Wyłącz optymalizację „&&” i „||” w wykonaniu warunkowym.

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mnested-cond-exec
Włącz zagnieżdżone warunkowe optymalizacje wykonywania (domyślnie).

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-mno-zagnieżdżony-cond-exec
Wyłącz zagnieżdżone optymalizacje wykonywania warunkowego.

Ten przełącznik służy głównie do debugowania kompilatora i prawdopodobnie zostanie usunięty za
przyszła wersja.

-moptimize-membar
Ten przełącznik usuwa zbędne instrukcje „membar” z kodu generowanego przez kompilator.
Jest domyślnie włączony.

-mno-optymalizuj-membar
Ten przełącznik wyłącza automatyczne usuwanie zbędnych instrukcji „membar” z
wygenerowany kod.

-mtomcat-stats
Spraw, aby gaz wydrukował statystyki kocura.

-mcpu=cpu
Wybierz typ procesora, dla którego chcesz wygenerować kod. Możliwe wartości to frv, fr550,
kocur, fr500, fr450, fr405, fr400, fr300 dzięki prosty.

GNU / Linux Opcje

Te -m opcje są zdefiniowane dla podsystemów GNU/Linux:

-mglibc
Użyj biblioteki GNU C. To jest ustawienie domyślne, z wyjątkiem on *-*-linux-*uclibc* dzięki
*-*-linux-*android* Cele.

-muclibc
Użyj biblioteki uClibc C. To jest domyślnie włączone *-*-linux-*uclibc* Cele.

-mbioniczny
Użyj biblioteki Bionic C. To jest domyślnie włączone *-*-linux-*android* Cele.

-mandroid
Skompiluj kod zgodny z platformą Android. To jest domyślnie włączone
*-*-linux-*android* Cele.

Podczas kompilacji ta opcja włącza -mbioniczny, -fPIC, -fno-wyjątki dzięki -fno-rtti by
domyślny. Podczas łączenia ta opcja powoduje, że sterownik GCC przechodzi opcje specyficzne dla Androida
do konsolidatora. Na koniec ta opcja powoduje, że makro preprocesora „__ANDROID__” zostanie:
zdefiniowane.

-tno-android-cc
Wyłącz efekty kompilacji -mandroid, czyli nie włączaj -mbioniczny, -fPIC,
-fno-wyjątki dzięki -fno-rtti domyślnie.

-tno-android-ld
Wyłącz efekty łączenia -mandroid, tzn. przekaż standardowe opcje linkowania Linuksa do
konsolidator.

H8 / 300 Opcje

Te -m opcje są zdefiniowane dla wdrożeń H8/300:

-mrelaks
Jeśli to możliwe, skróć niektóre odniesienia do adresów w czasie połączenia; używa opcji linkera
-zrelaksować się.

-mh Wygeneruj kod dla H8/300H.

-ms Wygeneruj kod dla H8S.

-mn Wygeneruj kod dla H8S i H8/300H w trybie normalnym. Ten przełącznik musi być używany
zarówno z -mh or -ms.

-ms2600
Wygeneruj kod dla H8S/2600. Ten przełącznik musi być używany z -ms.

-mexr
Rozszerzone rejestry są przechowywane na stosie przed wykonaniem funkcji z monitorem
atrybut. Domyślną opcją jest -mexr. Ta opcja jest ważna tylko dla celów H8S.

-mno-exr
Rozszerzone rejestry nie są przechowywane na stosie przed wykonaniem funkcji z monitorem
atrybut. Domyślną opcją jest -mno-exr. Ta opcja jest ważna tylko dla celów H8S.

-miętowy32
Domyślne ustawienie danych "int" to 32 bity.

-złośliwy-300
W modelach H8/300H i H8S należy stosować te same zasady wyrównania, co w modelu H8/300. Domyślny
dla H8/300H i H8S jest wyrównanie długich i pływających w granicach 4-bajtowych.
-złośliwy-300 powoduje ich wyrównanie w granicach 2 bajtów. Ta opcja nie ma wpływu
na H8/300.

HPPA Opcje

Te -m opcje są zdefiniowane dla rodziny komputerów HPPA:

-marzec=typ architektury
Wygeneruj kod dla określonej architektury. Wybory dla typ architektury
1.0 dla PA 1.0, 1.1 dla PA 1.1 i 2.0 dla procesorów PA 2.0. Odnosić się do
/usr/lib/sched.models w systemie HP-UX w celu określenia odpowiedniej opcji architektury
dla Twojej maszyny. Kod skompilowany dla architektur o niższych numerach działa na wyższych
ponumerowane architektury, ale nie na odwrót.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Synonimy dla -marzec=1.0, -marzec=1.1, -marzec=2.0 odpowiednio.

-przeskok-opóźnienie
Ta opcja jest ignorowana i udostępniana tylko w celu zapewnienia zgodności.

-mdisable-fpregs
Zapobiegaj używaniu rejestrów zmiennoprzecinkowych w jakikolwiek sposób. Jest to konieczne dla
kompilowanie jąder, które wykonują leniwe przełączanie kontekstu rejestrów zmiennoprzecinkowych. Gdyby
używasz tej opcji i próbujesz wykonać operacje zmiennoprzecinkowe, kompilator
aborcje.

-mdisable-indeksowanie
Zapobiegaj używaniu przez kompilator trybów adresów indeksowania. Pozwala to raczej uniknąć niektórych
niejasne problemy podczas kompilowania kodu generowanego przez MIG pod MACH.

-mno-space-regs
Wygeneruj kod, który zakłada, że ​​cel nie ma rejestrów przestrzeni. Pozwala to GCC na
generować szybsze połączenia niebezpośrednie i używać nieskalowanych trybów adresu indeksu.

Taki kod jest odpowiedni dla systemów PA i jąder poziomu 0.

-mfast-połączenia-bezpośrednie
Generuj kod, który zakłada, że ​​wywołania nigdy nie przekraczają granic przestrzeni. Pozwala to GCC na
emitować kod, który wykonuje szybsze wywołania pośrednie.

Ta opcja nie działa w obecności bibliotek współdzielonych lub funkcji zagnieżdżonych.

-mfixed-range=rejestr-zakres
Wygeneruj kod traktujący dany zakres rejestrów jako rejestry stałe. Stały rejestr
to taki, którego alokator rejestru nie może użyć. Jest to przydatne podczas kompilowania jądra
kod. Zakres rejestrów jest określony jako dwa rejestry oddzielone myślnikiem. Wiele
zakresy rejestrów można określić oddzielone przecinkiem.

-mlong-load-store
Generuj 3-instrukcyjne ładowanie i przechowuj sekwencje, które czasami są wymagane przez HP-UX 10
linker. Odpowiada to +k opcja dla kompilatorów HP.

-portable-runtime
Użyj konwencji połączeń przenośnych proponowanych przez HP dla systemów ELF.

-mgas
Włącz używanie dyrektyw asemblera, które rozumie tylko GAS.

-mschedule=typ procesora
Kod harmonogramu zgodnie z ograniczeniami dla typu maszyny typ procesora. Wybory
dla typ procesora700 7100, 7100LC, 7200, 7300 dzięki 8000. Odnosić się do
/usr/lib/sched.models w systemie HP-UX, aby określić odpowiednią opcję planowania dla
Twoja maszyna. Domyślny harmonogram to 8000.

-mlinker-opt
Włącz przebieg optymalizacji w konsolidatorze HP-UX. Zauważ, że to powoduje symboliczne debugowanie
niemożliwy. Wywołuje również błąd w linkerach HP-UX 8 i HP-UX 9, w których:
wyświetlaj fałszywe komunikaty o błędach podczas łączenia niektórych programów.

-msoft-float
Generuj dane wyjściowe zawierające wywołania bibliotek dla zmiennoprzecinkowych. Ostrzeżenie: wymagane
biblioteki nie są dostępne dla wszystkich celów HPPA. Zwykle obiekty
używany jest zwykły kompilator C maszyny, ale nie można tego zrobić bezpośrednio w
kompilacja. Musisz dokonać własnych ustaleń, aby zapewnić odpowiednią bibliotekę
funkcje do kompilacji krzyżowej.

-msoft-float zmienia konwencję wywoływania w pliku wyjściowym; dlatego to tylko
przydatne, jeśli kompilujesz cała kolekcja programu z tą opcją. W szczególności musisz
skompilować libgcc.a, biblioteka dostarczana z GCC, z -msoft-float w tym celu
pracować.

-msio
Wygeneruj predefinicję „_SIO” dla IO serwera. Wartość domyślna to -mwsio. To generuje
predefiniowane "__hp9000s700", "__hp9000s700__" i "_WSIO" dla IO stacji roboczej.
Te opcje są dostępne w HP-UX i HI-UX.

-mgnu-ld
Użyj opcji specyficznych dla GNU ld. To przechodzi -wspólny do ld podczas budowania wspólnego
Biblioteka. Jest to ustawienie domyślne, gdy GCC jest skonfigurowane, jawnie lub niejawnie, z
Konsolidator GNU. Ta opcja nie wpływa na to, które ld nazywa się; to tylko zmienia co
parametry są do tego przekazywane ld, ld nazwana jest określona przez
--z-ld opcję konfiguracji, ścieżkę wyszukiwania programu GCC, a na koniec przez użytkownika PATH.
Linker używany przez GCC można wydrukować za pomocą który gcc -print-prog-name=ld`, To
opcja jest dostępna tylko w 64-bitowym HP-UX GCC, tj. skonfigurowana z
hppa*64*-*-hpux*.

-mhp-ld
Użyj opcji specyficznych dla HP ld. To przechodzi -b do ld podczas budowania biblioteki współdzielonej
i przechodzi +Akceptuj Typ Niezgodność do ld na wszystkich linkach. Jest to ustawienie domyślne, gdy GCC to
skonfigurowane, jawnie lub niejawnie, za pomocą linkera HP. Ta opcja nie ma wpływu
który ld nazywa się; zmienia tylko parametry, które są do tego przekazywane ld, ld
nazwana jest określona przez --z-ld opcja konfiguracji, wyszukiwanie programów GCC
ścieżkę, a na koniec przez użytkownika PATH. Linker używany przez GCC można wydrukować za pomocą
który gcc -print-prog-name=ld`. Ta opcja jest dostępna tylko w 64-bitowym HP-UX
GCC, czyli skonfigurowany z hppa*64*-*-hpux*.

-mlong-rozmowy
Generuj kod, który używa długich sekwencji wywołań. Dzięki temu połączenie jest zawsze możliwe
aby dotrzeć do kodów pośredniczących generowanych przez linker. Domyślnym ustawieniem jest generowanie długich połączeń tylko wtedy, gdy
odległość od miejsca połączenia do początku funkcji lub jednostki tłumaczeniowej, jako
przypadek może przekroczyć predefiniowany limit ustawiony przez używany typ gałęzi. ten
limity dla normalnych połączeń to 7,600,000 240,000 2.0 i XNUMX XNUMX bajtów, odpowiednio dla PA XNUMX
i PA 1.X architektury. Sibcalls są zawsze ograniczone do 240,000 XNUMX bajtów.

Odległości są mierzone od początku funkcji przy użyciu
-sekcje-funkcji opcji lub podczas korzystania z -mgas dzięki -mno-portable-runtime Opcje
razem pod HP-UX z linkerem SOM.

Zwykle nie jest pożądane używanie tej opcji, ponieważ obniża to wydajność. Jednakże,
może to być przydatne w dużych aplikacjach, szczególnie gdy częściowe linkowanie jest używane do
zbudować aplikację.

Rodzaje używanych długich wywołań zależą od możliwości asemblera i linkera,
oraz rodzaj generowanego kodu. Wpływ na systemy obsługujące długo
połączenia bezwzględne, a długa różnica symboli obrazu lub połączenia względne z komputerem powinny być
relatywnie mały. Jednak połączenie pośrednie jest używane w 32-bitowych systemach ELF w kodzie pic
i jest dość długi.

-unix=unix-std
Wygeneruj predefinicje kompilatora i wybierz plik startowy dla określonego standardu UNIX.
Wybory dla unix-std93, 95 dzięki 98. 93 jest obsługiwany we wszystkich wersjach HP-UX.
95 jest dostępny w HP-UX 10.10 i nowszych. 98 jest dostępny w HP-UX 11.11 i nowszych.
Wartości domyślne to 93 dla HP-UX 10.00, 95 dla HP-UX 10.10 do 11.00 i 98
dla HP-UX 11.11 i nowszych.

-unix=93 zawiera te same predefinicje, co GCC 3.3 i 3.4. -unix=95 zapewnia
dodatkowe predefinicje dla „XOPEN_UNIX” i „_XOPEN_SOURCE_EXTENDED” oraz plik startowy
unix95.o. -unix=98 zapewnia dodatkowe predefinicje dla „_XOPEN_UNIX”,
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" i "_INCLUDE_XOPEN_SOURCE_500",
i plik startowy unix98.o.

Jest ważny zauważyć, że ta opcja zmienia interfejsy dla różnych bibliotek
rutyny. Wpływa również na zachowanie operacyjne biblioteki C. Zatem, skrajny
należy zachować ostrożność podczas korzystania z tej opcji.

Kod biblioteki, który ma działać z więcej niż jednym standardem UNIX, musi przetestować,
ustaw i przywróć odpowiednio zmienną "__xpg4_extended_mask". Większość oprogramowania GNU
nie zapewnia takiej możliwości.

-nolibdld
Pomiń generowanie opcji linków do przeszukiwania libdld.sl, gdy -statyczny Jest opcja
określone w HP-UX 10 i nowszych.

-statyczny
Implementacja setlocale w HP-UX w libc jest zależna od libdld.sl. Tam
nie jest archiwalną wersją libdld.sl. Tak więc, gdy -statyczny opcja jest określona,
Aby rozwiązać tę zależność, potrzebne są specjalne opcje łącza.

W HP-UX 10 i nowszych, sterownik GCC dodaje niezbędne opcje do połączenia z
libdld.sl, gdy -statyczny opcja jest określona. Powoduje to, że wynikowy plik binarny do
być dynamicznym. Na porcie 64-bitowym linkery domyślnie generują dynamiczne pliki binarne w
w każdym przypadku. ten -nolibdld opcja może być użyta, aby uniemożliwić dodawanie sterownika GCC
te opcje linków.

-wątki
Dodaj obsługę wielowątkowości za pomocą dce wątek biblioteka pod HP-UX. Ta opcja
ustawia flagi zarówno dla preprocesora, jak i konsolidatora.

IA-64 Opcje

Są to -m opcje zdefiniowane dla architektury Intel IA-64.

-mbig-endian
Wygeneruj kod dla celu big-endian. Jest to ustawienie domyślne dla HP-UX.

-mlittle-endian
Wygeneruj kod dla celu little-endian. Jest to ustawienie domyślne dla AIX5 i GNU/Linux.

-mgnu-as
-mno-gnu-as
Generuj (lub nie) kod dla asemblera GNU. To jest ustawienie domyślne.

-mgnu-ld
-mno-gnu-ld
Generuj (lub nie) kod dla linkera GNU. To jest ustawienie domyślne.

-mno-pic
Generuj kod, który nie używa rejestru globalnego wskaźnika. Wynikiem nie jest pozycja
niezależny kod i narusza IA-64 ABI.

-mvolatile-asm-stop
-mno-lotny-asm-stop
Generuj (lub nie) bit stopu bezpośrednio przed i po ulotnych instrukcjach asm.

-nazwy-rejestrów
-mno-rejestry-nazwy
Generuj (lub nie) in, loc, na zewnątrz nazwy rejestrów dla rejestrów ułożonych w stos. Ten
może sprawić, że dane wyjściowe asemblera będą bardziej czytelne.

-mno-sdata
-msdata
Wyłącz (lub włącz) optymalizacje korzystające z małej sekcji danych. To może być przydatne
do obejścia błędów optymalizatora.

-mstała-gp
Generuj kod, który używa pojedynczej stałej globalnej wartości wskaźnika. Jest to przydatne, gdy
kompilowanie kodu jądra.

-mauto-zdjęcie
Wygeneruj kod, który można samodzielnie przenieść. Oznacza to -mstała-gp. To jest przydatne
podczas kompilowania kodu oprogramowania układowego.

-minline-float-divide-min-latency
Generuj kod dla wewnętrznych dzieleń wartości zmiennoprzecinkowych przy użyciu minimalnego opóźnienia
algorytm.

-minline-float-divide-max-przepustowość
Generuj kod dla wewnętrznych dzieleń wartości zmiennoprzecinkowych przy użyciu maksymalnej przepustowości
algorytm.

-mno-inline-float-divide
Nie generuj kodu wbudowanego dla dzieleń wartości zmiennoprzecinkowych.

-minline-int-divide-min-latency
Generuj kod dla wewnętrznych dzieleń wartości całkowitych przy użyciu minimalnego opóźnienia
algorytm.

-minline-int-divide-max-przepustowość
Generuj kod dla wewnętrznych dzieleń wartości całkowitych przy użyciu maksymalnej przepustowości
algorytm.

-mno-inline-int-divide
Nie generuj kodu wbudowanego dla dzielenia wartości całkowitych.

-minline-sqrt-min-opóźnienie
Generuj kod dla wbudowanych pierwiastków kwadratowych przy użyciu algorytmu minimalnego opóźnienia.

-minline-sqrt-max-przepustowość
Generuj kod dla wbudowanych pierwiastków kwadratowych przy użyciu algorytmu maksymalnej przepustowości.

-mno-inline-sqrt
Nie generuj kodu wbudowanego dla „sqrt”.

-mfused-madd
-mno-skondensowany-madd
Czy (nie) generuj kodu, który używa połączonego mnożenia/dodawania lub mnożenia/odejmowania
instrukcje. Domyślnie używa się tych instrukcji.

-mno-krasnolud2-asm
-mdwarf2-asm
Nie generuj (lub nie rób) kodu asemblera dla informacji debugowania numeru linii DWARF 2.
Może to być przydatne, gdy nie używasz asemblera GNU.

-marly-stop-bits
-mno-wczesne-stop-bity
Zezwalaj na umieszczanie bitów stopu wcześniej niż bezpośrednio przed instrukcją, która
uruchomił bit stopu. Może to usprawnić planowanie instrukcji, ale nie zawsze
Zrób tak.

-mfixed-range=rejestr-zakres
Wygeneruj kod traktujący dany zakres rejestrów jako rejestry stałe. Stały rejestr
to taki, którego alokator rejestru nie może użyć. Jest to przydatne podczas kompilowania jądra
kod. Zakres rejestrów jest określony jako dwa rejestry oddzielone myślnikiem. Wiele
zakresy rejestrów można określić oddzielone przecinkiem.

-rozmiar-mtls=tls-rozmiar
Określ rozmiar bitowy bezpośrednich przesunięć TLS. Prawidłowe wartości to 14, 22 i 64.

-mtune=typ procesora
Dostosuj planowanie instrukcji dla konkretnego procesora, Prawidłowe wartości to Itanium,
itanium1, Łaska, itanium2, McKinley.

-milp32
-mlp64
Generuj kod dla środowiska 32-bitowego lub 64-bitowego. Środowisko 32-bitowe ustawia int,
długi i wskaźnik do 32 bitów. Środowisko 64-bitowe ustawia się na 32-bitowe i długie oraz
wskaźnik do 64 bitów. Są to flagi specyficzne dla HP-UX.

-mno-sched-br-data-spec
-msched-br-data-spec
(Wyłącz/Włącz) spekulacyjne planowanie danych przed ponownym załadowaniem. Powoduje to generowanie
instrukcje „ld.a” i odpowiednie instrukcje sprawdzania („ld.c” / „chk.a”). ten
domyślnie „wyłącz”.

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis) Możliwość spekulacyjnego planowania danych po przeładowaniu. Powoduje to generowanie
instrukcje „ld.a” i odpowiednie instrukcje sprawdzania („ld.c” / „chk.a”). ten
domyślnie „włącz”.

-mno-zaplanowana-specyfikacja-kontroli
-msched-specyfikacja-kontroli
(Dis/En)able kontroli spekulatywnego planowania. Ta funkcja jest dostępna tylko podczas
planowanie regionu (tj. przed ponownym załadowaniem). Powoduje to wygenerowanie "ld.s"
instrukcje i odpowiednie instrukcje kontrolne "chk.s". Wartość domyślna to
'wyłączyć'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis)możliwe spekulacyjne planowanie instrukcji, które są zależne od danych
ładunki spekulacyjne przed przeładowaniem. Działa to tylko z -msched-br-data-spec
włączony. Wartość domyślna to „włącz”.

-msched-ar-in-data-spec
-mno-zaplanowane-ar-w-danych-specyfikacji
(En/Dis)możliwe spekulacyjne planowanie instrukcji, które są zależne od danych
ładunki spekulacyjne po przeładowaniu. Działa to tylko z -msched-ar-data-spec
włączony. Wartość domyślna to „włącz”.

-msched-in-specyfikacja-kontroli
-mno-zaplanowana-specyfikacja-kontroli
(En/Dis)możliwe spekulacyjne planowanie instrukcji, które są zależne od
kontrolować ładunki spekulacyjne. Działa to tylko z -msched-specyfikacja-kontroli włączone.
Wartość domyślna to „włącz”.

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Jeśli włączone, instrukcje dotyczące danych spekulacyjnych są wybierane do harmonogramu tylko wtedy, gdy nie ma
inne opcje w tej chwili. To sprawia, że ​​korzystanie ze spekulacji danych jest znacznie większe
konserwatywny. Wartość domyślna to „wyłącz”.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Jeśli włączone, instrukcje sterujące i spekulacyjne są wybierane do harmonogramu tylko wtedy, gdy istnieją:
brak innych wyborów w tej chwili. To sprawia, że ​​stosowanie spekulacji kontrolnych jest bardzo duże
bardziej konserwatywny. Wartość domyślna to „wyłącz”.

-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
Jeśli ta opcja jest włączona, zależności spekulacyjne są brane pod uwagę podczas obliczania
priorytety instrukcji. To sprawia, że ​​korzystanie ze spekulacji jest nieco większe
konserwatywny. Wartość domyślna to „wyłącz”.

-msched-spec-ldc
Użyj prostego sprawdzenia spekulacji danych. Ta opcja jest domyślnie włączona.

-msched-control-spec-ldc
Użyj prostego czeku do spekulacji kontrolnych. Ta opcja jest domyślnie włączona.

-msched-stop-bits-po-każdym-cyklu
Ustaw bit stop po każdym cyklu podczas planowania. Ta opcja jest domyślnie włączona.

-msched-fp-mem-deps-zero-kosztów
Załóżmy, że magazyny zmiennoprzecinkowe i obciążenia prawdopodobnie nie spowodują konfliktu, gdy:
umieszczone w tej samej grupie instrukcji. Ta opcja jest domyślnie wyłączona.

-msel-sched-dont-check-control-spec
Generuj czeki dla spekulacji kontrolnych w planowaniu selektywnym. Ta flaga to
domyślnie wyłączone.

-msched-max-memory-insns=max-insns
Ograniczenie liczby wejść pamięci na grupę instrukcji, dające niższy priorytet
kolejne insny pamięci próbujące zaplanować w tej samej grupie instrukcji.
Często przydatne, aby zapobiec konfliktom banków pamięci podręcznej. Wartość domyślna to 1.

-msched-max-memory-insns-hard-limit
Ustawia limit określony przez msched-max-memory-insns sztywny limit, uniemożliwiający więcej
niż ta liczba w grupie instrukcji. W przeciwnym razie limit jest „miękki”, co oznacza
że operacje nie związane z pamięcią są preferowane po osiągnięciu limitu, ale pamięć
operacje mogą być nadal zaplanowane.

LM32 Opcje

Te -m opcje są zdefiniowane dla architektury LatticeMico32:

-włączona zmiana mbarrel
Włącz instrukcje zmiany beczki.

- włączone mdivide
Włącz instrukcje dzielenia i modułu.

-mmultiply-enabled
Włącz mnożenie instrukcji.

-msign-extend-enabled
Włącz instrukcje rozszerzania znaku.

-muser-włączony
Włącz instrukcje zdefiniowane przez użytkownika.

M32C Opcje

-mcpu=Nazwa
Wybierz procesor, dla którego generowany jest kod. Nazwa może być jednym z r8c dla R8C/Tiny
seria, m16c dla serii M16C (do /60), m32cm dla serii M16C/80 lub m32c
dla serii M32C/80.

-msim
Określa, że ​​program będzie uruchamiany w symulatorze. Powoduje to alternatywę
biblioteka uruchomieniowa do powiązania, w której obsługuje np. plik I/O. Nie wolno Ci
użyj tej opcji podczas generowania programów, które będą działać na prawdziwym sprzęcie; musisz
udostępnij własną bibliotekę uruchomieniową dla potrzebnych funkcji we/wy.

-memregs=numer
Określa liczbę pseudorejestrów opartych na pamięci, których GCC używa podczas generowania kodu.
Te pseudorejestry są używane jak rejestry rzeczywiste, więc istnieje kompromis między
Zdolność GCC do dopasowania kodu do dostępnych rejestrów oraz kara wydajności w wysokości
używanie pamięci zamiast rejestrów. Pamiętaj, że wszystkie moduły w programie muszą być
skompilowany z tą samą wartością dla tej opcji. Z tego powodu nie wolno ci tego używać
opcja z domyślnymi bibliotekami uruchomieniowymi GCC.

M32R/D Opcje

Te -m opcje są zdefiniowane dla architektur Renesas M32R/D:

-m32r2
Wygeneruj kod dla M32R/2.

-m32rx
Wygeneruj kod dla M32R/X.

-m32r
Wygeneruj kod dla M32R. To jest ustawienie domyślne.

-mmodel=mały
Załóżmy, że wszystkie obiekty znajdują się w dolnej 16 MB pamięci (aby ich adresy mogły być
załadowany instrukcją "ld24") i załóżmy, że wszystkie podprogramy są osiągalne za pomocą
instrukcja „bl”. To jest ustawienie domyślne.

Adresowalność konkretnego obiektu można ustawić za pomocą atrybutu „model”.

-mmodel=średni
Załóżmy, że obiekty mogą znajdować się w dowolnym miejscu 32-bitowej przestrzeni adresowej (kompilator generuje
instrukcje „seth/add3”, aby załadować ich adresy) i zakładamy, że wszystkie podprogramy są
osiągalny za pomocą instrukcji "bl".

-mmodel=duży
Załóżmy, że obiekty mogą znajdować się w dowolnym miejscu 32-bitowej przestrzeni adresowej (kompilator generuje
instrukcje „seth/add3”, aby załadować ich adresy) i zakładamy, że podprogramy mogą nie być
osiągalny za pomocą instrukcji "bl" (kompilator generuje znacznie wolniej)
sekwencja instrukcji "seth/add3/jl").

-msdata=brak
Wyłącz korzystanie z małego obszaru danych. Zmienne są umieszczane w jednym z ".data", ".bss" lub
„.rodata” (chyba że określono atrybut „sekcja”). To jest ustawienie domyślne.

Mały obszar danych składa się z sekcji „.sdata” i „.sbss”. Przedmioty mogą być
wyraźnie umieścić w małym obszarze danych z atrybutem „sekcja” za pomocą jednego z nich
działy.

-msdata=sdata
Umieść małe globalne i statyczne dane w małym obszarze danych, ale nie generuj specjalnych
kod, aby się do nich odwoływać.

-msdata=użyj
Umieść małe globalne i statyczne dane w małym obszarze danych i wygeneruj specjalne
instrukcje, aby się do nich odnieść.

-G num
Umieść globalne i statyczne obiekty mniejsze lub równe num bajtów na małe dane lub
Sekcje BSS zamiast normalnych sekcji danych lub sekcji BSS. Domyślna wartość num is
8. -msdata opcja musi być ustawiona na jedną z sdata or posługiwać się aby ta opcja miała jakiekolwiek
efekt.

Wszystkie moduły powinny być skompilowane z tym samym -G num wartość. Kompilacja z różnymi
wartości num może lub nie może działać; jeśli nie, linker wyświetla błąd
komunikat ---niepoprawny kod nie jest generowany.

-mdebug
Sprawia, że ​​kod specyficzny dla M32R w kompilatorze wyświetla pewne statystyki, które mogą pomóc
w programach do debugowania.

-złośliwe pętle
Wyrównaj wszystkie pętle do granicy 32-bajtowej.

-mno-align-loops
Nie wymuszaj wyrównania 32-bajtowego dla pętli. To jest ustawienie domyślne.

-współczynnik-masy=numer
Kwestia numer instrukcji na cykl. numer może wynosić tylko 1 lub 2.

-koszt-oddzialu=numer
numer może wynosić tylko 1 lub 2. Jeśli wynosi 1, preferowane są gałęzie niż warunkowe
kod, jeśli wynosi 2, obowiązuje odwrotna sytuacja.

-mflush-pułapka=numer
Określa numer pułapki używany do opróżniania pamięci podręcznej. Wartość domyślna to 12. Ważny
liczby mieszczą się w przedziale od 0 do 15 włącznie.

-mno-pułapka-podtynkowa
Określa, że ​​pamięć podręczna nie może zostać opróżniona przy użyciu pułapki.

-mflush-func=Nazwa
Określa nazwę funkcji systemu operacyjnego do wywołania w celu opróżnienia pamięci podręcznej. ten
wartość domyślna to _opróżnij_pamięć podręczną, ale wywołanie funkcji jest używane tylko wtedy, gdy pułapka nie jest dostępna.

-mno-flush-func
Wskazuje, że nie ma funkcji systemu operacyjnego do opróżniania pamięci podręcznej.

M680x0 Opcje

Są to -m opcje zdefiniowane dla procesorów M680x0 i ColdFire. Ustawienia domyślne
zależą od architektury wybranej podczas konfigurowania kompilatora; domyślne
najczęstsze wybory podano poniżej.

-marzec=łuk
Generuj kod dla określonej architektury zestawu instrukcji M680x0 lub ColdFire.
Dopuszczalne wartości łuk dla architektur M680x0 to: 68000, 68010, 68020, 68030,
68040, 68060 dzięki cpu32. Architektury ColdFire są wybierane zgodnie z Freescale's
Klasyfikacja ISA i dopuszczalne wartości to: isaa, isaaplus, isab dzięki Isac.

GCC definiuje makro „__mcfłuk__" ilekroć generuje kod dla ColdFire
cel. ten łuk w tym makro jest jednym z -Marsz argumenty podane powyżej.

Używane razem, -Marsz dzięki -mtune wybierz kod, który działa w rodzinie podobnych
procesory, ale jest to zoptymalizowane pod kątem konkretnej mikroarchitektury.

-mcpu=cpu
Wygeneruj kod dla konkretnego procesora M680x0 lub ColdFire. M680x0 cpusą:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 dzięki cpu32. Zimny ​​Ogień cpus
są podane w poniższej tabeli, która również klasyfikuje procesory do rodzin:

Rodzina : -mcpu argumenty
51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211 : 5210 5211
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=cpu nadpisuje -marzec=łuk if łuk jest kompatybilny z cpu. Inne kombinacje
-mcpu dzięki -Marsz są odrzucane.

GCC definiuje makro „__mcf_cpu_procesor" gdy cel ColdFire cpu jest zaznaczona. To również
definiuje „__mcf_family_rodzina", gdzie wartość rodzina podano w powyższej tabeli.

-mtune=melodia
Dostosuj kod do określonej mikroarchitektury w ramach ograniczeń określonych przez -Marsz
dzięki -mcpu. Mikroarchitektury M680x0 to: 68000, 68010, 68020, 68030, 68040,
68060 dzięki cpu32. Mikroarchitektury ColdFire to: cfv1, cfv2, cfv3, cfv4 dzięki
cfv4e.

Można również użyć -mtune=68020-40 dla kodu, który musi działać stosunkowo dobrze na 68020,
68030 i 68040 cele. -mtune=68020-60 jest podobny, ale zawiera 68060 celów, jak
dobrze. Te dwie opcje wybierają te same decyzje dotyczące strojenia, co -m68020-40 dzięki -m68020-60
odpowiednio.

GCC definiuje makra „__mcłuk" i „__mcłuk__" podczas strojenia do architektury 680x0
łuk. Definiuje również „mcłuk" chyba że albo -ansi lub nie-GNU -std używana jest opcja.
Jeśli GCC dostraja się do różnych architektur, wybranych przez -mtune=68020-40 or
-mtune=68020-60, definiuje makra dla każdej architektury w zakresie.

GCC definiuje również makro „__muarcha__" podczas strojenia mikroarchitektury ColdFire
uarcha, Gdzie uarcha jest jednym z argumentów podanych powyżej.

-m68000
-mc68000
Generuj dane wyjściowe dla 68000. Jest to ustawienie domyślne, gdy kompilator jest skonfigurowany dla
Systemy oparte na 68000. Jest to równoważne -marzec=68000.

Użyj tej opcji dla mikrokontrolerów z rdzeniem 68000 lub EC000, w tym 68008,
68302, 68306, 68307, 68322, 68328 i 68356.

-m68010
Generuj dane wyjściowe dla 68010. Jest to ustawienie domyślne, gdy kompilator jest skonfigurowany dla
Systemy oparte na 68010. Jest to równoważne -marzec=68010.

-m68020
-mc68020
Generuj dane wyjściowe dla 68020. Jest to ustawienie domyślne, gdy kompilator jest skonfigurowany dla
Systemy oparte na 68020. Jest to równoważne -marzec=68020.

-m68030
Generuj dane wyjściowe dla 68030. Jest to ustawienie domyślne, gdy kompilator jest skonfigurowany dla
Systemy oparte na 68030. Jest to równoważne -marzec=68030.

-m68040
Generuj dane wyjściowe dla 68040. Jest to ustawienie domyślne, gdy kompilator jest skonfigurowany dla
Systemy oparte na 68040. Jest to równoważne -marzec=68040.

Ta opcja uniemożliwia użycie instrukcji 68881/68882, które muszą być emulowane przez
oprogramowanie na 68040. Użyj tej opcji, jeśli twój 68040 nie ma kodu do emulacji
te instrukcje.

-m68060
Generuj dane wyjściowe dla 68060. Jest to ustawienie domyślne, gdy kompilator jest skonfigurowany dla
Systemy oparte na 68060. Jest to równoważne -marzec=68060.

Ta opcja uniemożliwia użycie instrukcji 68020 i 68881/68882, które muszą być
emulowane przez oprogramowanie na 68060. Użyj tej opcji, jeśli twój 68060 nie ma kodu
naśladować te instrukcje.

-mcpu32
Generuj dane wyjściowe dla CPU32. Jest to ustawienie domyślne, gdy kompilator jest skonfigurowany dla
Systemy oparte na procesorach CPU32. Jest to równoważne -marzec=cpu32.

Użyj tej opcji dla mikrokontrolerów z rdzeniem CPU32 lub CPU32+, w tym 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 i 68360.

-m5200
Generuj dane wyjściowe dla procesora 520X ColdFire. Jest to ustawienie domyślne, gdy kompilator to
skonfigurowany dla systemów opartych na 520X. Jest to równoważne -mcpu=5206i jest teraz
zdeprecjonowany na korzyść tej opcji.

Użyj tej opcji dla mikrokontrolera z rdzeniem 5200, w tym MCF5202, MCF5203,
MCF5204 i MCF5206.

-m5206e
Generuj dane wyjściowe dla procesora 5206e ColdFire. Ta opcja jest teraz przestarzała na rzecz
ekwiwalent -mcpu=5206e.

-m528x
Generuj dane wyjściowe dla członka rodziny ColdFire 528X. Opcja jest teraz
zdeprecjonowane na rzecz ekwiwalentu -mcpu=528x.

-m5307
Generuj dane wyjściowe dla procesora ColdFire 5307. Ta opcja jest teraz przestarzała na rzecz
równoważny -mcpu=5307.

-m5407
Generuj dane wyjściowe dla procesora ColdFire 5407. Ta opcja jest teraz przestarzała na rzecz
równoważny -mcpu=5407.

-mcfv4e
Generuj dane wyjściowe dla procesorów z rodziny ColdFire V4e (np. 547x/548x). Obejmuje to użycie
sprzętowe instrukcje zmiennoprzecinkowe. Opcja jest równoważna -mcpu=547xI jest
obecnie przestarzałe na korzyść tej opcji.

-m68020-40
Generuj dane wyjściowe dla 68040 bez używania żadnej z nowych instrukcji. To wyniki
w kodzie, który może działać stosunkowo wydajnie na 68020/68881 lub 68030 lub
68040. Wygenerowany kod używa instrukcji 68881, które są emulowane na
10.

Opcja jest równoważna -marzec=68020 -mtune=68020-40.

-m68020-60
Generuj dane wyjściowe dla 68060 bez używania żadnej z nowych instrukcji. To wyniki
w kodzie, który może działać stosunkowo wydajnie na 68020/68881 lub 68030 lub
68040. Wygenerowany kod używa instrukcji 68881, które są emulowane na
10.

Opcja jest równoważna -marzec=68020 -mtune=68020-60.

-mhard-float
-m68881
Generuj instrukcje zmiennoprzecinkowe. Jest to ustawienie domyślne dla 68020 i nowszych oraz
dla urządzeń ColdFire, które mają FPU. Definiuje makro „__HAVE_68881__” na
Cele M680x0 i „__mcffpu__” na celach ColdFire.

-msoft-float
Nie generuj instrukcji zmiennoprzecinkowych; zamiast tego użyj połączeń bibliotecznych. To jest
domyślnie dla celów 68000, 68010 i 68832. Jest to również domyślne dla ColdFire
urządzenia, które nie mają FPU.

-mdiv
-mno-div
Wygeneruj (nie generuj) instrukcji dzielenia sprzętowego i reszty ColdFire. Gdyby
-Marsz jest używany bez -mcpu, wartość domyślna to „włączone” dla architektur ColdFire i „wyłączone”
dla architektur M680x0. W przeciwnym razie wartość domyślna jest pobierana z docelowego procesora (albo
domyślny procesor lub określony przez -mcpu). Na przykład wartość domyślna to „wyłączone”
dla -mcpu=5206 i „włączone” dla -mcpu=5206e.

GCC definiuje makro „__mcfhwdiv__”, gdy ta opcja jest włączona.

-mshort
Załóżmy, że typ „int” ma szerokość 16 bitów, np. „short int”. Dodatkowo parametry
przekazywane na stos są również wyrównywane do 16-bitowej granicy, nawet w przypadku celów, których API
nakazuje promocję do wersji 32-bitowej.

-mno-krótki
Nie uważaj, że typ „int” ma szerokość 16 bitów. To jest ustawienie domyślne.

-mnobitfield
-mno-bitfield
Nie używaj instrukcji pól bitowych. ten -m68000, -mcpu32 dzięki -m5200 opcje implikują
-mnobitfield.

-mbitfield
Korzystaj z instrukcji pól bitowych. ten -m68020 opcja implikuje -mbitfield. Jest
domyślne, jeśli używasz konfiguracji zaprojektowanej dla 68020.

-mrtd
Użyj innej konwencji wywoływania funkcji, w której funkcje, które przyjmują ustaloną
liczba argumentów powraca z instrukcją "rtd", która wyskakuje ich argumenty
podczas powrotu. Oszczędza to jedną instrukcję dzwoniącego, ponieważ nie ma potrzeby
pop argumenty tam.

Ta konwencja wywoływania jest niekompatybilna z tą zwykle używaną w Uniksie, więc
nie można go użyć, jeśli trzeba wywoływać biblioteki skompilowane za pomocą kompilatora Unix.

Ponadto musisz dostarczyć prototypy funkcji dla wszystkich funkcji, które przyjmują zmienną
liczba argumentów (w tym "printf"); w przeciwnym razie generowany jest nieprawidłowy kod dla
wywołania tych funkcji.

Ponadto, jeśli wywołasz funkcję ze zbyt dużą liczbą, wyniknie bardzo niepoprawny kod
argumenty. (Zwykle dodatkowe argumenty są nieszkodliwie ignorowane.)

Instrukcja "rtd" jest obsługiwana przez 68010, 68020, 68030, 68040, 68060 i CPU32
procesory, ale nie przez 68000 lub 5200.

-mno-rtd
Nie używaj konwencji wywoływania wybranych przez -mrtd. To jest ustawienie domyślne.

-malign-int
-mno-wyrównaj-int
Określ, czy GCC wyrównuje „int”, „long”, „long long”, „float”, „double” i „long
podwójne" zmienne na granicy 32-bitowej (-malign-int) lub granica 16-bitowa
(-mno-wyrównaj-int). Dopasowywanie zmiennych do granic 32-bitowych tworzy kod, który działa
nieco szybszy na procesorach z 32-bitowymi magistralami kosztem większej ilości pamięci.

Ostrzeżenie: jeśli używasz -malign-int przełącznik, GCC wyrównuje struktury zawierające powyższe
typy inaczej niż większość opublikowanych specyfikacji binarnych interfejsów aplikacji dla
m68k.

-mpcrel
Użyj trybu adresowania względnego komputera 68000 bezpośrednio, zamiast używać globalnego
tabela odsunięć. Obecnie ta opcja oznacza: -fpic, pozwalając na co najwyżej 16-bitowe przesunięcie
do adresowania względnego komputera. -fPIC nie jest obecnie obsługiwany z -mpcrel, Choć
może to być obsługiwane dla procesorów 68020 i wyższych.

-mno-ścisłe-wyrównaj
-mstrict-wyrównaj
Nie należy (nie) zakładać, że system obsługuje niewyrównane odwołania do pamięci.

-msep-dane
Wygeneruj kod, który pozwala na zlokalizowanie segmentu danych w innym obszarze pamięci
z segmentu tekstu. Pozwala to na wykonanie na miejscu w środowisku bez
zarządzanie pamięcią wirtualną. Ta opcja oznacza -fPIC.

-mno-sep-data
Generuj kod, który zakłada, że ​​segment danych następuje po segmencie tekstowym. To jest
domyślny.

-Mid-shared-biblioteka
Wygeneruj kod obsługujący biblioteki współdzielone za pomocą metody identyfikatora biblioteki. To pozwala
do wykonywania na miejscu i bibliotek współdzielonych w środowisku bez pamięci wirtualnej
kierownictwo. Ta opcja oznacza -fPIC.

-mno-id-shared-biblioteka
Generuj kod, który nie zakłada używania bibliotek współdzielonych opartych na identyfikatorach. To jest
domyślny.

-id-biblioteki-mshared=n
Określa numer identyfikacyjny kompilowanej biblioteki współużytkowanej opartej na identyfikatorze.
Określenie wartości 0 generuje bardziej zwarty kod; określenie innych wartości sił
przypisanie tego numeru do bieżącej biblioteki, ale nie ma już miejsca ani czasu
skuteczne niż pominięcie tej opcji.

-mxgot
-mno-xgot
Podczas generowania kodu niezależnego od pozycji dla ColdFire, wygeneruj kod, który działa, jeśli
GOT ma ponad 8192 wpisów. Ten kod jest większy i wolniejszy niż kod
wygenerowane bez tej opcji. W procesorach M680x0 ta opcja nie jest potrzebna; -fPIC
wystarczy.

GCC zwykle używa pojedynczej instrukcji do załadowania wartości z pulpitu GOT. Chociaż to jest
stosunkowo wydajny, działa tylko wtedy, gdy GOT jest mniejszy niż około 64k. Wszystko
większy powoduje, że linker zgłasza błąd, taki jak:

relokacja skrócona, aby dopasować: R_68K_GOT16O foobar

Jeśli tak się stanie, powinieneś ponownie skompilować swój kod za pomocą -mxgot. Powinien wtedy działać z
bardzo duże GOT. Jednak kod wygenerowany za pomocą -mxgot jest mniej wydajny, ponieważ
pobiera 4 instrukcje, aby pobrać wartość symbolu globalnego.

Zauważ, że niektóre linkery, w tym nowsze wersje linkera GNU, mogą tworzyć
wiele GOTów i sortowanie wpisów GOT. Jeśli masz taki linker, powinieneś tylko potrzebować
w użyciu -mxgot podczas kompilowania pojedynczego pliku obiektowego, który uzyskuje dostęp do więcej niż 8192 GOT
wpisy. Bardzo niewielu to robi.

Te opcje nie działają, chyba że GCC generuje kod niezależny od pozycji.

MCore Opcje

Są to -m opcje zdefiniowane dla procesorów Motorola M*Core.

-mhardlit
-mno-hardlit
Wstawiaj stałe do strumienia kodu, jeśli można to zrobić w dwóch instrukcjach lub mniej.

-mdiv
-mno-div
Użyj instrukcji dzielenia. (Domyślnie włączone).

-mrelax-natychmiastowy
-mno-relaks-natychmiastowy
Zezwalaj na dowolne wielkości natychmiastowe w operacjach bitowych.

-mwide-bitfields
-mno-wide-bitfields
Zawsze traktuj pola bitowe jako o rozmiarze "int".

-m4byte-funkcje
-mno-4byte-funkcje
Wymuś wyrównanie wszystkich funkcji do granicy 4 bajtów.

-mcallgraph-data
-mno-callgraph-data
Emituj informacje z grafu.

-mslow-bajty
-mno-slow-bytes
Preferuj dostęp do słów podczas odczytywania ilości bajtów.

-mlittle-endian
-mbig-endian
Generuj kod dla celu little-endian.

-m210
-m340
Wygeneruj kod dla procesora 210.

-mno-lsim
Załóżmy, że zapewniono obsługę środowiska uruchomieniowego, więc pomiń bibliotekę symulatora
(libsim.a) z wiersza poleceń konsolidatora.

-mstack-przyrost=rozmiar
Ustaw maksymalną ilość dla pojedynczej operacji zwiększania stosu. Duże wartości mogą
zwiększyć szybkość programów zawierających funkcje wymagające dużej ilości
miejsce na stosie, ale mogą również wywołać błąd segmentacji, jeśli stos jest rozszerzony
zbyt wiele. Wartość domyślna to 0x1000.

MeP Opcje

-mabsdiff
Włącza instrukcję „abs”, która jest absolutną różnicą między dwoma rejestrami.

-centrum-opcje
Włącza wszystkie opcjonalne instrukcje ---uśrednianie, mnożenie, dzielenie, operacje bitowe,
wiodące zero, różnica bezwzględna, min/maks, przycinanie i nasycenie.

-maverage
Włącza instrukcję "ave", która oblicza średnią z dwóch rejestrów.

-mbazowany=n
Zmienne wielkości n bajty lub mniejsze są domyślnie umieszczane w sekcji „.based”.
Zmienne bazowe używają rejestru $tp jako rejestru bazowego i istnieje ograniczenie do 128 bajtów
do sekcji ".based".

-mbitops
Włącza instrukcje operacji na bitach ---bit test ("btstm"), ustaw ("bsetm"), wyczyść
("bclrm"), odwróć ("bnotm") i test-i-set ("tas").

-mc=Nazwa
Wybiera, w której sekcji dane stałe są umieszczane. Nazwa może być maleńki, Bliskolub daleko.

-mclip
Włącza instrukcję "clip". Zauważ, że -mclip nie jest przydatne, chyba że ty też
zapewniać -mminmax.

-mconfig=Nazwa
Wybiera jedną z wbudowanych konfiguracji podstawowych. Każdy chip MeP ma jeden lub więcej
moduły w nim; każdy moduł ma rdzeń procesora i różne koprocesory, opcjonalnie
instrukcje i urządzenia peryferyjne. Narzędzie „MeP-Integrator”, które nie jest częścią GCC, zapewnia
te konfiguracje za pomocą tej opcji; używanie tej opcji jest takie samo jak używanie wszystkich
odpowiednie opcje wiersza polecenia. Domyślna konfiguracja to domyślnym.

-mcop
Włącza instrukcje koprocesora. Domyślnie jest to koprocesor 32-bitowy. Notatka
że koprocesor jest normalnie włączony przez -mconfig= opcja.

-mcop32
Włącza instrukcje koprocesora 32-bitowego.

-mcop64
Włącza instrukcje koprocesora 64-bitowego.

-mivc2
Włącza planowanie IVC2. IVC2 to 64-bitowy koprocesor VLIW.

-mdc
Powoduje umieszczenie zmiennych stałych w sekcji ".near".

-mdiv
Włącza instrukcje „div” i „divu”.

-meb
Generuj kod big-endian.

-mel
Generuj kod little-endian.

-mio-lotny
Mówi kompilatorowi, że każda zmienna oznaczona atrybutem „io” ma być
uważane za niestabilne.

-ml Powoduje, że zmienne są domyślnie przypisywane do sekcji „.far”.

-mleadz
Włącza instrukcję "leadz" (początkowe zero).

-mm Powoduje, że zmienne są domyślnie przypisywane do sekcji „.near”.

-mminmax
Włącza instrukcje „min” i „maks”.

-mmult
Włącza instrukcje mnożenia i mnożenia akumulacji.

-mno-opts
Wyłącza wszystkie opcjonalne instrukcje włączone przez -centrum-opcje.

-powtórz
Włącza instrukcje „powtarzaj” i „powtórz”, używane do wykonywania pętli o niskim narzutu.

-ms Powoduje, że wszystkie zmienne są domyślnie przypisywane do sekcji „.tiny”. Zwróć uwagę, że istnieje
Ograniczenie do 65536 bajtów w tej sekcji. Dostęp do tych zmiennych używa bazy %gp
Zarejestruj się.

-msatur
Włącza instrukcje nasycenia. Zauważ, że kompilator obecnie nie
generuje je samodzielnie, ale ta opcja jest uwzględniona w celu zapewnienia kompatybilności z innymi narzędziami,
tak jak".

-msdram
Połącz środowisko wykonawcze oparte na pamięci SDRAM zamiast domyślnego środowiska wykonawczego opartego na pamięci ROM.

-msim
Połącz biblioteki wykonawcze symulatora.

-msimnovec
Połącz biblioteki wykonawcze symulatora, z wyjątkiem wbudowanej obsługi resetowania i
wektory wyjątków i tabele.

-mtf
Powoduje, że wszystkie funkcje domyślnie przechodzą do sekcji „.far”. Bez tej opcji funkcje
domyślnie w sekcji ".near".

-mtiny=n
Zmienne, które są n bajty lub mniejsze są przydzielane do sekcji „.tiny”. Te
zmienne używają rejestru podstawowego $gp. Wartość domyślna dla tej opcji to 4, ale pamiętaj, że
istnieje ograniczenie do 65536 bajtów sekcji „.tiny”.

MicroBlaze Opcje

-msoft-float
Użyj emulacji programowej dla zmiennoprzecinkowych (domyślnie).

-mhard-float
Użyj instrukcji sprzętowych zmiennoprzecinkowych.

-mmemcpy
Nie optymalizuj ruchów bloków, użyj "memcpy".

-mno-clearbss
Ta opcja jest przestarzała. Posługiwać się -fno-zero-inicjalizowane-w-bss zamiast.

-mcpu=typ procesora
Użyj funkcji i zaplanuj kod dla danego procesora. Obsługiwane wartości znajdują się w
format vX.YY.Z, Gdzie X jest główną wersją, YY jest wersją pomocniczą i Z is
kod zgodności. Przykładowe wartości to v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.

-mxl-soft-mul
Użyj programowej emulacji mnożenia (domyślnie).

-mxl-soft-div
Użyj emulacji programowej do dzielenia (domyślnie).

-mxl-barrel-shift
Użyj sprzętowej dźwigni zmiany biegów.

-Porównaj wzorce mxl
Użyj instrukcji porównywania wzorców.

-msmall-dzielniki
Użyj optymalizacji wyszukiwania w tabeli dla małych dzieleń liczb całkowitych ze znakiem.

-sprawdzanie stosu-mxl
Ta opcja jest przestarzała. Posługiwać się -fstack-check zamiast.

-mxl-gp-opt
Użyj powiązanych z GP sekcji ".sdata"/.sbss".

-mxl-multiply-high
Użyj instrukcji pomnóż-wysoki dla dużej części mnożenia 32x32.

-mxl-float-convert
Użyj sprzętowych instrukcji konwersji zmiennoprzecinkowych.

-mxl-float-sqrt
Użyj sprzętowej instrukcji pierwiastka zmiennoprzecinkowego.

-mbig-endian
Wygeneruj kod dla celu big-endian.

-mlittle-endian
Generuj kod dla celu little-endian.

- zmiana kolejności w mxl
Użyj instrukcji zmiany kolejności (zamień i odwróć bajty wczytaj/zapisz).

-tryb-mxl-model aplikacji
Wybierz model aplikacji model aplikacji. Prawidłowe modele są

plik wykonywalny
normalny plik wykonywalny (domyślnie), używa kodu startowego crt0.o.

xmdstub
do użytku z inwazyjnym debugowaniem oprogramowania opartego na Xilinx Microprocessor Debugger (XMD)
agent o nazwie xmdstub. Używa pliku startowego crt1.o i ustawia adres początkowy
program do 0x800.

bootstrap
dla aplikacji ładowanych za pomocą bootloadera. Ten model używa pliku startowego
crt2.o który nie zawiera obsługi wektora resetowania procesora. To jest odpowiednie
do przekazywania kontroli na zresetowanym procesorze do bootloadera, a nie do
aplikacji.

nowatorzy
dla aplikacji, które nie wymagają żadnego z wektorów MicroBlaze. Ta opcja
może być przydatny w przypadku aplikacji działających w ramach aplikacji monitorującej. Ten model
zastosowania crt3.o jako plik startowy.

opcja -tryb-xl-model aplikacji to przestarzały alias dla -tryb-mxl-model aplikacji.

MIPS Opcje

-EB Generuj kod big-endian.

-EL Generuj kod little-endian. To jest domyślne dla mips*el-*-* konfiguracje.

-marzec=łuk
Wygeneruj kod, który działa łuk, który może być nazwą ogólnego MIPS ISA lub
nazwa konkretnego procesora. Nazwy ISA to: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5
dzięki mips64r6. Nazwy procesorów to: 4 tys, 4km, 4kp, 4ksc, 4kec, 4kem, 4kep, 4ksd,
5 tys, 5kf, 20 tys, 24 tys, 24kf2_1, 24kf1_1, 24kec, 24kef2_1, 24kef1_1, 34 tys, 34kf2_1,
34kf1_1, 34kn, 74 tys, 74kf2_1, 74kf1_1, 74kf3_2, 1004 tys, 1004kf2_1, 1004kf1_1,
loongson2e, loongson2f, loongson3a, M4K, M14K, m14kc, m14ke, m14kec, okteon, okteon+,
okteon2, okteon3, orion, p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650,
r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000,
vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, Xlr dzięki xlp,
specjalna wartość z-abi wybiera najbardziej kompatybilną architekturę dla wybranego ABI
(to jest, mips1 dla 32-bitowych ABI i mips3 dla 64-bitowych ABI).

Natywny łańcuch narzędzi Linux/GNU również obsługuje tę wartość rodzimy, który wybiera najlepszych
opcja architektury dla procesora hosta. -marzec=rodzimy nie ma żadnego efektu, jeśli działa GCC
nie rozpoznają procesora.

W nazwach procesorów ostateczna 000 można skrócić jako k (na przykład, -marzec=r2k).
Prefiksy są opcjonalne i vr można napisać r.

Nazwy formularza nf2_1 odnoszą się do procesorów z jednostkami FPU taktowanymi o połowę szybciej niż
rdzeń, nazwy postaci nf1_1 odnoszą się do procesorów z jednostkami FPU taktowanymi z tą samą częstotliwością
jako rdzeń i nazwy postaci nf3_2 odnoszą się do procesorów z jednostkami FPU taktowanymi proporcjami
3:2 w stosunku do rdzenia. Ze względu na kompatybilność, nf jest akceptowany jako
synonim słowa nf2_1 Podczas nx dzięki bfx są akceptowane jako synonimy dla nf1_1.

GCC definiuje dwa makra na podstawie wartości tej opcji. Pierwszy to „_MIPS_ARCH”,
co daje nazwę architektury docelowej w postaci ciągu. Drugi ma formę
„_MIPS_ARCH_bla", Gdzie bla to kapitalizowana wartość „_MIPS_ARCH”. Na przykład,
-marzec=r2000 ustawia „_MIPS_ARCH” na „r2000” i definiuje makro „_MIPS_ARCH_R2000”.

Zauważ, że makro „_MIPS_ARCH” używa nazw procesorów podanych powyżej. W innych
słowa, ma pełny przedrostek i nie zawiera skrótów 000 as k, W przypadku z-
abi, makro nazywa rozwiązaną architekturę (albo „mips1” albo „mips3”). To nazwy
domyślna architektura, gdy nie -Marsz podana jest opcja.

-mtune=łuk
Zoptymalizuj dla łuk. Między innymi ta opcja kontroluje sposób, w jaki instrukcje są
zaplanowane i przewidywany koszt operacji arytmetycznych. Lista łuk wartości
jest taki sam jak dla -Marsz.

Gdy ta opcja nie jest używana, GCC optymalizuje dla procesora określonego przez -Marsz, Przez
za pomocą -Marsz dzięki -mtune razem możliwe jest generowanie kodu, który działa na
rodziny procesorów, ale zoptymalizuj kod dla jednego konkretnego członka tej rodziny.

-mtune definiuje makra „_MIPS_TUNE” i „_MIPS_TUNE_bla", które działają w tym samym
sposób jak -Marsz te opisane powyżej.

-mips1
Równoważny -marzec=mips1.

-mips2
Równoważny -marzec=mips2.

-mips3
Równoważny -marzec=mips3.

-mips4
Równoważny -marzec=mips4.

-mips32
Równoważny -marzec=mips32.

-mips32r3
Równoważny -marzec=mips32r3.

-mips32r5
Równoważny -marzec=mips32r5.

-mips32r6
Równoważny -marzec=mips32r6.

-mips64
Równoważny -marzec=mips64.

-mips64r2
Równoważny -marzec=mips64r2.

-mips64r3
Równoważny -marzec=mips64r3.

-mips64r5
Równoważny -marzec=mips64r5.

-mips64r6
Równoważny -marzec=mips64r6.

-mips16
-mno-mips16
Generuj (nie generuj) kodu MIPS16. Jeśli GCC celuje w MIPS32 lub MIPS64
architektury, wykorzystuje MIPS16e ASE.

Generowanie kodu MIPS16 może być również kontrolowane na podstawie funkcji za pomocą
Atrybuty „mips16” i „nomips16”.

-mflip-mips16
Generuj kod MIPS16 na naprzemiennych funkcjach. Ta opcja jest przeznaczona dla regresji
testowanie mieszanej generacji kodu MIPS16/non-MIPS16 i nie jest przeznaczone do zwykłego
używać w kompilacji kodu użytkownika.

-Minterlink-skompresowany
-mno-interlink-skompresowany
Wymagaj (nie wymagaj), aby kod używający standardowego (nieskompresowanego) MIPS ISA był link-
kompatybilny z kodem MIPS16 i microMIPS i odwrotnie.

Na przykład kod używający standardowego kodowania ISA nie może przeskoczyć bezpośrednio do MIPS16 lub
kod microMIPS; musi albo użyć wywołania, albo skoku pośredniego. -Minterlink-skompresowany
dlatego wyłącza bezpośrednie skoki, chyba że GCC wie, że cel skoku nie jest
sprężony.

-minterlink-mips16
-mno-interlink-mips16
Aliasy -Minterlink-skompresowany dzięki -mno-interlink-skompresowany. Te opcje
poprzedzają microMIPS ASE i są zachowane w celu zapewnienia kompatybilności wstecznej.

-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Wygeneruj kod dla danego ABI.

Zauważ, że EABI ma wersję 32-bitową i 64-bitową. GCC zwykle generuje 64-bitowy
kod, gdy wybierzesz architekturę 64-bitową, ale możesz użyć -mgp32 aby uzyskać 32-bitowy kod
zamiast.

Aby uzyskać informacje na temat O64 ABI, zobaczhttp://gcc.gnu.org/projects/mipso64-abi.html>.

GCC obsługuje wariant ABI o32, w którym rejestry zmiennoprzecinkowe są raczej 64
szerokość ponad 32 bity. Możesz wybrać tę kombinację za pomocą -mabi=32 -mfp64. Ten ABI
opiera się na instrukcjach „mthc1” i „mfhc1” i dlatego jest obsługiwany tylko dla
Procesory MIPS32R2, MIPS32R3 i MIPS32R5.

Przypisania rejestrów dla argumentów i wartości zwracanych pozostają takie same, ale każdy
wartość skalarna jest przekazywana w pojedynczym rejestrze 64-bitowym, a nie w parze 32-bitowych
rejestry. Na przykład skalarne wartości zmiennoprzecinkowe są zwracane w $f0 tylko, nie
$f0/$f1 para. Zestaw rejestrów połączeń zapisanych również pozostaje taki sam, ponieważ
ponumerowane rejestry podwójnej precyzji są zapisywane.

Obsługiwane są dwa dodatkowe warianty ABI o32, aby umożliwić przejście z
Rejestry 32-bitowe do 64-bitowych. Są to FPXX (-mfpxx) i FP64A (-mfp64
-mno-nieparzysty-spreg). Rozszerzenie FPXX nakazuje, aby cały kod był wykonywany poprawnie
po uruchomieniu przy użyciu rejestrów 32-bitowych lub 64-bitowych. Kod można połączyć z:
FP32 lub FP64, ale nie oba. Rozszerzenie FP64A jest podobne do rozszerzenia FP64, ale
zabrania korzystania z nieparzystych rejestrów o pojedynczej precyzji. Może być używany w
w połączeniu z trybem „FRE” FPU w procesorach MIPS32R5 i umożliwia zarówno FP32
i kod FP64A do łączenia i uruchamiania w tym samym procesie bez zmiany trybów FPU.

-mabicalls
-mno-abicals
Generuj (nie generuj) kodu, który jest odpowiedni dla obiektów dynamicznych w stylu SVR4.
-mabicalls to ustawienie domyślne dla systemów opartych na SVR4.

-mshared
-mno-shared
Generuj (nie generuj) kod, który jest w pełni niezależny od pozycji i który może
dlatego należy je połączyć z bibliotekami współdzielonymi. Ta opcja dotyczy tylko -mabicalls.

Wszystkie kategorie -mabicalls kod tradycyjnie był niezależny od pozycji, niezależnie od opcji
lubić -fPIC dzięki -fpic. Jednak jako rozszerzenie, łańcuch narzędzi GNU pozwala na pliki wykonywalne
aby używać bezwzględnych dostępów dla symboli wiążących lokalnie. Może również używać krótszego lekarza rodzinnego
sekwencje inicjujące i generuj bezpośrednie wywołania do funkcji zdefiniowanych lokalnie. Ten
tryb jest wybierany przez -mno-shared.

-mno-shared zależy od binutils 2.16 lub nowszych i generuje obiekty, które mogą być
połączone przez linker GNU. Jednak opcja nie wpływa na ABI finału
wykonywalny; wpływa tylko na ABI obiektów relokowalnych. Za pomocą -mno-shared
generalnie sprawia, że ​​pliki wykonywalne są mniejsze i szybsze.

-mshared jest wartością domyślną.

-mplt
-mno-plt
Załóż (nie zakładaj), że statyczne i dynamiczne linkery obsługują PLT i kopiują
relokacje. Ta opcja dotyczy tylko -mno-shared -mabicalls. W przypadku ABI n64 to
opcja nie ma żadnego efektu bez -msym32.

Możesz zarabiać -mplt domyślne, konfigurując GCC za pomocą --z-mipsami-plt. Domyślny
is -mno-plt Inaczej.

-mxgot
-mno-xgot
Podnieś (nie podnoś) zwykłych ograniczeń rozmiaru tabeli globalnych przesunięć.

GCC zwykle używa pojedynczej instrukcji do załadowania wartości z pulpitu GOT. Chociaż to jest
stosunkowo wydajny, działa tylko wtedy, gdy GOT jest mniejszy niż około 64k. Wszystko
większy powoduje, że linker zgłasza błąd, taki jak:

relokacja skrócona, aby dopasować: R_MIPS_GOT16 foobar

Jeśli tak się stanie, powinieneś ponownie skompilować swój kod za pomocą -mxgot. Działa to z bardzo
duże GOT-y, chociaż kod jest też mniej wydajny, ponieważ zajmuje trzy
instrukcje pobierania wartości symbolu globalnego.

Zauważ, że niektóre linkery mogą tworzyć wiele obiektów GOT. Jeśli masz taki linker, to
powinien wystarczyć użyć -mxgot gdy pojedynczy plik obiektowy uzyskuje dostęp do więcej niż 64k
wartość wpisów GOT. Bardzo niewielu to robi.

Te opcje nie działają, chyba że GCC generuje kod niezależny od pozycji.

-mgp32
Załóżmy, że rejestry ogólnego przeznaczenia mają szerokość 32 bitów.

-mgp64
Załóżmy, że rejestry ogólnego przeznaczenia mają szerokość 64 bitów.

-mfp32
Załóżmy, że rejestry zmiennoprzecinkowe mają szerokość 32 bitów.

-mfp64
Załóżmy, że rejestry zmiennoprzecinkowe mają szerokość 64 bitów.

-mfpxx
Nie zakładaj szerokości rejestrów zmiennoprzecinkowych.

-mhard-float
Użyj instrukcji koprocesora zmiennoprzecinkowego.

-msoft-float
Nie używaj instrukcji koprocesora zmiennoprzecinkowego. Implementuj zmiennoprzecinkowe
obliczenia przy użyciu wywołań bibliotecznych.

-mno-float
Równoważny -msoft-float, ale dodatkowo zapewnia, że ​​kompilowany program
nie wykonuje żadnych operacji zmiennoprzecinkowych. Ta opcja jest obecnie obsługiwana
tylko przez niektóre konfiguracje bare-metal MIPS, w których można wybrać specjalny zestaw
biblioteki, które nie obsługują wszystkich liczb zmiennoprzecinkowych (w tym na przykład zmiennoprzecinkowa
punktowe formaty „printf”). Jeśli kod skompilowany z -mno-float przypadkowo zawiera
operacji zmiennoprzecinkowych, prawdopodobnie ulegnie awarii w czasie połączenia lub w czasie wykonywania.

-msingle-float
Załóżmy, że koprocesor zmiennoprzecinkowy obsługuje tylko operacje o pojedynczej precyzji.

-mdouble-float
Załóżmy, że koprocesor zmiennoprzecinkowy obsługuje operacje o podwójnej precyzji. Ten
jest wartością domyślną.

-modd-spreg
-mno-nieparzysty-spreg
Włącz korzystanie z nieparzystych rejestrów zmiennoprzecinkowych o pojedynczej precyzji dla o32
ABI. Jest to ustawienie domyślne dla procesorów, o których wiadomo, że obsługują te rejestry.
Podczas korzystania z o32 FPXX ABI, -mno-nieparzysty-spreg jest ustawiony domyślnie.

-mabs=2008
-mabs=legacy
Te opcje kontrolują traktowanie specjalnego nie-numeru (NaN) IEEE 754
dane zmiennoprzecinkowe z „abs.fmt” i „neg.fmt” instrukcje maszynowe.

Domyślnie lub kiedy -mabs=legacy jest używany, wybrane jest leczenie starszego typu. W tym
przypadku, gdy instrukcje te są uważane za arytmetyczne i unika się ich w przypadku prawidłowego działania
jest wymagane, a operandem wejściowym może być NaN. Dłuższa sekwencja instrukcji
które manipulują bitem znaku zmiennoprzecinkowego układu odniesienia są używane zamiast tego, chyba że
die,en -finite-tylko matematyka określono również opcję.

Pandemia -mabs=2008 opcja wybiera traktowanie IEEE 754-2008. W tym przypadku te
instrukcje są uważane za niearytmetyczne i dlatego działają poprawnie we wszystkich
przypadkach, w tym w szczególności, gdy operandem wejściowym jest NaN. Te instrukcje
są zatem zawsze używane do odpowiednich operacji.

-mnan=2008
-mnan=dziedzictwo
Te opcje kontrolują kodowanie specjalnego nie-numeru (NaN) IEEE 754
dane zmiennoprzecinkowe.

Pandemia -mnan=dziedzictwo opcja wybiera starsze kodowanie. W tym przypadku ciche sieci NaN (qNaN)
są oznaczone przez pierwszy bit ich końcowego pola znaczącego równy 0, podczas gdy
sygnalizacyjne NaN (sNaN) są oznaczone przez pierwszy bit ich końcowego znaczenia
pole o wartości 1.

Pandemia -mnan=2008 opcja wybiera kodowanie IEEE 754-2008. W tym przypadku qNaN to
oznaczony przez pierwszy bit ich końcowego pola znaczącego równy 1, podczas gdy sNaNs
są oznaczone przez pierwszy bit ich końcowego pola znaczącego równy 0.

Wartość domyślna to -mnan=dziedzictwo chyba że GCC zostało skonfigurowane z --with-nan=2008.

-mllsc
-mno-llsc
Użyj (nie używaj) ll, sc, synchronizować instrukcje implementacji wbudowanej pamięci atomowej
Funkcje. Jeśli żadna opcja nie jest określona, ​​GCC używa instrukcji, jeśli cel
wspiera je architektura.

-mllsc jest przydatne, jeśli środowisko uruchomieniowe może emulować instrukcje i -mno-llsc
może być przydatne podczas kompilacji dla niestandardowych ISA. Możesz wybrać dowolną opcję
domyślnie, konfigurując GCC za pomocą --with-llsc dzięki --bez-llsc odpowiednio.
--with-llsc jest wartością domyślną w niektórych konfiguracjach; patrz dokumentacja instalacji
dla szczegółów.

-mdsp
-mno-dsp
Użyj (nie używaj) wersji 1 MIPS DSP ASE.
Ta opcja definiuje makro preprocesora „__mips_dsp”. Definiuje również
„__mips_dsp_rev” na 1.

-mdspr2
-mno-dspr2
Użyj (nie używaj) wersji 2 MIPS DSP ASE.
Ta opcja definiuje makra preprocesora „__mips_dsp” i „__mips_dspr2”. Ono
definiuje również „__mips_dsp_rev” na 2.

-msmartmips
-mno-smartmips
Użyj (nie używaj) MIPS SmartMIPS ASE.

-upośledzony-singiel
-mno-sparowany-singiel
Użyj (nie używaj) sparowanych instrukcji zmiennoprzecinkowych.
Ta opcja wymaga włączenia sprzętowej obsługi zmiennoprzecinkowej.

-mdmx
-mno-mdmx
Użyj (nie używaj) instrukcji MIPS Digital Media Extension. Ta opcja może być tylko
używany podczas generowania kodu 64-bitowego i wymaga sprzętowej obsługi zmiennoprzecinkowej, aby
włączone.

-mips3d
-mno-mips3d
Użyj (nie używaj) MIPS-3D ASE. Opcja -mips3d sugeruje -upośledzony-singiel.

-mmicromips
-mno-micromips
Generuj (nie generuj) kodu microMIPS.

Generowanie kodu MicroMIPS może być również kontrolowane na podstawie funkcji za pomocą
atrybuty „micromips” i „nomicromips”.

-mmt
-mno-mt
Użyj (nie używaj) instrukcji wielowątkowości MT.

-mmcu
-mno-mcu
Użyj (nie używaj) instrukcji MIPS MCU ASE.

-meva
-mno-ewa
Użyj (nie używaj) instrukcji rozszerzonego adresowania wirtualnego MIPS.

-mvirt
-mno-virt
Użyj (nie używaj) instrukcji dotyczących aplikacji do wirtualizacji MIPS.

-mxpa
-mno-xpa
Użyj (nie używaj) instrukcji MIPS eXtended Physical Address (XPA).

-mlong64
Wymuś, aby typy „long” miały szerokość 64 bitów. Widzieć -mlong32 o wyjaśnienie domyślności
oraz sposób, w jaki określany jest rozmiar wskaźnika.

-mlong32
Wymuś typ „long”, „int” i wskaźnik na 32 bity.

Domyślny rozmiar „int”, „long” i wskaźników zależy od ABI. Wszystkie
obsługiwane ABI używają 32-bitowych "int". ABI n64 używa 64-bitowych „długich”, podobnie jak 64-bitowy
EABI; pozostałe używają 32-bitowych „długich”. Wskaźniki mają taki sam rozmiar jak „długie” lub
taki sam rozmiar jak rejestry całkowite, w zależności od tego, która jest mniejsza.

-msym32
-mno-sym32
Załóż (nie zakładaj), że wszystkie symbole mają wartości 32-bitowe, niezależnie od wybranego
ABI. Ta opcja jest przydatna w połączeniu z -mabi=64 dzięki -mno-abicals ponieważ
umożliwia GCC generowanie krótszych i szybszych odwołań do adresów symbolicznych.

-G num
Umieść definicje danych widocznych z zewnątrz w małej sekcji danych, jeśli te dane są nie
większy niż num bajty. GCC może wtedy generować wydajniejszy dostęp do danych; zobaczyć
-mgpopt dla szczegółów.

Domyślny -G opcja zależy od konfiguracji.

-mllocal-sdata
-mno-lokalne-dane
Rozszerz (nie przedłużaj) -G zachowanie również w stosunku do danych lokalnych, takich jak zmienne statyczne
w C. -mllocal-sdata jest wartością domyślną dla wszystkich konfiguracji.

Jeśli linker narzeka, że ​​aplikacja używa zbyt małych danych, możesz:
chcesz spróbować odbudować mniej krytyczne dla wydajności części za pomocą -mno-lokalne-dane. Ty
może również chcieć budować duże biblioteki za pomocą -mno-lokalne-dane, aby biblioteki
zostaw więcej miejsca na program główny.

-mextern-sdata
-mno-extern-sdata
Załóż (nie zakładaj), że dane zdefiniowane zewnętrznie znajdują się w małej sekcji danych, jeśli
rozmiar tych danych mieści się w -G limit. -mextern-sdata jest domyślnym dla wszystkich
konfiguracje.

Jeśli skompilujesz moduł Sposób z -mextern-sdata -G num -mgpopt, Sposób referencje
zmienna var to nie jest większe niż num bajtów, musisz się upewnić, że var Jest położone
w małej sekcji danych. Gdyby var jest zdefiniowany przez inny moduł, musisz albo skompilować
ten moduł z wystarczająco wysokim -G ustawienie lub dołączenie atrybutu „sekcja” do var's
definicja. Gdyby var jest powszechny, musisz połączyć aplikację z wystarczająco wysokim -G
ustawienie.

Najłatwiejszym sposobem spełnienia tych ograniczeń jest skompilowanie i zlinkowanie każdego modułu
z tego samego -G opcja. Możesz jednak chcieć zbudować bibliotekę, która obsługuje
kilka różnych małych limitów danych. Możesz to zrobić, kompilując bibliotekę za pomocą
najwyższy obsługiwany -G ustawienie i dodatkowo używanie -mno-extern-sdata zatrzymać
biblioteka z dokonywania założeń dotyczących danych zdefiniowanych zewnętrznie.

-mgpopt
-mno-gpopt
Używaj (nie używaj) dostępu względnego od lekarza ogólnego dla symboli, o których wiadomo, że znajdują się w małych danych
Sekcja; zobaczyć -G, -mllocal-sdata dzięki -mextern-sdata. -mgpopt jest domyślnym dla wszystkich
konfiguracje.

-mno-gpopt jest przydatne w przypadkach, gdy rejestr $gp może nie zawierać wartości
„_gp”. Na przykład, jeśli kod jest częścią biblioteki, która może być użyta podczas rozruchu
monitor, programy wywołujące procedury monitora rozruchu przekazują nieznaną wartość w $gp. (W
w takich sytuacjach sam monitor rozruchu jest zwykle skompilowany z -G0.)

-mno-gpopt sugeruje -mno-lokalne-dane dzięki -mno-extern-sdata.

-wbudowane dane
-mno-embedded-data
Jeśli to możliwe, najpierw przydziel zmienne do sekcji danych tylko do odczytu, a następnie w
mała sekcja danych, jeśli to możliwe, w przeciwnym razie w danych. Daje to nieco wolniejszy kod
niż domyślnie, ale zmniejsza ilość pamięci RAM wymaganej podczas wykonywania, a zatem może
być preferowane w przypadku niektórych systemów wbudowanych.

-muninit-const-in-rodata
-mno-unit-const-w-rodacie
Umieść niezainicjowane zmienne „const” w sekcji danych tylko do odczytu. Ta opcja to
ma znaczenie tylko w połączeniu z -wbudowane dane.

-mcode-czytelny=ustawienie
Określ, czy GCC może generować kod, który odczytuje z sekcji wykonywalnych. Są
trzy możliwe ustawienia:

-mcode-readable=tak
Instrukcje mogą swobodnie uzyskiwać dostęp do sekcji wykonywalnych. To jest ustawienie domyślne.

-mcode-readable=pcrel
Instrukcje ładowania MIPS16 względem komputera PC mogą uzyskać dostęp do sekcji wykonywalnych, ale inne
instrukcje nie mogą tego robić. Ta opcja jest przydatna na procesorach 4KSc i 4KSd
gdy bloki TLB kodu mają ustawiony bit blokowania odczytu. Przydaje się również na procesorach
które można skonfigurować tak, aby miały podwójny interfejs instrukcji/danych SRAM i to,
podobnie jak M4K, automatycznie przekierowują obciążenia związane z komputerem PC do pamięci RAM instrukcji.

-mcode-readable=nie
Instrukcje nie mogą mieć dostępu do sekcji wykonywalnych. Ta opcja może być przydatna na
cele, które są skonfigurowane tak, aby miały podwójny interfejs instrukcji/danych SRAM, ale
które (w przeciwieństwie do M4K) nie przekierowują automatycznie obciążeń związanych z komputerem do
instrukcja RAM.

-msplit-adresy
-mno-split-adresy
Włącz (wyłącz) użycie operatorów relokacji asemblera "%hi()" i "%lo()". Ten
opcja została zastąpiona przez -mexplicit-relocs ale jest zachowany na odwrót
kompatybilność.

-mexplicit-relocs
-mno-explicit-relocs
Używaj (nie używaj) operatorów relokacji asemblera podczas pracy z adresami symbolicznymi.
Alternatywa, wybrana przez -mno-explicit-relocs, jest użycie makr asemblera.

-mexplicit-relocs jest domyślnym, jeśli GCC zostało skonfigurowane do używania asemblera, który
wspiera operatorów relokacji.

-mcheck-zero-dzielenie
-mno-check-zero-division
Pułapka (nie zalewkuje) przy dzieleniu liczb całkowitych przez zero.

Wartość domyślna to -mcheck-zero-dzielenie.

-mdivide-pułapki
-mdivide-breaks
Systemy MIPS sprawdzają dzielenie przez zero, generując pułapkę warunkową lub a
przerwać instrukcję. Używanie pułapek daje mniejszy kod, ale jest obsługiwane tylko w MIPS
II i później. Ponadto niektóre wersje jądra Linuksa mają błąd, który zapobiega pułapce
od wygenerowania prawidłowego sygnału ("SIGFPE"). Posługiwać się -mdivide-pułapki zezwolić na warunkowe
pułapki na architekturach, które je obsługują i -mdivide-breaks wymusić użycie
przerwy.

Wartość domyślna to zwykle -mdivide-pułapki, ale można to zmienić w czasie konfiguracji
za pomocą --with-divide=przerwy. Kontrole dzielenia przez zero można całkowicie wyłączyć za pomocą
-mno-check-zero-division.

-mmemcpy
-mno-memcpy
Wymuś (nie wymuszaj) użycia „memcpy” dla nietrywialnych ruchów blokowych. Wartość domyślna to
-mno-memcpy, co pozwala GCC na wbudowanie większości kopii o stałym rozmiarze.

-mlong-rozmowy
-mno-długie-rozmowy
Wyłącz (nie wyłączaj) użycia instrukcji „jal”. Wywoływanie funkcji za pomocą „jal”
jest bardziej wydajny, ale wymaga, aby rozmówca i rozmówca mieli te same 256 megabajtów
Segment.

Ta opcja nie ma wpływu na kod abicalls. Wartość domyślna to -mno-długie-rozmowy.

-mmad
-mno-szalony
Włącz (wyłącz) korzystanie z instrukcji „mad”, „madu” i „mul”, zgodnie z instrukcjami
R4650 ISA.

-mimadd
-mno-imadd
Włącz (wyłącz) użycie instrukcji "madd" i "msub" dla liczb całkowitych. Wartość domyślna to
-mimadd na architekturach obsługujących "madd" i "msub" z wyjątkiem 74k
architektura, w której stwierdzono, że generuje wolniejszy kod.

-mfused-madd
-mno-skondensowany-madd
Włącz (wyłącz) użycie zmiennoprzecinkowych instrukcji multiply-accumulate, gdy one
są dostępne. Wartość domyślna to -mfused-madd.

Na procesorze urządzenia R8000, gdy używane są instrukcje mnożenia akumulacji, pośrednie
produkt jest obliczany z nieskończoną precyzją i nie podlega FCSR Flush do
Zerowy bit. W niektórych okolicznościach może to być niepożądane. Na innych procesorach
wynik jest liczbowo identyczny z równoważnym obliczeniem przy użyciu oddzielnego mnożenia,
dodawać, odejmować i negować instrukcje.

-nocpp
Powiedz asemblerowi MIPS, aby nie uruchamiał swojego preprocesora na plikach asemblera użytkownika (z
.s przyrostek) podczas ich montażu.

-mfix-24k
-mno-fix-24k
Obejdź erratę 24K E48 (utracone dane w sklepach podczas uzupełniania). Obejścia
są implementowane przez asembler, a nie przez GCC.

-mfix-r4000
-mno-fix-r4000
Obejdź pewną erratę procesora R4000:

- Podwójne słowo lub przesunięcie zmiennej może dać błędny wynik, jeśli zostanie wykonane
natychmiast po rozpoczęciu dzielenia liczb całkowitych.

- Podwójne słowo lub przesunięcie zmiennej może dać błędny wynik, jeśli zostanie wykonane podczas
trwa mnożenie liczb całkowitych.

- Dzielenie liczb całkowitych może dać błędny wynik, jeśli zostanie rozpoczęte w gnieździe opóźnienia a
podjęta gałąź lub skok.

-mfix-r4400
-mno-fix-r4400
Obejdź pewną erratę procesora R4400:

- Podwójne słowo lub przesunięcie zmiennej może dać błędny wynik, jeśli zostanie wykonane
natychmiast po rozpoczęciu dzielenia liczb całkowitych.

-mfix-r10000
-mno-fix-r10000
Obejdź pewną erratę R10000:

- Sekwencje "ll"/"sc" mogą nie zachowywać się atomowo w wersjach wcześniejszych niż 3.0. Oni mogą
impas w wersji 2.6 i wcześniejszych.

Ta opcja może być używana tylko wtedy, gdy architektura docelowa obsługuje prawdopodobnie gałęzie
instrukcje. -mfix-r10000 jest domyślnym, gdy -marzec=r10000 jest używany; -mno-fix-r10000
jest wartością domyślną w przeciwnym razie.

-mfix-rm7000
-mno-fix-rm7000
Obejdź erratę RM7000 „dmult”/„dmultu”. Obejścia są wdrażane przez
asemblera, a nie GCC.

-mfix-vr4120
-mno-fix-vr4120
Obejdź pewną erratę VR4120:

- "dmultu" nie zawsze daje poprawny wynik.

- "div" i "ddiv" nie zawsze dają poprawny wynik, jeśli jeden z operandów
jest ujemny.

Obejścia dla erraty podziału polegają na specjalnych funkcjach w: libgcc.a. W
Obecnie funkcje te są dostępne tylko w konfiguracjach „mips64vr*-elf”.

Inne erraty VR4120 wymagają wstawienia NOP między pewne pary
instrukcje. Te erraty są obsługiwane przez asembler, a nie przez samo GCC.

-mfix-vr4130
Obejdź erratę VR4130 „mflo”/„mfhi”. Obejścia są wdrażane przez
asemblera zamiast przez GCC, chociaż GCC unika używania "mflo" i "mfhi", jeśli
Zamiast tego dostępne są instrukcje VR4130 „macc”, „macchi”, „dmacc” i „dmacchi”.

-mfix-sb1
-mno-fix-sb1
Obejdź pewną erratę rdzenia procesora SB-1. (Ta flaga działa obecnie wokół SB-1
wersja 2 Errata zmiennoprzecinkowa „F1” i „F2”.)

-mr10k-bariera-cache=ustawienie
Określ, czy GCC ma wstawiać bariery pamięci podręcznej, aby uniknąć skutków ubocznych
spekulacje na temat procesorów R10K.

Podobnie jak w przypadku wielu procesorów, R10K próbuje przewidzieć wynik warunkowego
branch i spekulatywnie wykonuje instrukcje z gałęzi „wziętej”. To później
przerywa te instrukcje, jeśli przewidywany wynik jest nieprawidłowy. Jednak w R10K
nawet przerwane instrukcje mogą mieć skutki uboczne.

Ten problem dotyczy tylko magazynów jądra i, w zależności od systemu, ładowania jądra.
Na przykład sklep wykonywany spekulatywnie może załadować pamięć docelową do pamięci podręcznej
i oznacz linię pamięci podręcznej jako brudną, nawet jeśli sam sklep zostanie później przerwany. Jeśli DMA
operacja zapisuje w tym samym obszarze pamięci przed opróżnieniem "brudnej" linii,
dane w pamięci podręcznej nadpisują dane w formacie DMA. Pełne informacje można znaleźć w instrukcji procesora R10K
opis, w tym inne potencjalne problemy.

Jednym z rozwiązań jest wstawienie instrukcji bariery pamięci podręcznej przed każdym dostępem do pamięci, który
może zostać wykonany spekulacyjnie i może mieć skutki uboczne, nawet jeśli zostanie przerwany.
-mr10k-bariera-cache=ustawienie kontroluje implementację tego obejścia przez GCC. Ono
zakłada, że ​​przerwane dostępy do dowolnego bajtu w następujących regionach nie mają strony
efekty:

1. pamięć zajmowana przez ramkę stosu bieżącej funkcji;

2. pamięć zajmowana przez przychodzący argument stosu;

3. pamięć zajmowana przez obiekt o stałym adresie czasowym łącza.

Jądro jest odpowiedzialne za zapewnienie spekulatywnego dostępu do tych regionów
są rzeczywiście bezpieczne.

Jeśli program wejściowy zawiera deklarację funkcji, taką jak:

void foo (unieważnienie);

wtedy implementacja „foo” musi umożliwiać wykonanie „j foo” i „jal foo”
spekulacyjnie. GCC honoruje to ograniczenie dla funkcji, które sam kompiluje. Ono
oczekuje, że funkcje spoza GCC (takie jak ręcznie napisany kod asemblera) zrobią to samo.

Opcja ma trzy formy:

-mr10k-cache-barrier=load-store
Wstaw barierę pamięci podręcznej przed ładowaniem lub sklepem, który może zostać wykonany spekulacyjnie
i to może mieć skutki uboczne, nawet jeśli zostanie przerwane.

-mr10k-cache-barrier=store
Wstaw barierę pamięci podręcznej przed sklepem, który może być wykonywany spekulacyjnie i
które mogą mieć skutki uboczne, nawet jeśli zostaną przerwane.

-mr10k-cache-barrier=brak
Wyłącz wstawianie barier pamięci podręcznej. To jest ustawienie domyślne.

-mflush-func=funkcjonować
-mno-flush-func
Określa funkcję do wywołania, aby opróżnić pamięć podręczną I i D lub nie wywoływać żadnego z nich
funkcjonować. Jeśli zostanie wywołana, funkcja musi przyjąć te same argumenty, co wspólne
„_flush_func”, czyli adres zakresu pamięci, dla którego jest używana pamięć podręczna
opróżniony, rozmiar zakresu pamięci i numer 3 (aby opróżnić obie pamięci podręczne). ten
wartość domyślna zależy od docelowego GCC, dla którego skonfigurowano GCC, ale często jest albo
„_flush_func” lub „__cpu_flush”.

koszt-oddzialu=num
Ustaw koszt oddziałów na mniej więcej num „proste” instrukcje. Ten koszt to tylko
heurystyczne i nie gwarantuje uzyskania spójnych wyników w różnych wydaniach. Zero
koszt nadmiarowo wybiera wartość domyślną, która jest oparta na -mtune ustawienie.

-oddział-prawdopodobnie
-mno-oddział-prawdopodobnie
Włącz lub wyłącz korzystanie z instrukcji Branch Likely, niezależnie od wartości domyślnej dla
wybrana architektura. Domyślnie instrukcje Branch Likely mogą być generowane, jeśli:
są obsługiwane przez wybraną architekturę. Wyjątek dotyczy MIPS32 i
Architektury MIPS64 i procesory, które implementują te architektury; dla tych,
Instrukcje Branch Liked nie są generowane domyślnie, ponieważ MIPS32 i
Architektury MIPS64 wyraźnie przestają ich używać.

-wyjątki-mfp
-mno-fp-wyjątki
Określa, czy wyjątki FP są włączone. Wpływa to na sposób wykonywania instrukcji FP
zaplanowane dla niektórych przetwórców. Domyślnie włączone są wyjątki FP.

Na przykład na SB-1, jeśli wyjątki FP są wyłączone i emitujemy 64-bitowe
kodu, wtedy możemy użyć obu potoków FP. W przeciwnym razie możemy użyć tylko jednej rury FP.

-mvr4130-wyrównaj
-mno-vr4130-wyrównaj
Potok VR4130 jest dwukierunkowy, superskalarny, ale może wydawać tylko dwie instrukcje
razem, jeśli pierwszy jest wyrównany do 8 bajtów. Gdy ta opcja jest włączona, GCC wyrównuje
pary instrukcji, które jego zdaniem powinny być wykonywane równolegle.

Ta opcja ma wpływ tylko podczas optymalizacji dla VR4130. Zwykle tworzy kod!
szybciej, ale kosztem powiększenia. Jest domyślnie włączony w
poziom optymalizacji -O3.

-msynci
-mno-synci
Włącz (wyłącz) generowanie instrukcji „synci” na architekturach, które to obsługują.
Instrukcje "synci" (jeśli włączone) są generowane, gdy "__builtin___clear_cache" jest
skompilowany.

Ta opcja jest domyślnie ustawiona na -mno-synci, ale wartość domyślną można zmienić, konfigurując
GCC z --with-synci.

Podczas kompilowania kodu dla systemów jednoprocesorowych ogólnie bezpiecznie jest używać „synci”.
Jednak w wielu systemach wielordzeniowych (SMP) nie unieważnia to instrukcji
buforuje na wszystkich rdzeniach i może prowadzić do niezdefiniowanego zachowania.

-mrelax-pic-calls
-mno-relaks-pic-rozmowy
Spróbuj zamienić połączenia PIC, które są zwykle wysyłane za pośrednictwem rejestru 25 USD, na połączenia bezpośrednie.
Jest to możliwe tylko wtedy, gdy linker może rozwiązać miejsce docelowe w czasie połączenia i jeśli
miejsce docelowe znajduje się w zasięgu bezpośredniego połączenia.

-mrelax-pic-calls jest domyślnym, jeśli GCC zostało skonfigurowane do używania asemblera i
konsolidator, który obsługuje dyrektywę asemblerową ".reloc" i -mexplicit-relocs jest w
efekt. Z -mno-explicit-relocs, ta optymalizacja może być wykonana przez
sam asembler i linker bez pomocy kompilatora.

-mmcount-ra-adres
-mno-mcount-ra-adres
Emituj (nie emituj) kod, który pozwala „_mcount” modyfikować zwracaną funkcję wywołującą
adres. Po włączeniu ta opcja rozszerza zwykły interfejs "_mcount" o nowy
adres ra parametr, który ma typ „intptr_t *” i jest przekazywany w rejestrze 12 USD.
„_mcount” może następnie zmodyfikować adres zwrotny, wykonując obie następujące czynności:

* Zwrócenie nowego adresu w rejestrze 31 USD.

* Przechowywanie nowego adresu w „*adres ra"Jeśli adres ra nie ma wartości null.

Wartość domyślna to -mno-mcount-ra-adres.

MMIX Opcje

Te opcje są zdefiniowane dla MMIX:

-mlibfuncs
-mno-libfuncs
Określ, że kompilowane są wewnętrzne funkcje biblioteczne, przekazując wszystkie wartości w
rejestry, bez względu na wielkość.

-mepsilon
-mno-epsilon
Generuj instrukcje porównania zmiennoprzecinkowego, które porównują w odniesieniu do „rE”
rejestr epsilon.

-mabi=mmixware
-mabi=gnu
Wygeneruj kod, który przekazuje parametry funkcji i zwraca wartości, które (w wywołanym
funkcji) są postrzegane jako rejestry od 0 $ i więcej, w przeciwieństwie do GNU ABI, które używa globalnych
rejestruje $231 i więcej.

-mzero-rozszerzenie
-mno-zero-extend
Przy odczytywaniu danych z pamięci w rozmiarach krótszych niż 64 bity należy używać (nie używać) zero-
domyślnie rozszerzające instrukcje ładowania, a nie te rozszerzające znak.

-mknuthdiv
-mno-knuthdiv
Niech wynik dzielenia dający resztę ma taki sam znak jak dzielnik.
Przy domyślnym -mno-knuthdiv, znak reszty następuje po znaku
dywidenda. Obie metody są poprawne arytmetycznie, przy czym ta ostatnia jest prawie wyłącznie
używany.

-symbole mtoplevel
-mno-symbole-najwyższego poziomu
Dołącz (nie dołączaj) a : do wszystkich symboli globalnych, dzięki czemu można użyć kodu asemblera
z dyrektywą montażową „PREFIX”.

-melf
Wygeneruj plik wykonywalny w formacie ELF, a nie domyślnym mmo format używany przez
die,en mmmix symulator.

-przewidywanie-oddziału
-mno-branch-predict
Użyj (nie używaj) instrukcji prawdopodobnego rozgałęzienia, gdy przewidywanie statycznego rozgałęzienia
wskazuje prawdopodobną gałąź.

- adresy-mbase
-mno-base-adresy
Generuj (nie generuj) kod, który używa baza Adresy. Korzystanie z adresu bazowego
automatycznie generuje żądanie (obsługiwane przez asembler i linker) dla a
stała do ustawienia w rejestrze globalnym. Rejestr jest używany dla jednej lub więcej baz
adresuje żądania z zakresu od 0 do 255 od wartości przechowywanej w rejestrze. ten
generalnie prowadzi do krótkiego i szybkiego kodu, ale liczba różnych elementów danych, które
można się zająć jest ograniczona. Oznacza to, że program, który wykorzystuje dużo danych statycznych
może wymagać -mno-base-adresy.

-pojedyncze-wyjście
-mno-pojedyncze-wyjście
Wymuś (nie wymuszaj) wygenerowanego kodu, aby miał jeden punkt wyjścia w każdej funkcji.

MN10300 Opcje

Te -m opcje są zdefiniowane dla architektur Matsushita MN10300:

-mult-bug
Wygeneruj kod, aby uniknąć błędów w instrukcjach mnożenia dla procesorów MN10300.
To jest ustawienie domyślne.

-mno-mult-bug
Nie generuj kodu, aby uniknąć błędów w instrukcjach mnożenia dla MN10300
procesorów.

-mam33
Generuj kod za pomocą funkcji specyficznych dla procesora AM33.

-mno-am33
Nie generuj kodu przy użyciu funkcji specyficznych dla procesora AM33. To jest
domyślna.

-mam33-2
Generuj kod za pomocą funkcji specyficznych dla procesora AM33/2.0.

-mam34
Generuj kod za pomocą funkcji specyficznych dla procesora AM34.

-mtune=typ procesora
Podczas planowania instrukcji należy używać charakterystyk taktowania wskazanego typu procesora.
Nie zmienia to docelowego typu procesora. Typ procesora musi być jednym z
mn10300, am33, jestem33-2 or am34.

-mreturn-pointer-on-d0
Podczas generowania funkcji, która zwraca wskaźnik, zwróć wskaźnik zarówno w „a0”, jak i
"d0". W przeciwnym razie wskaźnik jest zwracany tylko w "a0" i próbuje wywołać takie
funkcje bez prototypu powodują błędy. Zauważ, że ta opcja jest włączona przez
domyślny; posługiwać się -mno-wskaźnik-powrotu-na-d0 wyłączyć.

-mno-crt0
Nie łącz w pliku obiektu inicjowania środowiska wykonawczego C.

-mrelaks
Wskaż linkerowi, że powinien wykonać optymalizację relaksacyjną do
skrócić gałęzie, wywołania i bezwzględne adresy pamięci. Ta opcja ma tylko wpływ
gdy jest używany w wierszu poleceń w ostatnim kroku łączenia.

Ta opcja uniemożliwia debugowanie symboliczne.

-mliw
Pozwól kompilatorowi na generowanie długo Instrukcja słowo instrukcje, jeśli celem jest
AM33 lub później. To jest ustawienie domyślne. Ta opcja definiuje makro preprocesora
„__LIW__”.

-mnoliw
Nie zezwalaj kompilatorowi na generowanie długo Instrukcja słowo instrukcje. Ta opcja
definiuje makro preprocesora „__NO_LIW__”.

-msetlb
Pozwól kompilatorowi wygenerować SETLB dzięki Lcc instrukcje, jeśli celem jest
AM33 lub później. To jest ustawienie domyślne. Ta opcja definiuje makro preprocesora
„__SETLB__”.

-mnosetlb
Nie zezwalaj kompilatorowi na generowanie SETLB or Lcc instrukcje. Ta opcja definiuje
makro preprocesora „__NO_SETLB__”.

Moxie Opcje

-meb
Generuj kod big-endian. To jest domyślne dla moxie-*-* konfiguracje.

-mel
Generuj kod little-endian.

-mmul.x
Generuj instrukcje mul.x i umul.x. To jest domyślne dla moxiebox-*-*
konfiguracje.

-mno-crt0
Nie łącz w pliku obiektu inicjowania środowiska wykonawczego C.

MSP430 Opcje

Te opcje są zdefiniowane dla MSP430:

-masm-hex
Wymuś wyjście asemblera, aby zawsze używało stałych szesnastkowych. Zwykle takie stałe są podpisane
ułamki dziesiętne, ale ta opcja jest dostępna dla testów i/lub celów estetycznych.

-mmcu=
Wybierz MCU do celu. Służy do tworzenia symbolu preprocesora C w oparciu o
nazwa MCU, przekonwertowana na wielkie litery i wstępnie i po naprawie za pomocą __. To z kolei
jest używany przez msp430.h plik nagłówkowy, aby wybrać dodatkowy nagłówek specyficzny dla MCU
plik.

Opcja ustawia również ISA do użycia. Jeśli nazwa MCU jest znana tylko
obsługuje 430 ISA, gdy jest wybrany, w przeciwnym razie wybierany jest 430X ISA. A
ogólna nazwa MCU z msp430 może być również użyty do wyboru 430 ISA. Podobnie
ogólny msp430x Nazwa MCU wybiera 430X ISA.

Ponadto do wiersza poleceń konsolidatora dodawany jest skrypt konsolidacyjny specyficzny dla MCU. ten
nazwa skryptu to nazwa MCU z .ld dołączone. W ten sposób określając -mmcu=xxx on
die,en gcc wiersz poleceń definiuje symbol preprocesora C "__XXX__" i powoduje, że linker
aby wyszukać skrypt o nazwie xxx.ld.

Ta opcja jest również przekazywana asemblerowi.

-mcpu=
Określa ISA do użycia. Akceptowane wartości to msp430, msp430x dzięki msp430xv2, To
opcja jest przestarzała. ten -mmcu= należy użyć opcji, aby wybrać ISA.

-msim
Link do bibliotek wykonawczych symulatora i skryptu konsolidatora. Zastępuje wszystkie skrypty, które
zostałby wybrany przez -mmcu= opcja.

-powiększanie
Użyj adresowania dużego modelu (wskaźniki 20-bitowe, 32-bitowe „size_t”).

-mały
Użyj adresowania małych modeli (wskaźniki 16-bitowe, 16-bitowe „size_t”).

-mrelaks
Ta opcja jest przekazywana do asemblera i linkera i umożliwia linkerowi wykonanie
pewne optymalizacje, których nie można wykonać przed ostatecznym linkiem.

mhwmult=
Opisuje typ multiplikacji sprzętu obsługiwanego przez cel. Akceptowane wartości to
Żaden bez mnożenia sprzętu, 16bit dla oryginalnego obsługiwanego tylko 16-bitowego mnożenia
przez wczesne MCU. 32bit dla mnożenia 16/32-bitowego obsługiwanego przez późniejsze MCU i seria f5
dla mnożenia 16/32-bitowego obsługiwanego przez MCU serii F5. Wartość samochód może też być
dany. To mówi GCC, aby wydedukować obsługę mnożenia sprzętu na podstawie nazwy MCU
dostarczone przez -mmcu opcja. Jeśli nie -mmcu opcja jest wtedy określona 32bit sprzęt komputerowy
zakłada się wielokrotne wsparcie. samochód jest ustawieniem domyślnym.

Mnożenia sprzętowe są zwykle wykonywane przez wywołanie procedury bibliotecznej. To oszczędza
miejsce w wygenerowanym kodzie. Podczas kompilacji w -O3 lub wyższy jednak sprzęt
mnożnik jest wywoływany w tekście. To sprawia, że ​​kod jest większy, ale szybszy.

Sprzętowe procedury mnożenia wyłączają przerwania podczas działania i przywracają
poprzedni stan przerwania po ich zakończeniu. Dzięki temu są bezpieczne w użyciu w środku
obsługi przerwań, jak również w normalnym kodzie.

-minrt
Włącz korzystanie z minimalnego środowiska uruchomieniowego — bez statycznych inicjatorów lub
konstruktorzy. Jest to przeznaczone dla urządzeń z ograniczoną pamięcią. Kompilator zawiera
specjalne symbole w niektórych obiektach, które informują linker i środowisko wykonawcze, które fragmenty kodu
są wymagane.

NDS32 Opcje

Te opcje są zdefiniowane dla implementacji NDS32:

-mbig-endian
Generuj kod w trybie big-endian.

-mlittle-endian
Generuj kod w trybie little-endian.

-mreduced-regs
Do przydzielania rejestrów należy używać rejestrów o zredukowanej liczbie zestawów.

-mfull-regs
Użyj pełnych rejestrów do alokacji rejestrów.

-mcmov
Generuj instrukcje ruchu warunkowego.

-mno-cmov
Nie generuj instrukcji ruchu warunkowego.

-mperf-ext
Generuj instrukcje rozszerzenia wydajności.

-mno-perf-ext
Nie generuj instrukcji rozszerzenia wydajności.

-mv3push
Wygeneruj instrukcje push3/pop25 v25.

-mno-v3push
Nie generuj instrukcji push3/pop25 v25.

-m16-bitowy
Generuj instrukcje 16-bitowe.

-mno-16-bitowy
Nie generuj instrukcji 16-bitowych.

-misr-vector-size=num
Określ rozmiar każdego wektora przerwań, który musi wynosić 4 lub 16.

-rozmiar-bloku-mcache=num
Określ rozmiar każdego bloku pamięci podręcznej, który musi być potęgą 2 z zakresu od 4 do 512.

-marzec=łuk
Podaj nazwę architektury docelowej.

-mcmodel=kod-model
Ustaw model kodu na jeden z

mały
Wszystkie dane i segmenty danych tylko do odczytu muszą mieścić się w przestrzeni adresowej 512 KB.
Segment tekstu musi mieścić się w przestrzeni adresowej 16 MB.

średni
Segment danych musi mieścić się w zakresie 512 KB, podczas gdy segment danych tylko do odczytu może być
w obrębie 4 GB przestrzeni adresowej. Segment tekstu powinien nadal mieścić się w zakresie 16 MB
adresowanie przestrzeni.

duży
Wszystkie segmenty tekstu i danych mogą znajdować się w przestrzeni adresowej 4 GB.

-mctor-dtor
Włącz funkcję konstruktora/destruktora.

-mrelaks
Przewodnik linkera, aby rozluźnić instrukcje.

Nios II Opcje

Są to opcje zdefiniowane dla procesora Altera Nios II.

-G num
Umieść globalne i statyczne obiekty mniejsze lub równe num bajtów na małe dane lub
Sekcje BSS zamiast normalnych sekcji danych lub sekcji BSS. Domyślna wartość num is
8.

-mgpopt=opcja
-mgpopt
-mno-gpopt
Generuj (nie generuj) dostępów zależnych od lekarza rodzinnego. Następujące opcja imiona to
rozpoznano:

Żaden
Nie generuj dostępów zależnych od lekarza rodzinnego.

miejscowy
Generuj dostępy względne GP dla małych obiektów danych, które nie są zewnętrzne lub
słaby. Używaj również adresowania względnego GP dla obiektów, które zostały jawnie oznaczone
umieszczone w małej sekcji danych za pomocą atrybutu „sekcja”.

światowy
Co się tyczy miejscowy, ale także generować dostępy względne GP dla małych obiektów danych, które:
są zewnętrzne lub słabe. Jeśli korzystasz z tej opcji, musisz upewnić się, że wszystkie części
Twój program (w tym biblioteki) są skompilowane z tym samym -G ustawienie.

data
Generuj dostępy zależne od GP dla wszystkich obiektów danych w programie. Jeśli użyjesz
ta opcja, całe segmenty danych i BSS twojego programu muszą zmieścić się w 64K of
pamięci i musisz użyć odpowiedniego skryptu linkera, aby przydzielić je w obrębie
adresowalny zakres wskaźnika globalnego.

cała kolekcja Generuj adresy względne GP dla wskaźników funkcji, a także wskaźników danych. Gdyby
użyjesz tej opcji, cały tekst, dane i segmenty BSS twojego programu muszą
mieści się w 64 KB pamięci i musisz użyć odpowiedniego skryptu linkera, aby go przydzielić
je w adresowalnym zakresie wskaźnika globalnego.

-mgpopt odpowiada -mgpopt=lokalny, -mno-gpopt odpowiada -mgpopt=brak.

Wartość domyślna to -mgpopt z wyjątkiem kiedy -fpic or -fPIC jest określony do generowania pozycji-
niezależny kod. Należy pamiętać, że Nios II ABI nie zezwala na dostęp w stosunku do lekarza rodzinnego z
biblioteki współdzielone.

Może być konieczne określenie -mno-gpopt wyraźnie podczas tworzenia programów, które zawierają
duże ilości małych danych, w tym duże sekcje danych GOT. W tym przypadku
16-bitowe przesunięcie dla adresowania względnego GP może nie być wystarczająco duże, aby umożliwić dostęp do
całą małą sekcję danych.

-mel
-meb
Generuj odpowiednio kod little-endian (domyślny) lub big-endian (eksperymentalny).

-mbypass-cache
-mno-bypass-cache
Wymuś wszystkie instrukcje ładowania i przechowywania, aby zawsze omijały pamięć podręczną, używając wariantów we/wy
instrukcje. Domyślnie nie pomija się pamięci podręcznej.

-mno-cache-volatile
-mcache-volatile
Dostęp do pamięci ulotnej omija pamięć podręczną przy użyciu wariantów I/O ładowania i przechowywania
instrukcje. Domyślnie nie pomija się pamięci podręcznej.

-mno-szybko-sw-div
-mfast-sw-div
Nie używaj szybkiego dzielenia na podstawie tabeli dla małych liczb. Domyślnie używany jest szybki
podzielić w -O3 i powyżej.

-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-mhw-mulx
-mno-hw-div
-mhw-div
Włącz lub wyłącz wysyłanie rodziny instrukcji „mul”, „mulx” i „div” przez
kompilator. Domyślnie emitowane jest „mul”, a nie „div” i „mulx”.

-mna zamówienie-insn=N
-mno-niestandardowy-insn
Każdy -mna zamówienie-insn=N opcja umożliwia użycie niestandardowej instrukcji z kodowaniem N gdy
generowanie kodu, który używa insn, Na przykład, -mcustom-fadds=253 generuje niestandardowe
instrukcja 253 dla operacji dodawania zmiennoprzecinkowych pojedynczej precyzji zamiast
domyślne zachowanie przy użyciu wywołania biblioteki.

Następujące wartości insn są obsługiwane. O ile nie zaznaczono inaczej, liczba zmiennoprzecinkowa
oczekuje się, że operacje będą realizowane z normalną semantyką IEEE 754 i
odpowiadają bezpośrednio operatorom C lub równoważnym wbudowanym funkcjom GCC.

Liczba zmiennoprzecinkowa pojedynczej precyzji:

moda, fsubs, fdivs, fmuls
Binarne operacje arytmetyczne.

fnegs
Negacja jednoargumentowa.

bajka
Jednoargumentowa wartość bezwzględna.

fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
Operacje porównawcze.

fmins, fmaxs
Minimum i maksimum zmiennoprzecinkowe. Te instrukcje są generowane tylko wtedy, gdy
-finite-tylko matematyka jest specyficzne.

fsqrts
Operacja na jednoargumentowym pierwiastku kwadratowym.

fcoss, fsins, ftan, fatan, fexps, chłosta
zmiennoprzecinkowe funkcje trygonometryczne i wykładnicze. Te instrukcje są
generowane tylko wtedy, gdy -funsafe-matematyczne optymalizacje jest również określony.

Liczba zmiennoprzecinkowa podwójnej precyzji:

faddd, fsubd, fdivd, fmuld
Binarne operacje arytmetyczne.

fnegd
Negacja jednoargumentowa.

fabsd
Jednoargumentowa wartość bezwzględna.

fcmpeqd, fcmpged, fcmpgtd, ukończone, fcmpltd, fcmpned
Operacje porównawcze.

fmind, fmaxd
Podwójna precyzja minimum i maksimum. Te instrukcje są generowane tylko wtedy, gdy
-finite-tylko matematyka jest specyficzne.

fsqrtd
Operacja na jednoargumentowym pierwiastku kwadratowym.

fcosd, fsind, ftand, fatand, fexpd, biczować
Funkcje trygonometryczne i wykładnicze o podwójnej precyzji. Te instrukcje są
generowane tylko wtedy, gdy -funsafe-matematyczne optymalizacje jest również określony.

Konwersje:

fextsd
Konwersja od pojedynczej precyzji do podwójnej precyzji.

fruncds
Konwersja z podwójnej precyzji na pojedynczą precyzję.

naprawić, fixsu, naprawiono, fixdu
Konwersja z liczby zmiennoprzecinkowej na typy całkowite ze znakiem lub bez znaku, z
obcięcie w kierunku zera.

okrągły
Konwersja z liczby zmiennoprzecinkowej o pojedynczej precyzji na liczbę całkowitą ze znakiem, zaokrąglając do
najbliższa liczba całkowita i remisy od zera. Odpowiada to
Funkcja „__builtin_lroundf”, gdy -fno-matma-errno Jest używane.

unosić się, floatus, pływać, unosić się
Konwersja z typów liczb całkowitych ze znakiem lub bez znaku na typy zmiennoprzecinkowe.

Ponadto wszystkie poniższe instrukcje transferu dla rejestrów wewnętrznych X i Y
należy podać, aby można było użyć dowolnej instrukcji zmiennoprzecinkowej podwójnej precyzji.
Niestandardowe instrukcje przyjmujące dwa operandy źródłowe o podwójnej precyzji oczekują pierwszego
operand w 64-bitowym rejestrze X. Drugi operand (lub tylko operand jednoargumentowy)
operacja) jest podana do niestandardowej instrukcji arytmetycznej z najmniej znaczącym
połowa w rejestrze źródłowym src1 a najważniejsza połowa w src2. zwyczaj
instrukcja zwracająca wynik o podwójnej precyzji zwraca najbardziej znaczące 32
bity w rejestrze docelowym, a druga połowa w rejestrze 32-bitowym Y. GCC
automatycznie generuje niezbędne sekwencje kodów do zapisu rejestru X i/lub odczytu
zarejestrować Y, gdy używane są instrukcje zmiennoprzecinkowe podwójnej precyzji.

fwrx
Pisać src1 do najmniej znaczącej połowy X i src2 w najbardziej znaczące
połowa X.

fwry
Pisać src1 na Y.

frdxhi, frdxlo
Przeczytaj najbardziej lub najmniej (odpowiednio) znaczącą połowę X i zapisz ją w przeznaczenie.

frdy
Odczytaj wartość Y i zapisz ją w przeznaczenie.

Pamiętaj, że możesz uzyskać większą lokalną kontrolę nad generowaniem niestandardowego Nios II
instrukcji za pomocą "target("custom-insn=N")" i "target("bez-niestandardowy-insn")"
atrybuty funkcji lub pragmy.

-mcustom-fpu-cfg=Nazwa
Ta opcja włącza predefiniowany, nazwany zestaw niestandardowych kodowań instrukcji (zobacz
-mna zamówienie-insn nad). Obecnie zdefiniowane są następujące zestawy:

-mcustom-fpu-cfg=60-1 jest równa: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -fsingle-precyzja-stała

-mcustom-fpu-cfg=60-2 jest równa: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -mcustom-fdivs=255 -fsingle-precyzja-stała

-mcustom-fpu-cfg=72-3 jest równa: -mcustom-floatus=243 -mcustom-fixsi=244
-mcustom-floatis=245 -mcustom-fcmgts=246 -mcustom-fcmles=249 -mcustom-fcmpeqs=250
-mcustom-fcmpnes=251 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
-mcustom-fdivs=255 -fsingle-precyzja-stała

Niestandardowe przypisania instrukcji nadawane przez indywidualne -mna zamówienie-insn= nadpisanie opcji
te podane przez -mcustom-fpu-cfg=, niezależnie od kolejności opcji na
wiersz poleceń.

Zauważ, że możesz uzyskać większą lokalną kontrolę nad wyborem konfiguracji FPU poprzez:
używając "target("custom-fpu-cfg=Nazwa")" atrybut funkcji lub pragma.

Te dodatkowe -m opcje są dostępne dla tarczy Altera Nios II ELF (goły metal):

-mhal
Połącz z HAL BSP. Uniemożliwia to łączenie się z dostarczonym przez GCC uruchomieniem środowiska uruchomieniowego C
i kod zakończenia i jest zwykle używany w połączeniu z -msys-crt0= sprecyzować
lokalizacja alternatywnego kodu startowego dostarczonego przez HAL BSP.

-msmallc
Link z limitowaną wersją biblioteki C, -lsmallc, a nie Newlib.

-msys-crt0=plik startowy
plik startowy jest nazwą pliku startowego (crt0) używanego podczas łączenia. Ta opcja
jest przydatne tylko w połączeniu z -mhal.

-msys-lib=biblioteka systemowa
biblioteka systemowa to nazwa biblioteki, która udostępnia wywołania systemowe niskiego poziomu
wymagane przez bibliotekę C, np. „odczyt” i „zapis”. Ta opcja jest zwykle używana do:
link do biblioteki udostępnionej przez HAL BSP.

Nvidia PTX Opcje

Te opcje są zdefiniowane dla Nvidia PTX:

-m32
-m64
Generuj kod dla 32-bitowego lub 64-bitowego ABI.

-mmainkernel
Link w kodzie dla __main kernel. To jest do samodzielnego zamiast odciążania
wykonanie.

PDP-11 Opcje

Te opcje są zdefiniowane dla PDP-11:

-mfpu
Użyj sprzętowej liczby zmiennoprzecinkowej FPP. To jest ustawienie domyślne. (zmiennoprzecinkowa FIS na
PDP-11/40 nie jest obsługiwany.)

-msoft-float
Nie używaj sprzętowego zmiennoprzecinkowego punktu.

-mac0
Zwróć wyniki zmiennoprzecinkowe w ac0 (fr0 w składni asemblera uniksowego).

-mno-ac0
Zwraca wyniki zmiennoprzecinkowe w pamięci. To jest ustawienie domyślne.

-m40
Wygeneruj kod dla PDP-11/40.

-m45
Wygeneruj kod dla PDP-11/45. To jest ustawienie domyślne.

-m10
Wygeneruj kod dla PDP-11/10.

-mbcopy-wbudowany
Użyj wbudowanych wzorców „movmemhi” do kopiowania pamięci. To jest ustawienie domyślne.

-mbcopy
Nie używaj wbudowanych wzorców „movmemhi” do kopiowania pamięci.

-miętowy16
-mno-int32
Użyj 16-bitowego „int”. To jest ustawienie domyślne.

-miętowy32
-mno-int16
Użyj 32-bitowego „int”.

-mfloat64
-mno-float32
Użyj 64-bitowego „float”. To jest ustawienie domyślne.

-mfloat32
-mno-float64
Użyj 32-bitowego „float”.

-mabshi
Użyj wzoru „abshi2”. To jest ustawienie domyślne.

-mno-abshi
Nie używaj wzoru „abshi2”.

-oddział-drogie
Udawaj, że oddziały są drogie. To jest do eksperymentowania z generowaniem kodu
tylko.

-oddział-tanie
Nie udawaj, że oddziały są drogie. To jest ustawienie domyślne.

-munix-asm
Użyj składni asemblera Unix. Jest to ustawienie domyślne w przypadku konfiguracji dla pdp11-*-bsd.

-mdec-asm
Użyj składni asemblera DEC. Jest to ustawienie domyślne w przypadku konfiguracji dla dowolnego celu PDP-11
inne niż pdp11-*-bsd.

picoChip Opcje

Te -m opcje są zdefiniowane dla wdrożeń picoChip:

-mae=ae_type
Ustaw zestaw instrukcji, zestaw rejestrów i parametry planowania instrukcji dla tablicy
typ elementu ae_type. Obsługiwane wartości dla ae_typeJAKIEKOLWIEK, MAM, PROCHOWIEC.

-mae = DOWOLNY wybiera całkowicie ogólny typ AE. Kod wygenerowany za pomocą tej opcji jest uruchamiany
na dowolnym innym typie AE. Kod nie jest tak wydajny, jak byłby skompilowany
dla określonego typu AE, a niektóre rodzaje operacji (np. mnożenie) nie działają
prawidłowo na wszystkich typach AE.

-mae=MUL wybiera typ MUL AE. Jest to najbardziej przydatny typ AE dla skompilowanego kodu,
i jest wartością domyślną.

-mae=MAC wybiera MAC AE w stylu DSP. Kod skompilowany z tą opcją może ucierpieć
słaba wydajność manipulacji bajtem (znakiem), ponieważ DSP AE nie zapewnia
wsparcie sprzętowe dla ładowania/przechowywania bajtów.

-msymbol-jako-adres
Włącz kompilator, aby bezpośrednio używał nazwy symbolu jako adresu w ładowaniu/sklepie
instrukcji, bez wcześniejszego załadowania jej do rejestru. Zazwyczaj użycie tego
opcja generuje większe programy, które działają szybciej niż gdy opcja nie jest używana.
Jednak wyniki różnią się w zależności od programu, więc pozostawia się to jako opcję użytkownika,
zamiast być włączonym na stałe.

-mno-nieefektywne-ostrzeżenia
Wyłącza ostrzeżenia o generowaniu niewydajnego kodu. Te ostrzeżenia mogą być:
generowane na przykład podczas kompilacji kodu, który wykonuje operacje pamięciowe na poziomie bajtów
na typie MAC AE. MAC AE nie obsługuje sprzętowo pamięci na poziomie bajtów
operacje, więc wszystkie ładowanie/przechowywanie bajtów muszą być syntetyzowane z ładowania/przechowywania słów
operacje. Jest to nieefektywne i generowane jest ostrzeżenie, aby wskazać, że:
powinien przepisać kod, aby uniknąć operacji bajtowych lub skierować na typ AE, który ma
niezbędne wsparcie sprzętowe. Ta opcja wyłącza te ostrzeżenia.

PowerPC Opcje

Są one wymienione poniżej

RL78 Opcje

-msim
Łącza w dodatkowych bibliotekach docelowych do obsługi operacji w symulatorze.

-mmul=brak
-mmul=g13
-mmul=rl78
Określa typ obsługi mnożenia sprzętowego, który ma być używany. Wartość domyślna to
Żaden, który wykorzystuje funkcje mnożenia oprogramowania. ten g13 opcja jest dla
sprzętowe mnożenie/dzielenie urządzeń peryferyjnych tylko w celach RL78/G13. ten rl78 Jest opcja
dla standardowego zwielokrotnienia sprzętowego zdefiniowanego w instrukcji oprogramowania RL78.

-m64bit-podwaja
-m32bit-podwaja
Ustaw typ danych „podwójny” na 64 bity (-m64bit-podwaja) lub 32 bity (-m32bit-podwaja)
W rozmiarze. Wartość domyślna to -m32bit-podwaja.

IBM RS / 6000 dzięki PowerPC Opcje

Te -m opcje są zdefiniowane dla IBM RS/6000 i 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-twardy-dfp
Używasz tych opcji, aby określić, które instrukcje są dostępne na Twoim procesorze
używają. Domyślna wartość tych opcji jest określana podczas konfigurowania GCC.
Określanie -mcpu=typ_procesora zastępuje specyfikację tych opcji. My
polecam użyć -mcpu=typ_procesora opcji, a nie opcji wymienionych powyżej.

Określanie -mpowerpc-gpopt umożliwia GCC korzystanie z opcjonalnej architektury PowerPC
instrukcje w grupie Ogólnego przeznaczenia, w tym pierwiastek kwadratowy zmiennoprzecinkowy.
Określanie -mpowerpc-gfxopt umożliwia GCC korzystanie z opcjonalnej architektury PowerPC
instrukcje w grupie Graphics, w tym wybór zmiennoprzecinkowy.

Pandemia -mmfcrf opcja pozwala GCC wygenerować ruch z pola rejestru warunków
instrukcja zaimplementowana na procesorze POWER4 i innych procesorach obsługujących
Architektura PowerPC V2.01. ten -mpopcntb opcja pozwala GCC generować popcount
i podwójnej precyzji FP odwrotna instrukcja estymacji zaimplementowana w POWER5
procesor i inne procesory obsługujące architekturę PowerPC V2.02. ten
-mpopcntd opcja pozwala GCC wygenerować instrukcję popcount zaimplementowaną na
Procesor POWER7 i inne procesory obsługujące architekturę PowerPC V2.06.
Pandemia -mfprnd opcja pozwala GCC na generowanie instrukcji rund FP do liczb całkowitych
zaimplementowany na procesorze POWER5+ i innych procesorach obsługujących PowerPC
Architektura V2.03. ten -mcmpb opcja pozwala GCC na wygenerowanie porównania bajtów
instrukcja zaimplementowana na procesorze POWER6 i innych procesorach obsługujących
Architektura PowerPC V2.05. ten -mmfpgpr opcja pozwala GCC na wygenerowanie ruchu FP
do/z instrukcji rejestru ogólnego przeznaczenia zaimplementowanych na procesorze POWER6X i
inne procesory obsługujące rozszerzoną architekturę PowerPC V2.05. ten -mhard-dfp
opcja umożliwia GCC generowanie dziesiętnych instrukcji zmiennoprzecinkowych zaimplementowanych na
niektóre procesory POWER.

Pandemia -mpowerpc64 opcja umożliwia GCC generowanie dodatkowych 64-bitowych instrukcji, które
można znaleźć w pełnej architekturze PowerPC64 i traktować GPR jako 64-bitowe, podwójne słowo
wielkie ilości. GCC domyślnie to -mno-powerpc64.

-mcpu=typ_procesora
Ustaw typ architektury, użycie rejestru i parametry planowania instrukcji dla
typ maszyny typ_procesora. Obsługiwane wartości dla typ_procesora401, 403, 405, 405fp, 440,
440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, tytan, power3, power4, power5, moc5+, power6,
moc6x, power7, power8, powerpc, powerpc64, powerpc64le, rs64.

-mcpu=powerpc, -mcpu=powerpc64, -mcpu=powerpc64le określ czysty 32-bitowy PowerPC
(albo endian), 64-bitowy big endian PowerPC i 64-bitowy little endian PowerPC
architektury typów maszyn, przy założeniu odpowiedniego, generycznego modelu procesora
celów planowania.

Pozostałe opcje określają konkretny procesor. Kod wygenerowany w ramach tych opcji
działa najlepiej na tym procesorze i może w ogóle nie działać na innych.

Pandemia -mcpu opcje automatycznie włączają lub wyłączają następujące opcje:

-maltivec -mfprnd -mhard-float -mmfcrf -mwielokrotność -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-move -mpower8-fusion
-mpower8-wektor -mquad-pamięć -mquad-memory-atomic

Poszczególne opcje ustawione dla konkretnego procesora różnią się w zależności od wersji kompilatora,
w zależności od tego, jakie ustawienie wydaje się generować optymalny kod dla tego procesora; to nie
koniecznie odzwierciedlają rzeczywiste możliwości sprzętu. Jeśli chcesz ustawić
indywidualna opcja na konkretną wartość, można ją określić po -mcpu opcja,
lubić -mcpu=970 -mno-altivec.

W systemie AIX -maltivec dzięki -mpowerpc64 opcje nie są włączone lub wyłączone przez -mcpu
obecnie opcja, ponieważ AIX nie ma pełnej obsługi tych opcji. Możesz
nadal włączaj lub wyłączaj je pojedynczo, jeśli masz pewność, że zadziała w twoim
środowisko.

-mtune=typ_procesora
Ustaw parametry planowania instrukcji dla typu maszyny typ_procesora, ale nie ustawiaj
typ architektury lub użycie rejestru, jak -mcpu=typ_procesora czy. Te same wartości dla
typ_procesora są używane do -mtune Jeśli chodzi o -mcpu. Jeśli określono oba, wygenerowany kod
wykorzystuje architekturę i rejestry ustawione przez -mcpu, ale parametry planowania ustawione przez
-mtune.

-mcmodel=mały
Wygeneruj kod PowerPC64 dla małego modelu: TOC jest ograniczony do 64k.

-mcmodel=średni
Wygeneruj kod PowerPC64 dla średniego modelu: spis treści i inne dane statyczne mogą być aktywne
do łącznej wielkości 4G.

-mcmodel=duży
Wygeneruj kod PowerPC64 dla dużego modelu: TOC może mieć rozmiar do 4G. Inne
dane i kod są ograniczone tylko przez 64-bitową przestrzeń adresową.

-maltivec
-mno-altivec
Wygeneruj kod, który używa (nie używa) instrukcji AltiVec, a także umożliwia użycie
wbudowanych funkcji, które umożliwiają bardziej bezpośredni dostęp do zestawu instrukcji AltiVec.
Może być również konieczne ustawienie -mabi=altivec dostosować aktualny ABI za pomocą AltiVec ABI
ulepszenia.

Gdy -maltivec jest używany, a nie -maltivec=le or -maltivec=be, kolejność elementów
dla wewnętrznych elementów Altivec, takich jak „vec_splat”, „vec_extract” i „vec_insert”
kolejność elementów tablicy odpowiadająca endianowości celu. To znaczy element
zero identyfikuje skrajny lewy element w rejestrze wektorowym podczas kierowania big-endian
platformę i identyfikuje najbardziej prawy element w rejestrze wektorowym podczas kierowania na a
platforma little-endian.

-maltivec=be
Generuj instrukcje Altivec przy użyciu kolejności elementów big-endian, niezależnie od tego, czy
celem jest big- lub little-endian. Jest to ustawienie domyślne, gdy kierujesz się na big-endian
Platforma.

Kolejność elementów jest używana do interpretacji numerów elementów w elementach wewnętrznych Altivec, takich jak
„vec_splat”, „vec_extract” i „vec_insert”. Domyślnie te elementy tablicy dopasowania
kolejność odpowiadająca endianness dla celu.

-maltivec=le
Generuj instrukcje Altivec przy użyciu kolejności elementów little-endian, niezależnie od tego, czy
celem jest big- lub little-endian. Jest to ustawienie domyślne w przypadku kierowania na niewielką
platforma endian. Ta opcja jest obecnie ignorowana podczas kierowania na big-endian
Platforma.

Kolejność elementów jest używana do interpretacji numerów elementów w elementach wewnętrznych Altivec, takich jak
„vec_splat”, „vec_extract” i „vec_insert”. Domyślnie te elementy tablicy dopasowania
kolejność odpowiadająca endianness dla celu.

-mvrsave
-mno-vrsave
Generuj instrukcje VRSAVE podczas generowania kodu AltiVec.

-mgen-komórka-mikrokod
Generuj instrukcje mikrokodu Cell.

-mwarn-komórka-mikrokod
Ostrzegaj, gdy jest emitowana instrukcja mikrokodu Cell. Przykład mikrokodu Cell
instrukcja jest zmienną zmianą.

-msecure-plt
Wygeneruj kod, który pozwala ld dzięki ld.so do budowania plików wykonywalnych i bibliotek współdzielonych z
niewykonywalne sekcje ".plt" i ".got". To jest 32-bitowa opcja SYSV ABI dla PowerPC.

-mbss-plt
Wygeneruj kod, który używa sekcji BSS ".plt", która ld.so wypełnia i wymaga ".plt"
oraz sekcje ".got", które są zarówno zapisywalne, jak i wykonywalne. To jest 32-bitowy PowerPC
Opcja SYSV ABI.

-misel
-mno-isel
Ten przełącznik włącza lub wyłącza generowanie instrukcji ISEL.

-misel=tak nie
Ten przełącznik został wycofany. Posługiwać się -misel dzięki -mno-isel zamiast.

-mspe
-mno-spe
Ten przełącznik włącza lub wyłącza generowanie instrukcji SPE simd.

-upośledzony
-mno-sparowany
Ten przełącznik włącza lub wyłącza generowanie PAROWANYCH instrukcji simd.

-mspe=tak nie
Ta opcja została wycofana. Posługiwać się -mspe dzięki -mno-spe zamiast.

-mvsx
-mno-vsx
Generuj kod, który używa (nie używa) instrukcji wektorowych/skalarnych (VSX), a także
umożliwiają korzystanie z wbudowanych funkcji, które umożliwiają bardziej bezpośredni dostęp do VSX
zestaw instrukcji.

-mcrypto
-mno-krypto
Włącz korzystanie (wyłącz) wbudowanych funkcji, które umożliwiają bezpośredni dostęp do
instrukcje kryptograficzne, które zostały dodane w wersji 2.07 ISA PowerPC.

-mdirect-move
-mno-direct-move
Wygeneruj kod, który używa (nie używa) instrukcji do przenoszenia danych między
rejestry ogólnego przeznaczenia i rejestry wektorowe/skalarne (VSX), które zostały dodane w
wersja 2.07 ISA PowerPC.

-mpower8-fusion
-mno-power8-fusion
Wygeneruj kod, który zachowuje (nie przechowuje) obok siebie niektórych operacji na liczbach całkowitych, tak aby
instrukcje mogą być łączone razem na procesorach power8 i nowszych.

-mpower8-wektor
-mno-power8-wektor
Wygeneruj kod, który używa (nie używa) instrukcji wektorowych i skalarnych, które były
dodane w wersji 2.07 PowerPC ISA. Umożliwiają również korzystanie z wbudowanych funkcji
które umożliwiają bardziej bezpośredni dostęp do instrukcji wektorowych.

-mquad-pamięć
-mno-quad-pamięć
Wygeneruj kod, który używa (nie używa) nieatomowych instrukcji pamięci poczwórnych słów.
Pandemia -mquad-pamięć opcja wymaga użycia trybu 64-bitowego.

-mquad-memory-atomic
-mno-quad-memory-atomic
Wygeneruj kod, który używa (nie używa) instrukcji atomowej pamięci słów poczwórnych. ten
-mquad-memory-atomic opcja wymaga użycia trybu 64-bitowego.

-mupper-regs-df
-mno-upper-regs-df
Wygeneruj kod, który używa (nie używa) instrukcji podwójnej precyzji skalarnej, które
celują we wszystkie 64 rejestry w zestawie wektorów/skalarnych rejestrów zmiennoprzecinkowych, które były
dodane w wersji 2.06 PowerPC ISA. -mupper-regs-df jest domyślnie włączone, jeśli
używasz któregoś z -mcpu=moc7, -mcpu=moc8lub -mvsx Opcje.

-mupper-regs-sf
-mno-upper-regs-sf
Wygeneruj kod, który używa (nie używa) instrukcji skalarnych o pojedynczej precyzji, które:
celują we wszystkie 64 rejestry w zestawie wektorów/skalarnych rejestrów zmiennoprzecinkowych, które były
dodane w wersji 2.07 PowerPC ISA. -mupper-regs-sf jest domyślnie włączone, jeśli
używasz jednego z -mcpu=moc8 or -mpower8-wektor Opcje.

-mupper-regs
-mno-upper-regs
Generuj kod, który używa (nie używa) instrukcji skalarnych, które są skierowane do wszystkich 64
rejestrów w zbiorze wektorów/skalarów zmiennoprzecinkowych w zależności od modelu
maszyna.

Jeśli -mno-upper-regs opcja jest używana, wyłącza oba -mupper-regs-sf dzięki
-mupper-regs-df Opcje.

-mfloat-gprs=tak/pojedynczy/podwójny/nie
-mfloat-gprs
Ten przełącznik włącza lub wyłącza generowanie operacji zmiennoprzecinkowych na
rejestry ogólnego przeznaczenia dla architektur, które je obsługują.

Argument tak or pojedynczy umożliwia korzystanie z zmiennoprzecinkowych pojedynczej precyzji
operacje.

Argument podwójnie umożliwia stosowanie zmiennoprzecinkowych pojedynczej i podwójnej precyzji
operacje.

Argument Nie wyłącza operacje zmiennoprzecinkowe na rejestrach ogólnego przeznaczenia.

Ta opcja jest obecnie dostępna tylko w MPC854x.

-m32
-m64
Generuj kod dla 32-bitowych lub 64-bitowych środowisk docelowych Darwin i SVR4 (w tym
GNU/Linuksa). Środowisko 32-bitowe ustawia int, long i wskaźnik na 32 bity i
generuje kod, który działa na dowolnym wariancie PowerPC. Środowisko 64-bitowe ustawia się na
32 bity i long oraz wskaźnik do 64 bitów i generuje kod dla PowerPC64, jak dla
-mpowerpc64.

-mfull-toc
-mno-fp-w-toc
-mno-sum-in-toc
-minimal-toc
Zmodyfikuj generowanie TOC (spisu treści), który jest tworzony dla każdego
Plik wykonywalny. ten -mfull-toc opcja jest wybrana domyślnie. W takim przypadku GCC
przydziela co najmniej jeden wpis TOC dla każdego unikalnego nieautomatycznego odniesienia do zmiennej w
twój program. GCC umieszcza również stałe zmiennoprzecinkowe w spisie treści. Jednak tylko
W spisie dostępnych jest 16,384 XNUMX wpisów.

Jeśli pojawi się komunikat o błędzie linkera, który mówi, że przepełniłeś dostępne
Przestrzeń spisu treści, możesz zmniejszyć ilość miejsca używanego w spisie treści -mno-fp-w-toc dzięki
-mno-sum-in-toc Opcje. -mno-fp-w-toc zapobiega umieszczaniu przez GCC liczb zmiennoprzecinkowych
stałe w TOC i -mno-sum-in-toc zmusza GCC do wygenerowania kodu w celu obliczenia
suma adresu i stałej w czasie wykonywania zamiast umieszczania tej sumy w spisie treści.
Możesz określić jedną lub obie z tych opcji. Każdy powoduje, że GCC produkuje bardzo
nieco wolniejszy i większy kod kosztem oszczędności miejsca w spisie treści.

Jeśli nadal brakuje Ci miejsca w spisie treści, nawet po określeniu obu tych opcji,
sprecyzować -minimal-toc zamiast. Ta opcja powoduje, że GCC tworzy tylko jeden wpis spisu treści dla
każdy plik. Po określeniu tej opcji GCC generuje kod, który jest wolniejszy i większy
ale który wykorzystuje bardzo mało miejsca na TOC. Możesz chcieć użyć tej opcji tylko na
pliki zawierające rzadziej wykonywany kod.

-maix64
-maix32
Włącz 64-bitowy AIX AIX i konwencję wywoływania: 64-bitowe wskaźniki, 64-bitowy typ „długi” i
infrastrukturę niezbędną do ich obsługi. Określanie -maix64 sugeruje -mpowerpc64,
Podczas -maix32 wyłącza 64-bitowy ABI i implikuje -mno-powerpc64. GCC domyślnie to
-maix32.

-zgodny z mxl
-mno-xl-kompatybilny
Twórz kod, który jest bardziej zgodny z semantyką kompilatora IBM XL podczas korzystania z systemu AIX-
zgodny ABI. Przekaż argumenty zmiennoprzecinkowe do funkcji prototypowych poza
zarejestruj obszar zapisywania (RSA) na stosie oprócz argumentów FPR. Nie zakładaj
ta najbardziej znacząca podwójna w 128-bitowej wartości podwójna jest prawidłowo zaokrąglana, gdy
porównywanie wartości i konwersja na podwojenie. Używaj nazw symboli XL dla długich podwójnych
procedury wsparcia.

Konwencja wywoływania systemu AIX została rozszerzona, ale początkowo nie została udokumentowana pod kątem obsługi
niejasny przypadek K&R C wywołania funkcji, która pobiera adres swoich argumentów za pomocą
mniej argumentów niż zadeklarowano. Kompilatory IBM XL uzyskują dostęp do argumentów zmiennoprzecinkowych, które
nie mieszczą się w RSA ze stosu, gdy podprogram jest kompilowany bez
optymalizacja. Ponieważ zawsze przechowywanie argumentów zmiennoprzecinkowych na stosie to
nieefektywna i rzadko potrzebna, ta opcja nie jest domyślnie włączona i jest tylko
konieczne przy wywoływaniu podprogramów skompilowanych przez kompilatory IBM XL bez optymalizacji.

-mpe
Samouczek IBM RS / 6000 SP Parallel Środowisko (WP). Połącz aplikację napisaną do użytku
przekazywanie wiadomości ze specjalnym kodem startowym, aby umożliwić uruchomienie aplikacji. ten
system musi mieć zainstalowany PE w standardowej lokalizacji (/usr/lpp/ppe.poe/), albo
okular plik musi być nadpisany przez -specyfikacje= możliwość określenia odpowiedniego
lokalizacja katalogu. Środowisko Parallel nie obsługuje wątków, więc -mpe
opcja i -pthread opcje są niezgodne.

-złośliwy-naturalny
-malign-power
W systemie AIX, 32-bitowym Darwin i 64-bitowym PowerPC GNU/Linux opcja -złośliwy-naturalny
nadpisuje zdefiniowane przez ABI wyrównanie większych typów, takich jak dublety zmiennoprzecinkowe,
na ich naturalnej granicy opartej na rozmiarze. Opcja -malign-power instruuje GCC, aby
postępuj zgodnie z zasadami wyrównania określonymi przez ABI. GCC domyślnie do standardowego wyrównania
zdefiniowane w ABI.

W 64-bitowym Darwin naturalne wyrównanie jest ustawieniem domyślnym i -malign-power nie jest
utrzymany.

-msoft-float
-mhard-float
Wygeneruj kod, który nie używa (używa) zestawu rejestrów zmiennoprzecinkowych. Oprogramowanie
emulacja zmiennoprzecinkowa jest dostępna, jeśli używasz -msoft-float opcję i przekazać
opcja do GCC podczas łączenia.

-msingle-float
-mdouble-float
Generuj kod dla operacji zmiennoprzecinkowych o pojedynczej lub podwójnej precyzji.
-mdouble-float sugeruje -msingle-float.

-msimple-fpu
Nie generuj instrukcji „sqrt” i „div” dla sprzętowej jednostki zmiennoprzecinkowej.

-mfpu=Nazwa
Określ typ jednostki zmiennoprzecinkowej. Prawidłowe wartości dla Nazwasp_lite (równoważny
-msingle-float -msimple-fpu), dp_lite (równoważny -mdouble-float -msimple-fpu),
sp_full (równoważny -msingle-float), A dp_pełne (równoważny -mdouble-float).

-mxilinx-fpu
Wykonaj optymalizacje dla jednostki zmiennoprzecinkowej w Xilinx PPC 405/440.

-mwielokrotność
-mno-wielokrotność
Wygeneruj kod, który używa (nie używa) instrukcji ładowania wielowyrazowych i
przechowywać instrukcje wielowyrazowe. Te instrukcje są generowane domyślnie wł
systemów POWER, a nie generowanych w systemach PowerPC. Nie używać -mwielokrotność na mało-
endian PowerPC systemy, ponieważ te instrukcje nie działają, gdy procesor jest w
tryb little-endian. Wyjątkami są PPC740 i PPC750, które pozwalają na to
instrukcje w trybie little-endian.

-mstring
-mno-string
Wygeneruj kod, który używa (nie używa) instrukcji ładowania łańcucha i sklepu
tekstowe instrukcje słowne, aby zapisać wiele rejestrów i wykonywać małe ruchy blokowe. Te
instrukcje są generowane domyślnie w systemach POWER, a nie w PowerPC
systemy. Nie używać -mstring na systemach little-endian PowerPC, ponieważ te
instrukcje nie działają, gdy procesor jest w trybie little-endian. Wyjątki
to PPC740 i PPC750, które zezwalają na te instrukcje w trybie little-endian.

-mupdate
-mno-aktualizacja
Wygeneruj kod, który używa (nie używa) instrukcji ładowania lub przechowywania, które aktualizują
rejestr bazowy na adres obliczonej komórki pamięci. Te instrukcje
są generowane domyślnie. Jeśli użyjesz -mno-aktualizacja, między nimi jest małe okienko
czas, w którym wskaźnik stosu jest aktualizowany, a adres poprzedniej ramki to
przechowywane, co oznacza, że ​​kod, który przechodzi ramkę stosu przez przerwania lub sygnały, może:
uzyskać uszkodzone dane.

-mavoid-indeksowane-adresy
-mno-unikaj-indeksowanych-adresów
Wygeneruj kod, który próbuje uniknąć (nie uniknąć) użycia indeksowanego obciążenia lub przechowywania
instrukcje. Te instrukcje mogą spowodować obniżenie wydajności procesorów Power6
w pewnych sytuacjach, na przykład podczas przechodzenia przez duże macierze, które przecinają 16M
granica. Ta opcja jest domyślnie włączona podczas celowania w Power6 i wyłączona
Inaczej.

-mfused-madd
-mno-skondensowany-madd
Generuj kod, który używa (nie używa) mnożenia i akumulacji zmiennoprzecinkowych
instrukcje. Te instrukcje są generowane domyślnie, jeśli sprzętowa liczba zmiennoprzecinkowa
jest używany. Zależna od maszyny -mfused-madd opcja jest teraz mapowana na maszynę-
niezależny -ffp-kontrakt=szybko opcja i -mno-skondensowany-madd jest mapowany na
-ffp-umowa=off.

-mmulhw
-mno-mulhw
Wygeneruj kod, który używa (nie używa) pół słowa pomnóż i pomnóż-kumuluj
instrukcje dotyczące procesorów IBM 405, 440, 464 i 476. Te instrukcje są
generowane domyślnie podczas kierowania na te procesory.

-mdlmzb
-mno-dlmzb
Wygeneruj kod, który używa (nie używa) wyszukiwania ciągów dlmzb instrukcja na IBM
405, 440, 464 i 476 procesorów. Ta instrukcja jest generowana domyślnie, gdy
skierowane do tych procesorów.

-mno-bit-wyrównaj
-mbit-wyrównaj
W systemie V.4 i wbudowanych systemach PowerPC nie (nie) wymuszają struktur i związków
które zawierają pola bitowe, które mają być wyrównane do typu podstawowego pola bitowego.

Na przykład, domyślnie struktura zawierająca tylko 8 "nieoznaczonych" pól bitowych z
długość 1 jest wyrównana do granicy 4 bajtów i ma rozmiar 4 bajtów. Używając
-mno-bit-wyrównaj, struktura jest wyrównana do granicy 1-bajtowej i ma rozmiar 1 bajta.

-mno-ścisłe-wyrównaj
-mstrict-wyrównaj
W systemach System V.4 i wbudowanych systemach PowerPC nie zakłada się (nie) zakłada, że ​​niewyrównana pamięć
referencje są obsługiwane przez system.

-mprzeprowadzka
-mno-przenośny
Wygeneruj kod, który pozwala (nie pozwala) na przeniesienie statycznego pliku wykonywalnego do
inny adres w czasie wykonywania. Prosty program ładujący wbudowany system PowerPC powinien
przenieść całą zawartość ".got2" i 4-bajtowych lokalizacji wymienionych w ".fixup"
sekcji, tablica 32-bitowych adresów generowanych przez tę opcję. Aby to zadziałało, wszyscy
obiekty połączone ze sobą muszą być skompilowane z -mprzeprowadzka or -mrelocable-lib.
-mprzeprowadzka kod wyrównuje stos do granicy 8-bajtów.

-mrelocable-lib
-mno-relocable-lib
Polub -mprzeprowadzka, -mrelocable-lib generuje sekcję ".fixup", aby umożliwić statyczne
pliki wykonywalne, które mają zostać przeniesione w czasie wykonywania, ale -mrelocable-lib nie używa
mniejsze wyrównanie stosu -mprzeprowadzka. Obiekty skompilowane z -mrelocable-lib może
być połączone z obiektami skompilowanymi z dowolną kombinacją -mprzeprowadzka Opcje.

-mno-toc
-mtoc
W systemie V.4 i wbudowanych systemach PowerPC nie zakłada się (nie) zakłada, że ​​rejestr 2 zawiera
wskaźnik do obszaru globalnego wskazujący na adresy używane w programie.

-mały
-mlittle-endian
W systemie V.4 i wbudowanych systemach PowerPC kompiluje kod dla procesora w niewielkim
tryb endian. ten -mlittle-endian opcja jest taka sama jak -mały.

-duży
-mbig-endian
W systemie V.4 i wbudowanych systemach PowerPC kompiluj kod dla procesora w dużych
tryb endian. ten -mbig-endian opcja jest taka sama jak -duży.

-mdynamic-no-pic
W systemach Darwin i Mac OS X skompiluj kod tak, aby nie można go było przenieść, ale to
jego zewnętrzne odniesienia są relokowalne. Otrzymany kod jest odpowiedni dla
aplikacje, ale nie biblioteki współdzielone.

-msingle-pic-base
Traktuj rejestr używany do adresowania PIC jako tylko do odczytu, zamiast ładować go w
prolog dla każdej funkcji. Za inicjowanie tego odpowiada system wykonawczy
zarejestruj się z odpowiednią wartością przed rozpoczęciem wykonywania.

-mprioritize-restricted-insns=priorytet
Ta opcja kontroluje priorytet przypisany do ograniczonego slotu wysyłki
instrukcje podczas drugiego przejścia harmonogramu. Argument priorytet przyjmuje wartość
0, 1lub 2 aby przypisać nie, najwyższy lub drugi najwyższy (odpowiednio) priorytet do
instrukcje ograniczone do miejsca wysyłki.

-msched-kosztowny-dep=typ_zależności
Ta opcja kontroluje, które zależności są uważane za kosztowne przez obiekt docelowy podczas
planowanie instrukcji. Argument typ_zależności przyjmuje jedno z poniższych
wartości:

Nie Żadna zależność nie jest kosztowna.

cała kolekcja Wszystkie zależności są kosztowne.

true_store_to_load
Prawdziwa zależność od sklepu do załadunku jest kosztowna.

przechowaj_do_wczytania
Każda zależność od sklepu do załadunku jest kosztowna.

numer
Każda zależność, dla której opóźnienie jest większe lub równe numer jest kosztowna.

-minsert-sched-nops=schemat
Ta opcja kontroluje, który schemat wstawiania NOP jest używany podczas drugiego planowania
przechodzić. Argument schemat przyjmuje jedną z następujących wartości:

Nie Nie wstawiaj NOP.

ścieżka Wypełnij NOP dowolną grupą wysyłkową, która ma wolne miejsca na wydania, zgodnie z
grupowanie harmonogramu.

przegrupuj_dokładnie
Wstaw NOP, aby zmusić kosztowne zależne insny do oddzielnych grup. Wstaw dokładnie
według szacunków tyle NOPów, ile potrzeba, aby zmusić insn do nowej grupy
grupowanie procesorów.

numer
Wstaw NOP, aby zmusić kosztowne zależne insny do oddzielnych grup. Wstawić numer
NOPs, aby zmusić karczmę do nowej grupy.

-mcall-sysv
W systemach System V.4 i wbudowanych systemach PowerPC skompiluj kod przy użyciu konwencji wywoływania, które:
stosować się do wersji roboczej interfejsu binarnego aplikacji System V, PowerPC, z marca 1995 r.
dodatek do procesora. Jest to ustawienie domyślne, chyba że skonfigurowałeś GCC za pomocą
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Określ oba -mcall-sysv dzięki -meabi Opcje.

-mcall-sysv-noeabi
Określ oba -mcall-sysv dzięki -mno-eabi Opcje.

-mcall-aixdesc
W systemach System V.4 i wbudowanych systemach PowerPC kompiluje kod dla systemu operacyjnego AIX.

-mcall-linux
W systemie V.4 i wbudowanych systemach PowerPC skompiluj kod dla GNU opartego na Linuksie
system.

-mcall-freebsd
W systemie V.4 i wbudowanych systemach PowerPC skompiluj kod do obsługi FreeBSD
system.

-mcall-netbsd
Na Systemie V.4 i wbudowanych systemach PowerPC kompiluje kod dla działania NetBSD
system.

-mcall-openbsd
W systemie V.4 i wbudowanych systemach PowerPC skompiluj kod do obsługi OpenBSD
system.

-maix-struct-return
Zwróć wszystkie struktury w pamięci (zgodnie z AIX AIX).

-msvr4-struct-return
Zwraca struktury mniejsze niż 8 bajtów w rejestrach (zgodnie z SVR4 ABI).

-mabi=typ abi
Rozszerz obecny ABI o konkretne rozszerzenie lub usuń takie rozszerzenie. Ważny
wartości są altivec, nie-altivec, spe, brak, ibmlongdouble, ieeelongdouble, elfv1,
elfv2.

-mabi=spe
Rozszerz obecny ABI o rozszerzenia SPE ABI. Nie zmienia to domyślnego ABI,
zamiast tego dodaje rozszerzenia SPE ABI do bieżącego ABI.

-mabi=brak-spe
Wyłącz rozszerzenia Book-E SPE ABI dla bieżącego ABI.

-mabi=ibmlongdouble
Zmień bieżący ABI, aby używał długiego podwójnego o rozszerzonej precyzji IBM. To jest PowerPC
32-bitowa opcja SYSV ABI.

-mabi=ieeelongdouble
Zmień bieżący ABI, aby używał długiego podwójnego o rozszerzonej precyzji IEEE. To jest PowerPC
Opcja 32-bitowego ABI Linuksa.

-mabi=elfv1
Zmień bieżący ABI, aby używał ABI ELFv1. To jest domyślny ABI dla big-endian
64-bitowy Linux PowerPC. Zastąpienie domyślnego ABI wymaga specjalnej obsługi systemu i
prawdopodobnie zawiedzie w spektakularny sposób.

-mabi=elfv2
Zmień bieżący ABI, aby używał ABI ELFv2. Jest to domyślny ABI dla mało-
endian PowerPC 64-bitowy Linux. Zastąpienie domyślnego ABI wymaga specjalnego systemu
wsparcie i prawdopodobnie zawiedzie w spektakularny sposób.

-mprototyp
-mno-prototyp
W systemie V.4 i wbudowanych systemach PowerPC zakładamy, że wszystkie wywołania zmiennej argumentu
funkcje są odpowiednio prototypowane. W przeciwnym razie kompilator musi wstawić instrukcję
przed każdym nieprototypowanym wywołaniem ustawienia lub wyczyszczenia bitu 6 rejestru kodu warunku
(„CR”), aby wskazać, czy wartości zmiennoprzecinkowe są przekazywane w postaci zmiennoprzecinkowej
rejestruje się w przypadku, gdy funkcja przyjmuje zmienne argumenty. Z -mprototyp, tylko połączenia
do prototypowych funkcji ze zmiennymi argumentami ustaw lub wyczyść bit.

-msim
W przypadku wbudowanych systemów PowerPC załóżmy, że moduł startowy nazywa się sim-crt0.o dzięki
że standardowe biblioteki C są libsim.a dzięki libc.a. To jest domyślne dla
powerpc-*-eabisim konfiguracje.

-mmvme
W przypadku wbudowanych systemów PowerPC załóżmy, że moduł startowy nazywa się crt0.o oraz
standardowe biblioteki C są libmvme.a dzięki libc.a.

-mads
W przypadku wbudowanych systemów PowerPC załóżmy, że moduł startowy nazywa się crt0.o oraz
standardowe biblioteki C są libads.a dzięki libc.a.

-nóż do szpiku
W przypadku wbudowanych systemów PowerPC załóżmy, że moduł startowy nazywa się crt0.o oraz
standardowe biblioteki C są libyk.a dzięki libc.a.

-mvxworks
W systemach System V.4 i wbudowanych systemach PowerPC określ, że kompilujesz dla
System VxWorks.

-członek
W wbudowanych systemach PowerPC ustaw bit „PPC_EMB” w nagłówku flag ELF, aby wskazać
że eabi stosowane są dłuższe relokacje.

-meabi
-mno-eabi
W systemach System V.4 i wbudowanych systemach PowerPC (nie są) zgodne z wbudowanym
Applications Binary Interface (EABI), czyli zestaw modyfikacji Systemu
Specyfikacje V.4. Wybieranie -meabi oznacza, że ​​stos jest wyrównany do 8-bajtów
granica, funkcja „__eabi” jest wywoływana z „main” w celu skonfigurowania środowiska EABI,
oraz -msdata opcja może używać zarówno "r2" jak i "r13" do wskazywania dwóch oddzielnych małych danych
obszary. Wybieranie -mno-eabi oznacza, że ​​stos jest wyrównany do 16-bajtowej granicy, nie
Funkcja inicjalizacji EABI jest wywoływana z "main", a -msdata opcja tylko używa
„r13”, aby wskazać pojedynczy mały obszar danych. ten -meabi opcja jest domyślnie włączona, jeśli
skonfigurowane GCC za pomocą jednego z powerpc*-*-eabi* Opcje.

-msdata=eabi
W systemach System V.4 i wbudowanych systemach PowerPC umieść małe zainicjowane „const” globalne i
dane statyczne w sekcji ".sdata2", na którą wskazuje rejestr "r2". Umieść mały
zainicjowane globalne i statyczne dane inne niż „const” w sekcji „.sdata”, która jest
wskazywany przez rejestr „r13”. Umieść małe, niezainicjowane dane globalne i statyczne w
Sekcja „.sbss”, która sąsiaduje z sekcją „.sdata”. ten -msdata=eabi opcja
jest niezgodny z -mprzeprowadzka opcja. -msdata=eabi opcja ustawia również
-członek opcja.

-msdata=sysv
W systemach System V.4 i wbudowanych systemach PowerPC umieść małe globalne i statyczne dane w
Sekcja ".sdata", na którą wskazuje rejestr "r13". Umieść małe niezainicjowane
dane globalne i statyczne w sekcji „.sbss”, która sąsiaduje z „.sdata”
Sekcja. ten -msdata=sysv opcja jest niezgodna z -mprzeprowadzka opcja.

-msdata=domyślna
-msdata
W systemie V.4 i wbudowanych systemach PowerPC, jeśli -meabi jest używany, skompiluj kod tak samo
as -msdata=eabi, w przeciwnym razie skompiluj kod tak samo jak -msdata=sysv.

-msdata=dane
W systemie V.4 i wbudowanych systemach PowerPC umieść małe globalne dane w ".sdata"
Sekcja. Umieść małe, niezainicjowane dane globalne w sekcji „.sbss”. Nie używać
zarejestruj "r13", aby adresować małe dane. Jest to zachowanie domyślne, chyba że
inny -msdata używane są opcje.

-msdata=brak
-mno-sdata
We wbudowanych systemach PowerPC wszystkie zainicjowane dane globalne i statyczne należy umieścić w pliku „.data”
sekcji i wszystkie niezainicjowane dane w sekcji ".bss".

-mblock-move-inline-limit=num
Inline wszystkie ruchy bloków (takie jak wywołania „memcpy” lub kopie struktury) mniejsze niż lub
równy num bajty. Minimalna wartość dla num ma 32 bajty na 32-bitowych celach i 64
bajtów na cele 64-bitowe. Wartość domyślna jest specyficzna dla celu.

-G num
W wbudowanych systemach PowerPC umieść globalne i statyczne elementy mniejsze lub równe num
bajtów do małych sekcji danych lub BSS zamiast normalnych sekcji danych lub BSS.
Domyślnie num jest 8. The -G num przełącznik jest również przekazywany do konsolidatora. Wszystkie moduły
powinien być skompilowany z tym samym -G num wartość.

-mregnames
-mno-regnames
W systemie V.4 i wbudowanych systemach PowerPC (nie emitują) nazw rejestrów w
wyjście w języku asemblerowym przy użyciu form symbolicznych.

-mlongcall
-mno-longcall
Domyślnie zakładamy, że wszystkie rozmowy są daleko, dzięki czemu dłuższe i droższe
wymagana jest sekwencja wywoływania. Jest to wymagane w przypadku połączeń dłuższych niż 32 megabajty
(33,554,432 bajtów) z bieżącej lokalizacji. Krótkie połączenie jest generowane, jeśli
kompilator wie, że wywołanie nie może być tak daleko. To ustawienie może zostać zastąpione przez
atrybut funkcji „shortcall” lub przez „#pragma długoterminowy(0) ”.

Niektóre linkery są w stanie wykrywać wywołania spoza zakresu i generować kod kleju na
Mucha. W tych systemach długie wywołania są niepotrzebne i generują wolniejszy kod. Jak
tego pisania, linker AIX może to zrobić, podobnie jak linker GNU dla PowerPC/64. Ono
planowane jest dodanie tej funkcji do konsolidatora GNU dla 32-bitowych systemów PowerPC.

W systemach Darwin/PPC „#pragma longcall” generuje „jbsr callee, L42” plus oddział
wyspa (kod kleju). Dwa adresy docelowe reprezentują odbiorcę i oddział
wyspa. Linker Darwin/PPC preferuje pierwszy adres i generuje „bl callee”
jeśli instrukcja PPC „bl” dociera bezpośrednio do odbiorcy; w przeciwnym razie linker
generuje "bl L42" w celu wywołania odgałęzienia wyspy. Odgałęzienie wyspy jest dołączone do
ciało funkcji wywołującej; oblicza pełny 32-bitowy adres wywoływanego i
skacze do niego.

W systemach Mach-O (Darwin) ta opcja kieruje kompilator emitujący do kleju dla
każde bezpośrednie wywołanie, a łącznik Darwina decyduje, czy go użyć, czy odrzucić.

W przyszłości GCC może zignorować wszystkie specyfikacje długich wywołań, gdy linker będzie wiedział, że:
generować klej.

-znaczniki-mtls
-mno-tls-markery
Zaznacz (nie zaznaczaj) wywołania "__tls_get_addr" z relokacją określającą funkcję
argument. Relokacja umożliwia linkerowi niezawodne powiązanie wywołania funkcji z
instrukcje konfiguracji argumentów dla optymalizacji TLS, co z kolei pozwala GCC na lepsze
zaplanować sekwencję.

-pthread
Dodaje obsługę wielowątkowości z wątki Biblioteka. Ta opcja ustawia flagi dla
zarówno preprocesor, jak i linker.

-mrecip
-mno-recept
Ta opcja umożliwia korzystanie z oszacowania odwrotności i odwrotności oszacowania pierwiastka kwadratowego
instrukcje z dodatkowymi krokami Newtona-Raphsona w celu zwiększenia precyzji zamiast
wykonywanie dzielenia lub pierwiastka kwadratowego i dzielenia dla argumentów zmiennoprzecinkowych. Powinieneś użyć
die,en -fast-matematyka opcja podczas używania -mrecip (Lub przynajmniej -funsafe-matematyczne optymalizacje,
-tylko matematyka skończona, - matematyka częsta dzięki -fno-trapping-matematyka). Zwróć uwagę, że podczas gdy
przepustowość sekwencji jest na ogół wyższa niż przepustowość nie-
wzajemna instrukcja, precyzja sekwencji może zostać zmniejszona nawet o 2 ulp
(tzn. odwrotność 1.0 równa się 0.99999994) dla odwrotności pierwiastków kwadratowych.

-mrecip=optować
Ta opcja kontroluje, które odwrotne instrukcje oszacowania mogą być użyte. optować jest
lista opcji oddzielonych przecinkami, które mogą być poprzedzone znakiem „!” aby odwrócić opcję:

cała kolekcja Włącz wszystkie instrukcje szacunkowe.

domyślnym
Włącz domyślne instrukcje, równoważne -mrecip.

Żaden
Wyłącz wszystkie instrukcje szacunkowe, równoważne z -mno-recept.

div Włącz instrukcje aproksymacji odwrotnej zarówno dla pojedynczego, jak i podwójnego
precyzja.

divf
Włącz instrukcje aproksymacji o pojedynczej precyzji.

dziel
Włącz instrukcje aproksymacji o podwójnej precyzji.

rsqrt
Włącz odwrotność instrukcji aproksymacji pierwiastka kwadratowego zarówno dla pojedynczego, jak i
podwójna precyzja.

rsqrtf
Włącz instrukcje aproksymacji pierwiastka kwadratowego o pojedynczej precyzji.

rsqrtd
Włącz instrukcje aproksymacji pierwiastka kwadratowego o podwójnej precyzji.

Na przykład -mrecip=wszystko,!rsqrtd umożliwia wszystkie wzajemne oszacowania
instrukcji, z wyjątkiem instrukcji „FRSQRTE”, „XSRSQRTEDP” i „XVRSQRTEDP”
które obsługują obliczenia pierwiastka kwadratowego o podwójnej precyzji.

-mrecip-precyzja
-mno-recip-precyzja
Załóż (nie zakładaj), że wzajemne instrukcje szacowania zapewniają wyższe
oszacowania precyzji, niż jest to wymagane przez PowerPC ABI. Wybieranie -mcpu=moc6,
-mcpu=moc7 or -mcpu=moc8 automatycznie wybiera -mrecip-precyzja. Podwójny-
precyzyjne instrukcje szacowania pierwiastka kwadratowego nie są generowane domyślnie
maszyn precyzyjnych, ponieważ nie dają oszacowania zbieżnego po trzech
kroki.

-mveclibabi=rodzaj
Określa typ ABI, który ma być używany do wektoryzacji elementów wewnętrznych przy użyciu biblioteki zewnętrznej.
Jedynym obsługiwanym obecnie typem jest masa, który określa użycie IBM Mathematical
Biblioteki Acceleration Subsystem (MASS) do wektoryzacji elementów wewnętrznych przy użyciu zewnętrznych
biblioteki. GCC obecnie emituje wywołania „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” i
„tanhf4” podczas generowania kodu dla power7. Obie -ftree-wektoryzuj dzięki
-funsafe-matematyczne optymalizacje musi być również włączony. Biblioteki MASS muszą być:
określone w czasie połączenia.

-mfriz
-mno-friz
Wygeneruj (nie generuj) instrukcji "friz", gdy -funsafe-matematyczne optymalizacje
opcja służy do optymalizacji zaokrąglania wartości zmiennoprzecinkowych do 64-bitowej liczby całkowitej i
z powrotem do zmiennoprzecinkowych. Instrukcja „friz” nie zwraca tej samej wartości, jeśli
liczba zmiennoprzecinkowa jest zbyt duża, aby zmieścić się w liczbie całkowitej.

-wskaźniki-do-funkcji zagnieżdżonych
-mno-wskaźniki-do-funkcji-zagnieżdżonych
Wygeneruj (nie generuj) kodu, aby załadować statyczny rejestr łańcucha ("r11"), gdy
wywoływanie przez wskaźnik w systemach AIX i 64-bitowych systemach Linux, gdzie wskaźnik do funkcji
wskazuje na 3-wyrazowy deskryptor podający adres funkcji, wartość spisu treści do załadowania
rejestru "r2" i statycznej wartości łańcucha do załadowania do rejestru "r11". ten
-wskaźniki-do-funkcji zagnieżdżonych jest domyślnie włączony. Nie możesz dzwonić przez wskaźniki do
zagnieżdżone funkcje lub wskaźniki do funkcji skompilowanych w innych językach, które używają
łańcuch statyczny, jeśli używasz -mno-wskaźniki-do-funkcji-zagnieżdżonych.

-msave-toc-pośredni
-mno-zapisz-toc-pośredni
Wygeneruj (nie generuj) kodu, aby zapisać wartość spisu treści w zarezerwowanej lokalizacji stosu
w prologu funkcji, jeśli funkcja wywołuje przez wskaźnik w systemie AIX i 64-bitowym
Systemy Linux. Jeśli wartość TOC nie jest zapisana w prologu, jest zapisywana tuż przed
wywołanie przez wskaźnik. ten -mno-zapisz-toc-pośredni opcja jest domyślna.

-mcompat-align-parm
-mno-compat-align-parm
Generuj (nie generuj) kod, aby przekazać parametry struktury z maksymalnym wyrównaniem
64 bity, dla zgodności ze starszymi wersjami GCC.

Starsze wersje GCC (przed 4.9.0) niepoprawnie nie wyrównywały parametru struktury
na granicy 128-bitowej, gdy ta struktura zawierała element wymagający 128-bitowego
wyrównanie. Zostało to poprawione w nowszych wersjach GCC. Ta opcja może być użyta
do generowania kodu zgodnego z funkcjami skompilowanymi ze starszymi wersjami
GCC.

Pandemia -mno-compat-align-parm opcja jest domyślna.

RX Opcje

Poniższe opcje wiersza polecenia są zdefiniowane dla celów RX:

-m64bit-podwaja
-m32bit-podwaja
Ustaw typ danych „podwójny” na 64 bity (-m64bit-podwaja) lub 32 bity (-m32bit-podwaja)
W rozmiarze. Wartość domyślna to -m32bit-podwaja. Uwagi Działa tylko sprzęt zmiennoprzecinkowy RX
na wartościach 32-bitowych, dlatego domyślną wartością jest -m32bit-podwaja.

-fpu
-nofpu
Pozwala (-fpu) lub wyłącza (-nofpu) użycie sprzętu zmiennoprzecinkowego RX. ten
domyślnie jest włączone dla serii RX600 i wyłączone dla serii RX200.

Instrukcje zmiennoprzecinkowe są generowane tylko dla 32-bitowych wartości zmiennoprzecinkowych,
jednak, więc sprzęt FPU nie jest używany do deblowania, jeśli -m64bit-podwaja Jest opcja
używany.

Uwagi Jeśli -fpu opcja jest wtedy włączona -funsafe-matematyczne optymalizacje jest również włączony
automatycznie. Dzieje się tak, ponieważ instrukcje RX FPU same w sobie są niebezpieczne.

-mcpu=Nazwa
Wybiera typ docelowego procesora RX. Obecnie obsługiwane są trzy typy,
ogólny RX600 dzięki RX200 sprzęt seryjny i specyficzny RX610 PROCESOR. Wartość domyślna to
RX600.

Jedyna różnica między RX600 dzięki RX610 jest to, że RX610 nie obsługuje
Instrukcja „MVTIPL”.

Pandemia RX200 seria nie ma sprzętowej jednostki zmiennoprzecinkowej, a więc -nofpu jest włączony
domyślnie po wybraniu tego typu.

-mbig-endian-data
-mlittle-endian-data
Przechowuj dane (ale nie kod) w formacie big-endian. Wartość domyślna to
-mlittle-endian-data, czyli do przechowywania danych w formacie little-endian.

-msmały-limit-danych=N
Określa maksymalny rozmiar w bajtach zmiennych globalnych i statycznych, które można umieścić
do małego obszaru danych. Korzystanie z małego obszaru danych może prowadzić do mniejszych i szybszych
kodu, ale wielkość obszaru jest ograniczona i to od programisty zależy, czy to zrobi
obszar nie przelewa się. Również wtedy, gdy używany jest mały obszar danych, jeden z RX
rejestry (zwykle „r13”) są zarezerwowane do użycia wskazujące na ten obszar, więc nie
już dostępne do użytku przez kompilator. Może to spowodować wolniejsze i/lub większe
kod, jeśli zmienne są odkładane na stos, zamiast być trzymane w tym rejestrze.

Uwaga, wspólne zmienne (zmienne, które nie zostały zainicjowane) i stałe to
nie są umieszczane w małym obszarze danych, ponieważ są przypisane do innych sekcji w
plik wyjściowy.

Wartość domyślna to zero, co wyłącza tę funkcję. Uwaga, ta funkcja nie jest
domyślnie włączone z wyższymi poziomami optymalizacji (-O2 itp.) z powodu
potencjalnie szkodliwe skutki zastrzeżenia rejestru. To zależy od programisty
eksperymentować i odkryć, czy ta funkcja jest korzystna dla ich programu. Widzieć
opis -mpid opcja opisu, w jaki sposób rzeczywisty rejestr się
przytrzymaj wybrany jest wskaźnik małego obszaru danych.

-msim
-mno-sim
Użyj środowiska wykonawczego symulatora. Domyślnie używane jest środowisko uruchomieniowe specyficzne dla libgloss board.

-mas100-składnia
-mno-as100-składnia
Podczas generowania danych wyjściowych asemblera użyj składni zgodnej z AS100 firmy Renesas
monter. Ta składnia może być również obsługiwana przez asembler GAS, ale ma trochę
ograniczenia, więc nie jest generowane domyślnie.

-mmax-stała-rozmiar=N
Określa maksymalny rozmiar w bajtach stałej, która może być użyta jako operand w
instrukcja RX. Chociaż zestaw instrukcji RX pozwala na stałe do 4
bajtów długości do wykorzystania w instrukcjach, dłuższa wartość równa się dłuższej
instrukcja. Dlatego w niektórych okolicznościach korzystne może być ograniczenie rozmiaru
stałe używane w instrukcjach. Stałe, które są zbyt duże, są zamiast tego
umieszczane w stałej puli i przywoływane za pośrednictwem rejestru pośredniego.

Wartość N może wynosić od 0 do 4. Wartość 0 (domyślnie) lub 4 oznacza, że
dozwolone są stałe o dowolnym rozmiarze.

-mrelaks
Włącz relaksację linkera. Relaksacja linkera to proces, w którym linker próbuje
aby zmniejszyć rozmiar programu, znajdując krótsze wersje różnych instrukcji.
Domyślnie wyłączone.

-mint-rejestr=N
Określ liczbę rejestrów do zarezerwowania dla funkcji obsługi szybkich przerwań. ten
wartość N może wynosić od 0 do 4. Wartość 1 oznacza, że ​​rejestr „r13” jest zarezerwowany
do wyłącznego użycia szybkich programów obsługi przerwań. Wartość 2 rezerw „r13” i
„r12”. Wartość 3 rezerw „r13”, „r12” i „r11” oraz wartość 4 rezerw „r13”
przez „r10”. Wartość domyślna 0 nie rezerwuje żadnych rejestrów.

-msave-ac-w-przerwaniach
Określa, że ​​funkcje obsługi przerwań powinny zachowywać rejestr akumulatorów.
Jest to konieczne tylko wtedy, gdy normalny kod może używać rejestru akumulatorów, na przykład
ponieważ wykonuje mnożenia 64-bitowe. Domyślnie ignoruje akumulator
ponieważ przyspiesza to obsługę przerwań.

-mpid
-mno-pid
Umożliwia generowanie danych niezależnych od pozycji. Po włączeniu dowolny dostęp do
dane stałe są wykonywane poprzez przesunięcie z adresu bazowego przechowywanego w rejestrze. Ten
umożliwia określenie lokalizacji stałych danych w czasie wykonywania bez konieczności
plik wykonywalny, który ma zostać przeniesiony, co jest zaletą dla aplikacji osadzonych z ciasnym
ograniczenia pamięci. Ta opcja nie ma wpływu na dane, które można modyfikować.

Uwaga, użycie tej funkcji rezerwuje rejestr, zwykle „r13”, dla stałych danych
adres bazowy. Może to skutkować wolniejszym i/lub większym kodem, zwłaszcza w skomplikowanym
funkcje.

Rzeczywisty rejestr wybrany do przechowywania stałego adresu bazy danych zależy od tego, czy:
die,en -msmall-data-limit i / lub - mennica-rejestr opcje wiersza polecenia są włączone.
Zaczynając od rejestru „r13” i idąc w dół, rejestry są przydzielane jako pierwsze
aby spełnić wymagania - mennica-rejestr, następnie -mpid i w końcu
-msmall-data-limit. W ten sposób możliwe jest, aby rejestr małego obszaru danych miał wartość „r8”
Jeśli oba -rejestr-mięty=4 dzięki -mpid są określone w wierszu poleceń.

Domyślnie ta funkcja nie jest włączona. Domyślne można przywrócić za pomocą -mno-pid
opcja wiersza poleceń.

-mno-warn-wielokrotne-szybkie-przerwania
-mwarn-wielokrotne-szybkie-przerwania
Zapobiega wyświetlaniu komunikatu ostrzegawczego przez GCC, jeśli znajdzie więcej niż jedno szybkie przerwanie
handler podczas kompilacji pliku. Domyślnie jest to ostrzeżenie dla każdego dodatkowego
znaleziono obsługę szybkich przerwań, ponieważ RX obsługuje tylko jedno takie przerwanie.

Uwaga: Ogólna opcja wiersza poleceń GCC -stały-reg ma szczególne znaczenie dla RX
port, gdy jest używany z atrybutem funkcji „przerwanie”. Ten atrybut wskazuje na
funkcja przeznaczona do przetwarzania szybkich przerwań. GCC zapewnia, że ​​używa tylko rejestrów
„r10”, „r11”, „r12” i/lub „r13” i tylko pod warunkiem, że normalne użycie
odpowiednie rejestry zostały ograniczone przez -stały-reg or - mennica-rejestr
opcje wiersza polecenia.

S / 390 dzięki zSeria Opcje

Są to -m opcje zdefiniowane dla architektury S/390 i zSeries.

-mhard-float
-msoft-float
Użyj (nie używaj) sprzętowych instrukcji zmiennoprzecinkowych i rejestrów dla zmiennoprzecinkowych
operacje punktowe. Kiedy -msoft-float jest określony, funkcje w libgcc.a są używane do
wykonywać operacje zmiennoprzecinkowe. Kiedy -mhard-float jest określony, kompilator
generuje instrukcje zmiennoprzecinkowe IEEE. To jest ustawienie domyślne.

-mhard-dfp
-mno-twardy-dfp
Użyj (nie używaj) sprzętowych instrukcji zmiennoprzecinkowych dziesiętnych dla
operacje zmiennoprzecinkowe. Kiedy -mno-twardy-dfp jest określony, funkcje w libgcc.a
używany do wykonywania operacji na liczbach zmiennoprzecinkowych dziesiętnych. Kiedy -mhard-dfp jest określony,
kompilator generuje instrukcje sprzętowe zmiennoprzecinkowe dziesiętne. To jest ustawienie domyślne
dla -marzec=z9-we lub więcej.

-mlong-podwójny-64
-mlong-podwójny-128
Przełączniki te kontrolują rozmiar typu „long double”. Rozmiar 64 bitów sprawia, że
typ „long double” jest odpowiednikiem typu „double”. To jest ustawienie domyślne.

-mbackchain
-mno-backchain
Przechowuj (nie przechowuj) adresu ramki wywołującego jako wskaźnika backchain do
ramka stosu wywoływanego. Backchain może być potrzebny, aby umożliwić debugowanie za pomocą narzędzi, które:
nie rozumiem informacji o ramce wywołania DWARF 2. Kiedy -mno-packed-stack jest w
efekt, wskaźnik backchain jest przechowywany na dole ramki stosu; gdy
-mpacked-stack obowiązuje, backchain jest umieszczony w najwyższym słowie
96/160 bajtowy obszar zapisywania rejestru.

Ogólnie kod skompilowany za pomocą -mbackchain jest kompatybilny z kodem skompilowanym za pomocą
-mmo-backchain; jednak użycie backchain do celów debugowania zwykle wymaga:
że cały plik binarny jest zbudowany z -mbackchain. Zauważ, że kombinacja
-mbackchain, -mpacked-stack dzięki -mhard-float nie jest wspierany. W celu zbudowania
korzystanie z jądra linuksa -msoft-float.

Domyślnie nie jest utrzymywany backchain.

-mpacked-stack
-mno-packed-stack
Użyj (nie używaj) układu spakowanego stosu. Kiedy -mno-packed-stack jest określony,
kompilator wykorzystuje wszystkie pola 96/160 bajtowego obszaru zapisu rejestru tylko dla ich
domyślny cel; niewykorzystane pola nadal zajmują miejsce na stosie. Kiedy -mpacked-stack is
określone, gniazda zapisu rejestru są gęsto upakowane na górze zapisu rejestru
powierzchnia; niewykorzystana przestrzeń jest ponownie wykorzystywana do innych celów, co pozwala na bardziej efektywne wykorzystanie
dostępne miejsce na stosie. Jednak kiedy -mbackchain obowiązuje również najwyższy
słowo obszaru zapisu jest zawsze używane do przechowywania backchain, a adres zwrotny
register jest zawsze zapisywany dwa słowa poniżej backchainu.

Dopóki łańcuch ramek stosu nie jest używany, kod generowany za pomocą -mpacked-stack
jest kompatybilny z kodem wygenerowanym za pomocą -mno-packed-stack. Zauważ, że niektóre nie-FSF
wydania GCC 2.95 dla S/390 lub zSeries wygenerowały kod, który używa ramki stosu
backchain w czasie wykonywania, nie tylko do celów debugowania. Taki kod nie jest
kompatybilny z kodem skompilowanym z -mpacked-stack. Zwróć też uwagę, że kombinacja
-mbackchain, -mpacked-stack dzięki -mhard-float nie jest wspierany. W celu zbudowania
korzystanie z jądra linuksa -msoft-float.

Domyślnie nie jest używany układ spakowanego stosu.

-msmall-exec
-mno-small-exec
Wygeneruj (lub nie generuj) kodu za pomocą instrukcji „bras” do wykonania podprogramu
wzywa. Działa to niezawodnie tylko wtedy, gdy całkowity rozmiar pliku wykonywalnego nie przekracza 64k.
Domyślnie zamiast tego używana jest instrukcja „basr”, która tego nie ma
ograniczenie.

-m64
-m31
Gdy -m31 jest określony, wygeneruj kod zgodny z GNU/Linux dla S/390 ABI. Kiedy
-m64 jest określony, wygeneruj kod zgodny z GNU/Linux for zSeries ABI. Ten
umożliwia GCC w szczególności generowanie instrukcji 64-bitowych. Dla s390 cele,
wartość domyślna to -m31, podczas S390x cele domyślnie to -m64.

-mzarch
-mesa
Gdy -mzarch jest określony, wygeneruj kod korzystając z instrukcji dostępnych na
z/Architektura. Kiedy -mesa jest określony, wygeneruj kod korzystając z instrukcji
dostępne w ESA/390. Zauważ, że -mesa nie jest możliwe z -m64. Podczas generowania
kod zgodny z GNU/Linux dla S/390 ABI, domyślnie -mesa. Podczas generowania
kod zgodny z GNU/Linux for zSeries ABI, domyślnie -mzarch.

-mmvcle
-mno-mvcle
Wygeneruj (lub nie generuj) kodu za pomocą instrukcji „mvcle” do wykonania bloku
ruchy. Kiedy -mno-mvcle jest określony, zamiast tego użyj pętli „mvc”. To jest ustawienie domyślne
chyba że optymalizuję rozmiar.

-mdebug
-mno-debug
Wydrukuj (lub nie drukuj) dodatkowych informacji debugowania podczas kompilacji. Wartość domyślna to
aby nie drukować informacji debugowania.

-marzec=typ procesora
Wygeneruj kod, który działa typ procesora, który jest nazwą systemu reprezentującego a
określony typ procesora. Możliwe wartości dla typ procesorag5, g6, z900, z990, z9-109,
z9-ec, z10, z196, zEC12, z13. Podczas generowania kodu za pomocą instrukcji
dostępne w z/Architecture, domyślnie -marzec=z900. W przeciwnym razie domyślnym jest
-marsz=g5.

-mtune=typ procesora
Dostrój do typ procesora wszystko, co dotyczy wygenerowanego kodu, z wyjątkiem ABI
oraz zestaw dostępnych instrukcji. Lista typ procesora wartości są takie same jak dla
-Marsz. Wartość domyślna to wartość używana dla -Marsz.

-mtpf-śledzenie
-mno-tpf-trace
Generuj kod, który dodaje (nie dodaje) w określonych gałęziach systemu operacyjnego TPF w celu śledzenia procedur
w systemie operacyjnym. Ta opcja jest domyślnie wyłączona, nawet podczas kompilacji dla
System operacyjny TPF.

-mfused-madd
-mno-skondensowany-madd
Generuj kod, który używa (nie używa) mnożenia i akumulacji zmiennoprzecinkowych
instrukcje. Te instrukcje są generowane domyślnie, jeśli sprzętowa liczba zmiennoprzecinkowa
Jest używane.

-mwarn-ramki=rozmiar ramki
Emituj ostrzeżenie, jeśli bieżąca funkcja przekracza podany rozmiar ramki. Ponieważ to jest
sprawdzenie w czasie kompilacji nie musi być prawdziwym problemem, gdy program działa. Ono
ma na celu identyfikację funkcji, które najprawdopodobniej powodują przepełnienie stosu. To jest
przydatne do użycia w środowisku z ograniczonym rozmiarem stosu, np. jądro linux.

-mwarn-dynamicstack
Emituj ostrzeżenie, jeśli funkcja wywoła „alloca” lub użyje tablic o dynamicznych rozmiarach. Ten
jest generalnie złym pomysłem przy ograniczonej wielkości stosu.

-mstack-strażnik=strażnik stosu
-mstack-rozmiar=rozmiar stosu
Jeśli te opcje są dostępne, back-end S/390 emituje dodatkowe instrukcje w
prolog funkcji, który wyzwala pułapkę, jeśli rozmiar stosu wynosi strażnik stosu bajtów powyżej
rozmiar stosu (pamiętaj, że stos na S/390 rośnie w dół). Jeśli strażnik stosu
opcja jest pomijana najmniejsza potęga 2 większa niż rozmiar ramki skompilowanej
funkcja jest wybrana. Te opcje mają na celu pomóc w debugowaniu stosu
problemy z przepełnieniem. Dodatkowo emitowany kod powoduje tylko niewielkie obciążenie i
dzięki temu może być również stosowany w systemach podobnych do produkcji bez większej wydajności
degradacja. Podane wartości muszą być dokładnymi potęgami 2 i rozmiar stosu musi być
większa niż strażnik stosu bez przekraczania 64 tys. Aby być wydajnym, ekstra
kod zakłada, że ​​stos zaczyna się od adresu wyrównanego do wartości
podany przez rozmiar stosu, strażnik stosu opcja może być używana tylko w połączeniu z
rozmiar stosu.

-mhotpatch=pre-półsłowa,post-półsłów
Jeśli opcja hotpatch jest włączona, prolog funkcji „hot-patch” jest generowany dla
wszystkie funkcje w jednostce kompilacji. Etykieta funkcji jest poprzedzona podanym
liczba dwubajtowych instrukcji NOP (pre-półsłowa, maksymalnie 1000000). Po
etykieta, 2 * post-półsłów bajty są dołączane przy użyciu największych instrukcji typu NOP
pozwala na to architektura (maksymalnie 1000000).

Jeśli oba argumenty mają wartość zero, łatanie na gorąco jest wyłączone.

Tę opcję można nadpisać dla poszczególnych funkcji za pomocą atrybutu „hotpatch”.

Wynik Opcje

Te opcje są zdefiniowane dla implementacji Score:

-meb
Skompiluj kod dla trybu big-endian. To jest ustawienie domyślne.

-mel
Skompiluj kod dla trybu little-endian.

-mnhwloop
Wyłącz generowanie instrukcji „bcnz”.

-muls
Włącz generowanie niewyrównanych instrukcji ładowania i przechowywania.

-mmac
Włącz korzystanie z instrukcji mnożenia akumulacji. Domyślnie wyłączone.

-mscore5
Określ SCORE5 jako architekturę docelową.

-mscore5u
Określ SCORE5U architektury docelowej.

-mscore7
Określ SCORE7 jako architekturę docelową. To jest ustawienie domyślne.

-mscore7d
Określ SCORE7D jako architekturę docelową.

SH Opcje

Te -m opcje są zdefiniowane dla wdrożeń SH:

-m1 Wygeneruj kod dla SH1.

-m2 Wygeneruj kod dla SH2.

-m2e
Wygeneruj kod dla SH2e.

-m2a-nofpu
Wygeneruj kod dla SH2a bez FPU lub dla SH2a-FPU w taki sposób, aby
jednostka zmiennoprzecinkowa nie jest używana.

-m2a-single-tylko
Wygeneruj kod dla SH2a-FPU w taki sposób, aby nie było zmiennoprzecinkowych podwójnej precyzji
używane są operacje.

-m2a-single
Wygeneruj kod dla SH2a-FPU, zakładając, że jednostka zmiennoprzecinkowa jest w pojedynczej precyzji
domyślnie.

-m2a
Wygeneruj kod dla SH2a-FPU, zakładając, że jednostka zmiennoprzecinkowa ma podwójną precyzję
domyślnie.

-m3 Wygeneruj kod dla SH3.

-m3e
Wygeneruj kod dla SH3e.

-m4-nofpu
Generuj kod dla SH4 bez jednostki zmiennoprzecinkowej.

-m4-single-tylko
Generuj kod dla SH4 za pomocą jednostki zmiennoprzecinkowej, która obsługuje tylko
arytmetyka precyzyjna.

-m4-single
Wygeneruj kod dla SH4 zakładając, że jednostka zmiennoprzecinkowa jest w trybie pojedynczej precyzji
domyślnie.

-m4 Wygeneruj kod dla SH4.

-m4-100
Wygeneruj kod dla SH4-100.

-m4-100-nofpu
Wygeneruj kod dla SH4-100 w taki sposób, aby jednostka zmiennoprzecinkowa nie była używana.

-m4-100-single
Wygeneruj kod dla SH4-100, zakładając, że jednostka zmiennoprzecinkowa jest w trybie pojedynczej precyzji
domyślnie.

-m4-100-single-tylko
Generuj kod dla SH4-100 w taki sposób, aby nie było liczby zmiennoprzecinkowej o podwójnej precyzji
używane są operacje.

-m4-200
Wygeneruj kod dla SH4-200.

-m4-200-nofpu
Wygeneruj kod dla SH4-200 bez w taki sposób, że jednostka zmiennoprzecinkowa nie jest
używany.

-m4-200-single
Wygeneruj kod dla SH4-200, zakładając, że jednostka zmiennoprzecinkowa jest w trybie pojedynczej precyzji
domyślnie.

-m4-200-single-tylko
Generuj kod dla SH4-200 w taki sposób, aby nie było liczby zmiennoprzecinkowej o podwójnej precyzji
używane są operacje.

-m4-300
Wygeneruj kod dla SH4-300.

-m4-300-nofpu
Wygeneruj kod dla SH4-300 bez w taki sposób, że jednostka zmiennoprzecinkowa nie jest
używany.

-m4-300-single
Generuj kod dla SH4-300 w taki sposób, aby nie było liczby zmiennoprzecinkowej o podwójnej precyzji
używane są operacje.

-m4-300-single-tylko
Generuj kod dla SH4-300 w taki sposób, aby nie było liczby zmiennoprzecinkowej o podwójnej precyzji
używane są operacje.

-m4-340
Wygeneruj kod dla SH4-340 (bez MMU, bez FPU).

-m4-500
Wygeneruj kod dla SH4-500 (bez FPU). Karnety -isa=sh4-nofpu do asemblera.

-m4a-nofpu
Wygeneruj kod dla SH4al-dsp lub dla SH4a w taki sposób, że liczba zmiennoprzecinkowa
jednostka nie jest używana.

-m4a-single-tylko
Wygeneruj kod dla SH4a w taki sposób, aby nie było zmiennoprzecinkowych podwójnej precyzji
używane są operacje.

-m4a-single
Wygeneruj kod dla SH4a zakładając, że jednostka zmiennoprzecinkowa jest w pojedynczej precyzji
domyślnie.

-m4a
Wygeneruj kod dla SH4a.

-m4al
Taki sam jak -m4a-nofpu, z wyjątkiem tego, że domyślnie przechodzi -dsp do asemblera. GCC
w tej chwili nie generuje żadnych instrukcji DSP.

-m5-32media
Wygeneruj 32-bitowy kod dla SHmedia.

-m5-32media-nofpu
Wygeneruj 32-bitowy kod dla SHmedia w taki sposób, aby jednostka zmiennoprzecinkowa nie była
używany.

-m5-64media
Wygeneruj 64-bitowy kod dla SHmedia.

-m5-64media-nofpu
Wygeneruj 64-bitowy kod dla SHmedia w taki sposób, aby jednostka zmiennoprzecinkowa nie była
używany.

-m5-kompaktowy
Wygeneruj kod dla SHcompact.

-m5-kompaktowy-nofpu
Wygeneruj kod dla SHcompact w taki sposób, aby jednostka zmiennoprzecinkowa nie była używana.

-mb Skompiluj kod dla procesora w trybie big-endian.

-ml Skompiluj kod dla procesora w trybie little-endian.

-mdalign
Wyrównaj podwajania w granicach 64-bitowych. Zauważ, że zmienia to konwencje wywoływania,
i dlatego niektóre funkcje ze standardowej biblioteki C nie działają, chyba że dokonasz ponownej kompilacji
to najpierw z -mdalign.

-mrelaks
Jeśli to możliwe, skróć niektóre odniesienia do adresów w czasie połączenia; używa opcji linkera
-zrelaksować się.

-wielkich
Użyj 32-bitowych przesunięć w tabelach „przełączników”. Domyślnie używane są przesunięcia 16-bitowe.

-mbitops
Włącz korzystanie z instrukcji manipulacji bitami na SH2A.

-mfmovd
Włącz użycie instrukcji „fmovd”. Sprawdzać -mdalign dla wiązań linii trasowania.

-mrenesas
Przestrzegaj konwencji wywoływania określonych przez Renesasa.

-mno-renesas
Przestrzegaj konwencji wywoływania zdefiniowanych dla GCC przed konwencjami Renesas
były dostępne. Ta opcja jest domyślna dla wszystkich celów łańcucha narzędzi SH.

-mnomacsave
Oznacz rejestr „MAC” jako ogłuszony, nawet jeśli: -mrenesas jest podawany.

-mieee
-mno-ieee
Kontroluj zgodność porównań zmiennoprzecinkowych z IEEE, co wpływa na obsługę
przypadków, w których wynik porównania jest nieuporządkowany. Domyślnie -mieee is
niejawnie włączone. Gdyby -finite-tylko matematyka jest włączony -mno-ieee jest domyślnie ustawiona,
co skutkuje szybszymi porównaniami zmiennoprzecinkowymi typu „większe i mniej równe”. ten
ustawienia impplcit można nadpisać, określając albo -mieee or -mno-ieee.

-minline-ic_invalidate
Wbudowany kod unieważniający wpisy w pamięci podręcznej instrukcji po skonfigurowaniu zagnieżdżonej funkcji
trampoliny. Ta opcja nie działa, jeśli -musermode obowiązuje i wybrany
opcja generowania kodu (np. -m4) nie pozwala na użycie instrukcji „icbi”.
Jeśli wybrana opcja generowania kodu nie pozwala na użycie „icbi”
instrukcja i -musermode nie działa, wbudowany kod manipuluje
tablica adresów pamięci podręcznej instrukcji bezpośrednio z zapisem asocjacyjnym. To nie tylko
wymaga trybu uprzywilejowanego w czasie wykonywania, ale nie działa również, jeśli wiersz pamięci podręcznej był
zmapowane za pośrednictwem TLB i stało się niemapowane.

-niewielkość
Zrzuć rozmiar i lokalizację instrukcji w kodzie zespołu.

-mpadstruct
Ta opcja jest przestarzała. Dopełnia struktury do wielokrotności 4 bajtów, co oznacza
niezgodne z SH ABI.

-model-matematyczny=model
Ustawia model operacji atomowych i dodatkowe parametry jako oddzielone przecinkiem
lista. Aby uzyskać szczegółowe informacje na temat wbudowanych funkcji atomowych, zobacz __atomowy Wbudowane,
obsługiwane są następujące modele i parametry:

Żaden
Wyłącz sekwencje atomowe generowane przez kompilator i emituj wywołania bibliotek dla atomowej
operacje. Jest to ustawienie domyślne, jeśli celem nie jest „sh*-*-linux*”.

soft-gusa
Generuj sekwencje atomowe zgodne z GNU/Linux w oprogramowaniu gUSA dla
w funkcjach. Wygenerowane sekwencje atomowe wymagają dodatkowego wsparcia ze strony
kod obsługi przerwań/wyjątków systemu i są odpowiednie tylko dla SH3* i
Systemy jednordzeniowe SH4*. Ta opcja jest domyślnie włączona, gdy celem jest
„sh*-*-linux*” i SH3* lub SH4*. Gdy celem jest SH4A, ta opcja również
częściowo wykorzystuje sprzętowe instrukcje atomowe „movli.l” i „movco.l” do
stworzyć wydajniejszy kod, chyba że rygorystyczny jest specyficzne.

soft-tcb
Generuj programowe sekwencje atomowe, które używają zmiennej w kontroli wątku
blok. Jest to odmiana sekwencji gUSA, która może być również użyta na SH1*
i cele SH2*. Wygenerowane sekwencje atomowe wymagają dodatkowego wsparcia ze strony
kod obsługi przerwań/wyjątków systemu i są odpowiednie tylko dla
systemy jednordzeniowe. Podczas korzystania z tego modelu, gbr-przesunięcie= parametr musi być
określone również.

miękka maska
Generuj programowe sekwencje atomowe, które tymczasowo wyłączają przerwania poprzez ustawienie
„SR.IMASK = 1111”. Ten model działa tylko wtedy, gdy program działa w trybie uprzywilejowanym
i nadaje się tylko do systemów jednordzeniowych. Dodatkowe wsparcie ze strony
kod obsługi przerwań/wyjątków systemu nie jest wymagany. Ten model jest
domyślnie włączone, gdy celem jest „sh*-*-linux*” i SH1* lub SH2*.

hard-llcs
Generuj sprzętowe sekwencje atomowe za pomocą instrukcji „movli.l” i „movco.l”
tylko. Jest to dostępne tylko w SH4A i jest odpowiednie dla systemów wielordzeniowych.
Ponieważ instrukcje sprzętowe obsługują tylko 32-bitowe zmienne atomowe, dostęp do 8
lub zmienne 16-bitowe są emulowane z dostępem 32-bitowym. Kod skompilowany z tym
opcja jest również kompatybilna z innym oprogramowaniem przerwania/wyjątku modelu atomowego
systemy obsługi, jeśli są wykonywane na systemie SH4A. Dodatkowe wsparcie ze strony
Kod obsługi przerwań/wyjątków systemu nie jest wymagany dla tego modelu.

gbr-przesunięcie=
Ten parametr określa przesunięcie w bajtach zmiennej w sterowaniu wątkiem
struktura blokowa, która powinna być używana przez wygenerowane sekwencje atomowe, gdy
soft-tcb model został wybrany. W przypadku innych modeli ten parametr jest ignorowany.
Podana wartość musi być całkowitą wielokrotnością czterech i mieścić się w zakresie 0-1020.

rygorystyczny
Ten parametr zapobiega mieszanym użyciu wielu modeli atomowych, nawet jeśli są
kompatybilny i sprawia, że ​​kompilator generuje niepodzielne sekwencje określonego
tylko model.

-mtas
Wygeneruj kod operacji „tas.b” dla „__atomic_test_and_set”. Zauważ, że w zależności od
konkretna konfiguracja sprzętu i oprogramowania może to obniżyć ogólną wydajność
ze względu na opróżnienia linii pamięci podręcznej operandów, które są implikowane przez instrukcję „tas.b”. Na
wielordzeniowe procesory SH4A instrukcja „tas.b” musi być używana z ostrożnością, ponieważ
może spowodować uszkodzenie danych w niektórych konfiguracjach pamięci podręcznej.

-mprefergot
Podczas generowania kodu niezależnego od pozycji emituj wywołania funkcji za pomocą globalnego przesunięcia
Tabela zamiast procedury łączenia tabeli.

-musermode
-mno-tryb użytkownika
Nie zezwalaj (nie zezwalaj) kompilatorowi na generowanie kodu trybu uprzywilejowanego. Określanie
-musermode oznacza również -mno-inline-ic_invalidate gdyby kod wbudowany nie działał
w trybie użytkownika. -musermode jest wartością domyślną, gdy celem jest "sh*-*-linux*". Jeśli
celem jest SH1* lub SH2* -musermode nie ma żadnego efektu, ponieważ nie ma trybu użytkownika.

-koszt wielokrotny=numer
Ustaw koszt zakładany za pomnożenie karczmy.

-mdiv=strategia
Ustaw strategię dzielenia, która będzie używana do operacji dzielenia liczb całkowitych. Dla mediów SH
strategia może być jednym z:

fp Wykonuje operację zmiennoprzecinkową. Ma to bardzo duże opóźnienie, ale wymaga
tylko kilka instrukcji, więc może to być dobry wybór, jeśli Twój kod ma wystarczająco dużo
łatwy do wykorzystania ILP, aby umożliwić kompilatorowi planowanie operacji zmiennoprzecinkowych
instrukcje wraz z innymi instrukcjami. Dzielenie przez zero powoduje a
wyjątek zmiennoprzecinkowy.

inw Wykorzystuje operacje na liczbach całkowitych do obliczenia odwrotności dzielnika, a następnie
mnoży dywidendę przez odwrotność. Ta strategia umożliwia CSE i podnoszenie
obliczenia odwrotnego. Dzielenie przez zero oblicza nieokreślony wynik,
ale nie pułapki.

inv:minlat
Wariant inw gdzie, jeśli nie znaleziono żadnych CSE lub możliwości podnoszenia, lub jeśli
cała operacja została podciągnięta w to samo miejsce, ostatnie etapy
obliczenia odwrotne przeplatają się z końcowym mnożnikiem w celu zmniejszenia całości
opóźnienia, kosztem użycia kilku instrukcji więcej, a tym samym oferując mniej
możliwości planowania z innym kodem.

wezwanie
Wywołuje funkcję biblioteczną, która zwykle implementuje inv:minlat strategia. Ten
zapewnia wysoką gęstość kodu dla kompilacji "m5-*media-nofpu".

call2
Używa innego punktu wejścia tej samej funkcji bibliotecznej, gdzie zakłada, że ​​a
wskaźnik do tabeli przeglądowej został już skonfigurowany, co ujawnia obciążenie wskaźnika
do optymalizacji CSE i podnoszenia kodu.

inv:zadzwoń
inv:call2
inv:fp
Użyj inw algorytm początkowego generowania kodu, ale jeśli kod pozostaje
niezoptymalizowany, wróć do wezwanie, call2lub fp odpowiednio. Zauważ, że
potencjalnie pułapkowy efekt uboczny dzielenia przez zero jest przenoszony przez oddzielny
instrukcji, więc jest możliwe, że wszystkie instrukcje całkowite są wyciągnięte,
ale znacznik efektu ubocznego pozostaje na swoim miejscu. Rekombinacja do
operacje zmiennoprzecinkowe lub wywołanie nie są w tym przypadku możliwe.

inv20u
inv20l
Warianty inv:minlat strategia. W przypadku, gdy obliczenie odwrotne jest
nie oddzielone od mnożnika, przyspieszają podział tam, gdzie mieści się dywidenda
na 20 bitów (w stosownych przypadkach znak plus), wstawiając test, aby pominąć liczbę
operacje w tym przypadku; test ten spowalnia przypadek większych dywidend.
inv20u zakłada, że ​​przypadek tak małej dywidendy jest mało prawdopodobny, oraz inv20l
zakłada, że ​​jest to prawdopodobne.

Dla celów innych niż SHmedia strategia może być jednym z:

call-div1
Wywołuje funkcję biblioteczną, która używa instrukcji dzielenia jednoetapowego „div1” do
wykonać operację. Dzielenie przez zero oblicza nieokreślony wynik i nie
nie pułapka. Jest to ustawienie domyślne z wyjątkiem SH4, SH2A i SHcompact.

połączenie-fp
Wywołuje funkcję biblioteczną, która wykonuje operację zmiennoprzecinkową o podwójnej precyzji
punkt. Dzielenie przez zero powoduje wyjątek zmiennoprzecinkowy. To jest ustawienie domyślne
dla SHcompact z FPU. Określanie tego dla celów, które nie mają podwójnego
precyzyjna jednostka FPU domyślnie ustawiona na „call-div1”.

stół wywoławczy
Wywołuje funkcję biblioteczną, która używa tabeli przeglądowej dla małych dzielników i
Instrukcja "div1" z rozróżnieniem wielkości liter dla większych dzielników. Dzielenie przez zero
oblicza nieokreślony wynik i nie pułapkuje. Jest to ustawienie domyślne dla SH4.
Określanie tego dla celów, które nie mają domyślnych instrukcji zmiany dynamicznej
na „call-div1”.

Jeśli strategia podziału nie została określona, ​​domyślna strategia jest wybierana na podstawie
na aktualny cel. W przypadku SH2A domyślną strategią jest użycie „divs” i „divu”
instrukcje zamiast wywołań funkcji bibliotecznych.

-maccumulate-outgoing-args
Zarezerwuj miejsce raz na wychodzące argumenty w prologu funkcji, a nie na około
każde połączenie. Ogólnie korzystne dla wydajności i rozmiaru. Potrzebny również do odwijania
aby uniknąć zmiany ramki stosu wokół kodu warunkowego.

-mdivsi3_libfunc=Nazwa
Ustaw nazwę funkcji bibliotecznej używanej do 32-bitowego dzielenia ze znakiem na Nazwa, To
dotyczy tylko nazwy użytej w wezwanie dzięki inv:zadzwoń strategie podziału, a
kompilator nadal oczekuje tych samych zestawów rejestrów wejściowych/wyjściowych/przesuniętych, jak w przypadku tego
opcja nie była obecna.

-mfixed-range=rejestr-zakres
Wygeneruj kod traktujący dany zakres rejestrów jako rejestry stałe. Stały rejestr
to taki, którego alokator rejestru nie może użyć. Jest to przydatne podczas kompilowania jądra
kod. Zakres rejestrów jest określony jako dwa rejestry oddzielone myślnikiem. Wiele
zakresy rejestrów można określić oddzielone przecinkiem.

-mindexed-adresowanie
Włącz używanie indeksowanego trybu adresowania dla SHmedia32/SHcompact. To jest tylko
bezpieczne, jeśli sprzęt i/lub system operacyjny implementują 32-bitową semantykę zawijania dla indeksowanego
tryb adresowania. Architektura umożliwia implementację procesorów 64-bitowych
MMU, którego system operacyjny mógłby użyć do uzyskania 32-bitowego adresowania, ale ponieważ nie ma aktualnego sprzętu
implementacja obsługuje ten lub jakikolwiek inny sposób, aby tryb adresowania indeksowanego był bezpieczny
do użycia w 32-bitowym ABI, domyślnie -mno-indeksowane-adresowanie.

-mgettrkoszt=numer
Ustaw zakładany koszt instrukcji "gettr" na numer. Wartość domyślna to 2, jeśli
- naprawiono mpt obowiązuje, 100 inaczej.

- naprawiono mpt
Załóżmy, że instrukcje „pt*” nie będą pułapką. To generalnie generuje lepiej zaplanowany kod,
ale jest niebezpieczny na obecnym sprzęcie. Obecna definicja architektury mówi, że
Pułapka „ptabs” i „ptrel”, gdy cel i z 3 wynosi 3. Ma to
niezamierzony efekt, który może spowodować, że zaplanowanie tych instrukcji przed
gałęzi lub wyciągnij je z pętli. Na przykład „__do_global_ctors”, część
libgcc który uruchamia konstruktory podczas uruchamiania programu, wywołuje funkcje z listy, która jest
ograniczone przez -1. Z - naprawiono mpt opcja "ptabs" jest wykonywana przed testowaniem
przeciwko -1. Oznacza to, że wszystkie konstruktory działają nieco szybciej, ale kiedy
pętla dochodzi do końca listy, program się zawiesza, ponieważ "ptabs" ładuje -1 do a
rejestr docelowy.

Ponieważ ta opcja jest niebezpieczna dla jakiegokolwiek sprzętu implementującego obecną architekturę,
specyfikacja, domyślnie -mno-pt-naprawione. O ile nie określono wyraźnie z
-mgettrcost, -mno-pt-naprawione oznacza również -mgettrcost=100; to odstrasza rejestr
przydział z wykorzystaniem rejestrów docelowych do przechowywania zwykłych liczb całkowitych.

-minvalid-symbole
Załóżmy, że symbole mogą być nieprawidłowe. Zwykłe symbole funkcji generowane przez kompilator
zawsze można ładować za pomocą "movi"/"shori"/"ptabs" lub "movi"/"shori"/"ptrel", ale
za pomocą trików asemblera i/lub linkera możliwe jest generowanie symboli, które powodują
„ptabs” lub „ptrel” do pułapki. Ta opcja ma sens tylko wtedy, gdy -mno-pt-naprawione jest w
efekt. Zapobiega CSE między podstawowymi blokami, podnoszeniem i większością harmonogramów symboli
masa. Wartość domyślna to -mno-nieprawidłowe-symbole.

-koszt-oddzialu=num
Założyć num być kosztem instrukcji oddziału. Wyższe liczby sprawiają, że kompilator
spróbuj wygenerować więcej kodu bez rozgałęzień, jeśli to możliwe. Jeśli nie określono, wartość to
wybierane w zależności od typu procesora, dla którego jest kompilowana.

-mzdcgałąź
-mno-zdcbranch
Załóż (nie zakładaj), że instrukcje rozgałęzienia warunkowego przemieszczenia zerowego „bt” i
"bf" są szybkie. Gdyby -mzdcgałąź jest określony, kompilator preferuje przesunięcie zerowe
sekwencje kodu oddziału. Jest to domyślnie włączone podczas generowania kodu dla SH4 i
SH4A. Można to wyraźnie wyłączyć, określając -mno-zdcbranch.

-slot-mcbranch-force-delay
Wymuś użycie gniazd opóźnień dla gałęzi warunkowych, które wypełniają gniazdo opóźnień
z "nop", jeśli nie można znaleźć odpowiedniej instrukcji. Domyślnie ta opcja to
wyłączone. Można go włączyć, aby obejść błędy sprzętowe, tak jak w oryginale
SH7055.

-mfused-madd
-mno-skondensowany-madd
Generuj kod, który używa (nie używa) mnożenia i akumulacji zmiennoprzecinkowych
instrukcje. Te instrukcje są generowane domyślnie, jeśli sprzętowa liczba zmiennoprzecinkowa
jest używany. Zależna od maszyny -mfused-madd opcja jest teraz mapowana na maszynę-
niezależny -ffp-kontrakt=szybko opcja i -mno-skondensowany-madd jest mapowany na
-ffp-umowa=off.

-mfsca
-mno-fsca
Zezwalaj lub nie zezwalaj kompilatorowi na emitowanie instrukcji „fsca” dla funkcji sinus i cosinus
przybliżenia. Opcja -mfsca musi być używany w połączeniu z
-funsafe-matematyczne optymalizacje. Jest ona domyślnie włączona podczas generowania kodu dla SH4A.
Korzystanie z -mno-fsca wyłącza przybliżenia sinusa i cosinusa, nawet jeśli
-funsafe-matematyczne optymalizacje obowiązuje.

-mfsrrra
-mno-fsrr
Zezwalaj lub nie zezwalaj kompilatorowi na emitowanie instrukcji „fsrra” dla odwrotności kwadratu
przybliżenia pierwiastkowe. Opcja -mfsrrra musi być używany w połączeniu z
-funsafe-matematyczne optymalizacje dzięki -finite-tylko matematyka. Jest domyślnie włączone, gdy
generowanie kodu dla SH4A. Za pomocą -mno-fsrr wyłącza odwrotność pierwiastka kwadratowego
przybliżenia, nawet jeśli -funsafe-matematyczne optymalizacje dzięki -finite-tylko matematyka ma
efekt.

-mpreend-cmove
Preferuj gałęzie warunkowe o zerowym przesunięciu dla warunkowych instrukcji ruchu
wzory. Może to spowodować szybszy kod na procesorze SH4.

Solaris 2 Opcje

Te -m opcje są obsługiwane w systemie Solaris 2:

-mclear-hwcap
-mclear-hwcap mówi kompilatorowi, aby usunął możliwości sprzętowe generowane przez
Asembler Solarisa. Jest to konieczne tylko wtedy, gdy pliki obiektowe używają rozszerzeń ISA, a nie
obsługiwane przez bieżący komputer, ale sprawdź w czasie wykonywania, czy ich używać.

-niewierny-tekst
-niewierny-tekst, używane dodatkowo do -wspólny, mówi kompilatorowi, żeby nie przechodził -z tekst do
konsolidator podczas łączenia udostępnionego obiektu. Korzystając z tej opcji, możesz połączyć pozycję-
kod zależny do współużytkowanego obiektu.

-niewierny-tekst znosi „relokacje pozostają przeciw przydzielone, ale niezapisywalne”
sekcjach” komunikat o błędzie konsolidatora. Jednak niezbędne relokacje wyzwalają
write, a obiekt udostępniony nie jest w rzeczywistości współużytkowany przez procesy. Zamiast
za pomocą -niewierny-tekst, powinieneś skompilować cały kod źródłowy za pomocą -fpic or -fPIC.

Te przełączniki są obsługiwane w dodatku do powyższych w systemie Solaris 2:

-pwątki
Dodaj obsługę wielowątkowości za pomocą biblioteki wątków POSIX. Ta opcja ustawia
flagi zarówno dla preprocesora, jak i konsolidatora. Ta opcja nie wpływa na wątek
bezpieczeństwo kodu wynikowego wytwarzanego przez kompilator lub dostarczonych z nim bibliotek.

-pthread
To jest synonim słowa -pwątki.

SPARC Opcje

Te -m W SPARC obsługiwane są opcje:

-mno-app-regs
-mapp-regs
Sprecyzować -mapp-regs do generowania danych wyjściowych za pomocą globalnych rejestrów od 2 do 4, które
SPARC SVR4 ABI rezerwuje dla aplikacji. Podobnie jak rejestr globalny 1, każdy globalny
rejestr od 2 do 4 jest wówczas traktowany jako rejestr możliwy do przydzielenia, który jest przeładowywany przez
wywołania funkcji. To jest ustawienie domyślne.

Aby być w pełni zgodnym z SVR4 ABI kosztem pewnej utraty wydajności, należy określić:
-mno-app-regs. Za pomocą tej opcji należy skompilować biblioteki i oprogramowanie systemowe.

-mpłaski
-mno-mieszkanie
Z -mpłaski, kompilator nie generuje instrukcji zapisywania/przywracania i używa a
model okna „płaski” lub z pojedynczym rejestrem. Ten model jest kompatybilny ze zwykłym
Zarejestruj model okna. Rejestry lokalne i rejestry wejściowe (0--5) są nadal
traktowane jako rejestry "call-saved" i zapisywane na stosie w razie potrzeby.

Z -mno-mieszkanie (domyślnie), kompilator generuje instrukcje zapisywania/przywracania (z wyjątkiem
dla funkcji skrzydła). To jest normalny tryb pracy.

-mfpu
-mhard-float
Generuj dane wyjściowe zawierające instrukcje zmiennoprzecinkowe. To jest ustawienie domyślne.

-mno-fpu
-msoft-float
Generuj dane wyjściowe zawierające wywołania bibliotek dla zmiennoprzecinkowych. Ostrzeżenie: wymagane
biblioteki nie są dostępne dla wszystkich podsystemów SPARC. Zwykle obiekty
używany jest zwykły kompilator C maszyny, ale nie można tego zrobić bezpośrednio w
kompilacja. Musisz dokonać własnych ustaleń, aby zapewnić odpowiednią bibliotekę
funkcje do kompilacji krzyżowej. Wbudowane cele sparc-*-aout dzięki sparclite-*-*
zapewniają obsługę oprogramowania zmiennoprzecinkowego.

-msoft-float zmienia konwencję wywoływania w pliku wyjściowym; dlatego to tylko
przydatne, jeśli kompilujesz cała kolekcja programu z tą opcją. W szczególności musisz
skompilować libgcc.a, biblioteka dostarczana z GCC, z -msoft-float w tym celu
pracować.

-mhard-quad-float
Generuj dane wyjściowe zawierające czterosłowo (długie podwójne) instrukcje zmiennoprzecinkowe.

-msoft-quad-float
Generuj dane wyjściowe zawierające wywołania bibliotek dla czterech słów (długie podwójne) zmiennoprzecinkowych
instrukcje. Wywoływane funkcje są określone w SPARC ABI. To jest
domyślna.

W chwili pisania tego tekstu nie ma implementacji SPARC, które obsługują sprzętową obsługę
instrukcje zmiennoprzecinkowe z czterema słowami. Wszyscy przywołują obsługę pułapek dla jednego z
te instrukcje, a następnie program obsługi pułapki emuluje efekt instrukcji.
Z powodu narzutu obsługi pułapek jest to znacznie wolniejsze niż wywoływanie biblioteki ABI
rutyny. Więc -msoft-quad-float opcja jest domyślna.

-mno-unaligned-doubles
-munaligned-dwójka
Załóżmy, że duble mają wyrównanie 8-bajtowe. To jest ustawienie domyślne.

Z -munaligned-dwójka, GCC zakłada, że ​​duble mają wyrównanie 8-bajtowe tylko wtedy, gdy
są zawarte w innym typie lub mają adres bezwzględny. W przeciwnym razie to
zakłada, że ​​mają wyrównanie 4-bajtowe. Określenie tej opcji pozwala uniknąć niektórych rzadkich
problemy ze zgodnością z kodem generowanym przez inne kompilatory. To nie jest domyślne
ponieważ powoduje utratę wydajności, szczególnie w przypadku kodu zmiennoprzecinkowego.

-tryb-użytkownika
-mno-tryb-użytkownika
Nie generuj kodu, który może działać tylko w trybie administratora. Dotyczy to tylko
instrukcja "casa" wyemitowana dla procesora LEON3. To jest ustawienie domyślne.

-mno-szybsze-struktury
-szybsze-struktury
Z -szybsze-struktury, kompilator zakłada, że ​​struktury powinny mieć 8-bajtowe
wyrównanie. Umożliwia to korzystanie z par instrukcji „ldd” i „std” dla kopii
w przypisaniu struktury, w miejsce dwukrotnie większej liczby par „ld” i „st”. Jednakże
użycie tego zmienionego ustawienia bezpośrednio narusza SPARC ABI. Tak więc jest to zamierzone
tylko do użytku na celach, w których programista potwierdza, że ​​ich kod wynikowy jest
niezgodne bezpośrednio z zasadami ABI.

-mcpu=typ_procesora
Ustaw zestaw instrukcji, zestaw rejestrów i parametry planowania instrukcji dla
typ maszyny typ_procesora. Obsługiwane wartości dla typ_procesorav7, cyprys, v8, supersparc,
hipersparc, leon, leon3, leon3v7, sparclite, f930, f934, sparclite86x, błyskotka,
tsc701, v9, ultrasparc, ultrasparc3, Niagara, niagara2, niagara3 dzięki niagara4.

Natywne łańcuchy narzędzi Solaris i GNU/Linux również obsługują tę wartość rodzimy, który wybiera
najlepsza opcja architektury dla procesora hosta. -mcpu=natywny nie ma wpływu, jeśli
GCC nie rozpoznaje procesora.

Domyślne parametry planowania instrukcji są używane dla wartości, które wybierają
architekturę, a nie implementację. To są v7, v8, sparclite, błyskotka, v9.

Oto lista każdej obsługiwanej architektury i obsługiwanych implementacji.

cyprys v7, leon3v7

v8 supersparc, hipersparc, leon, leon3

sparclite
f930, f934, sparclite86x

błyskotka
tsc701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

Domyślnie (o ile nie skonfigurowano inaczej), GCC generuje kod dla wariantu V7
Architektura SPARC. Z -mcpu=cyprys, kompilator dodatkowo optymalizuje go pod kątem
chip Cypress CY7C602, używany w serii SPARCStation/SPARCServer 3xx. To jest
nadaje się również do starszych SPARCStation 1, 2, IPX itp.

Z -mcpu=v8, GCC generuje kod dla wariantu V8 architektury SPARC. ten
jedyną różnicą w stosunku do kodu V7 jest to, że kompilator emituje liczbę całkowitą mnożenia i
Instrukcje dzielenia liczb całkowitych, które istnieją w SPARC-V8, ale nie w SPARC-V7. Z
-mcpu=supersparc, kompilator dodatkowo optymalizuje go pod kątem układu SuperSPARC, ponieważ
używany w serii SPARCStation 10, 1000 i 2000.

Z -mcpu=sparclite, GCC generuje kod dla SPARClite wariantu SPARC
architektura. Dodaje mnożenie liczb całkowitych, krok dzielenia liczb całkowitych i skanowanie ("ffs")
instrukcji, które istnieją w SPARClite, ale nie w SPARC-V7. Z -mcpu=f930The
kompilator dodatkowo optymalizuje go pod kątem układu Fujitsu MB86930, który jest oryginałem
SPARClite, bez FPU. Z -mcpu=f934, kompilator dodatkowo optymalizuje go pod kątem
układ Fujitsu MB86934, który jest nowszym SPARClite z FPU.

Z -mcpu=sparclet, GCC generuje kod dla wariantu SPARClet SPARC
architektura. To dodaje liczbę całkowitą mnożenie, mnożenie/akumulowanie, dzielenie liczb całkowitych
instrukcje step and scan („ffs”), które istnieją w SPARClet, ale nie w SPARC-V7. Z
-mcpu=tsc701, kompilator dodatkowo optymalizuje go pod kątem układu TEMIC SPARClet.

Z -mcpu=v9, GCC generuje kod dla wariantu V9 architektury SPARC. Ten
dodaje 64-bitowe instrukcje ruchu na liczbach całkowitych i zmiennoprzecinkowych, 3 dodatkowe zmiennoprzecinkowe
rejestry kodu warunku i instrukcje ruchu warunkowego. Z -mcpu=ultrasparc,
kompilator dodatkowo optymalizuje go pod kątem układów Sun UltraSPARC I/II/IIi. Z
-mcpu=ultrasparc3, kompilator dodatkowo optymalizuje go pod kątem Sun UltraSPARC
chipy III/III+/IIIi/IIIi+/IV/IV+. Z -mcpu=niagara, kompilator dodatkowo
optymalizuje go pod kątem chipów Sun UltraSPARC T1. Z -mcpu=niagara2, kompilator
dodatkowo optymalizuje go pod kątem chipów Sun UltraSPARC T2. Z -mcpu=niagara3The
kompilator dodatkowo optymalizuje go pod kątem układów Sun UltraSPARC T3. Z -mcpu=niagara4,
kompilator dodatkowo optymalizuje go pod kątem układów Sun UltraSPARC T4.

-mtune=typ_procesora
Ustaw parametry planowania instrukcji dla typu maszyny typ_procesora, ale nie ustawiaj
zestaw instrukcji lub rejestr ustaw, że opcja -mcpu=typ_procesora robi.

Te same wartości dla -mcpu=typ_procesora można stosować -mtune=typ_procesora, ale jedyny
użyteczne wartości to te, które wybierają konkretną implementację procesora. To są
cyprys, supersparc, hipersparc, leon, leon3, leon3v7, f930, f934, sparclite86x,
tsc701, ultrasparc, ultrasparc3, Niagara, niagara2, niagara3 dzięki niagara4. Z
natywne łańcuchy narzędzi Solaris i GNU/Linux, rodzimy można również użyć.

-mv8plus
-mno-v8plus
Z -mv8plus, GCC generuje kod dla SPARC-V8+ ABI. Różnica w stosunku do V8
ABI polega na tym, że rejestry globalne i wyjściowe są uważane za 64-bitowe. To jest włączone
domyślnie w systemie Solaris w trybie 32-bitowym dla wszystkich procesorów SPARC-V9.

-mvis
-mno-vis
Z -mvis, GCC generuje kod, który wykorzystuje UltraSPARC Visual
Rozszerzenia zestawu instrukcji. Wartość domyślna to -mno-vis.

-mvis2
-mno-vis2
Z -mvis2, GCC generuje kod, który wykorzystuje wersję 2.0 UltraSPARC
Rozszerzenia zestawu instrukcji wizualnych. Wartość domyślna to -mvis2 gdy kierujesz się na procesor, który
obsługuje takie instrukcje, jak UltraSPARC-III i nowsze. Ustawienie -mvis2 również
zestawy -mvis.

-mvis3
-mno-vis3
Z -mvis3, GCC generuje kod, który wykorzystuje wersję 3.0 UltraSPARC
Rozszerzenia zestawu instrukcji wizualnych. Wartość domyślna to -mvis3 gdy kierujesz się na procesor, który
obsługuje takie instrukcje, jak niagara-3 i nowsze. Ustawienie -mvis3 również zestawy
-mvis2 dzięki -mvis.

-mcbcond
-mno-cbcond
Z -mcbcond, GCC generuje kod, który wykorzystuje funkcję porównania i rozgałęzienia
instrukcji, zgodnie z definicją w Sparc Architecture 2011. Wartość domyślna to -mcbcond gdy
kierowanie na procesor obsługujący takie instrukcje, taki jak niagara-4 i nowsze.

-mpopc
-mno-popc
Z -mpopc, GCC generuje kod, który wykorzystuje populację UltraSPARC
liczyć instrukcję. Wartość domyślna to -mpopc gdy kierujesz się na procesor, który obsługuje takie
instrukcje, takie jak Niagara-2 i późniejsze.

-mfmaf
-mno-fmaf
Z -mfmaf, GCC generuje kod, który wykorzystuje technologię UltraSPARC Fused Multiply-
Dodaj rozszerzenia zmiennoprzecinkowe. Wartość domyślna to -mfmaf gdy kierujesz się na procesor, który
obsługuje takie instrukcje, jak Niagara-3 i nowsze.

-mfix-at697f
Włącz udokumentowane obejście dla pojedynczego błędu procesora Atmel AT697F
(co odpowiada erratie #13 procesora AT697E).

-mfix-ut699
Włącz udokumentowane obejścia dla erraty zmiennoprzecinkowej i pamięci podręcznej danych
anulować erratę procesora UT699.

Te -m opcje są obsługiwane oprócz powyższych na procesorach SPARC-V9 w wersji 64-bitowej
środowiska:

-m32
-m64
Generuj kod dla środowiska 32-bitowego lub 64-bitowego. Środowisko 32-bitowe ustawia int,
długi i wskaźnik do 32 bitów. Środowisko 64-bitowe ustawia się na 32-bitowe i długie oraz
wskaźnik do 64 bitów.

-mcmodel=który
Ustaw model kodu na jeden z

medlow
Model kodu średni/niski: adresy 64-bitowe, programy muszą być połączone w niskim 32
bity pamięci. Programy mogą być łączone statycznie lub dynamicznie.

medmid
Model kodu średniego/średniego: adresy 64-bitowe, programy muszą być połączone w niskim
44 bity pamięci, segmenty tekstu i danych muszą mieć rozmiar mniejszy niż 2 GB i
segment danych musi znajdować się w obrębie 2 GB od segmentu tekstu.

medanie
Model kodu Medium/Anywhere: adresy 64-bitowe, programy mogą być połączone w dowolnym miejscu
w pamięci segmenty tekstu i danych muszą mieć rozmiar mniejszy niż 2 GB, a dane
segment musi znajdować się w obrębie 2 GB od segmentu tekstu.

embmedany
Model kodu Medium/Anywhere dla systemów wbudowanych: adresy 64-bitowe, tekst
a segmenty danych muszą mieć rozmiar mniejszy niż 2 GB, oba zaczynają się w dowolnym miejscu pamięci
(określane w czasie połączenia). Rejestr globalny %g4 wskazuje na bazę danych
człon. Programy są połączone statycznie, a kod PIC nie jest obsługiwany.

-model-pamięci=mem-model
Ustaw model pamięci obowiązujący w procesorze na jeden z

domyślnym
Domyślny model pamięci dla procesora i systemu operacyjnego.

rmo Zrelaksowany porządek pamięci

pso Częściowe zamówienie w sklepie

położyć Całkowite zamówienie w sklepie

sc Spójność sekwencyjna

Te modele pamięci są formalnie zdefiniowane w Dodatku D architektury Sparc V9
instrukcji, zgodnie z ustawieniem w polu „PSTATE.MM” procesora.

-mstack-bias
-mno-stos-ustawienie
Z -mstack-bias, GCC zakłada, że ​​wskaźnik stosu i wskaźnik ramki, jeśli są obecne,
są przesunięte o -2047, które należy dodać podczas tworzenia odwołań do ramek stosu. Ten
to ustawienie domyślne w trybie 64-bitowym. W przeciwnym razie załóżmy, że takie przesunięcie nie występuje.

SPU Opcje

Te -m opcje są obsługiwane na SPU:

-mwarn-reloc
-merror-reloc
Program ładujący dla SPU nie obsługuje dynamicznych relokacji. Domyślnie GCC daje
błąd, gdy generuje kod, który wymaga dynamicznej relokacji. -mno-błąd-reloc
wyłącza błąd, -mwarn-reloc zamiast tego generuje ostrzeżenie.

-msafe-dma
-munsafe-dma
Nie można ponownie zamawiać instrukcji, które inicjują lub testują zakończenie DMA, za pomocą
w odniesieniu do obciążeń i magazynów pamięci, do której uzyskuje się dostęp. Z -munsafe-dma
musisz użyć słowa kluczowego „volatile”, aby chronić dostęp do pamięci, ale może to prowadzić do:
niewydajny kod w miejscach, o których wiadomo, że pamięć się nie zmienia. zamiast mark
pamięć jako ulotna, możesz użyć -msafe-dma powiedzieć kompilatorowi, aby traktował DMA
instrukcje jako potencjalnie wpływające na całą pamięć.

-wskazówki-gałęzi
Domyślnie GCC generuje instrukcję podpowiedzi do rozgałęzienia, aby uniknąć przestojów w potoku dla
zawsze zabierane lub prawdopodobnie zabierane gałęzie. Podpowiedź nie jest generowana bliżej niż 8
instrukcje z dala od swojego oddziału. Nie ma powodu, aby je wyłączyć, z wyjątkiem
debugowania lub aby obiekt był trochę mniejszy.

-msmall-mem
-mlarge-mem
Domyślnie GCC generuje kod zakładając, że adresy nigdy nie są większe niż 18 bitów.
Z -mlarge-mem generowany jest kod, który przyjmuje pełny 32-bitowy adres.

-mstdmain
Domyślnie GCC łączy się z kodem startowym, który przyjmuje główną funkcję w stylu SPU
interfejs (który posiada niekonwencjonalną listę parametrów). Z -mstdmain, linki GCC
twój program przeciwko kodowi startowemu, który zakłada interfejs w stylu C99 do "main",
w tym lokalną kopię ciągów „argv”.

-mfixed-range=rejestr-zakres
Wygeneruj kod traktujący dany zakres rejestrów jako rejestry stałe. Stały rejestr
to taki, którego alokator rejestru nie może użyć. Jest to przydatne podczas kompilowania jądra
kod. Zakres rejestrów jest określony jako dwa rejestry oddzielone myślnikiem. Wiele
zakresy rejestrów można określić oddzielone przecinkiem.

-mea32
-mea64
Skompiluj kod, zakładając, że wskaźniki do przestrzeni adresowej PPU dostępnej przez „__ea”
nazwane kwalifikatory przestrzeni adresowej mają szerokość 32 lub 64 bity. Wartość domyślna to 32 bity.
Ponieważ jest to opcja zmieniająca ABI, cały kod obiektowy w pliku wykonywalnym musi być skompilowany
z tym samym ustawieniem.

-konwersja przestrzeni adresowej
-mno-konwersja-przestrzeni-adresowej
Zezwalaj/nie zezwalaj na traktowanie przestrzeni adresowej „__ea” jako nadzbioru adresu ogólnego
przestrzeń. Umożliwia to jawne rzutowanie typu między „__ea” a ogólnym wskaźnikiem, a także
niejawne konwersje wskaźników ogólnych na wskaźniki „__ea”. Domyślnym ustawieniem jest zezwolenie
konwersje wskaźnika przestrzeni adresowej.

-rozmiar-mcache=rozmiar pamięci podręcznej
Ta opcja kontroluje wersję libgcc, którą kompilator łączy z plikiem wykonywalnym
i wybiera pamięć podręczną zarządzaną przez oprogramowanie w celu uzyskania dostępu do zmiennych w adresie „__ea”
przestrzeń o określonym rozmiarze pamięci podręcznej. Możliwe opcje dla rozmiar pamięci podręcznej8, 16, 32, 64
dzięki 128. Domyślny rozmiar pamięci podręcznej to 64 KB.

-matomic-aktualizacje
-mno-atomowe-aktualizacje
Ta opcja kontroluje wersję libgcc, którą kompilator łączy z plikiem wykonywalnym
i wybiera, czy atomowe aktualizacje pamięci podręcznej zarządzanej przez oprogramowanie zmiennych po stronie PPU
są używane. Jeśli używasz aktualizacji atomowych, zmiany w zmiennej PPU z kodu SPU przy użyciu
nazwany kwalifikator przestrzeni adresowej „__ea” nie koliduje ze zmianami w innych PPU
zmienne rezydujące w tej samej linii pamięci podręcznej z kodu PPU. Jeśli nie używasz atomic
aktualizacje, takie zakłócenia mogą wystąpić; jednak odpisywanie linii pamięci podręcznej to więcej
wydajny. Domyślnym zachowaniem jest użycie aktualizacji atomowych.

-mdual-nops
-mdual-nops=n
Domyślnie GCC wstawia nopy, aby zwiększyć podwójny problem, gdy oczekuje, że wzrośnie
wydajność. n może być wartością od 0 do 10. Mniejszy n wstawia mniej nopsów. 10 jest
domyślnie 0 to to samo co -mno-dual-nops. Wyłączone z -Os.

-mhint-max-nops=n
Maksymalna liczba nopów do wstawienia dla wskazówki dotyczącej gałęzi. Podpowiedź dotycząca gałęzi musi wynosić co najmniej 8
instrukcje z dala od oddziału, którego dotyczy. Wstawki GCC do n nop dla
wymusza to, w przeciwnym razie nie generuje podpowiedzi dotyczącej gałęzi.

-mhint-max-odległość=n
Kodowanie instrukcji podpowiedzi dotyczącej gałęzi ogranicza podpowiedź do 256
instrukcje oddziału, którego dotyczy. Domyślnie GCC upewnia się, że jest w zasięgu
10.

-msafe-podpowiedzi
Obejdź błąd sprzętowy, który powoduje, że SPU zawiesza się na czas nieokreślony. Domyślnie GCC
wstawia instrukcję "hbrp", aby upewnić się, że to nie nastąpi.

Opcje dla system V

Te dodatkowe opcje są dostępne w wersji System V Release 4 w celu zapewnienia zgodności z innymi
kompilatory w tych systemach:

-G Utwórz udostępniony obiekt. Zaleca się -symboliczny or -wspólny być używany zamiast.

-Qy Zidentyfikuj wersje każdego narzędzia używanego przez kompilator w asemblerze ".ident"
dyrektywy w danych wyjściowych.

-Qn Powstrzymaj się od dodawania dyrektyw ".ident" do pliku wyjściowego (jest to ustawienie domyślne).

-PZ,dirs
Przeszukaj katalogi dirs, i żadnych innych, dla bibliotek określonych za pomocą -l.

-Ym,reż
Zajrzyj do katalogu reż znaleźć preprocesor M4. Asembler używa tego
opcja.

PŁYTKA-Gx Opcje

Te -m opcje są obsługiwane w TILE-Gx:

-mcmodel=mały
Wygeneruj kod dla małego modelu. Odległość dla połączeń bezpośrednich jest ograniczona do 500M
w obu kierunkach. Adresy względne komputera mają 32 bity. Obsługa adresów absolutnych
pełny zakres adresów.

-mcmodel=duży
Wygeneruj kod dla dużego modelu. Nie ma ograniczeń na odległość połączenia, pc-
adresy względne lub adresy bezwzględne.

-mcpu=Nazwa
Wybiera typ docelowego procesora. Obecnie jedynym obsługiwanym typem jest kafelekx.

-m32
-m64
Generuj kod dla środowiska 32-bitowego lub 64-bitowego. Środowisko 32-bitowe ustawia int,
długi i wskaźnik do 32 bitów. Środowisko 64-bitowe ustawia się na 32-bitowe i długie oraz
wskaźnik do 64 bitów.

-mbig-endian
-mlittle-endian
Generuj kod odpowiednio w trybie big/little endian.

TILEPro Opcje

Te -m opcje są obsługiwane w TILEPro:

-mcpu=Nazwa
Wybiera typ docelowego procesora. Obecnie jedynym obsługiwanym typem jest kafelek.

-m32
Generuj kod dla środowiska 32-bitowego, który ustawia int, long i wskaźnik na 32 bity.
Jest to jedyne obsługiwane zachowanie, więc flaga jest w zasadzie ignorowana.

V850 Opcje

Te -m opcje są zdefiniowane dla implementacji V850:

-mlong-rozmowy
-mno-długie-rozmowy
Traktuj wszystkie połączenia jako dalekie (bliskie). Jeśli zakłada się, że połączenia odbywają się daleko,
kompilator zawsze ładuje adres funkcji do rejestru i wywołuje pośrednie
przez wskaźnik.

-mno-ep
-mep
Nie optymalizuj (nie optymalizuj) podstawowych bloków, które używają tego samego wskaźnika indeksu 4 lub więcej
razy, aby skopiować wskaźnik do rejestru „ep” i użyć krótszego „sld” i „sst”
instrukcje. ten -mep opcja jest domyślnie włączona, jeśli optymalizujesz.

-mno-prolog-funkcja
-mprolog-funkcja
Nie używaj (nie używaj) funkcji zewnętrznych do zapisywania i przywracania rejestrów w prologu
i epilog funkcji. Funkcje zewnętrzne są wolniejsze, ale zużywają mniej kodu
spacja, jeśli więcej niż jedna funkcja zapisuje tę samą liczbę rejestrów. ten
-mprolog-funkcja opcja jest domyślnie włączona, jeśli optymalizujesz.

-mspace
Postaraj się, aby kod był jak najmniejszy. Obecnie to tylko włącza -mep
dzięki -mprolog-funkcja Opcje.

-mtda=n
Umieść zmienne statyczne lub globalne, których rozmiar to n bajtów lub mniej do małego obszaru danych
na który wskazuje rejestr „ep”. Mały obszar danych może pomieścić łącznie do 256 bajtów
(128 bajtów dla odwołań do bajtów).

-msda=n
Umieść zmienne statyczne lub globalne, których rozmiar to n bajtów lub mniej do małego obszaru danych
na który wskazuje "gp". Mały obszar danych może pomieścić do 64 kilobajtów.

-mzda=n
Umieść zmienne statyczne lub globalne, których rozmiar to n bajtów lub mniej do pierwszych 32
kilobajtów pamięci.

-mv850
Określ, że docelowym procesorem jest V850.

-mv850e3v5
Określ, że procesor docelowy to V850E3V5. Stała preprocesora
„__v850e3v5__” jest zdefiniowane, jeśli ta opcja jest używana.

-mv850e2v4
Określ, że procesor docelowy to V850E3V5. To jest alias dla
-mv850e3v5 opcja.

-mv850e2v3
Określ, że procesor docelowy to V850E2V3. Stała preprocesora
„__v850e2v3__” jest zdefiniowane, jeśli ta opcja jest używana.

-mv850e2
Określ, że procesor docelowy to V850E2. Stała preprocesora
„__v850e2__” jest zdefiniowane, jeśli ta opcja jest używana.

-mv850e1
Określ, że procesor docelowy to V850E1. Stałe preprocesora
„__v850e1__” i „__v850e__” są zdefiniowane, jeśli ta opcja jest używana.

-mv850es
Określ, że procesor docelowy to V850ES. To jest alias dla -mv850e1
opcja.

-mv850e
Określ, że procesor docelowy to V850E. Stała preprocesora „__v850e__”
jest zdefiniowany, jeśli ta opcja jest używana.

Jeśli nie -mv850 ani -mv850e ani -mv850e1 ani -mv850e2 ani -mv850e2v3 ani -mv850e3v5
są zdefiniowane, a następnie wybierany jest domyślny procesor docelowy i odpowiedni __v850*__
zdefiniowana jest stała preprocesora.

Stałe preprocesora „__v850” i „__v851__” są zawsze zdefiniowane, niezależnie od
który wariant procesora jest celem.

-mdisable-callt
-mno-wyłącz-wezwanie
Ta opcja blokuje generowanie instrukcji "CALLT" dla v850e, v850e1,
Smaki v850e2, v850e2v3 i v850e3v5 architektury v850.

Ta opcja jest domyślnie włączona, gdy używany jest RH850 ABI (patrz -mrh850-abi), A
domyślnie wyłączone, gdy używany jest GCC ABI. Jeśli pojawiają się instrukcje „CALLT”
wygenerowany, a następnie zdefiniowany jest symbol preprocesora C „__V850_CALLT__”.

-mrelaks
-mno-relaks
Przekaż (lub nie przekaż) -mrelaks opcja wiersza poleceń do asemblera.

-mlong-skoki
-mno-skoki w dal
Wyłącz (lub ponownie włącz) generowanie instrukcji skoku względem komputera.

-msoft-float
-mhard-float
Wyłącz (lub ponownie włącz) generowanie sprzętowych instrukcji zmiennoprzecinkowych. Ten
opcja ma znaczenie tylko wtedy, gdy architektura docelowa to V850E2V3 lub wyżej. Gdyby
sprzętowe instrukcje zmiennoprzecinkowe są generowane, a następnie preprocesor C
zdefiniowany jest symbol „__FPU_OK__”, w przeciwnym razie zdefiniowany jest symbol „__NO_FPU__”.

-mloop
Umożliwia użycie instrukcji e3v5 LOOP. Korzystanie z tej instrukcji nie jest
domyślnie włączone, gdy wybrana jest architektura e3v5, ponieważ jej użycie jest nadal
eksperymentalny.

-mrh850-abi
-mghs
Umożliwia obsługę wersji RH850 V850 ABI. To jest ustawienie domyślne. Z
w tej wersji ABI obowiązują następujące zasady:

* Struktury i unie o rozmiarach całkowitych są zwracane przez wskaźnik pamięci, a nie
rejestr.

* Duże struktury i unie (o rozmiarze większym niż 8 bajtów) są przekazywane przez wartość.

* Funkcje są dostosowane do 16-bitowych granic.

* -m8byte-wyrównaj obsługiwana jest opcja wiersza poleceń.

* -mdisable-callt opcja wiersza poleceń jest domyślnie włączona. ten
-mno-wyłącz-wezwanie opcja wiersza polecenia nie jest obsługiwana.

Gdy ta wersja ABI jest włączona, symbol preprocesora C „__V850_RH850_ABI__”
definiuje.

-mgcc-abi
Włącza obsługę starej wersji GCC V850 ABI. W tej wersji ABI
zastosowanie mają następujące zasady:

* Struktury i związki o rozmiarach całkowitych są zwracane w rejestrze „r10”.

* Duże struktury i unie (o rozmiarze ponad 8 bajtów) są przekazywane przez odwołanie.

* Funkcje są wyrównane do granic 32-bitowych, chyba że zostaną zoptymalizowane pod kątem rozmiaru.

* -m8byte-wyrównaj opcja wiersza polecenia nie jest obsługiwana.

* -mdisable-callt opcja wiersza poleceń jest obsługiwana, ale domyślnie nie jest włączona.

Gdy ta wersja ABI jest włączona, symbol preprocesora C „__V850_GCC_ABI__”
definiuje.

-m8byte-wyrównaj
-mno-8byte-wyrównaj
Włącza obsługę typów „double” i „long long”, które mają być wyrównane w granicach 8-bajtowych.
Domyślnym ustawieniem jest ograniczenie wyrównania wszystkich obiektów do maksymalnie 4 bajtów. Kiedy
-m8byte-wyrównaj obowiązuje symbol preprocesora C „__V850_8BYTE_ALIGN__” to
zdefiniowane.

-duży-przełącznik
Generuj kod odpowiedni dla dużych tabel przełączników. Użyj tej opcji tylko wtedy, gdy
assembler/linker skarżą się na gałęzie spoza zakresu w tablicy przełączników.

-mapp-regs
Ta opcja powoduje, że r2 i r5 są używane w kodzie generowanym przez kompilator. Ten
ustawienie jest domyślne.

-mno-app-regs
Ta opcja powoduje, że r2 i r5 są traktowane jako rejestry stałe.

VAX Opcje

Te -m opcje są zdefiniowane dla VAX:

-munix
Nie wypisuj pewnych instrukcji skoku ("aobleq" itd.), które asembler uniksowy
ponieważ VAX nie radzi sobie z dużymi odległościami.

-mgnu
Wypisz te instrukcje skoku, zakładając, że asembler GNU jest
używany.

-mg Kod wyjściowy dla liczb zmiennoprzecinkowych w formacie G zamiast formatu D.

Wizja Opcje

-mdebug
Program, który wykonuje operacje wejścia/wyjścia na plikach i jest przeznaczony do uruchamiania na podsystemie MCM, powinien:
powiązane z tą opcją. Powoduje to połączenie bibliotek libc.a i libdebug.a.
Program powinien być uruchamiany na celu pod kontrolą zdalnego debugowania GDB
kikut.

-msim
Program, który wykonuje operacje wejścia/wyjścia na plikach i jest przeznaczony do uruchomienia na symulatorze, powinien:
połączone z opcją. Powoduje to powiązanie bibliotek libc.a i libsim.a.

-mfpu
-mhard-float
Generuj kod zawierający instrukcje zmiennoprzecinkowe. To jest ustawienie domyślne.

-mno-fpu
-msoft-float
Generuj kod zawierający wywołania bibliotek dla liczb zmiennoprzecinkowych.

-msoft-float zmienia konwencję wywoływania w pliku wyjściowym; dlatego to tylko
przydatne, jeśli kompilujesz cała kolekcja programu z tą opcją. W szczególności musisz
skompilować libgcc.a, biblioteka dostarczana z GCC, z -msoft-float w tym celu
pracować.

-mcpu=typ_procesora
Ustaw zestaw instrukcji, zestaw rejestrów i parametry planowania instrukcji dla
typ maszyny typ_procesora. Obsługiwane wartości dla typ_procesoraMCM, gr5 dzięki gr6.

MCM jest synonimem gr5 obecny dla kompatybilności wstecznej.

Domyślnie (o ile nie skonfigurowano inaczej), GCC generuje kod dla wariantu GR5
architektura Visium.

Z -mcpu=gr6, GCC generuje kod dla wariantu GR6 architektury Visium.
Jedyną różnicą w stosunku do kodu GR5 jest to, że kompilator wygeneruje ruch blokowy
instrukcje.

-mtune=typ_procesora
Ustaw parametry planowania instrukcji dla typu maszyny typ_procesora, ale nie ustawiaj
zestaw instrukcji lub rejestr ustaw, że opcja -mcpu=typ_procesora doskonałe.

- tryb msv
Generuj kod dla trybu administratora, w którym nie ma ograniczeń dostępu
do rejestrów ogólnych. To jest ustawienie domyślne.

-tryb-użytkownika
Wygeneruj kod dla trybu użytkownika, w którym dostęp do niektórych rejestrów ogólnych jest
zabronione: w GR5 rejestry r24 do r31 nie mogą być dostępne w tym trybie; na
GR6, dotyczy to tylko rejestrów r29 do r31.

VMS Opcje

Te -m opcje są zdefiniowane dla wdrożeń VMS:

-mvms-kody-zwrotne
Zwróć kody stanu VMS z „głównego”. Domyślnie zwracany jest warunek w stylu POSIX
(np. kody błędów).

-mdebug-główny=prefiks
Oznacz pierwszą procedurę, której nazwa zaczyna się od prefiks jako główna rutyna dla
debugger.

-mmalloc64
Domyślnie 64-bitowe procedury alokacji pamięci.

-mpointer-rozmiar=rozmiar
Ustaw domyślny rozmiar wskaźników. Możliwe opcje dla rozmiar32 or krótki dla 32 bitów
wskaźniki, 64 or długie dla wskaźników 64-bitowych i Nie do obsługi tylko 32-bitowych wskaźników.
Późniejsza opcja wyłącza "pragma pointer_size".

VxWorks Opcje

Opcje w tej sekcji są zdefiniowane dla wszystkich podsystemów VxWorks. Opcje specyficzne dla
sprzęt docelowy są wymienione wraz z innymi opcjami dla tego celu.

-mrtp
GCC może generować kod zarówno dla jąder VxWorks, jak i procesów czasu rzeczywistego (RTP). Ten
opcja przełącza się z pierwszej na drugą. Definiuje również makro preprocesora
„__RTP__”.

-niestatyczny
Połącz plik wykonywalny RTP z bibliotekami współdzielonymi, a nie z bibliotekami statycznymi. ten
Opcje -statyczny dzięki -wspólny może być również używany do RTP; -statyczny jest wartością domyślną.

-Bstatyczny
-Bdynamic
Te opcje są przekazywane do konsolidatora. Są one zdefiniowane pod kątem zgodności z
Diab.

-Xbind-leniwy
Włącz leniwe wiązanie wywołań funkcji. Ta opcja jest równoważna z -Wl,-z,teraz i jest
zdefiniowany pod kątem kompatybilności z Diab.

-Xbind-teraz
Wyłącz leniwe wiązanie wywołań funkcji. Ta opcja jest domyślna i jest zdefiniowana dla
kompatybilność z Diabem.

x86 Opcje

Te -m opcje są zdefiniowane dla rodziny komputerów x86.

-marzec=typ procesora
Wygeneruj instrukcje dla typu maszyny typ procesora. W odróżnieniu -mtune=typ procesora,
który jedynie dostraja wygenerowany kod do określonego typ procesora, -marzec=typ procesora
pozwala GCC generować kod, który może w ogóle nie działać na procesorach innych niż ten
wskazany. Określanie -marzec=typ procesora sugeruje -mtune=typ procesora.

Wybory dla typ procesora należą:

rodzimy
To wybiera procesor do wygenerowania kodu w czasie kompilacji, określając
typ procesora kompilatora. Za pomocą -marzec=rodzimy umożliwia wszystko
podzbiory instrukcji obsługiwane przez maszynę lokalną (dlatego wynik może nie zostać uruchomiony)
na różnych maszynach). Za pomocą -mtune=natywny tworzy kod zoptymalizowany pod kątem lokalnego
maszyna pod ograniczeniami wybranego zestawu instrukcji.

i386
Oryginalny procesor Intel i386.

i486
Procesor Intel i486. (Nie zaimplementowano harmonogramu dla tego układu.)

i586
Pentium
Procesor Intel Pentium bez obsługi MMX.

pentium-mmx
Procesor Intel Pentium MMX oparty na rdzeniu Pentium z obsługą zestawu instrukcji MMX.

pentiumpro
Procesor Intel Pentium Pro.

i686
Kiedy jest używany z -Marsz, używany jest zestaw instrukcji Pentium Pro, więc kod działa
na wszystkich układach rodziny i686. W przypadku użycia z -mtune, ma to samo znaczenie co
ogólny.

pentium2
Procesor Intel Pentium II oparty na rdzeniu Pentium Pro z obsługą zestawu instrukcji MMX.

pentium3
pentium3m
Procesor Intel Pentium III oparty na rdzeniu Pentium Pro z zestawem instrukcji MMX i SSE
Wsparcie.

pentium-m
Intel Pentium M; energooszczędna wersja procesora Intel Pentium III z MMX, SSE i SSE2
obsługa zestawu instrukcji. Używany przez notebooki Centrino.

pentium4
pentium4m
Procesor Intel Pentium 4 z obsługą zestawu instrukcji MMX, SSE i SSE2.

Prescott
Ulepszona wersja procesora Intel Pentium 4 z instrukcjami MMX, SSE, SSE2 i SSE3
ustaw wsparcie.

nocona
Ulepszona wersja procesora Intel Pentium 4 z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2 i
Obsługa zestawu instrukcji SSE3.

core2
Procesor Intel Core 2 z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2, SSE3 i SSSE3
obsługa zestawu instrukcji.

nehalem
Procesor Intel Nehalem z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Obsługa zestawu instrukcji SSE4.2 i POPCNT.

Westmere
Procesor Intel Westmere z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Obsługa zestawu instrukcji SSE4.2, POPCNT, AES i PCLMUL.

piaszczysty most
Procesor Intel Sandy Bridge z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2, SSE3, SSSE3,
Obsługa zestawu instrukcji SSE4.1, SSE4.2, POPCNT, AVX, AES i PCLMUL.

Ivybridge
Procesor Intel Ivy Bridge z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Zestaw instrukcji SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND i F16C
Wsparcie.

Haswell
Procesor Intel Haswell z rozszerzeniami 64-bitowymi, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2
i obsługa zestawu instrukcji F16C.

szeroka
Procesor Intel Broadwell z rozszerzeniami 64-bitowymi, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
Obsługa zestawu instrukcji F16C, RDSEED, ADCX i PREFETCHW.

Bonnelowa
Procesor Intel Bonnell z rozszerzeniami 64-bitowymi, MOVBE, MMX, SSE, SSE2, SSE3 i SSSE3
obsługa zestawu instrukcji.

Silvermont
Procesor Intel Silvermont z rozszerzeniami 64-bitowymi, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
Obsługa zestawu instrukcji SSE4.1, SSE4.2, POPCNT, AES, PCLMUL i RDRND.

knl Procesor Intel Knight's Landing z rozszerzeniami 64-bitowymi, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER i AVX512CD
obsługa zestawu instrukcji.

k6 Procesor AMD K6 z obsługą zestawu instrukcji MMX.

k6-2
k6-3
Ulepszone wersje procesora AMD K6 z MMX i 3DNow! obsługa zestawu instrukcji.

Athlon
Athlon-Tbird
Procesor AMD Athlon z MMX, 3dNOW!, ulepszonym 3DNow! i instrukcje pobierania wstępnego SSE
Wsparcie.

atlon-4
athlon-xp
Athlon-MP
Ulepszony procesor AMD Athlon z MMX, 3DNow!, ulepszony 3DNow! i pełna instrukcja SSE
ustaw wsparcie.

k8
Opteron
atlon64
athlon-fx
Procesory oparte na rdzeniu AMD K8 z obsługą zestawu instrukcji x86-64, w tym
procesory AMD Opteron, Athlon 64 i Athlon 64 FX. (To nadzbiory MMX,
SSE, SSE2, 3DNow!, ulepszone 3DNow! i rozszerzenia zestawu instrukcji 64-bitowych).

k8-sse3
opteron-sse3
athlon64-sse3
Ulepszone wersje rdzeni AMD K8 z obsługą zestawu instrukcji SSE3.

amdfam10
Barcelona
Procesory oparte na rdzeniach AMD Family 10h z obsługą zestawu instrukcji x86-64. (Ten
nadzbiory MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, ulepszone 3DNow!, ABM i 64-bit
rozszerzenia zestawu instrukcji).

bdwer1
Procesory oparte na rdzeniach AMD Family 15h z obsługą zestawu instrukcji x86-64. (Ten
nadzbiory FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM i rozszerzenia zestawu instrukcji 64-bitowych.)

bdwer2
Procesory z rdzeniem 15h z rodziny AMD z obsługą zestawu instrukcji x86-64. (Ten
nadzbiory BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM i 64-bitowy zestaw instrukcji
rozszerzenia.)

bdwer3
Procesory z rdzeniem 15h z rodziny AMD z obsługą zestawu instrukcji x86-64. (Ten
nadzbiory BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM i zestaw instrukcji 64-bitowych
rozszerzenia.

bdwer4
Procesory z rdzeniem 15h z rodziny AMD z obsługą zestawu instrukcji x86-64. (Ten
nadzbiory BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM i
64-bitowe rozszerzenia zestawu instrukcji.

btver1
Procesory oparte na rdzeniach AMD Family 14h z obsługą zestawu instrukcji x86-64. (Ten
nadzbiory MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM i 64-bitowy zestaw instrukcji
rozszerzenia.)

btver2
Procesory oparte na rdzeniach AMD Family 16h z obsługą zestawu instrukcji x86-64. Ten
obejmuje MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX i rozszerzenia zestawu instrukcji 64-bitowych.

wciągarka-c6
Procesor IDT WinChip C6, traktowany tak samo jak i486 z dodatkowym zestawem instrukcji MMX
Wsparcie.

wciągarka2
Procesor IDT WinChip 2, traktowany tak samo jak i486 z dodatkowymi MMX i 3DNow!
obsługa zestawu instrukcji.

c3 Procesor VIA C3 z MMX i 3DNow! obsługa zestawu instrukcji. (Żadne planowanie nie jest
zaimplementowany dla tego chipa.)

c3-2
Procesor VIA C3-2 (Nehemiah/C5XL) z obsługą zestawu instrukcji MMX i SSE. (Nie
planowanie jest zaimplementowane dla tego chipa.)

geoda
Wbudowany procesor AMD Geode z MMX i 3DNow! obsługa zestawu instrukcji.

-mtune=typ procesora
Dostrój do typ procesora wszystko, co dotyczy wygenerowanego kodu, z wyjątkiem ABI
oraz zestaw dostępnych instrukcji. Podczas wybierania konkretnego typ procesora harmonogramy
rzeczy odpowiednio dla tego konkretnego układu, kompilator nie generuje żadnego kodu
które nie mogą działać na domyślnym typie maszyny, chyba że używasz a -marzec=typ procesora opcja.
Na przykład, jeśli GCC jest skonfigurowane dla i686-pc-linux-gnu, to -mtune=pentium4 generuje
kod, który jest dostosowany do Pentium 4, ale nadal działa na maszynach i686.

Wybory dla typ procesora są takie same jak dla -Marsz, Dodatkowo -mtune obsługuje 2
dodatkowe opcje dla typ procesora:

ogólny
Twórz kod zoptymalizowany pod kątem najpopularniejszych procesorów IA32/AMD64/EM64T. Jeśli ty
znać procesor, na którym będzie działał twój kod, powinieneś użyć odpowiedniego
-mtune or -Marsz opcja zamiast -mtune=ogólny. Ale jeśli nie wiesz
dokładnie to, co będą mieli użytkownicy procesora Twojej aplikacji, powinieneś użyć tego
opcja.

W miarę wdrażania nowych procesorów na rynku zachowanie tej opcji
ulegnie zmianie. Dlatego jeśli uaktualnisz do nowszej wersji GCC, generowanie kodu
kontrolowane przez tę opcję zmienią się, aby odzwierciedlić procesory, które są najbardziej
powszechne w momencie wydania tej wersji GCC.

Nie ma -marzec=ogólny opcja, ponieważ -Marsz wskazuje instrukcję ustawić
kompilator może używać i nie ma ogólnego zestawu instrukcji, który mógłby zastosować do wszystkich
procesory. W przeciwieństwie, -mtune wskazuje podmiot przetwarzający (lub w tym przypadku
zbiór procesorów), dla których kod jest zoptymalizowany.

intel
Twórz kod zoptymalizowany pod kątem najnowszych procesorów Intel, którymi są Haswell
i Silvermont dla tej wersji GCC. Jeśli znasz procesor, na którym twój kod?
uruchomi się, powinieneś użyć odpowiedniego -mtune or -Marsz opcja zamiast
-mtune=intel. Ale jeśli chcesz, aby Twoja aplikacja działała lepiej na obu Haswell
i Silvermont, powinieneś użyć tej opcji.

W miarę wdrażania nowych procesorów Intel na rynku, zachowanie tego
opcja się zmieni. Dlatego jeśli uaktualnisz do nowszej wersji GCC, kod
generacja kontrolowana przez tę opcję zmieni się, aby odzwierciedlić najnowsze informacje Intel
procesorów w momencie wydania tej wersji GCC.

Nie ma -marzec=wywiad opcja, ponieważ -Marsz wskazuje instrukcję ustawić
kompilator może używać i nie ma wspólnego zestawu instrukcji, który mógłby mieć zastosowanie do wszystkich
procesory. W przeciwieństwie, -mtune wskazuje podmiot przetwarzający (lub w tym przypadku
zbiór procesorów), dla których kod jest zoptymalizowany.

-mcpu=typ procesora
Przestarzały synonim słowa -mtune.

-mfpmath=jednostka
Generuj arytmetykę zmiennoprzecinkową dla wybranej jednostki jednostka. Wybory dla jednostka należą:

387 Użyj standardowego koprocesora zmiennoprzecinkowego 387 obecnego w większości chipów
i emulowane w inny sposób. Kod skompilowany z tą opcją działa prawie wszędzie.
Tymczasowe wyniki są obliczane z 80-bitową precyzją zamiast precyzją
określony przez typ, co daje nieco inne wyniki w porównaniu z większością
inne żetony. Widzieć -sklep-float bardziej szczegółowy opis.

Jest to domyślny wybór dla celów x86-32.

es Użyj skalarnych instrukcji zmiennoprzecinkowych obecnych w zestawie instrukcji SSE. Ten
zestaw instrukcji jest obsługiwany przez układy Pentium III i nowsze oraz w linii AMD
przez układy Athlon-4, Athlon XP i Athlon MP. Wcześniejsza wersja SSE
zestaw instrukcji obsługuje tylko arytmetykę pojedynczej precyzji, stąd podwójne i
arytmetyka o rozszerzonej precyzji jest nadal wykonywana przy użyciu 387. Późniejsza wersja, obecna
tylko w układach Pentium 4 i AMD x86-64 obsługuje również arytmetykę podwójnej precyzji.

W przypadku kompilatora x86-32 musisz użyć -marzec=typ procesora, -mss or -msse2 przełącza na
włącz rozszerzenia SSE i włącz tę opcję. Dla kompilatora x86-64,
te rozszerzenia są domyślnie włączone.

Otrzymany kod powinien być w większości przypadków znacznie szybszy i
uniknąć problemów z niestabilnością numeryczną kodu 387, ale może zepsuć niektóre istniejące
kod, który oczekuje, że tymczasowe pliki będą miały 80 bitów.

Jest to domyślny wybór dla kompilatora x86-64.

s, 387
sse+387
obie
Spróbuj użyć obu zestawów instrukcji jednocześnie. To skutecznie podwaja
ilość dostępnych rejestrów, a na chipach z osobnymi jednostkami wykonawczymi dla 387
a także SSE zasobów wykonawczych. Używaj tej opcji ostrożnie, ponieważ nadal jest
eksperymentalne, ponieważ alokator rejestrów GCC nie modeluje oddzielnie
jednostki funkcjonalne dobrze, co skutkuje niestabilną wydajnością.

-masm=dialekt
Wyprowadź instrukcje montażu przy użyciu wybranych dialekt. Wpływa również na to, który dialekt jest
używane dla podstawowego „asm” i rozszerzonego „asm”. Obsługiwane opcje (w kolejności dialektu) to do
or intel, Wartość domyślna to do. Darwin nie obsługuje intel.

-mieee-fp
-mno-ieee-fp
Kontroluj, czy kompilator używa porównań zmiennoprzecinkowych IEEE. Te
prawidłowo obsłużyć przypadek, w którym wynik porównania jest nieuporządkowany.

-msoft-float
Generuj dane wyjściowe zawierające wywołania bibliotek dla zmiennoprzecinkowych.

Ostrzeżenie: wymagane biblioteki nie są częścią GCC. Zwykle obiekty
używany jest zwykły kompilator C maszyny, ale nie można tego zrobić bezpośrednio w
kompilacja. Musisz dokonać własnych ustaleń, aby zapewnić odpowiednią bibliotekę
funkcje do kompilacji krzyżowej.

Na maszynach, na których funkcja zwraca wyniki zmiennoprzecinkowe w rejestrze 80387
stos, niektóre zmiennoprzecinkowe kody operacji mogą być emitowane, nawet jeśli -msoft-float Jest używane.

-mno-fp-ret-w-387
Nie używaj rejestrów FPU do zwracanych wartości funkcji.

Zwykła konwencja wywoływania ma funkcje zwracające wartości typu „float” i „double”
w rejestrze FPU, nawet jeśli nie ma FPU. Chodzi o to, że system operacyjny
powinien emulować FPU.

Opcja -mno-fp-ret-w-387 powoduje, że takie wartości są zwracane w zwykłym CPU
zamiast rejestrów.

-mno-fancy-matematyka-387
Niektóre emulatory 387 nie obsługują instrukcji „sin”, „cos” i „sqrt” dla
387. Określ tę opcję, aby uniknąć generowania tych instrukcji. Ta opcja jest
domyślnie w OpenBSD i NetBSD. Ta opcja jest zastępowana, gdy -Marsz wskazuje to
docelowy procesor zawsze ma FPU, więc instrukcja nie wymaga emulacji.
Te instrukcje nie są generowane, chyba że używasz również
-funsafe-matematyczne optymalizacje przełącznik.

-złośliwy-podwójny
-mno-wyrównaj-podwójne
Kontroluj, czy GCC wyrównuje zmienne „double”, „long double” i „long long” na a
granica dwóch słów lub granica jednego słowa. Dopasowywanie „podwójnych” zmiennych do dwóch słów
Border tworzy kod, który działa nieco szybciej na Pentium kosztem więcej
pamięć.

Na x86-64, -złośliwy-podwójny jest domyślnie włączone.

Ostrzeżenie: jeśli używasz -złośliwy-podwójny przełącznik, struktury zawierające powyższe typy
są wyrównane inaczej niż opublikowane specyfikacje binarnego interfejsu aplikacji
dla x86-32 i nie są kompatybilne binarnie ze strukturami w kodzie skompilowanym bez
ten przełącznik.

-m96bit-long-double
-m128bit-long-double
Przełączniki te kontrolują rozmiar typu „long double”. Plik binarny aplikacji x86-32
interfejs określa rozmiar na 96 bitów, więc -m96bit-long-double jest domyślnym w
Tryb 32-bitowy.

Nowoczesne architektury (Pentium i nowsze) wolą „długie podwójne” być wyrównane do 8-
lub 16-bajtowa granica. W tablicach lub strukturach zgodnych z ABI nie jest to
możliwy. Więc określając -m128bit-long-double wyrównuje „długie podwójne” do 16-bajtów
granicę, dopełniając „długi podwójny” dodatkowym 32-bitowym zerem.

W kompilatorze x86-64 -m128bit-long-double jest domyślnym wyborem jako jego ABI
określa, że ​​„długi podwójny” jest wyrównany do granicy 16-bajtowej.

Zauważ, że żadna z tych opcji nie zapewnia dodatkowej precyzji w stosunku do standardu x87
80 bitów dla „długiego podwójnego”.

Ostrzeżenie: jeśli zastąpisz domyślną wartość dla docelowego ABI, zmieni to rozmiar
struktur i tablic zawierających zmienne „long double”, a także modyfikowanie
konwencja wywoływania funkcji dla funkcji przyjmujących "długie podwójne". Dlatego nie są
kompatybilny z kodem binarnym z kodem skompilowanym bez tego przełącznika.

-mlong-podwójny-64
-mlong-podwójny-80
-mlong-podwójny-128
Przełączniki te kontrolują rozmiar typu „long double”. Rozmiar 64 bitów sprawia, że
typ „long double” jest odpowiednikiem typu „double”. Jest to ustawienie domyślne dla wersji 32-bitowej
Biblioteka Bionic C. Rozmiar 128 bitów sprawia, że ​​typ „long double” jest równoważny
Typ „__float128”. Jest to ustawienie domyślne dla 64-bitowej biblioteki Bionic C.

Ostrzeżenie: jeśli zastąpisz domyślną wartość dla docelowego ABI, zmieni to rozmiar
struktur i tablic zawierających zmienne „long double”, a także modyfikowanie
konwencja wywoływania funkcji dla funkcji przyjmujących "długie podwójne". Dlatego nie są
kompatybilny z kodem binarnym z kodem skompilowanym bez tego przełącznika.

-malign-data=rodzaj
Kontroluj, jak GCC wyrównuje zmienne. Obsługiwane wartości dla rodzajkompatybil używa zwiększone
zgodność wartości wyrównania używa GCC 4.8 i wcześniejszych, abi używa wartości wyrównania jako
określone przez psABI, oraz pamięć podręczna używa zwiększonej wartości wyrównania, aby dopasować
rozmiar linii pamięci podręcznej. kompatybil jest wartością domyślną.

-próg-mlarge-data-=próg
Gdy -mcmodel=średni jest określony, obiekty danych większe niż próg są umieszczone w
sekcja dużych danych. Ta wartość musi być taka sama we wszystkich obiektach połączonych z
binarny i domyślnie 65535.

-mrtd
Użyj innej konwencji wywoływania funkcji, w której funkcje, które przyjmują ustaloną
liczba argumentów zwraca się z „ret liczba" instrukcja, która wyskakuje z ich argumentów
podczas powrotu. Oszczędza to jedną instrukcję dzwoniącego, ponieważ nie ma potrzeby
pop argumenty tam.

Możesz określić, że pojedyncza funkcja jest wywoływana z tą sekwencją wywołań za pomocą
atrybut funkcji "stdcall". Możesz także nadpisać -mrtd opcja za pomocą
atrybut funkcji "cdecl".

Ostrzeżenie: ta konwencja wywoływania jest niezgodna z tą zwykle używaną w Uniksie,
więc nie możesz go użyć, jeśli musisz wywoływać biblioteki skompilowane za pomocą kompilatora Unix.

Ponadto musisz dostarczyć prototypy funkcji dla wszystkich funkcji, które przyjmują zmienną
liczba argumentów (w tym "printf"); w przeciwnym razie generowany jest nieprawidłowy kod dla
wywołania tych funkcji.

Ponadto, jeśli wywołasz funkcję ze zbyt dużą liczbą, wyniknie bardzo niepoprawny kod
argumenty. (Zwykle dodatkowe argumenty są nieszkodliwie ignorowane.)

-mregparm=num
Kontroluj, ile rejestrów jest używanych do przekazywania argumentów całkowitych. Domyślnie nie
rejestry są używane do przekazywania argumentów i można użyć co najwyżej 3 rejestrów. Możesz
kontroluj to zachowanie dla określonej funkcji za pomocą atrybutu funkcji
„regparma”.

Ostrzeżenie: jeśli użyjesz tego przełącznika, i num jest niezerowe, musisz zbudować wszystkie moduły
o tej samej wartości, w tym wszelkie biblioteki. Obejmuje to biblioteki systemowe i
moduły startowe.

-msseregparm
Użyj konwencji przekazywania rejestru SSE dla argumentów zmiennoprzecinkowych i podwójnych oraz wartości zwracanych.
Możesz kontrolować to zachowanie dla określonej funkcji za pomocą atrybutu funkcji
„seregparma”.

Ostrzeżenie: jeśli użyjesz tego przełącznika, musisz zbudować wszystkie moduły o tej samej wartości,
w tym wszelkie biblioteki. Obejmuje to biblioteki systemowe i moduły startowe.

-mvect8-ret-in-mem
Zwraca 8-bajtowe wektory w pamięci zamiast rejestrów MMX. To jest domyślnie włączone
Solaris@tie{}8 i 9 oraz VxWorks w celu dopasowania ABI kompilatorów Sun Studio do
wersja 12. Późniejsze wersje kompilatora (począwszy od Studio 12 Update@tie{}1) podążają
ABI używany przez inne cele x86, który jest domyślny w Solaris@tie{}10 ​​i nowszych.
Only użyj tej opcji, jeśli chcesz zachować zgodność z istniejącym kodem wyprodukowanym przez
poprzednie wersje kompilatora lub starsze wersje GCC.

-mpc32
-mpc64
-mpc80
Ustaw dokładność zmiennoprzecinkową 80387 na 32, 64 lub 80 bitów. Kiedy -mpc32 jest specyficzne,
znaczenie wyników operacji zmiennoprzecinkowych zaokrągla się do 24 bitów
(Pojedyncza precyzja); -mpc64 zaokrągla znaczące wyniki liczb zmiennoprzecinkowych
operacje do 53 bitów (podwójna precyzja) i -mpc80 zaokrągla znaczenie wyników
operacji zmiennoprzecinkowych do 64 bitów (rozszerzona podwójna precyzja), czyli
domyślny. Gdy ta opcja jest używana, operacje zmiennoprzecinkowe o wyższej dokładności są
niedostępne dla programisty bez wyraźnego ustawienia słowa sterującego FPU.

Ustawienie zaokrąglania operacji zmiennoprzecinkowych na mniej niż domyślne 80 bitów może
przyspieszyć niektóre programy o 2% lub więcej. Zauważ, że niektóre biblioteki matematyczne zakładają, że
operacje zmiennoprzecinkowe o rozszerzonej precyzji (80-bitowe) są domyślnie włączone; rutyny
w takich bibliotekach może dojść do znacznej utraty dokładności, zazwyczaj z powodu tak-
nazywane „katastroficznym anulowaniem”, gdy ta opcja jest używana do ustawienia precyzji na
mniej niż rozszerzona precyzja.

-mstackrealign
Wyrównaj stos na wejściu. Na x86 -mstackrealign opcja generuje
alternatywny prolog i epilog, które w razie potrzeby dostosowują stos czasu wykonywania. Ten
obsługuje mieszanie starszych kodów, które zachowują 4-bajtowe wyrównanie stosu z nowoczesnymi kodami, które:
zachowaj 16-bajtowe wyrównanie stosu dla zgodności z SSE. Zobacz także atrybut
„force_align_arg_pointer”, ma zastosowanie do poszczególnych funkcji.

-mpreferred-stos-granica=num
Staraj się, aby granica stosu była wyrównana do 2 podniesionej do num granica bajtów. Gdyby
-mpreferred-stos-granica nie jest określony, wartość domyślna to 4 (16 bajtów lub 128 bitów).

Ostrzeżenie: Podczas generowania kodu dla architektury x86-64 z rozszerzeniami SSE
wyłączone, -mpreferred-stos-granica=3 może być używany do wyrównania granicy stosu
do granicy 8 bajtów. Ponieważ x86-64 ABI wymaga 16-bajtowego wyrównania stosu, jest to ABI
niekompatybilny i przeznaczony do użytku w kontrolowanym środowisku, w którym jest miejsce na stos
ważne ograniczenie. Ta opcja prowadzi do błędnego kodu, gdy funkcje skompilowane z 16
wyrównanie stosu bajtów (takie jak funkcje ze standardowej biblioteki) są wywoływane z
niewyrównany stos. W takim przypadku instrukcje SSE mogą prowadzić do nieprawidłowego dostępu do pamięci
majdan. Ponadto zmienne argumenty są obsługiwane niepoprawnie dla wyrównania 16 bajtów
obiekty (w tym x87 long double i __int128), co prowadzi do błędnych wyników. Musisz
zbuduj wszystkie moduły za pomocą -mpreferred-stos-granica=3, w tym wszelkie biblioteki. Ten
zawiera biblioteki systemowe i moduły startowe.

-mincoming-stack-boundary=num
Załóżmy, że nadchodzący stos jest wyrównany do 2 podniesionych do num granica bajtów. Gdyby
-mincoming-stos-granica nie jest określony, określony przez
-mpreferred-stos-granica Jest używane.

W Pentium i Pentium Pro wartości „double” i „long double” powinny być wyrównane do
8-bajtowa granica (patrz -złośliwy-podwójny) lub mają znaczną wydajność w czasie wykonywania
kary. W Pentium III typ danych Streaming SIMD Extension (SSE) „__m128” może:
nie działa poprawnie, jeśli nie jest wyrównany do 16 bajtów.

Aby zapewnić prawidłowe wyrównanie tych wartości na stosie, granica stosu musi być jak
wyrównane zgodnie z wymaganiami dowolnej wartości przechowywanej na stosie. Ponadto każda funkcja
musi być generowany w taki sposób, aby utrzymać stos wyrównany. W ten sposób wywołując funkcję
skompilowany z wyższą preferowaną granicą stosu z funkcji skompilowanej z niższym
preferowana granica stosu najprawdopodobniej źle wyrówna stos. Zaleca się
biblioteki korzystające z wywołań zwrotnych zawsze używają ustawienia domyślnego.

To dodatkowe wyrównanie zajmuje dodatkowe miejsce na stosie i ogólnie zwiększa kod
rozmiar. Kod wrażliwy na wykorzystanie przestrzeni stosu, taki jak systemy wbudowane i
jądra systemu operacyjnego, mogą chcieć zmniejszyć preferowane wyrównanie do
-mpreferred-stos-granica=2.

-mmmx
-mss
-msse2
-msse3
-msss3
-msse4
-msse4a
-msse4.1
-msse4.2
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-msza
-maes
-mpclmul
-mclfushopt
-mfsgsbase
-mrdrnd
-mf16c
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dnow
-mpopcnt
-mabm
-mbmi
-mbmi2
-mlzcnt
-mfxsr
-mxsave
-mxsaveopt
-mxsavec
-mxsaves
-mrtm
-mtbm
-mmpx
-mmwaitx
Przełączniki te umożliwiają korzystanie z instrukcji w MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE,
RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI, FXSR, XSAVE, XSAVEOPT, LZCNT,
RTM, MPX, MWAITX lub 3DNow! rozszerzone zestawy instrukcji. Każdy ma odpowiedni -mnie-
możliwość wyłączenia korzystania z tych instrukcji.

Te rozszerzenia są również dostępne jako funkcje wbudowane: patrz x86 Wbudowany Funkcje,
aby uzyskać szczegółowe informacje na temat funkcji włączanych i wyłączanych przez te przełączniki.

Aby automatycznie wygenerować instrukcje SSE/SSE2 z kodu zmiennoprzecinkowego (w przeciwieństwie do
do 387 instrukcji), patrz -mfpmath=sse.

GCC wciska instrukcje SSEx, gdy -mavx jest używany. Zamiast tego generuje nowy AVX
instrukcje lub równoważność AVX dla wszystkich instrukcji SSEx w razie potrzeby.

Te opcje umożliwiają GCC używanie tych rozszerzonych instrukcji w generowanym kodzie, nawet
bez -mfpmath=sse. Aplikacje, które wykonują wykrywanie procesora w czasie wykonywania, muszą się kompilować
oddzielne pliki dla każdej obsługiwanej architektury, używając odpowiednich flag. w
w szczególności plik zawierający kod wykrywania procesora powinien być skompilowany bez
te opcje.

-mdump-tune-features
Ta opcja nakazuje GCC zrzucić nazwy funkcji dostrajania wydajności x86 i
Ustawienia domyślne. Nazwy mogą być używane w -mtune-ctrl=lista funkcji.

-mtune-ctrl=lista funkcji
Ta opcja służy do precyzyjnej kontroli ziarna funkcji generowania kodu x86.
lista funkcji to oddzielona przecinkami lista cecha nazwy. Zobacz też
-mdump-tune-features. Jeśli określono, cecha jest włączony, jeśli nie został poprzedzony
z ^, w przeciwnym razie jest wyłączony. -mtune-ctrl=lista funkcji jest przeznaczony do użytku
przez programistów GCC. Używanie go może prowadzić do ścieżek kodu, które nie są objęte testowaniem i mogą
potencjalnie spowodować błędy ICE kompilatora lub błędy w czasie wykonywania.

-mno-domyślny
Ta opcja nakazuje GCC wyłączenie wszystkich dostrajanych funkcji. Zobacz też
-mtune-ctrl=lista funkcji dzięki -mdump-tune-features.

-mcld
Ta opcja nakazuje GCC wyemitowanie instrukcji "cld" w prologu funkcji
które używają instrukcji ciągów. Instrukcje ciągu zależą od flagi DF do wyboru
pomiędzy trybem autoinkrementacji lub autodekrementacji. Podczas gdy ABI określa flagę DF jako
być wyczyszczone przy wejściu do funkcji, niektóre systemy operacyjne naruszają tę specyfikację, nie
wyczyszczenie flagi DF w ich dyspozytorach wyjątków. Programem obsługi wyjątków może być
wywoływane z ustawioną flagą DF, która prowadzi do trybu z niewłaściwym kierunkiem, gdy string
używane są instrukcje. Ta opcja może być domyślnie włączona w 32-bitowych celach x86 przez
konfigurowanie GCC za pomocą --enable-cld skonfigurować opcję. Generowanie „cld”
instrukcje można pominąć za pomocą -mno-cld w tym przypadku opcja kompilatora.

-mvzeroupper
Ta opcja nakazuje GCC wyemitowanie instrukcji "vzeroupper" przed transferem
kontrolować przepływ z funkcji, aby zminimalizować karę za przejście z AVX do SSE
jak usunąć niepotrzebne elementy wewnętrzne „zeroupper”.

-mprefer-avx128
Ta opcja nakazuje GCC użycie 128-bitowych instrukcji AVX zamiast 256-bitowego AVX
instrukcje w automatycznym wektoryzatorze.

-mcx16
Ta opcja umożliwia GCC generowanie instrukcji "CMPXCHG16B". „CMPXCHG16B” umożliwia
dla operacji atomowych na 128-bitowych typach danych double quadword (lub oword). To jest
przydatne dla liczników o wysokiej rozdzielczości, które mogą być aktualizowane przez wiele procesorów (lub
rdzenie). Ta instrukcja jest generowana jako część atomowych funkcji wbudowanych: patrz
__synchronizacja Wbudowane or __atomowy Wbudowane dla szczegółów.

-msahf
Ta opcja umożliwia generowanie instrukcji "SAHF" w kodzie 64-bitowym. Wczesne informacje wywiadowcze
Procesory Pentium 4 z obsługą Intel 64, przed wprowadzeniem kroku Pentium 4 G1
w grudniu 2005 r. brakowało instrukcji „LAHF” i „SAHF”, które są obsługiwane przez
AMD64. Są to odpowiednio instrukcje ładowania i przechowywania dla określonych flag stanu.
W trybie 64-bitowym instrukcja „SAHF” służy do optymalizacji „fmod”, „drem” i
wbudowane funkcje „reszta”; zobaczyć Inne Wbudowane dla szczegółów.

-mmovbe
Ta opcja umożliwia użycie instrukcji "movbe" do zaimplementowania "__builtin_bswap32"
i „__builtin_bswap64”.

-mcrc32
Ta opcja włącza wbudowane funkcje "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" i "__builtin_ia32_crc32di", aby
wygeneruj instrukcję maszynową "crc32".

-mrecip
Ta opcja umożliwia korzystanie z instrukcji „RCPSS” i „RSQRTSS” (i ich wektoryzacji
warianty „RCPPS” i „RSQRTPS”) z dodatkowym krokiem Newtona-Raphsona w celu zwiększenia
precyzja zamiast „DIVSS” i „SQRTSS” (i ich zwektoryzowanych wariantów) dla pojedynczych
precyzyjne argumenty zmiennoprzecinkowe. Te instrukcje są generowane tylko wtedy, gdy
-funsafe-matematyczne optymalizacje jest włączony razem z -tylko matematyka skończona dzięki
-fno-trapping-matematyka. Zauważ, że chociaż przepustowość sekwencji jest wyższa niż
przepustowość instrukcji nieodwrotnej, dokładność sekwencji może być
zmniejszone o maksymalnie 2 ulp (tzn. odwrotność 1.0 równa się 0.99999994).

Zauważ, że GCC implementuje „1.0f/sqrtf(x)" w kategoriach „RSQRTSS” (lub „RSQRTPS”) już
z -fast-matematyka (lub powyższą kombinację opcji) i nie potrzebuje -mrecip.

Zauważ również, że GCC emituje powyższą sekwencję z dodatkowym krokiem Newtona-Raphsona dla
zwektoryzowany dzielenie jednoliczbowe i zwektoryzowany „sqrtf (x)" już z -fast-matematyka
(lub powyższą kombinację opcji) i nie potrzebuje -mrecip.

-mrecip=optować
Ta opcja kontroluje, które odwrotne instrukcje oszacowania mogą być użyte. optować jest
lista opcji oddzielonych przecinkami, które mogą być poprzedzone znakiem ! aby odwrócić opcję:

cała kolekcja Włącz wszystkie instrukcje szacunkowe.

domyślnym
Włącz domyślne instrukcje, równoważne -mrecip.

Żaden
Wyłącz wszystkie instrukcje szacunkowe, równoważne z -mno-recept.

div Włącz aproksymację dla dzielenia skalarnego.

vec-div
Włącz aproksymację dla podziału wektorowego.

sqrt
Włącz aproksymację skalarnego pierwiastka kwadratowego.

vec-sqrt
Włącz aproksymację dla zwektoryzowanego pierwiastka kwadratowego.

Na przykład -mrecip=wszystkie,!sqrt umożliwia wszystkie wzajemne przybliżenia,
z wyjątkiem pierwiastka kwadratowego.

-mveclibabi=rodzaj
Określa typ ABI, który ma być używany do wektoryzacji elementów wewnętrznych przy użyciu biblioteki zewnętrznej.
Obsługiwane wartości dla rodzajsvml dla krótkiej biblioteki matematycznej Intela i aml
dla biblioteki rdzeni matematycznych AMD. Aby skorzystać z tej opcji, oba -ftree-wektoryzuj dzięki
-funsafe-matematyczne optymalizacje muszą być włączone i zgodne z SVML lub ACML ABI
bibliotekę należy określić w momencie łączenia.

GCC obecnie emituje wywołania „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" i "vmlsAcos4" dla odpowiedniego typu funkcji, gdy -mveclibabi=svml is
używany i "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
„__vrs4_log2f”, „__vrs4_log10f” i „__vrs4_powf” dla odpowiedniego typu funkcji
gdy -mveclibabi=acml Jest używane.

-mabi=Nazwa
Wygeneruj kod dla określonej konwencji wywoływania. Dopuszczalne wartości to system dla
ABI używany na GNU/Linuksie i innych systemach, oraz ms dla Microsoft ABI. ten
domyślnie używa się Microsoft ABI podczas kierowania na Microsoft Windows i SysV ABI
we wszystkich innych systemach. Możesz kontrolować to zachowanie dla określonych funkcji, używając
atrybuty funkcji „ms_abi” i „sysv_abi”.

-mtls-dialekt=rodzaj
Wygeneruj kod, aby uzyskać dostęp do pamięci lokalnej wątku za pomocą gnu antylopa or gnu2 konwencje. gnu antylopa
jest konserwatywnym domyślnym; gnu2 jest bardziej wydajny, ale może dodać kompilację i uruchomienie
wymagania czasowe, których nie można spełnić we wszystkich systemach.

-push-args
-mno-push-args
Użyj operacji PUSH do przechowywania parametrów wychodzących. Ta metoda jest krótsza i zwykle
równie szybka jak metoda wykorzystująca operacje SUB/MOV i jest domyślnie włączona. W niektórych
przypadki wyłączenia mogą poprawić wydajność z powodu ulepszonego harmonogramu i zmniejszonego
zależności.

-maccumulate-outgoing-args
Jeśli ta opcja jest włączona, maksymalna ilość miejsca wymagana dla argumentów wychodzących jest obliczana w
prolog funkcji. Jest to szybsze na większości nowoczesnych procesorów z powodu zmniejszonej
zależności, ulepszone planowanie i zmniejszone użycie stosu, gdy preferowany stos
granica nie jest równa 2. Wadą jest znaczny wzrost rozmiaru kodu. Ten
zmiana implikuje -mno-push-args.

-mwątki
Obsługa bezpiecznej wątkowo obsługi wyjątków w MinGW. Programy, które opierają się na bezpiecznym wątkach
obsługa wyjątków musi skompilować i połączyć cały kod z -mwątki opcja. Kiedy
kompilacja, -mwątki definiuje -D_MT; podczas linkowania łączy się w specjalnym pomocniku wątku
biblioteka -lmingwthrd który czyści dane dotyczące obsługi wyjątków dla poszczególnych wątków.

-mno-wyrównaj-stringops
Nie wyrównuj miejsca docelowego operacji na ciągach wbudowanych. Ten przełącznik redukuje kod
rozmiar i poprawia wydajność w przypadku, gdy miejsce docelowe jest już wyrównane, ale GCC
nie wie o tym.

-minline-all-stringops
Domyślnie GCC wstawia operacje na ciągach znaków tylko wtedy, gdy wiadomo, że miejscem docelowym jest
wyrównane do co najmniej 4-bajtowej granicy. Umożliwia to więcej inliningu i zwiększa kod
rozmiar, ale może poprawić wydajność kodu, który zależy od szybkich "memcpy", "strlen" i
„memset” dla krótkich długości.

-minline-stringops-dynamicznie
W przypadku operacji na ciągach znaków o nieznanym rozmiarze użyj kontroli w czasie wykonywania z kodem wbudowanym dla małych
bloki i biblioteka wezwania do dużych bloków.

-mstringop-strategia=ALG
Zastąp wewnętrzną heurystykę decyzyjną dla konkretnego algorytmu, który ma być używany do
wstawianie operacji na ciągach. Dozwolone wartości dla ALG należą:

rep_byte
rep_4byte
rep_8byte
Rozwiń za pomocą prefiksu i386 „rep” o określonym rozmiarze.

pętla_bajtów
pętla
unrolled_loop
Rozwiń do wbudowanej pętli.

libcall
Zawsze korzystaj z telefonu do biblioteki.

-mmemcpy-strategia=strategia
Zastąp wewnętrzną heurystykę decyzji, aby zdecydować, czy „__builtin_memcpy” powinno być
wbudowany i jakiego algorytmu wbudowanego użyć, gdy oczekiwany rozmiar operacji kopiowania
jest znana. strategia to rozdzielona przecinkami lista ALG:największy rozmiar:dest_align trojaczki. ALG
jest określony w -mstringop-strategia, największy rozmiar określa maksymalny rozmiar w bajtach, z jakim
wbudowany algorytm ALG jest dozwolone. W przypadku ostatniej trójki największy rozmiar musi być „-1”. ten
największy rozmiar trojaczki na liście należy określić w kolejności rosnącej. ten
minimalny rozmiar w bajtach dla ALG wynosi 0 dla pierwszej trójki i "największy rozmiar + 1" !
poprzedni zakres.

-mmemset-strategia=strategia
Opcja jest podobn