Angielskifrancuskihiszpański

Ad


Ulubiona usługa OnWorks

g++-4.7 - Online w chmurze

Uruchom g++-4.7 u dostawcy darmowego hostingu OnWorks przez Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS

To jest polecenie g++-4.7, 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] [-str] [-Opoziom]
[-Wostrzec...] [-pedantyczny]
[-Ireż...] [-Lreż...]
[-Dmakro[=zdefiniuj]...] [-Umakro]
[-fopcja...] [-mmaszyna-opcja...]
[-o plik wyjściowy] [@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.

Połączenia 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: -dw 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 -fuuu byłby -fno-foo. Ten podręcznik dokumentuje tylko jeden z
te dwie formy, w zależności od tego, która z nich nie jest domyślna.

OPCJE


Option 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] -fdump-go-spec=filet

C Wybierz język 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 -fopenmp -fms-rozszerzenia -fplan9-rozszerzenia -trygrafy
-brak zintegrowanego-cpp -tradycyjny -tradycyjny-cpp -odłogiem-pojedyncza-precyzja
-fcond-niezgodność -konwersje-wektorów-lnu -fsigned-bitfields -fsigned-char
-zabawne-pola bitowe -zabawny-char

C + + Wybierz język Opcje
-fabi-wersja=n -fno-kontrola-dostępu -fcheck-nowy -fzachowaj-przestrzeń
-fconstexpr-głębokość=n -ffriend-zastrzyk -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-wbudowane -fnothrow-opc -fno-nazwy-operatorów -fno-opcjonalne-diags
-fpermisywny -fno-ładne-szablony -frepo -fno-rtti -fstats -głębokość wzorca=n
-fno-threadsafe-statics -bezpiecznik-cxa-atexit -fno-słaba -nostdinc++ -fno-default-inline
-widoczność-w-liniach-ukryta -kompatybilność-ms-widoczności -Wabi -Wkonwersja-null
-Wctor-dtor-prywatność -Wdelete-nie wirtualny-dtor -Zwężenie się -Niez wyjątkiem
-Wnon-virtual-tor -Przesyłka -Weffc++ -Wstrict-null-wartownik
-Wno-bez szablonu-znajomego -Wold-style-obsada -Woverloaded-wirtualny -Wno-pmf-konwersje
-Wsign-promocja

Objective-C i Cel-C++ Wybierz język 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 -zajęcia-objc-replace -fzero-link
-gen-decls -Wassign-przechwytywanie -Wno-protokół -Wselektor -Wstrict-selektor-dopasowanie
-Niezadeklarowany-selektor

Wybierz język Niezależny Opcje
-f-długość-wiadomości=n -fdiagnostyka-pokaż-lokalizację=[pewnego razu|każda linia]
-fno-diagnostics-show opcja

ostrzeżenie Opcje
- tylko fsyntax -fmax-błędy=n -pedantyczny -pedantyczne-błędy -w -Wextra -Ściana
-Wadres -Waggregate-zwrot Granice Warray -Wno-atrybuty
-Wno-wbudowane-makro-przedefiniowane -Wc++-kompatybilność -Wc++11-kompatybilność -Wcast-wyrównaj -Jakość Wcast
-Wchar-indeksy -Wstrzymany -Wkomentarz -Wkonwersja -Niezgodność zasięgu -Wno-cpp
-Wno-przestarzałe -Wno-przestarzałe-deklaracje -Wdisabled-optymalizacja -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-zawiera-nul
-Wno-format-dodatkowe-args -Wformat-niedosłowny -Wformat-zabezpieczenia -Wformat-y2k
-Wframe-większy-niż=len -Wno-free-non-heap-object -Wjump-miss-init
-Wigned-kwalifikatory -Mięczak -Wimplicit-deklaracja funkcji -Wimplicit-int
-Win-self -Wygraj -Wmoże-niezainicjowany -Wno-int-to-point-cast
-Wno-nieprawidłowe przesunięcie -Winvalid-pch -Większy-niż=len - Optymalizacje pętli Wunsafe
-Wlogiczna-op -Długo-długi -Wmain -Wmoże-niezainicjowany -Wmissing-szelkach
- Brakujące inicjatory pola -Brakujący-atrybut-formatu -Wmissing-include-katalogi
-Wno-chlapacze -Wno-wieloznakowy -Wnieważne -Bez przelewu -Struny Woverlength -Zapakowany
-Wpacked-bitfield-compat -Wyściółka -Nawiasy -Wpedantyczny-ms-format
-Wno-pedantyczny-ms-format -Wpointer-arytm -Wno-wskaźnik-do-oddania -Zbędne dekl
-Typ zwrotny -Wsekwencja-punkt -Cień -Porównaj znak -Konwersja znaku
-Ochraniacz stosu -Wstos-użycie=len -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-przepełnienie -Wstrict-przepełnienie=n -Wsugeruj atrybut=[czysty|const|bez powrotu]
-Wprzełącznik -Wswitch-domyślny -Wswitch-enum -Wsync-nand -Wsystem-nagłówki -trampoliny
-Wtrygrafy -Wtype-limity -Wundefa -Niezainicjowano -Nieznane-pragmy -Wno-pragmy
-Wunsuffixed-float-stałe -Nieużywany -Wunused-funkcja -Wunused-etykieta
-Wunused-local-typedefs -Wunused-parametr -Wno-niewykorzystany-wynik -Wunused-wartość
-Wunused-zmienna -Wunused-ale-set-parameter -Wunused-ale-set-variable
-Wvariadic-makra -Wvector-operacja-wydajność -Wvla -Wvolatile-var-rejestr-var
-Write-strings -Wzero-jako-null-stała-wskaźnika

C i Tylko cel C ostrzeżenie Opcje
-Wbad-funkcja-obsada -brakujące-deklaracje -Wbrakujący-typ-parametru
-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 -specyfikacja zrzutu -wywrotka -dumpwersja -fdbg-lista-cnt -fdbg-cnt=przeciw-
lista wartości -fdisable-ipa-nazwa_przepustki -fwyłącz-rtl-nazwa_przepustki -fwyłącz-rtl-przechodzić-
Nazwa=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-przepustki -fdump-statystyki -fdump-drzewo-wszystkie -fdump-tree-origin[-n]
-fdump-zoptymalizowany pod drzewo[-n] -fdump-drzewo-cfg -fdump-drzewo-vcg -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-chlapacze[-n]
-fdump-drzewo-dom[-n] -fdump-drzewo-dse[-n] -fdump-drzewo-phiprop[-n] -fdump-drzewo-phiopt[-n]
-fdump-drzewo-forwprop[-n] -fdump-drzewo-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-vrp[-n] -ftree-vectorizer-verbose=n -fdump-drzewo-storeccp[-n]
-fdump-final-insns=filet -fcompare-debugowanie[=optuje] -fcompare-debug-sekunda
-feliminacja-krasnoludek2-dupy -feliminuj-nieużywane-typy-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 -fpre-ipa-mem-raport
-fpost-ipa-mem-raport -f-łuki-profilu -frandom-ziarno=ciąg -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-przełączniki -gtabs -gstabs+ -gstrict-krasnolud
-gno-ścisłe-karzeł -GVM -gxcoff -gxcoff+ -fno-merge-debug-ciągi
-fno-karzeł2-cfi-asm -fdebug-mapa-prefiksów=stary=nowa -femit-struct-debug-base only
-femit-struct-debug-zmniejszono -femit-struct-debug-szczegółowe[=lista specyfikacji] -p -str
-print-nazwa-pliku=biblioteka -print-nazwa-pliku-libgcc -drukuj wiele katalogów
-print-multi-lib -print-multi-os-katalog -print-nazwa-programu=program
-print-search-dirs -Q -print-sysroot -print-sysroot-headers sufiks -zapisz-temps
-save-temps=cwd -save-temps=obiekt -czas[=filet]

Optymalizacja Opcje
-falign-funkcje[=n] -falign-skoki[=n] -falign-etykiety[=n] -falign-pętle[=n]
-matematyka-łącznikowa -fauto-inc-dec -prawdopodobieństwa-oddziału -fbranch-target-load-optymalizuj
-fbranch-target-load-optimize2 -fbtr-bb-wyłącznie -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 -fopóźniona gałąź -fdelete-sprawdzanie-zerowego-wskaźnika
-fdewirtualizuj -fdse -strasznie-inlining -fipa-śra -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
-fif-konwersja -fif-konwersja2 -findirect-wstawianie -finline-funkcje
-finline-functions- wywołane-raz -finline-limit=n -finline-małe-funkcje -fipa-cp
-fipa-cp-klon -fipa-matrix-reorg -fipa-pta -fipa-profil -fipa-pure-const
-Fipa-referencja -fira-algorytm=algorytm -fira-region=region -fira-pętla-ciśnienie
-fno-ira-share-sloty-zapisu -fno-ira-share-spill-sloty -fira-gadatliwa=n -fivopty
-fkeep-inline-funkcje -fkeep-static-consts -floop-blok spłaszczyć
-floop-wymiana -floop-strip-kopalnia -floop-równolegle-wszystko -flto
-flto-poziom kompresji -flto-partycja=ALG -flto-raport -fmerge-all-constans
-fmerge-stałe -Fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-niezmiennicze
klapa brzuszna -fmudflapir -fbłota -fno-liczba-oddziałów-reg -fno-default-inline
-fno-odroczenie-pop -fno-funkcja-cse -fno-zgadnij-oddział-prawdopodobieństwo -fno-w linii
-fno-matma-errno -fno-wizjer -fno-wizjer2 -fno-sched-interblock -fno-sched-spec
-fno-podpisane-zera -fno-najwyższy poziom-zmiana kolejności -fno-trapping-matematyka
-fno-zero-inicjalizowane-w-bss -fomit-wskaźnik-ramki -foptimize-rejestruj-przenieś
-foptimize-rodzeństwo-połączenia -częściowa inlining -pętle-odczuwania -fprzewidywalne-wspólne
-fprefetch-loop-tablice -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
- matematyka częsta -wolny -frgmove -rejestry-nazwisk -bloki-freorder
-bloki-freorder-i-partycja -funkcje-freorder -frerun-cse-po-pętli
-freschedule-modulo-scheduled-pętle -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-insns
-fharmonogram-insns2 -kotwy-fsekcji -fplanowanie-selektywne -f planowanie-selektywne2
-fsel-sched-rurociąg -fsel-sched-potokowanie-zewnętrzne pętle -fshrink-wrap
-fsygnalizacja-nans -fsingle-precyzja-stała -fsplit-ivs-in-unroller
-fsplit-szerokie typy -fstack-ochrona -fstack-protector-all -Fstrict-aliasing
-przepełnienie-przepełnienie -przeskoki do nitki -naprawca -fttree-bit-ccp -fttree-wbudowany-call-dce
-fttree-ccp -ftree-ch -fttree-coalesce-inline-vars -ftree-coalescce-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-pętla-liniowa -optymalizacja-pętla okrężna -fttree-parallelize-loops=n
-bezpłatny -bezpłatna-częściowa-przed -czterech-pta -ftree-reassoc -umywalka -ftree-sra
-konwersja-przełącznika-ftree -Ftree-tail-scalanie -fraterka -wersja-ftree-vect-loop
-ftree-wektoryzuj -ftree-vrp -zabawa-na-czas -funroll-wszystkie-pętle -funroll-pętle
-optymalizacje funsafe-loop -funsafe-matematyczne optymalizacje -funswitch-pętle
-fzmienne-rozwijanie-w-rolce -fvect-model-kosztowy -fvpt -fweb -cały-program -fwpa
-bezpiecznik-ld=Linki -wtyczka-łącznika bezpieczników --parametr Nazwa=wartość -O -O0 -O1 -O2 -O3 -Os
-Oszybko

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

Assembler Option
-Wa,opcja -Xasembler opcja

Linki Opcje
nazwa-pliku-obiektu -lbiblioteka -nostartfiles -defaultlibs -nostdlib -ciasto -rdynamiczne -s
-statyczny -static-libgcc -static-libstdc++ -wspólny -shared-libgcc -symboliczny -T scenariusz
-Wl,opcja -Xlinker opcja -u symbol

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

Maszyna Zależny Opcje
AAArch64 Opcje -mbig-endian -mlittle-endian -tylko-general-regs -mcmodel=mały
-mcmodel=mały -mcmodel=duży -mstrict-wyrównaj -momit-liść-wskaźnik-ramki
-mno-pomiń-liść-wskaźnik-ramki -mtls-dialekt=opis -mtls-dialect=tradycyjny -marzec=Nazwa
-mcpu=Nazwa -mtune=Nazwa

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

ARM Opcje -mapcs-rama -mno-apcs-rama -mabi=Nazwa -mapcs-sprawdzanie stosu
-mno-apcs-sprawdzanie stosu -mapc-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian
-mwords-little-endian -mfloat-abi=Nazwa -mfpe -mfp16-format=Nazwa -mkciuk-współpraca
-mno-kciuk-interwork -mcpu=Nazwa -marzec=Nazwa -mfpu=Nazwa -mstruktura-rozmiar-granica=n
-mabort-on-return -mlong-rozmowy -mno-długie-rozmowy -msingle-pic-base
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mcirrus-fix-nieprawidłowy-insns
-mno-cirrus-fix-invalid-insns -mpoke-nazwa-funkcji -mkciuk -mam -mtpcs-rama
-mtpcs-ramka-liść -mcaller-super-współpraca -mcallee-super-współpraca -mtp=Nazwa
-mtls-dialekt=dialekt -mword-relokacje -mfix-cortex-m3-ldrd - dostęp do munaligned
-mneon-dla-64bitów

AVR Opcje -mmcu=mcu -makumuluj-argumenty -koszt-oddzialu=koszt -mcall-prologi -miętowy8
-mno-przerwania -mrelaks -mshort-połączenia -mstrict-X -mtiny-stos

Blackfin Opcje -mcpu=cpu[-sirewizja] -msim -momit-liść-wskaźnik-ramki
-mno-pomiń-liść-wskaźnik-ramki -mspecld-anomalia -mno-specld-anomalia -mcsync-anomalia
-mno-csync-anomalia -mlow-64 tys -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-dane -mlong-rozmowy -mno-długie-rozmowy
-mfast-fp -minline-plt -wielordzeniowy -mcorea -mcoreb -msdram -mikplb

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

CRIS Opcje -mcpu=cpu -marzec=cpu -mtune=cpu -mmax-ramka-stosu=n
-melinux-stacksize=n -metax4 -metax100 -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 -mout -melinuks -mlinux -sym -sym2
-mmul-bug-obejście -mno-mul-bug-obejście

CR16 Opcje -mmak -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 -program ładujący_pakiet -Nazwa klienta -wersja_zgodności
-obecna wersja -martwy_strip -plik-zależności -dylib_plik -dylinker_nazwa_instalacji
-dynamiczny -dynamiczna biblioteka -lista_wyeksportowanych_symbolów -lista plików -płaska_przestrzeń nazw
-force_cpusubtype_ALL -force_flat_przestrzeń_nazw -headerpad_max_nazwy_instalacji -Framework
-baza_obrazu -w tym - nazwa_instalacji -keep_private_externs -multi_moduł
-zdefiniuj_wielokrotnie -pomnóż_zdefiniowane_nieużywane -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefy -noprebind
- edytuj powiązanie nosowe -pagezero_size -prebindować - prebind_all_dwupoziomowe_moduły -Pakiet_prywatny
-tylko_odczyt_relokacji -wyrównanie przekroju -sektoobiektsymbole -dlaczego? -seg1adres -stwórz sektę
-sektoobiektsymbole -sektora -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_tabela -seg_addr_tabela_nazwa_pliku -seglinkedytuj -segprot -segs_read_only_addr
-segs_read_write_addr -pojedynczy_moduł -statyczny -sub_biblioteka -sub_parasol
-dwupoziomowa_przestrzeń nazw -parasol -nieokreślony -niewyeksportowana_lista_symbolów
-słabe_niezgodności_odniesień -co załadowano -F - przestraszony -pełny -mmacosx-wersja-min=wersja
-mkernel -mone-byte-bool

Grudzień Alfa Opcje -mno-fp-regs -msoft-float -malfa-as -gaz -mieee
-mieee-z-niedokładną -mieee-zgodny -tryb-pułapki-mfp=tryb -mfp-tryb-zaokrąglania=tryb
-mtrap-precyzja=tryb -mbuild-stałe -mcpu=typ procesora -mtune=typ procesora -mbwx -mmmax
-poprawka -mcix -mfloat-szczepionka -mfloat-ieee -mexplicit-relocs -msmall-data -powiększanie-danych
-mały-tekst -duży-tekst -opóźnienie-pamięci=czas

Grudzień Alfa/VMS Opcje -mvms-kody-zwrotne -mdebug-główny=prefiks -mmalloc64

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

LIF Opcje -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mpodwójne -mno-podwójny -media -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 -mpak
-mno-pakiet -mno-flagi -mcond-ruch -mno-cond-ruch -moptymalizuj składnię
-mno-optymalizuj-membar -msc -mno-scc -mcond-exec -mno-cond-exec -mvliw-oddział
-mno-vliw-oddział -mmmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-zagnieżdżony-cond-exec -mtomcat-statystyki -mTLS -mtl -mcpu=cpu

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

H8 / 300 Opcje -mrelaks -mh -ms -min -miętowy32 -złośliwy-300

HPPA Opcje -marzec=typ architektury -duży-przełącznik -mdisable-fpregs
-mdisable-indeksowanie -mfast-połączenia-bezpośrednie -gaz -mgnu-ld -mhp-ld
-mstały-zakres=rejestr-zakres -przeskok-opóźnienie -mlinker-opc -mlong-rozmowy
-mlong-load-sklep -mno-duży-przełącznik -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-przenośny-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 -mharmonogram=typ procesora -mspace-regs
-msio -mwsio -unix=unix-std -nolibdld -statyczny -wątki

i386 i x86-64 Opcje -mtune=typ procesora -marzec=typ procesora -mfpmatematyka=jednostka -masma=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-granica-stosu=num -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mprzepis -mprzepis=optować -mvzeroupper -mprefer-avx128 -mmmx
-mss -msse2 -msse3 -msss3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -Maes -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnow -mpopcnt -mama -mbmi -mtbm -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mwątki -mno-wyrównaj-stringops -minline-all-stringops
-minline-stringops-dynamicznie -mstringop-strategia=ALG -push-args
-makumuluj wychodzące argumenty -m128bit-long-double -m96bit-long-double -mregparam=num
-msseegparm -mveclibabi=rodzaj -mvect8-ret-w-pamięci -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-liść-wskaźnik-ramki -mno-czerwona-strefa -mno-tls-direct-seg-refs -mcmodel=kod-model
-mabi=Nazwa -tryb-adresu=tryb -m32 -m64 -mx32 -próg-mlarge-data-=num -msse2avx
-mfentry -M8bit-Idiv -mavx256-split-unaligned-load -mavx256-split-unaligned-store

i386 i x86-64 Windows Opcje -mkonsola -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -mwątek -Municode -mwin32 -mwindows -fno-set-stack-wykonywalny

IA-64 Opcje -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-zdjęcie
-mvolatile-asm-stop -nazwy-rejestrów -msdata -mno-sdata -mstała-gp -mauto-zdjęcie
-mfused-madd -minline-float-divide-min-opóźnienie -minline-float-divide-max-przepustowość
-mno-inline-float-divide -minline-int-divide-min-opóźnienie
-minline-int-divide-max-przepustowość -mno-inline-int-dzielenie -minline-sqrt-min-opóźnienie
-minline-sqrt-max-przepustowość -mno-inline-sqrt -mdwarf2-asm -marly-stop-bits
-mstały-zakres=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

IA-64/VMS Opcje -mvms-kody-zwrotne -mdebug-główny=prefiks -mmalloc64

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

M32R/D Opcje -m32r2 -m32rx -m32r -mdebug -złośliwe pętle -mno-wyrównaj-pętle
-współczynnik-masy=numer -koszt-oddzialu=numer -mmodel=kod-rozmiar-model-typ -msdata=sdata-
rodzaj -mno-flush-funkcja -mflush-funkcja=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 -mbitpole -mno-bitfield -mc68000 -mc68020 -mnobitpole -mrtd -mno-rtd
-mdiv -mno-dział -mkrótki -mno-krótki -mhard-float -m68881 -msoft-float -mpcrel
-malign-int -mstrict-wyrównaj -msep-dane -mno-sep-dane -id-biblioteki-mshared=n
-Mid-shared-biblioteka -mno-id-shared-biblioteka -mxgot -mno-xgot

MCore Opcje -mhardlit -mno-twardo oświetlony -mdiv -mno-dział -mrelax-natychmiast
-mno-relaks-natychmiast -mwide-bitfields -mno-szerokie-bitfields -m4byte-funkcje
-mno-4byte-funkcje -mcallgraph-dane -mno-dane wykresu wywoławczego -mslow-bajty
-mno-wolne bajty -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-przyrost

MeP Opcje -mabsdiff -centrum-opcje -przeciętny -mbazowany=n -mbittopy -mc=n -mclip
-mconfig=Nazwa -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-lotny -ml
-mleadz -mm -mminmaks -mmult -mno-opcje -powtórz -ms -msatura -msdram -msim -msimnovec
-mtf -mtiny=n

MikroBlaze Opcje -msoft-float -mhard-float -msmall-dzielniki -mcpu=cpu -mmmcpy
-mxl-soft-mul -mxl-soft-div -mxl-przesunięcie-beczki -Porównaj wzorce mxl -sprawdzanie stosu-mxl
-mxl-gp-opc -mno-clearbss -mxl-pomnóż-wysokie -mxl-float-konwertuj -mxl-float-sqrt
-tryb-mxl-model aplikacji

MIPS Opcje -TEN -EB -marzec=łuk -mtune=łuk -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-Minterlink-MIPS16 -mno-połączenie-mips16 -mabi=abi -mabicalls -mno-abicals
-mshared -mno-udostępnione -mplt -mno-pl -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float -msingle-float -mpodwójny pływak -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -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-osadzone-dane -muninit-const-in-rodata -mno-unit-const-w-rodacie
-mcode-czytelny=ustawienie -msplit-adresy -mno-split-adresy -mexplicit-relocs
-mno-jawne-relokacje -mcheck-zero-dzielenie -mno-check-dzielenie-zero -mdivide-pułapki
-mdivide-przerwy -mmmcpy -mno-memcpy -mlong-rozmowy -mno-długie-rozmowy -mam -mno-szalony
-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-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-funkcja=funkcjonować -mno-flush-funkcja -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-połączenia -mno-relaks-pic-rozmowy -mmcount-ra-adres

MMIX Opcje -mlibfunkcje -mno-libfunks -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-błąd -mno-am33 -mama33 -mam33-2 -mama34 -mtune=procesor-
rodzaj -mwskaźnik-powrotu-na-d0 -mno-crt0 -mrelaks -mlw -msetlb

PDP-11 Opcje -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbkopia
-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=typ_ae -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

RS / 6000 i PowerPC Opcje -mcpu=typ procesora -mtune=typ procesora -mcmodel=kod-model -moc
-mno-moc -mmoc2 -mno-moc2 -mmoc szt -mpowerpc64 -mno-powerpc -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
-mnew-mnemonika -mnemotechnika pleśni -mfull-toc -minimal-toc -mno-fp-w-toc
-mno-suma-w-toc -m64 -m32 -zgodny z mxl -mno-xl-kompatybilny -mp -złośliwa moc
-złośliwy-naturalny -msoft-float -mhard-float -mwielokrotność -mno-wielokrotność -msingle-float
-mpodwójny pływak -msimple-fpu -mciąg -mno-ciąg -aktualizacja -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 -mtok -mno-tok -mały
-mlittle-endian -duży -mbig-endian -mdynamic-no-pic -maltivec -mswdiv
-msingle-pic-base -mpriorytet-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 -msp
-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 -szalony -nóż do szpiku -członek -msdata -msdata=optować -mvxworks -G num
-pwątek -mprzepis -mprzepis=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

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

S / 390 i 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 -Mbackain
-mno-łańcuch wsteczny -mpacked-stos -mno-opakowany-stos -msmall-exec -mno-small-exec
-mmvcle -Mno-Mvcle -m64 -m31 -mdebug -mno-debugowanie -meza -mzarch -mtpf-śledzenie
-mno-tpf-śledzenie -mfused-madd -mno-skondensowany-madd -mwarn-rozmiar ramki -mwarn-dynamicstack
-mstack-rozmiar -mstack-strażnik

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

SH Opcje -m1 -m2 -m2e -m2a-nofpu -m2a-single-tylko -m2a-singiel -m2a -m3 -m3e
-m4-nofpu -m4-single-tylko -m4-pojedynczy -m4 -m4a-nofpu -m4a-single-tylko -m4a-singiel
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-kompaktowy
-m5-kompaktowy-nofpu -mb -ml -mdalign -mrelaks -wielkich -mfmovd -mhitachi -mrenesa
-mno-renesas -mnomaczapisz -mieee -mno-ieee -mbittopy -niewielkość -minline-ic_invalidate
-mpadstruktura -mprzestrzeń -mprefergot -tryb użytkownika -koszt wielokrotny=numer -mdiv=strategia
-mdivsi3_libfunc=Nazwa -mstały-zakres=rejestr-zakres -dostosuj-rozwiń
-mindexed-adresowanie -mgettrkoszt=numer - naprawiono mpt -makumuluj wychodzące argumenty
-minvalid-symbole -msoft-atomowy -koszt-oddzialu=num -mcbranchdi -mcmpeqdi -mfused-madd
-mpreend-cmove

Solaris 2 Opcje -niewierny-tekst -mno-nieczysty-tekst -pwątki -pwątek

SPARC Opcje -mcpu=typ procesora -mtune=typ procesora -mcmodel=kod-model -model-pamięci=pamięć-
model -m32 -m64 -map-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-niewyrównane-double -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

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

Konfiguracja V Opcje -Pyt -Qn -PZ,ścieżki -Ym,reż

PŁYTKA-Gx Opcje -mcpu=cpu -m32 -m64

TILEPro Opcje -mcpu=cpu -m32

V850 Opcje -mlong-rozmowy -mno-długie-rozmowy -mep -mno-ep -mprolog-funkcja
-mno-prolog-funkcja -mprzestrzeń -mtda=n -msda=n -mzda=n -map-regs -mno-app-regs
-mdisable-call -mno-wyłącz-wezwanie -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -duży-przełącznik

VAX Opcje -mg -mgnu -muniks

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

x86-64 Opcje Zobacz Opcje i386 i x86-64.

Xburza16 Opcje -msim

Xtensa Opcje -mkonst16 -mno-stała16 -mfused-madd -mno-skondensowany-madd -mforce-bez-zdjęcia
-mserialize-volatile -mno-serialize-volatile -mtext-sekcja-literałów
-mno-tekst-sekcja-literałów -mtarget-wyrównaj -mno-dopasuj do celu -mdługie rozmowy
-mno-długie połączenia

zSeria Opcje Zobacz Opcje S/390 i zSeries.

Code Pożądania Opcje
-wezwanie-zapisane-reg -wywołanie-używane-reg -stały-reg -wyjątki -fnon-call-Exceptions
-Funwind-stoliki -fasynchroniczne-rozwijające-tabele -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 -fSROKA -fno-skok-stoliki -przełączniki frecord-gcc
-freg-struct-return -fshort-wyliczenia -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-sprawdzenie -fstack-limit-rejestr=reg -fstack-symbol-limitu=sym
-fno-limit stosu -fsplit-stos -przelotne-podkreślenie -ftls-model=model -ftrapv
-fwrapv -fbounds-check -widzialność -fstrict-volatile-bitfields

Opcje Sterowanie dotychczasowy 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.

filetII
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.hp
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).

filetf90
filetf95
filetf03
filetf08
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.przysł
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 wyjście cpp
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 wyjdzie z kodem 1, jeśli jakakolwiek faza kompilatora
zwraca nieudany kod powrotu. Jeśli określisz - kody-wyjścia-passThe gcc program
zamiast tego zwróci z liczbowo najwyższym błędem wygenerowanym przez dowolną zwróconą fazę
wskazanie błędu. Nakładki C, C++ i Fortran zwracają 4, jeśli wewnętrzny
wystąpił błąd kompilatora.

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 niezależnie od rodzaju danych wyjściowych
tworzony, niezależnie od tego, czy jest to plik wykonywalny, plik obiektowy, plik asemblera, czy
wstępnie przetworzony kod C.

If -o nie jest określony, domyślnie umieszczany jest plik wykonywalny w a.wyj, 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.

-###
Jak -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 zostanie również przekazany do
różne procesy wywoływane przez gcc, aby mogli wyświetlać opcje wiersza poleceń
oni akceptują. Jeśli -Wextra określono również opcję (przed --help
opcja), a następnie opcje wiersza poleceń, z którymi nie jest powiązana żadna dokumentacja
zostanie również wyświetlony.

--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
Spowoduje to wyświetlenie wszystkich opcji optymalizacji obsługiwanych przez kompilator.

ostrzeżenia
Spowoduje to wyświetlenie wszystkich opcji sterujących komunikatami ostrzegawczymi generowanymi przez
kompilator.

cel
Spowoduje to wyświetlenie opcji specyficznych dla celu. w przeciwieństwie do --cel-pomoc opcja
jednak specyficzne dla celu opcje linkera i asemblera nie będą
wystawiany. Dzieje się tak, ponieważ te narzędzia nie obsługują obecnie rozszerzonej
--pomoc= składnia.

params
Spowoduje to wyświetlenie wartości rozpoznanych przez --parametr opcja.

język
Spowoduje to wyświetlenie opcji obsługiwanych dla język, Gdzie język jest imię
jednego z języków obsługiwanych w tej wersji GCC.

pospolity
Spowoduje to wyświetlenie opcji, 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 może być użyty:

--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 wyjście o
tak bardzo, że nie ma nic do wyświetlenia. Jednak jednym z przypadków, w których to działa, jest sytuacja, w której
jedna z klas to cel. Na przykład, aby wyświetlić wszystkie specyficzne dla celu
można skorzystać z opcji optymalizacji:

--help=cel,optymalizatory

Połączenia --pomoc= opcję można powtórzyć w wierszu poleceń. Każde kolejne użycie spowoduje:
wyświetlić żądaną klasę opcji, pomijając te, które już zostały
wystawiany.

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=cel -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

Spowoduje to wywołanie wszystkich podprogramów gcc dla gdb --arg, stąd inwokacja cc1
będzie gdb --arg 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.

-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, .hp, .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
traktuje .c, .h i .i pliki jako pliki źródłowe C++ zamiast plików źródłowych C, chyba że -x is
używane i automatycznie określa linkowanie do biblioteki C++. Ten program jest również
przydatne podczas prekompilacji pliku nagłówkowego C z .h rozszerzenie do użytku w kompilacjach C++.
W wielu systemach 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.

Połączenia -ansi opcja nie powoduje nieuzasadnionego odrzucania programów innych niż ISO. Do
że, -pedantyczny 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 normalnie byłyby wbudowane, ale nie mają semantyki zdefiniowanej przez ISO C
(takie jak "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. Określając normę bazową,
kompilator zaakceptuje wszystkie programy zgodne z tym standardem i te korzystające z GNU
rozszerzenia, które nie są z tym sprzeczne. Na przykład, -std=c90 wyłącza się na pewno
cechy GCC niezgodne z ISO C90, takie jak „asm” i „typeof”
słowa kluczowe, ale nie inne rozszerzenia GNU, które nie mają znaczenia w ISO C90, takie jak
pomijając środkowy wyraz wyrażenia „?:”. Z drugiej strony, określając GNU
dialekt standardu, wszystkie funkcje obsługiwane przez kompilator są włączone, nawet jeśli te
funkcje zmieniają znaczenie standardu bazowego i niektórych programów ściśle zgodnych
może zostać odrzucony. Określony standard jest używany przez -pedantyczny aby zidentyfikować które
cechy są rozszerzeniami GNU, biorąc pod uwagę tę wersję standardu. Na przykład -std=gnu90
-pedantyczny ostrzega o stylu C++ // komentarze, podczas gdy -std=gnu99 -pedantyczny by
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. Zauważ, że ten standard nie jest jeszcze w pełni obsługiwany; zobaczyć
<http://gcc.gnu.org/gcc-4.7/c99status.html> aby uzyskać więcej informacji. Imiona c9x
i iso9899:199x są przestarzałe.

c11
c1x
iso9899:2011
ISO C11, wersja 2011 normy ISO C. Wsparcie jest niekompletne i
eksperymentalny. Imię c1x jest przestarzałe.

gnu90
gnu89
Dialekt GNU ISO C90 (w tym niektóre funkcje C99). To jest domyślne dla C
kod.

gnu99
gnu9x
Dialekt GNU ISO C99. Gdy ISO C99 zostanie w pełni zaimplementowane w GCC, spowoduje to:
stać się domyślnym. Imię gnu9x jest przestarzałe.

gnu11
gnu1x
Dialekt GNU ISO C11. Wsparcie jest niekompletne i eksperymentalne. Imię gnu1x
jest przestarzałe.

c++98
Standard ISO C++ z 1998 roku wraz z poprawkami. Taki sam jak -ansi dla kodu C++.

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

c++11
Standard ISO C++ 2011 z poprawkami. Wsparcie dla C++11 jest nadal
eksperymentalne i mogą się zmieniać w niekompatybilny sposób w przyszłych wydaniach.

gnu++11
dialekt GNU z -std=c++11. Wsparcie dla C++11 jest nadal eksperymentalne i może ulec zmianie
w niezgodny 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.
Ta opcja jest akceptowana i ignorowana przez GCC od wersji 4.1.3 aż do, ale nie włączając
4.3. W wersji GCC 4.3 i późniejszych zmienia zachowanie GCC w trybie C99. Za pomocą
ta opcja jest z grubsza równoważna dodaniu atrybutu funkcji "gnu_inline" do wszystkich
funkcje wbudowane.

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 była po raz pierwszy obsługiwana w GCC 4.3. Ta 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" to
wbudowane i wiadomo, że „strlen” nie modyfikuje 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) __wbudowany_abs ((n))
#define strcpy(d, s) __builtin_strcpy((d), (s))

-odsłonięty
Potwierdź, że kompilacja odbywa się w środowisku hostowanym. Oznacza to -wbudowany.
Środowisko hostowane 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
Zapewnij, że kompilacja odbywa się w wolnostojącym środowisku. 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.

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

-fgnu-tm
Kiedy opcja -fgnu-tm jest określony, kompilator wygeneruje 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.

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

-brak zintegrowanego-cpp
Wykonuje kompilację w dwóch przejściach: wstępne przetwarzanie i kompilacja. Ta opcja pozwala
użytkownik podał „cc1”, „cc1plus” lub „cc1obj” za pośrednictwem -B opcja. Dostarczony przez użytkownika
krok kompilacji może następnie dodać dodatkowy krok wstępnego przetwarzania po normalnym
wstępne przetwarzanie, ale przed kompilacją. Domyślnie używany jest zintegrowany cpp
(wewnętrzny cpp)

Semantyka tej opcji zmieni się, jeśli „cc1”, „cc1plus” i „cc1obj” zostaną połączone.

-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++;
ale możesz też użyć większości opcji kompilatora GNU, niezależnie od tego, w jakim języku używasz
program jest włączony. Na przykład możesz skompilować plik „firstClass.C” w ten sposób:

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. Wersja 2 to pierwsza wersja C++ ABI
pojawił się w G++ 3.4. Wersja 1 to wersja C++ ABI, która po raz pierwszy pojawiła się w
G++ 3.2. Wersja 0 zawsze będzie wersją najbardziej zgodną z C++
Specyfikacja ABI. W związku z tym ABI uzyskany przy użyciu wersji 0 zmieni się jako ABI
błędy są naprawione.

Domyślnie jest to wersja 2.

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.

Zobacz też -Wabi.

-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-nowy
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 ​​„nowy operator” zwróci 0 tylko wtedy, gdy jest zadeklarowany rzucić(),
w takim przypadku kompilator zawsze sprawdzi zwracaną wartość, nawet bez tego
opcja. We wszystkich innych przypadkach, gdy „operator nowy” ma niepusty wyjątek
specyfikacji, wyczerpanie pamięci sygnalizowane jest wyrzuceniem "std::bad_alloc". Zobacz też
nowa (brak).

-fzachowaj-przestrzeń
Umieść niezainicjowane lub zainicjowane w czasie wykonywania zmienne globalne we wspólnym segmencie, jako
C tak. Oszczędza to miejsce w pliku wykonywalnym kosztem braku diagnozowania duplikatu
definicje. Jeśli skompilujesz z tą flagą i Twój program w tajemniczy sposób się zawiesi
po zakończeniu "main()" możesz mieć obiekt, który jest niszczony dwukrotnie
ponieważ dwie definicje zostały połączone.

Ta opcja nie jest już przydatna w przypadku większości celów, teraz dodano obsługę
umieszczanie zmiennych w BSS bez uwspólniania ich.

-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-lista
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))
{
zwróć rzeczywistąfn (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-zastrzyk
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
działać w ten sposób w starym Annotated C++ Reference Manual i wcześniejszych wersjach G++
4.1 zawsze działał w ten sposób. Jednak w ISO C++ funkcja zaprzyjaźniona, która nie jest
zadeklarowane w otaczającym zakresie można znaleźć tylko przy użyciu wyszukiwania zależnego od argumentów.
Ta opcja powoduje, że znajomi są wstrzykiwani tak, jak we wcześniejszych wydaniach.

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 NEBUG. To nie daje uprawnień do kodu użytkownika
zgłaszać wyjątki z naruszeniem specyfikacji wyjątków; kompilator będzie
nadal optymalizować w oparciu o specyfikacje, więc zgłoszenie nieoczekiwanego wyjątku spowoduje
skutkować nieokreślonym zachowaniem.

-ffor-zakres
-fno-dla-zakresu
If -ffor-zakres jest określony, zakres zmiennych zadeklarowanych w a for-init-instrukcja
jest ograniczony do dla samą pętlę, zgodnie ze standardem C++. Gdyby
-fno-dla-zakresu jest określony, zakres zmiennych zadeklarowanych w a for-init-instrukcja
rozciąga się do końca otaczającego zakresu, jak miało to miejsce w starych wersjach G++, oraz
inne (tradycyjne) implementacje C++.

Wartość domyślna, jeśli żadna flaga nie jest podana, aby postępować zgodnie ze standardem, ale aby zezwolić i dać a
ostrzeżenie o kodzie w starym stylu, który w innym przypadku byłby nieprawidłowy 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 wierszy w inny sposób, tak aby kompilacje z optymalizacją i bez niej
potrzebują tego samego zestawu jawnych wystąpień.

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

-fms-rozszerzenia
Wyłącz pedantyczne ostrzeżenia 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-wbudowane
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-opc
Traktuj specyfikację wyjątku „throw()” tak, jakby była specyfikacją „noexcept”
aby 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ątku faktycznie zmniejszy funkcję
ponieważ czyszczenie EH dla tych zmiennych można zoptymalizować. semantyczny
efekt jest taki, że wyjątek wyrzucony z funkcji z takim wyjątkiem
specyfikacja spowoduje wywołanie „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 pozwoli skompilować jakiś niezgodny kod.

-fno-ładne-szablony
Gdy komunikat o błędzie odnosi się do specjalizacji szablonu funkcji, kompilator
normalnie wydrukuje podpis szablonu, a następnie 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 pominie 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, używając -fno-ładne-szablony wyłączy je.

-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 nie
użyj tych części języka, możesz zaoszczędzić trochę miejsca, używając tej flagi. Notatka
ta obsługa wyjątków wykorzystuje te same informacje, ale wygeneruje je w razie potrzeby.
Połączenia dynamic_cast operator może nadal być używany do rzutów, które nie wymagają czasu działania
informacje o typie, tj. rzutuje na "unieważnij *" lub na jednoznaczne klasy bazowe.

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

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

-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 będzie działać tylko wtedy, gdy Twój C
biblioteka obsługuje "__cxa_atexit".

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

-widoczność-w-liniach-ukryta
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 zostały przyjęte 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
zamknięcie klasy z jawną widocznością nie będzie miało ż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.

-kompatybilność-ms-widoczności
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 obiekcie współdzielonym: te
deklaracje są dozwolone, jeśli byłyby dozwolone, gdy ta opcja była
nieużywany.

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 będą różne, więc
zmiana jednego nie zmieni drugiego; i że wskaźniki do zdefiniowanych członków funkcji
w różnych wspólnych obiektach mogą nie być równe. Gdy ta flaga jest podana, jest to
naruszenie ODR w celu innego zdefiniowania typów o tej samej nazwie.

-fno-słaba
Nie używaj słabej obsługi symboli, nawet jeśli jest ona zapewniona przez linker. Domyślnie G++
użyje 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; spowoduje to gorszy kod i nie przyniesie ż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++:

-fno-default-inline
Nie zakładaj inline dla funkcji zdefiniowanych w zakresie klasy.
Zauważ, że te funkcje będą połączone jak funkcje wbudowane; po prostu nie chcą
być domyślnie wstawione.

-Wabi (tylko C, Objective-C, C++ i Objective-C++)
Ostrzegaj, gdy G++ generuje kod, który prawdopodobnie nie jest zgodny z neutralnym dla dostawcy
C++ ABI. Chociaż podjęto wysiłki, aby ostrzec o wszystkich takich przypadkach, istnieją
prawdopodobnie niektóre przypadki, o których nie są ostrzegane, mimo że G++ generuje
niezgodny kod. Mogą również wystąpić przypadki, w których ostrzeżenia są emitowane, mimo że
wygenerowany kod będzie zgodny.

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.

Znane niezgodności w -fabi-wersja=2 (domyślnie) obejmują:

· Szablon z nietypowym parametrem szablonu typu referencyjnego jest zniekształcony
nieprawidłowo:

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

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

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

Manglowanie zmienia się w -fabi-wersja=4.

Znane niezgodności w -fabi-wersja=1 zawierać:

· Nieprawidłowa obsługa dopełnienia ogona dla pól bitowych. G++ może próbować spakować dane
do tego samego bajtu co klasa bazowa. Na przykład:

struct A { wirtualny void f(); int f1 : 1; };
struktura B: publiczna A { int f2: 1; };

W tym przypadku G++ umieści "B::f2" w tym samym bajcie co "A::f1"; inne kompilatory
nie będzie. Możesz uniknąć tego problemu, wyraźnie dopełniając „A”, aby jego rozmiar
jest wielokrotnością rozmiaru w bajtach na twojej platformie; co spowoduje G++ i inne
kompilatory do układu "B" identycznie.

· Nieprawidłowa obsługa wyściółki ogona dla wirtualnych baz. G++ nie używa ogona
dopełnienie podczas układania wirtualnych baz. Na przykład:

struct A { wirtualny void f(); znak c1; };
struktura B {B(); znak c2; };
struktura C: publiczna A, publiczna wirtualna B {};

W tym przypadku G++ nie umieści „B” w wyściółce ogona dla „A”; inny
kompilatory będą. Możesz uniknąć tego problemu, wyraźnie dopełniając „A”, aby jego
rozmiar jest wielokrotnością jego wyrównania (ignorując wirtualne klasy bazowe); to będzie
spowodować, że G++ i inne kompilatory mają identyczny układ "C".

· Nieprawidłowa obsługa pól bitowych o zadeklarowanych szerokościach większych niż ich
typy bazowe, gdy pola bitowe pojawiają się w unii. Na przykład:

unia U { int i : 4096; };

Zakładając, że „int” nie ma 4096 bitów, G++ sprawi, że suma będzie zbyt mała
przez liczbę bitów w „int”.

· Puste klasy mogą być umieszczane w niewłaściwych przesunięciach. Na przykład:

struktura A {};

struktura B {
A;
wirtualna pustka f ();
};

struktura C: publiczna B, publiczna A {};

G++ umieści klasę bazową „A” z „C” w niezerowym przesunięciu; należy go umieścić
przy zerowym przesunięciu. G++ błędnie uważa, że ​​element danych „A” w „B” jest
już przy zerowym przesunięciu.

· Nazwy funkcji szablonu, których typy obejmują „typename” lub szablon szablonu
parametry mogą być niepoprawnie zniekształcone.

szablon
void f(typu Q::X) {}

szablon klasa Q>
void f(nazwa typu Q ::X) {}

Wystąpienia tych szablonów mogą być nieprawidłowo zniekształcone.

Ostrzega również zmiany związane z psABI. Znane zmiany psABI w tym momencie obejmują:

· W przypadku SYSV/x86-64, przy przekazywaniu unii z długim podwójnym, zmienia się na pass in
pamięć określona w psABI. Na przykład:

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

"Zjednoczenie U" zawsze zostanie zapisane w pamięci.

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

-Wdelete-nie wirtualny-dtor (Tylko C++ i Objective-C++)
Ostrzegaj, kiedy usunąć służy do niszczenia instancji klasy, która posiada funkcje wirtualne
i niewirtualny destruktor. Usunięcie instancji klasy pochodnej jest niebezpieczne
przez wskaźnik do klasy bazowej, jeśli klasa bazowa nie ma wirtualnego
burzyciel. To ostrzeżenie jest włączone przez -Ściana.

-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 i -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 (tj rzucić() or bez wyjątku)
ale kompilator wie, że nigdy nie zgłasza wyjątku.

-Wnon-virtual-tor (Tylko C++ i Objective-C++)
Ostrzegaj, gdy klasa ma funkcje wirtualne i dostępny niewirtualny destruktor, w
w którym przypadku byłoby możliwe, ale niebezpieczne usunięcie instancji klasy pochodnej?
przez wskaźnik do klasy bazowej. To ostrzeżenie jest również włączone, jeśli -Weffc++ is
określony.

-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 zmieni kolejność inicjatorów elementów członkowskich dla i i j aby dopasować
kolejność deklaracji członków, emitując ostrzeżenie o tym skutku. To ostrzeżenie jest
włączony przez -Ściana.

Poniższy -C... 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 Efektywne
c++, druga edycja książka:

· Pozycja 11: Zdefiniuj konstruktor kopiujący i operator przypisania dla klas z
pamięć alokowana dynamicznie.

· Punkt 12: Preferuj inicjalizację niż przypisanie w konstruktorach.

· Pozycja 14: Uczynić destruktory wirtualnymi w klasach bazowych.

· Punkt 15: Niech "operator=" zwraca odniesienie do *this.

· Punkt 23: Nie próbuj zwracać referencji, gdy musisz zwrócić obiekt.

Ostrzegaj również o naruszeniach następujących wytycznych dotyczących stylu od Scotta Meyersa Więcej
Efektywne C + + książka:

· Punkt 6: Rozróżnienie między prefiksowymi i postfiksowymi formami przyrostu i dekrementacji
operatorów.

· Pozycja 7: Nigdy nie przeciążaj "&&", "||" lub ",".

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-wartownik (Tylko C++ i Objective-C++)
Ostrzegaj również o używaniu niecastowanego „NULL” jako wartownika. Podczas kompilacji tylko z
GCC jest to prawidłowy wskaźnik, ponieważ „NULL” jest zdefiniowane jako „__null”. Chociaż jest to null
stała wskaźnika nie jest wskaźnikiem zerowym, gwarantuje się, że ma taki sam rozmiar jak a
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++.
Odlewy w nowym stylu (dynamic_cast, static_cast, reinterpretuj_cast, const_cast) są
mniej podatne na niezamierzone skutki i znacznie łatwiejsze do wyszukiwania.

-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 uda się skompilować.

-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-promocja (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łyby zachować bez znaku, ale standard nakazuje
aktualne zachowanie.

struktura A {
operator int ();
A& operator = (int);
};

Główny ()
{
a,b;
a = b;
}

W tym przykładzie G++ zsyntetyzuje wartość domyślną A& operator = (stała A&);, podczas gdy cfront
użyje zdefiniowanego przez użytkownika operator =.

Opcje Sterowanie Objective-C i 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 programów Objective-C++, ale możesz także użyć większości niezależnych od języka GNU
opcje kompilatora. Na przykład możesz skompilować plik „jakaś_klasa.m” w ten sposób:

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ąpi
-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 uruchomi 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
specjalną metodę "- (void) .cxx_destruct", która uruchomi wszystkie takie domyślne destruktory,
w odwrotnej kolejności.

Wygenerowane w ten sposób metody "- (id) .cxx_construct" i "- (void) .cxx_destruct"
działają tylko na zmiennych instancji zadeklarowanych w bieżącej klasie Objective-C, a nie
te odziedziczone po superklasach. Jest to odpowiedzialność Celu-C
środowiska uruchomieniowego do wywołania wszystkich takich metod w hierarchii dziedziczenia obiektu. Dowód osobisty)
Metody .cxx_construct” będą wywoływane przez środowisko wykonawcze natychmiast po nowym obiekcie
instancja jest przydzielona; zostaną wywołane metody "- (void) .cxx_destruct"
bezpośrednio przed zwolnieniem instancji obiektu przez środowisko wykonawcze.

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

-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-selektor-dopasowanie (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 pominie takie ostrzeżenia, jeśli jakiekolwiek znalezione różnice są ograniczone do typów, które
mają 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 Control Diagnostyczny Wiadomości Formatowanie
Tradycyjnie komunikaty diagnostyczne były formatowane niezależnie od urządzenia wyjściowego
aspekt (np. jego szerokość, ...). Opisane poniżej opcje mogą służyć do sterowania
algorytm formatowania komunikatów diagnostycznych, np. ile znaków w linii, jak często
należy zgłaszać informacje o lokalizacji źródła. W tej chwili tylko interfejs C++ może
szanuj te opcje. Oczekuje się jednak, że w niedalekiej przyszłości pozostały front
końce byłyby w stanie je prawidłowo strawić.

-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. Plik
domyślnie 72 znaki dla g ++ i 0 dla pozostałych przednich końców obsługiwanych przez
GCC. Gdyby n ma wartość zero, wtedy zawijanie wierszy nie zostanie wykonane; pojawi się każdy komunikat o błędzie
w jednej linii.

-fdiagnostics-show-location=raz
Ma znaczenie tylko w trybie zawijania linii. Nakazuje zgłaszającemu komunikaty diagnostyczne:
wydzielać pewnego razu źródło informacji o lokalizacji; 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.

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

Opcje do PROŚBA 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= i -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ń, zaczynając od opcji -W, Na przykład -Mięczak
żądać ostrzeżeń dotyczących niejawnych deklaracji. Każda z tych konkretnych opcji ostrzegawczych również
ma 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 z nich nie jest domyślny. Na dalsze,
opcje specyficzne dla języka również odnoszą się do C + + Dialekt Opcje i Objective-C i
Cel-C++ Dialekt Opcje.

Gdy zażądano nierozpoznanej opcji ostrzeżenia (np. -Nieznane-ostrzeżenie), GCC wyemituje
diagnostyka stwierdzająca, że ​​opcja nie została rozpoznana. Jeśli jednak -Wnie- forma jest
używane, zachowanie jest nieco inne: żadna diagnostyka nie zostanie wygenerowana dla
-Wno-nieznane-ostrzeżenie chyba że tworzone są inne dane diagnostyczne. Pozwala to na użycie
nowa -Wnie- opcje ze starymi kompilatorami, ale jeśli coś pójdzie nie tak, kompilator wyświetli ostrzeżenie
że użyto nierozpoznanej opcji.

-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ż kilka rzadkich będzie wymagać -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.

-pedantyczny 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ć -pedantyczny 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ż
-pedantyczny. 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 -pedantyczny są podane tam, gdzie są
wymagane przez normę podstawową. (Nie ma sensu udzielanie 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
Jak -pedantyczny, z tą różnicą, że generowane są błędy, a nie ostrzeżenia.

-Ś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 i Objective-C i Cel-C++ Dialekt Opcje.

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

-Wadres Granice Warray (tylko z -O2) -Wc++11-kompatybilność -Wchar-indeksy
-Wenum-porównaj (w C/Objc; jest to domyślnie włączone w C++) -Wimplicit-int (C i
Tylko cel C) -Wimplicit-deklaracja funkcji (Tylko C i Cel-C) -Wkomentarz
-Wformat -Wmain (tylko dla C/ObjC i chyba że -wolnostojący) -Wmoże-niezainicjowany
-Wmissing-szelkach -Wnieważne -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 -Niezainicjowano -Nieznane-pragmy -Wunused-funkcja
-Wunused-etykieta -Wunused-wartość -Wunused-zmienna -Wvolatile-var-rejestr-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 - Brakujące inicjatory pola
-Wbrakujący-typ-parametru (tylko C) - Deklaracja w stylu Wolda (tylko C) -Woverride-init
-Porównaj znak -Wtype-limity -Niezainicjowano -Wunused-parametr (tylko z -Nieużywany or
-Ściana) -Wunused-ale-set-parameter (tylko z -Nieużywany 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 enumerator, jak i nieenumerator występują w trybie warunkowym
wyrażenie.

· (Tylko C++) Niejednoznaczne wirtualne bazy.

· (tylko C++) Subskrypcja tablicy, która została zadeklarowana zarejestrować.

· (tylko C++) Pobranie adresu zmiennej, która została zadeklarowana zarejestrować.

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

-Wchar-indeksy
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 został zmieniony między -fprofile-gen i -f-użycie-profilu, pliki z
opinie o profilu mogą nie być zgodne z plikiem źródłowym, a GCC nie może korzystać z profilu
informacje zwrotne. 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 wykona całe obliczenia z "podwójnym", ponieważ zmiennoprzecinkowa
literał punktowy to „podwójny”.

-Wformat
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 -pedantyczny jest używany z -Wformat,
będą wyświetlane ostrzeżenia o funkcjach formatu nie w wybranej standardowej wersji (ale
nie dla formatów "strfmon", ponieważ nie ma ich w żadnej wersji standardu C).

Ponieważ -Wformat sprawdza również argumenty formatu null dla kilku funkcji, -Wformat
oznacza również -Wnieważne.

-Wformat jest zawarty w -Ściana. Aby uzyskać większą kontrolę nad niektórymi aspektami sprawdzania formatu,
opcje -Wformat-y2k, -Wno-format-dodatkowe-args, -Wno-format-zero-długość,
-Wformat-niedosłowny, -Wformat-zabezpieczenia, -Wformat=2 są dostępne, ale nie są
zawarte w -Ściana.

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 -Wformat=0.

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

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

-Wno-format-dodatkowe-args
If -Wformat jest określony, nie ostrzegaj o nadmiarze argumentów do "printf" lub "scanf"
funkcja formatu. 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 „skanowania” ta opcja spowoduje ukrycie
ostrzeżenie, jeśli nieużywane argumenty są wskaźnikami, ponieważ Single Unix Specification
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-niedosłowny
If -Wformat jest określony, ostrzega również, jeśli ciąg formatujący nie jest literałem ciągu i
więc nie można tego sprawdzić, chyba że funkcja format przyjmuje swoje argumenty formatu jako a
"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 format
ciąg pochodzi z niezaufanych danych wejściowych i zawiera %n. (Jest to obecnie podzbiór tego, co
-Wformat-niedosłowny ostrzega o, ale w przyszłości ostrzeżenia mogą zostać dodane do
-Wformat-zabezpieczenia które nie są zawarte w -Wformat-niedosłowny.)

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 ostrzeżenia formatowania
w -Wformat=0. Aby ostrzeżenia dotyczące bezpieczeństwa formatu były krytyczne, określ
-Werror=format-bezpieczeństwo.

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

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

-Wnieważne jest zawarty w -Ściana i -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 -Niezainicjowano opcja.

Na przykład GCC ostrzeże o niezainicjowaniu „i” tylko w poniższym fragmencie
jeśli chodzi o komunikację i motywację -Win-self określono:

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

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

-Mięczak (Tylko C i Cel-C)
Taki sam jak -Wimplicit-int i -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. główny powinna 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 -pedantyczny.

-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 to dla b jest w pełni
w nawiasach.

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-katalogi (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 porównanie takie jak x<=y<=z wydaje; to jest równoważne (x<=y ? 1 : 0)
<= z, który jest inną interpretacją niż zwykła notacja matematyczna.

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 wyśle ​​ostrzeżenie, gdy ta flaga jest
określony. Aby wyeliminować ostrzeżenie, dodaj wyraźne nawiasy klamrowe wokół najbardziej wewnętrznego „jeśli”
oświadczenie, więc nie ma możliwości, aby „inne” mogło należeć do załączonego „jeśli”. ten
wynikowy kod wyglądałby tak:

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

Ostrzegaj również przed niebezpiecznym użyciem ?: z pominiętym środkowym operandem rozszerzenia GNU. Kiedy
warunek w operatorze ?: jest wyrażeniem boolowskim, którego pominiętą wartością będzie
zawsze 1. Często użytkownik oczekuje, ż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++ określają 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++.

-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-zwracania
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
jeśli chodzi o komunikację i motywację -Bez zwrotu-typu jest specyficzne. Jedynymi wyjątkami są główny i funkcje
zdefiniowane w nagłówkach systemowych.

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

-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-domyślny
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”.

-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 nieużywana atrybutów.

To ostrzeżenie jest również włączone przez -Nieużywany 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 nieużywana atrybutów.

To ostrzeżenie jest również włączone przez -Nieużywany, 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 nieużywana atrybutów.

-Wunused-local-typedefs (tylko C, Objective-C, C++ i Objective-C++)
Ostrzegaj, gdy typedef zdefiniowany lokalnie w funkcji nie jest używany.

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

Aby pominąć to ostrzeżenie, użyj nieużywana atrybutów.

-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 nieużywana atrybutów.

-Wunused-wartość
Ostrzegaj, gdy instrukcja oblicza wynik, który nie jest jawnie używany. Aby stłumić
to ostrzeżenie rzuca nieużywane wyrażenie na unieważnić. Obejmuje to wyrażenie-oświadczenie
lub lewa strona wyrażenia przecinkowego, które nie zawiera żadnych skutków ubocznych. Do
na przykład wyrażenie takie jak x[i,j] spowoduje ostrzeżenie, podczas gdy x[(nieważny)i,j] będzie
nie.

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

-Nieużywany
Wszystko powyższe -Nieużywany połączone opcje.

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

-Niezainicjowano
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 const element członkowski 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ń będzie zależeć od dokładnych 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, którymi zmienna nie jest
zainicjowany, kompilator wyśle ​​ostrzeżenie, jeśli nie może udowodnić, że nie został zainicjowany
ścieżki nie występują 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, mimo że wygląda na
mieć błąd. Oto jeden przykład, jak to się może stać:

{
intx;
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, użytkownik musi podać domyślny przypadek
w 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.

-Nieznane-pragmy
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 będą nawet wyświetlane dla nieznanych prag w
systemowe pliki nagłówkowe. Tak nie jest, jeśli ostrzeżenia zostały 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ż -Nieznane-pragmy.

-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
odpowiadają również większemu wysiłkowi, podobnie jak działa -O. -Wstrict-aliasing is
równoważny -Wstrict-aliasing=n, gdzie n=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 będzie wymagała pętla, w szczególności gdy
określenie, 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: „x +
1 > x"; z -przepełnienie-przepełnienie, kompilator uprości to do 1. Ten poziom
of -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” zostanie 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” zostanie 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” zostanie uproszczone do „x + 1
>= y”. Jest to zgłaszane tylko na najwyższym poziomie ostrzeżenia, ponieważ to
uproszczenie dotyczy wielu porównań, więc ten poziom ostrzegawczy da bardzo
duża liczba fałszywych alarmów.

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

-Wsuggest-attribute=czysty
-Wsuggest-atrybut=stała
-Wsuggest-atrybut=brak powrotu
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
pętla ani nie zwraca nienormalnie przez rzucanie, wywoływanie "abort()" lub trapping. Ten
analiza wymaga opcji -fipa-pure-const, który jest domyślnie włączony w -O i
wyższy. Wyższe poziomy optymalizacji poprawiają dokładność analizy.

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

-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ą
będzie nie ostrzegaj o nieznanych pragmach w nagłówkach systemowych --- w tym celu -Nieznane-pragmy
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 podczas biegu
czas na stosie, gdy pobierany jest adres funkcji zagnieżdżonej, oraz
służy do wywołania funkcji zagnieżdżonej pośrednio. W przypadku niektórych celów to
składa się wyłącznie z danych i dlatego nie wymaga specjalnego traktowania. Ale,
dla większości celów składa się z kodu i dlatego wymaga stosu
być wykonywalnym, 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 sprawdzać równość, sprawdziłbyś
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 nie
w ISO C.

· W tradycyjnym C niektóre dyrektywy preprocesora nie istniały. Tradycyjny
preprocesory uznają wiersz za dyrektywę tylko wtedy, gdy # pojawił się w
kolumna 1 w wierszu. W związku z tym -Wtradycyjne ostrzega przed dyrektywami, które
tradycyjny C rozumie, ale zignorowałby, ponieważ # nie pojawia się jako
pierwszy znak w linii. Sugeruje również ukrycie dyrektyw, takich jak #pragma
niezrozumiałe przez tradycyjne C przez wcięcie ich. Niektóre tradycyjne
implementacje nie rozpoznają #elif, więc 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/_MAKS 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 całkowitej ma inną szerokość lub sygnaturę 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.

· Konflikty 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 przez prototypy między wartościami stałymi/zmiennoprzecinkowymi i odwrotnie. ten
brak tych prototypów podczas kompilacji z tradycyjnym C spowodowałby poważne
problemy. Jest to podzbiór możliwych ostrzeżeń dotyczących konwersji dla całego zestawu
posługiwać się -Konwersja tradycyjna.

· Wykorzystanie definicji funkcji w stylu ISO C. To ostrzeżenie celowo jest nie wydane
dla deklaracji prototypów lub funkcji wariadycznych, ponieważ te cechy ISO C będą:
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ługiwany przez ISO C90 i nie był obsługiwany przez wersje GCC przed GCC 3.0.

-Wundefa
Ostrzegaj, jeśli niezdefiniowany identyfikator jest oceniany w #Jeśli Dyrektywa.

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

-Cień
Ostrzegaj, gdy zmienna lokalna lub deklaracja typu przesłania inną zmienną,
parametr, typ lub element klasy (w C++) lub gdy funkcja wbudowana jest
cień. Zwróć uwagę, że w C++ kompilator nie będzie ostrzegał, jeśli zmienna lokalna przesłoni a
struct/class/enum, ale ostrzega, jeśli przesłania jawny typedef.

-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 mógł założyć niczego na
granice indeksów pętli. Z -optymalizacje funsafe-loop ostrzegaj, jeśli kompilator
poczynili takie założenia.

-Wno-pedantyczny-ms-format (tylko cele MinGW)
Wyłącza ostrzeżenia dotyczące specyfikatorów szerokości formatu „printf” / „scanf” innych niż ISO „I32”,
"I64" i "I" używane w podsystemach Windows w zależności od środowiska wykonawczego MS, gdy używasz
opcje -Wformat i -pedantyczny bez rozszerzeń gnu.

-Wpointer-arytm
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 -pedantyczny.

-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 < or >=. To ostrzeżenie jest również włączone przez
-Wextra.

-Wbad-funkcja-obsada (Tylko C i Cel-C)
Ostrzegaj za każdym razem, gdy wywołanie funkcji jest rzutowane na niezgodny typ. Na przykład ostrzegaj, jeśli
„int malloc()” jest rzutowane na „cokolwiek *”.

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

-Jakość Wcast
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 **. */
stały znak **q = (stały znak **) 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 *” spowoduje wyświetlenie ostrzeżenia. Te
ostrzeżenia pomogą Ci 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 będzie to tylko uciążliwe. 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 długijmp or widelec. To ostrzeżenie jest również
włączony przez -Wextra.

-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 będą używać operatora konwersji typu: konwersje na „unieważnione”, the
ten sam typ, klasę bazową lub odwołanie do nich. Ostrzeżenia dotyczące konwersji między
liczby całkowite ze znakiem i bez znaku są domyślnie wyłączone w C++, chyba że -Konwersja znaku
jest jawnie włączona.

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

-Wempty-ciało
Ostrzegaj, jeśli puste ciało pojawi się w if, więcej or do Podczas oświadczenie. To ostrzeżenie jest
również włączone 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.

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

-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-atrybuty
Nie ostrzegaj, jeśli zostanie użyty nieoczekiwany „__attribute__”, taki jak nierozpoznane atrybuty,
atrybuty funkcji zastosowane do zmiennych itp. To nie zatrzyma 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.

-Wbrakujący-typ-parametru (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. Celem jest:
wykrywa funkcje globalne, które nie są zadeklarowane w plikach nagłówkowych.

-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
szablony funkcji lub dla funkcji wbudowanych lub dla funkcji w anonimowych przestrzeniach nazw.

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

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

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

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

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

-Brakujący-atrybut-formatu
Ostrzegaj o wskaźnikach funkcji, które mogą być kandydatami do atrybutów „format”. Notatka
są to tylko potencjalni kandydaci, a nie absolutni. GCC odgadnie tę funkcję
wskaźniki z atrybutami „format”, które są używane w przypisaniu, inicjalizacji,
instrukcje przekazywania lub zwracania parametrów powinny mieć odpowiedni atrybut „format”
w wynikowym typie. Czyli lewa strona przypisania lub inicjalizacji,
typ zmiennej parametru lub typ zwracany funkcji zawierającej
odpowiednio powinien również mieć atrybut „format”, aby uniknąć ostrzeżenia.

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

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

-Wnormalizowane=
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ń.

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. Ty
chciałby to zrobić tylko wtedy, gdy używasz innego schematu normalizacji (takiego jak
„D”), ponieważ w przeciwnym razie można łatwo stworzyć błędy, których dosłownie nie da się
zobaczymy.

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óry został umieszczony w indeksie górnym. ISO 10646 definiuje NFKC normalizacja
schemat konwertowania tych wszystkich do standardowej postaci, a GCC ostrzeże, jeśli
kod nie jest w NFKC, jeśli używasz -Wnormalizowane=nfkc. To ostrzeżenie jest porównywalne z
ostrzeżenie o każdym identyfikatorze zawierającym literę O, ponieważ może być mylony
z cyfrą 0, więc nie jest to ustawienie domyślne, ale może być przydatne jako kodowanie lokalne
konwencja, jeśli środowiska programistycznego nie można naprawić, aby je wyświetlić
znaki wyraźnie.

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

-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” będzie:
być źle wyrównany, mimo że „struct bar” sam nie ma atrybutu „packed”:

struktura foo {
intx;
znak a, b, c, d;
} __attribute __ ((zapakowany));
pasek struktury {
znak z;
struktura 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”.

-Wygraj
Ostrzegaj, jeśli funkcja nie może być wbudowana i została zadeklarowana jako wbudowana. Nawet z tym
opcja, kompilator nie będzie 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 -Wygraj pojawiać się lub znikać.

-Wno-nieprawidłowe przesunięcie (Tylko C++ i Objective-C++)
Pomiń ostrzeżenia przed zastosowaniem odsunięcie makro do typu innego niż POD. Według
zastosowanie standardu ISO C++ z 1998 r. odsunięcie do typu innego niż POD jest niezdefiniowany. w
istniejące implementacje C++, jednak odsunięcie zazwyczaj daje sensowne wyniki
nawet w przypadku zastosowania do niektórych rodzajów typów innych niż POD. (takie jak prosty struct że
nie jest typem POD tylko z powodu posiadania konstruktora). Ta flaga jest przeznaczona dla
użytkownicy, którzy są świadomi, że piszą nieprzenośny kod i celowo:
wybrany, aby zignorować ostrzeżenie o tym.

Ograniczenia dotyczące odsunięcie może zostać złagodzony 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ć.

-Długo-długi
Ostrzegaj, jeśli długie długie używany jest typ. Umożliwia to albo -pedantyczny 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 variadic są używane w pedantycznym trybie ISO C90 lub w alternatywnej składni GNU
w pedantycznym trybie ISO C99. To jest domyślne. Aby zablokować komunikaty ostrzegawcze, użyj
-Wno-variadic-makra.

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

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

-Wvolatile-var-rejestr-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 były w stanie efektywnie obsłużyć kodu. Często problemem jest to, że
Twój kod jest zbyt duży lub zbyt skomplikowany; GCC odmówi optymalizacji programów, gdy
sama optymalizacja 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
-pedantyczny, który można wyłączyć za pomocą -Wno-znak-wskaźnika.

-Ochraniacz stosu
Ta opcja jest aktywna tylko wtedy, gdy -fstack-ochrona jest aktywny. Ostrzega o funkcjach
które nie będą chronione przed rozbiciem stosu.

-Wno-chlapacze
Pomijaj ostrzeżenia o konstrukcjach, których nie można oprzyrządować za pomocą -ochraniacz.

-Struny Woverlength
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 -pedantycznyi można go wyłączyć za pomocą -Wno-naddługość-strings.

-Wunsuffixed-float-stałe (Tylko C i Cel-C)
GCC wyśle ​​ostrzeżenie dla każdej zmiennoprzecinkowej stałej, która nie ma sufiksu. Kiedy
używane razem z -Wsystem-nagłówki ostrzeże o takich stałych w nagłówku systemu
pliki. Może to być przydatne podczas przygotowywania kodu do użycia z „FLOAT_CONST_DECIMAL64”
pragma z dziesiętnego rozszerzenia zmiennoprzecinkowego do C99.

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 spowoduje awarię innych debuggerów lub odmówi odczytania programu. Jeśli chcesz
aby mieć pewność, czy generować dodatkowe informacje, użyj -gstabs+,
-gtabs, -gxcoff+, -gxcofflub -GVM (Patrz niżej).

GCC pozwala na użycie -g w -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 zostać wykonane, ponieważ obliczają stałe wyniki lub ich wartości były już w
ręka; niektóre wypowiedzi mogą być wykonywane w różnych miejscach, ponieważ zostały przeniesione z
pętle.

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.

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

-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ększy rozmiar informacji debugowania
nawet o czynnik dwa.

-fno-sekcja-typów-debugowania
Domyślnie podczas korzystania z DWARF v4 lub nowszych kości DIE zostaną umieszczone we własnych
Sekcja .debug_types zamiast umieszczania ich w sekcji .debug_info. To jest
bardziej efektywne jest umieszczenie ich w oddzielnych sekcjach comdat, ponieważ linker będzie wtedy
w stanie usunąć duplikaty. Ale nie wszyscy konsumenci DWARF obsługują sekcje .debug_types
jeszcze.

-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). To jest
format używany przez DBX w IRIX 6. Wartość wersja może wynosić 2, 3 lub 4; ten
domyślna wersja to 2.

Zauważ, że w DWARF w wersji 2 niektóre porty wymagają i zawsze będą używać niektórych nie-
sprzeczne rozszerzenia DWARF 3 w tabelach rozwijania.

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.

-gno-record-gcc-przełączniki
Nie zezwalaj na dołączanie opcji wiersza polecenia do atrybutu DW_AT_producer w DWARF
informacje debugowania. To jest ustawienie domyślne.

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

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

-gpoziom
-ggdbpoziom
-gtabspoziom
-gcoffpoziom
-gxcoffpoziom
-GVMpoziom
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, ale bez informacji o zmiennych lokalnych i bez numerów wierszy.

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 spowodowałoby ich wygenerowanie,
lub włącz go na poziomie 2 w przeciwnym razie. Pozycja tego argumentu w wierszu poleceń
nie ma znaczenia, zaczyna obowiązywać po przetworzeniu wszystkich innych opcji i tak się dzieje
tylko raz, bez względu na to, ile razy jest podawany. Jest to przeznaczone głównie do użytku
w -fcompare-debugowanie.

-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 zostanie określona przez dołączenie
".gkd" do nazwy pliku wyjściowego kompilacji.

-fcompare-debugowanie[=optuje]
Jeśli podczas kompilacji nie wystąpi żaden błąd, uruchom kompilator po raz drugi, dodając optuje i
-fcompare-debug-sekunda 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-debugowanie. 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-debugowanie testowanie, zestaw GCC_COMPARE_DEBUG powiedzieć
-fcompare-debug-not-overrided, który GCC odrzuci jako nieprawidłową opcję w dowolnym
rzeczywista kompilacja (zamiast wstępnego przetwarzania, montażu lub łączenia). Aby uzyskać tylko
ostrzeżenie, ustawienie GCC_COMPARE_DEBUG do -w%n-fcompare-debug nie zastąpione zrobi.

-fcompare-debug-sekunda
Ta opcja jest niejawnie przekazywana do kompilatora dla drugiej żądanej kompilacji
by -fcompare-debugowaniewraz 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 DWARF2, eliminując zduplikowane informacje o każdym z nich
symbol. Ta opcja ma sens tylko podczas generowania informacji debugowania DWARF2
w -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 zdefiniowano strukturę.

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

Ta opcja działa tylko z DWARF 2.

-femit-struct-debug-zmniejszono
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 zdefiniowano 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-szczegółowe po więcej szczegółów
kontrola.

Ta opcja działa tylko z DWARF 2.

-femit-struct-debug-szczegółowe[=lista specyfikacji]
Określ typy podobne do struktury, dla których kompilator wygeneruje informacje debugowania.
Celem jest zmniejszenie zduplikowanych informacji debugowania struktury między różnymi obiektami
pliki w tym samym programie.

Ta opcja jest szczegółową wersją -femit-struct-debug-zmniejszono i
-femit-struct-debug-base only, który zaspokoi większość 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,
gdy użycie niekompletnej struktury byłoby legalne, użycie jest pośrednie. Przykładem jest
struct pierwszej bezpośredni; struct drugiej * 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-szczegółowe jeszcze ich nie wdraża.

Trzecie słowo określa pliki źródłowe dla tych struktur, dla których kompilator
wyemituje informacje debugowania. Wartości Żaden i 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 typy zadeklarowane w foo.c i foo.h będzie miał informacje debugowania, ale
typy zadeklarowane w innym nagłówku nie będą. Wartość sys oznacza 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-ciągi
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=nowa
Podczas kompilacji plików w katalogu stary, zapisz informacje debugowania opisujące je jako
in nowa zamiast.

-fno-karzeł2-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.

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

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

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

· Jeden lub więcej kwalifikatorów: „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
nazwa pomocnicza.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 nazwa pomocnicza 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 przypadku optymalizacji ukierunkowanych na profil, ponownie skompiluj pliki źródłowe z tym samym
opcje optymalizacji i generowania kodu plus -prawdopodobieństwa-oddziału.

· Do analizy pokrycia testowego użyj gcv do generowania informacji czytelnych dla człowieka z
dotychczasowy .gcnr i .gcda pliki. Zapoznaj się z gcv 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 gcv 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ę nazwa pomocnicza.gcnr. Zapoznaj się z
-f-łuki-profilu opcja powyżej dla opisu nazwa pomocnicza i instrukcje, jak
generować dane pokrycia testowego. Dane pokrycia będą ściślej pasować do plików źródłowych,
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, a tym samym dbg_cnt()
zwraca true zawsze, chyba że górna granica jest ustawiona przez tę opcję. np. Z
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) zwróci true tylko dla pierwszych 10
modły

-wykonalne-uprzejmy-przechodzić
-fwyłącz-uprzejmy-przechodzić=lista-zakresów
Jest to zestaw opcji debugowania, które są używane do jawnego wyłączania/włączania
optymalizacja przechodzi. Dla użytkowników kompilatorów regularne opcje włączania/wyłączania przepustek
powinien być użyty zamiast tego.

*<-fdisable-ipa-przechodzić>
Wyłącz ipa pass 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 przez 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ł cgraph funkcji jest uid is
mieszczący się w jednym z określonych przedziałó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-przepustki.

*<-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 ipa pass 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.

**<-fenable-rtl-przechodzić>
**<-fenable-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.

# 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ć
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. Zwróć uwagę, że numer przepustki to
obliczana statycznie, gdy przepustki są rejestrowane w menedżerze przepustek. Więc
numeracja nie jest związana z dynamiczną kolejnością wykonywania przejść. W szczególności,
karta instalowana przez wtyczkę może mieć liczbę ponad 200, nawet jeśli jest wykonywana dość
wcześnie. nazwa zrzutu jest generowany z nazwy pliku wyjściowego, jeśli jawnie
określony i nie jest wykonywalny, w przeciwnym razie jest to podstawowa nazwa źródła
plik. Te przełączniki mogą mieć różne efekty, gdy -E służy do wstępnego przetwarzania.

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ć i 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 i -fdump-rtl-btl2 włącz zrzucanie po celu dwóch gałęzi
optymalizacja obciążenia przechodzi.

-fdump-rtl-obejście
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 i -fdump-rtl-cse2 umożliwić zrzut po dwóch wspólnych pod-
eliminacja ekspresji 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 i -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 i -fdump-rtl-fwprop2 włącz zrzucanie po dwóch do przodu
propagacja przechodzi.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 i -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-pętla2
-fdump-rtl-pętla2 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-regmove
Zrzuć po przejściu ruchu rejestru.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 i -fdump-rtl-sched2 włącz zrzucanie po podstawowym bloku
planowanie przechodzi.

-fdump-rtl-zobacz
Zrzut po usunięciu rozszerzenia znaku.

-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
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 i
-fdump-rtl-split5 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 i -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
zastosowano alternatywę. 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.

-dw 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ą VCG do
plik.pass.vcg.

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

-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-przepustki
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 spowoduje zsumowanie liczników z całej jednostki kompilacji, gdy
-Detale zrzuci każde zdarzenie, gdy przepustki je wygenerują. Domyślnie bez
Opcją jest zsumowanie liczników dla każdej skompilowanej funkcji.

-fdump-drzewo-wyłącznik
-fdump-drzewo-wyłącznik-Opcje
Kontroluj zrzucanie na różnych etapach przetwarzania drzewa języka pośredniego, aby
plik. Nazwa pliku jest generowana przez dodanie specyficznego dla przełącznika sufiksu do
nazwa pliku źródłowego, a plik jest tworzony w tym samym katalogu, co plik wyjściowy.
Jeśli -Opcje używany jest formularz, Opcje to lista - oddzielne opcje, które kontrolują
szczegóły wysypiska. Nie wszystkie opcje mają zastosowanie do wszystkich zrzutów; te, które są
nieistotne zostaną zignorowane. 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.

nazwa
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
Zabronić zrzucania członków zakresu lub organu funkcji tylko dlatego, że
zakres został osiągnięty. Zrzucaj takie przedmioty tylko wtedy, gdy są bezpośrednio dostępne przez
jakąś inną ścieżką. Podczas zrzucania ładnie zadrukowanych drzew ta opcja zapobiega zrzucaniu
organy struktur kontrolnych.

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

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

vops
Włącz pokazywanie wirtualnych operandów dla każdej instrukcji.

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

scew
Włącz pokazywanie szczegółów analizy ewolucji skalarnej.

cała kolekcja Włącz wszystkie opcje z wyjątkiem surowy, szczupły, gadatliwy i linia nr.

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.

vcg Zrzuć wykres przepływu sterowania dla każdej funkcji do pliku w formacie VCG. Plik
nazwa jest tworzona przez dołączenie vcg do nazwy pliku źródłowego. Zauważ, że jeśli plik
zawiera więcej niż jedną funkcję, wygenerowany plik nie może być użyty bezpośrednio przez
VCG. Będziesz musiał wyciąć i wkleić wykres każdej funkcji do osobnego
plik jako pierwszy.

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
wolny do nazwy pliku źródłowego.

kopia
Zrzucaj drzewa po rozmnożeniu kopii. Nazwa pliku jest tworzona przez dołączenie .copyprop
do nazwy pliku źródłowego.

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

chlapacz
Zrzuć każdą funkcję po dodaniu oprzyrządowania chlapacza. Nazwa pliku została stworzona przez
dołączanie .chlapacz 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.

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

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

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

wektor
Zrzuć każdą funkcję po zastosowaniu wektoryzacji pętli. Nazwa pliku jest stworzona
przez dołączenie .vekt 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.

-ftree-vectorizer-verbose=n
Ta opcja kontroluje ilość danych wyjściowych debugowania, które drukuje wektoryzator. Ten
informacje są zapisywane z błędem standardowym, chyba że -fdump-drzewo-wszystkie or -fdump-drzewo-vect
jest określony, w którym to przypadku jest wyprowadzany do zwykłego pliku z listą zrzutów, .vekt. Forum
n=0 nie są zgłaszane żadne informacje diagnostyczne. Gdyby n=1 wektoryzator zgłasza każdą pętlę
które zostały zwektoryzowane i całkowitą liczbę pętli, które zostały zwektoryzowane. Gdyby n=2
wektoryzator zgłasza również niewektoryzowane pętle, które przeszły pierwszą fazę analizy
(vect_analyze_loop_form) - tj. policzalne, najbardziej wewnętrzne, pojedyncze bb, pojedyncze wejścia/wyjścia
pętle. To jest ten sam poziom szczegółowości, który -fdump-tree-vect-stats zastosowań. Wyższy
Poziomy szczegółowości oznaczają albo więcej informacji zrzuconych dla każdej zgłoszonej pętli, albo takie same
ilość informacji zgłoszonych dla większej liczby pętli: if n=3, model kosztów wektoryzatora
informacje są zgłaszane. Gdyby n=4, informacje związane z wyrównaniem są dodawane do
raporty. Gdyby n=5, informacje związane z odniesieniami do danych (np. zależności pamięci, pamięć
wzorce dostępu) są dodawane do raportów. Gdyby n=6, wektoryzator zgłasza również nie-
zwektoryzowane najbardziej wewnętrzne pętle, które nie przeszły pierwszej fazy analizy (tzn. mogą nie
być policzalne lub może mieć skomplikowany przepływ sterowania). Gdyby n=7, wektoryzator zgłasza
również niewektoryzowane pętle zagnieżdżone. Gdyby n=8, informacje związane z SLP są dodawane do
raporty. Do n=9, wszystkie informacje generowane przez wektoryzator podczas analizy
i raportowana jest transformacja. To jest ten sam poziom szczegółowości, który
-fdump-drzewo-vect-szczegóły używa.

-frandom-ziarno=ciąg
Ta opcja zapewnia ziarno, którego GCC używa, gdy w innym przypadku używa liczb losowych.
Służy do generowania pewnych nazw symboli, które muszą być różne w każdym
skompilowany plik. Służy również do umieszczania unikalnych stempli w plikach danych pokrycia i
pliki obiektowe, które je tworzą. Możesz użyć -frandom-ziarno możliwość produkcji
odtwarzalnie identyczne pliki obiektowe.

Połączenia ciąg 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.

W razie zamówieenia projektu n większe od zera, -fsched-gadatliwy wyświetla te same informacje, co
-fdump-rtl-sched1 i -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.

-zapisz-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 w -c
-zapisz-temps produkowałby pliki foo.i i foo.s, jak również fuo.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ń, -zapisz-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 -zapisz-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 i fuo.o są zapisywane jednocześnie przez oba kompilatory.

-save-temps=obiekt
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=obiekt przełącznik zachowuje się jak -zapisz-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 katalog2/yfoobar

stworzyłby foo.i, foo.s, reż/xbar.i, reż/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 będą
tworzone i utrzymywane, ale na końcu odrzucone.

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

-drukuj wiele katalogów
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-katalog
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 przyrostek lib 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
Jak -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 -defaultlibs 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 będzie szukać ---i nie robić 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, który będzie 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 sufiks
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.

-specyfikacja zrzutu
Wydrukuj wbudowane specyfikacje kompilatora ---i nie rób nic więcej. (Jest używany, gdy
Samo GCC jest budowane.)

-feliminuj-nieużywane-typy-debugowania
Normalnie, podczas tworzenia wyjścia DWARF2, GCC wyemituje informacje debugowania dla wszystkich
typy zadeklarowane w jednostce kompilacji, niezależnie od tego, czy faktycznie są
używane w tej jednostce kompilacji. Czasami jest to przydatne, na przykład jeśli w debugerze
chcesz rzutować wartość na typ, który w rzeczywistości nie jest używany w twoim programie (ale jest
zdeklarowany). Częściej jednak skutkuje to znaczną ilością zmarnowanej przestrzeni.
Dzięki tej opcji, GCC uniknie tworzenia wyjścia symbolu debugowania dla typów, które są
nigdzie nie jest używany w kompilowanym pliku źródłowym.

Opcje Że Control 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 można oczekiwać 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
w -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 -fporównaj-elim -fcprop-rejestry -fdce -fdefer-pop -fopóźniona gałąź
-fdse -odgadnięcie-gałęzi-prawdopodobieństwa -fif-konwersja2 -fif-konwersja -fipa-pure-const
-fipa-profil -Fipa-referencja -fmerge-stałe -fsplit-szerokie typy -fttree-bit-ccp
-fttree-wbudowany-call-dce -fttree-ccp -ftree-ch -fttree-copyrename -czterech-dce
-bez-dominujący-opcje -ftree-dse -Ftree-forwprop -bezpłatny -fttree-phiprop -ftree-sra
-czterech-pta -fraterka -zabawa-na-czas

-O też się włącza -fomit-wskaźnik-ramki 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-sprawdzanie-zerowego-wskaźnika -fdewirtualizuj -kosztowna-optymalizacje -fgcse
-fgcse-lm -finline-małe-funkcje -findirect-wstawianie -fipa-śra
-foptimize-rodzeństwo-połączenia -częściowa inlining -f wizjer2 -frgmove -bloki-freorder
-funkcje-freorder -frerun-cse-po-pętli -fsched-interblok -fsched-spec
-fschedule-insns -fharmonogram-insns2 -Fstrict-aliasing -przepełnienie-przepełnienie
-konwersja-przełącznika-ftree -Ftree-tail-scalanie -bezpłatny -ftree-vrp

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
dotychczasowy -finline-funkcje, -funswitch-pętle, -fprzewidywalne-wspólne, -fgcse-po-przeładowaniu,
-ftree-wektoryzuj, -bezpłatna-częściowa-przed i -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-tablice -wersja-ftree-vect-loop

-Oszybko
Zignoruj ​​ścisłe przestrzeganie norm. -Oszybko 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 i -fstack-tablice.

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 -fuuu byłby -fno-foo. Na stole
poniżej wymieniony jest tylko jeden z formularzy --- ten, którego zwykle używasz. Możesz się domyślić
Wyjdź z drugiej formy, usuwając 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-default-inline
Nie twórz domyślnie funkcji składowych wbudowanych tylko dlatego, że są one zdefiniowane wewnątrz
zakres klasy (tylko C++). W przeciwnym razie, gdy określisz -O, zdefiniowane funkcje składowe
wewnątrz zakresu klasy są domyślnie kompilowane w linii; czyli nie musisz dodawać inline
przed nazwą funkcji członkowskiej.

-fno-odroczenie-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-wskaźnik-ramki
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ę.

Począwszy od wersji 4.6 GCC, ustawienie domyślne (jeśli nie jest optymalizowane pod kątem rozmiaru) dla
32-bitowe cele Linux x86 i 32-bitowe cele Darwin x86 zostały zmienione na
-fomit-wskaźnik-ramki. Wartość domyślną można przywrócić do -fno-pomiń-wskaźnik-ramki by
konfigurowanie GCC za pomocą --enable-wskaźnik-ramki skonfigurować opcję.

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.

-fno-w linii
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-wstawianie
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 i -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-śra
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 i -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ą --parametr 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-funkcje, który dotyczy tylko
funkcje, które są zadeklarowane przy użyciu atrybutu „dllexport” lub declspec

-fkeep-inline-funkcje
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
odwołanie do zmiennej, niezależnie od tego, czy optymalizacja jest włączona, użyj
dotychczasowy -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 spowoduje zachowanie niezgodne z wymaganiami.

-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 planowanie modulo oparte na SMS z dozwolonymi ruchami rejestru. Za pomocą
ustawienie tej flagi, pewne krawędzie antyzależności zostaną usunięte, co spowoduje wyzwolenie
generowanie reg-moves w oparciu o analizę zakresu życia. Ta opcja to
skuteczne 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.

Wartość domyślna to -fbranch-count-rej.

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

-ochraniacz -fbłota -fmudflapir
W przypadku front-endów, które to obsługują (C i C++), instrumentuj wszystkie ryzykowne wskaźniki/tablice
operacje wyłuskiwania, niektóre standardowe funkcje łańcuchów/sterty z biblioteki i kilka innych
powiązane konstrukty z testami zakresu/ważności. Moduły tak oprzyrządowane powinny być
odporny na przepełnienia bufora, nieprawidłowe użycie sterty i niektóre inne klasy C/C++
błędy programowania. Instrumentacja opiera się na oddzielnej bibliotece wykonawczej
(libacja), który zostanie połączony z programem, jeśli -ochraniacz jest podawany w czasie połączenia.
Zachowanie programu instrumentalnego w czasie wykonywania jest kontrolowane przez OPCJE BŁOTNIKA
Zmienna środowiskowa. Zobacz "env MUDFLAP_OPTIONS=-help a.out" dla jego opcji.

Zastosowanie -fbłota zamiast -ochraniacz do kompilacji i linkowania, jeśli twój program jest wielo-
gwintowany. Posługiwać się -fmudflapirOprócz -ochraniacz or -fbłotaJeśli
Instrumentacja powinna ignorować odczyty wskaźnika. Daje to mniej oprzyrządowania (i
w związku z tym szybsze wykonanie) i nadal zapewnia pewną ochronę przed całkowitą pamięcią
uszkadza zapisy, ale umożliwia błędnie odczytywane dane propagować się w programie.

-przeskoki do nitki
Wykonuj optymalizacje, w których sprawdzamy, czy skok rozgałęzia się do lokalizacji, w której
znaleziono inne porównanie, które obejmuje pierwsze. Jeśli tak, pierwsza gałąź to
przekierowanie do miejsca docelowego drugiej gałęzi lub do punktu natychmiast
po nim, w zależności od tego, czy warunek jest prawdziwy czy fałszywy.

Włączone na poziomach -O2, -O3, -Os.

-fsplit-szerokie typy
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
instrukcji „if” z klauzulą ​​„else”, CSE będzie podążać za skokiem, 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
Kiedy -fgcse-lm jest włączona, globalna eliminacja wspólnego podwyrażenia będzie próbowała
przenieść ładunki, które są zabijane tylko przez sklepy, do siebie. To pozwala na pętlę
zawierające sekwencję ładowania/przechowywania, która ma zostać zmieniona na obciążenie poza pętlą, oraz a
kopiuj/przechowuj w pętli.

Domyślnie włączone, gdy włączone jest gcse.

-fgcse-sm
Kiedy -fgcse-sm jest włączone, zapis ruchu jest uruchamiany po globalnym wspólnym
eliminacja podwyrażeń. Ten przebieg będzie próbował usunąć sklepy z pętli. Kiedy
używany w połączeniu z -fgcse-lm, pętle zawierające sekwencję ładowania/przechowywania mogą być
zamieniony na ładunek przed pętlą i magazyn za pętlą.

Nie włączone na żadnym poziomie optymalizacji.

-fgcse-las
Kiedy -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
Kiedy -fgcse-po-przeładowaniu jest włączone, wykonywane jest nadmiarowe przejście eliminacji obciążenia
po przeładowaniu. Celem tego przepustki jest usunięcie zbędnych wycieków.

-optymalizacje funsafe-loop
Jeśli zostanie podany, optymalizator pętli założy, że indeksy pętli nie przepełnią 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. Za pomocą - Optymalizacje pętli Wunsafekompilator cię ostrzeże
jeśli znajdzie tego rodzaju pętlę.

-skoki przełajowe
Wykonaj przeskok krzyżowy. Ta transformacja ujednolica równoważny kod i
zapisz 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ń. Obejmuje to użycie
ruchów warunkowych, min, max, set flag i instrukcji abs oraz kilka sztuczek do wykonania
według standardowej arytmetyki. Wykorzystanie wykonania warunkowego na żetonach tam, gdzie jest
dostępne jest kontrolowane przez „if-conversion2”.

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.

-fdelete-sprawdzanie-zerowego-wskaźnika
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-zerowe-sprawdzanie wskaźnika 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ędzy procedurami (-fipa-cp). Włączony
na poziomach -O2, -O3, -Os.

-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 x86 na poziomach -O2, -O3.

-foptimize-rejestruj-przenieś
-frgmove
Próba ponownego przypisania numerów rejestrów w instrukcjach ruchu i jako operandy innych
proste instrukcje w celu zmaksymalizowania ilości wiązania rejestrów. To jest
szczególnie przydatne na maszynach z instrukcjami dwuargumentowymi.

Note -frgmove i -foptimize-rejestruj-przenieś są te same optymalizacje.

Włączone na poziomach -O2, -O3, -Os.

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

pierwszej Użyj wszystkich funkcji jako jednego regionu. Zwykle daje to najmniejszy kod
rozmiar i jest domyślnie włączony dla -Os or -O0.

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

-fopóźniona gałąź
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.

-fharmonogram-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ą rejestru.
Ma to sens tylko w przypadku planowania 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 w konsekwencji rejestr wycieków w rejestrze
przydział.

-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 zostaną przedwcześnie przeniesione,
-fsched-stalled-insns=0 oznacza, że ​​nie ma limitu liczby kolejek w kolejce, które można przenieść
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) zostanie zbadanych pod kątem zależności od przeciągnięcia
insn czyli kandydat do przedwczesnego usunięcia z kolejki zablokowanych insnów. Ten
ma wpływ tylko podczas drugiego przejścia terminowego i tylko wtedy, gdy
-fsched-stalled-insns Jest używane. -fno-sched-stalled-insns-dep odpowiada
-fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep bez wartości jest równoważne
do -fsched-stalled-insns-dep=1.

-fsched2-użyj-superbloków
Podczas planowania po alokacji rejestru należy używać algorytmu planowania superbloków.
Harmonogram superbloków umożliwia ruch w obrębie podstawowych granic bloków, co skutkuje szybszym
harmonogramy. Ta opcja jest eksperymentalna, ponieważ nie wszystkie opisy maszyn używane przez GCC
modelować procesor wystarczająco dokładnie, aby uniknąć niewiarygodnych wyników algorytmu.

Ma to sens tylko przy planowaniu po przydziale rejestru, czyli z
-fharmonogram-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 -fharmonogram-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 -fharmonogram-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 -fharmonogram-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 -fharmonogram-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 -fharmonogram-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 -fharmonogram-insns2 lub -O2
lub więcej.

-freschedule-modulo-scheduled-pętle
Planowanie modulo występuje przed tradycyjnym planowaniem, jeśli pętla była modulo
zaplanowane, możemy chcieć uniemożliwić późniejsze zmiany harmonogramów przepustek
harmonogram, używamy tej opcji, aby to kontrolować.

-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-rurociąg
Włącz potokowanie programowe najbardziej wewnętrznych pętli podczas planowania selektywnego. Ten
opcja nie ma wpływu, dopóki jeden z -fplanowanie-selektywne or -f planowanie-selektywne2 is
włączone.

-fsel-sched-potokowanie-zewnętrzne pętle
W przypadku pętli rurociągowych podczas planowania selektywnego, również zewnętrzne pętle rurociągu. Ten
opcja nie ma wpływu do -fsel-sched-rurociąg jest włączony.

-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 wartości, które mają być alokowane w rejestrach, które będą zaburzane przez wywołania funkcji,
emitując dodatkowe instrukcje zapisywania i przywracania rejestrów wokół takich wywołań.
Taka alokacja jest wykonywana tylko wtedy, gdy wydaje się, że daje lepszy kod niż by
w przeciwnym razie zostać wyprodukowane.

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.

-fkonserwuj-stosu
Spróbuj zminimalizować użycie stosu. Kompilator spróbuje wykorzystać mniej miejsca na stosie,
nawet jeśli to spowalnia program. Ta opcja oznacza ustawienie duży stos-
rama 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 i -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 i
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.

-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
Odkrywanie, które zmienne statyczne nie mają ucieczki, nie mogą uciec przed jednostką kompilacji.
Włączone 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 i -O3.

-fipa-cp-klon
Wykonaj klonowanie funkcji, aby wzmocnić stałą propagację między procedurami. Kiedy
włączone, międzyproceduralna stała propagacja wykona 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 --parametr wzrost-jednostek-ipcp=wartość). Ta flaga jest domyślnie włączona w
-O3.

-fipa-matrix-reorg
Wykonaj spłaszczanie i transpozycję macierzy. Spłaszczenie matrycy próbuje zastąpić
m-wymiarowa macierz z równoważną macierzą n-wymiarową, gdzie n < m. Ten
zmniejsza poziom pośredniości potrzebny do uzyskania dostępu do elementów matrycy. ten
druga optymalizacja to transpozycja macierzy, która próbuje zmienić kolejność
wymiary macierzy w celu poprawy lokalizacji pamięci podręcznej. Obie optymalizacje wymagają
-cały-program flaga. Transpozycja jest włączona tylko wtedy, gdy informacje dotyczące profilowania są
dostępny.

-umywalka
Wykonuj ruch sklepu do przodu na drzewach. Ta flaga jest domyślnie włączona w -O i
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.

-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-iteracje 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 i
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 i
wyższy.

-ftree-pętla-liniowa
Wykonuj przekształcenia wymiany pętli na drzewie. Taki sam jak -floop-wymiana. Używać
ta transformacja kodu, GCC musi być skonfigurowany z --z-ppl i --with-cloud do
włączyć infrastrukturę transformacji pętli Graphite.

-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łci pętlę tak, jakby użytkownik napisał:

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-ppl
i --with-cloud aby umożliwić infrastrukturę transformacji pętli Graphite.

-floop-strip-kopalnia
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(ja) = A(ja) + do
KONIEC

Lokowanie pasków pętli przekształci pętlę tak, jakby użytkownik napisał:

DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(ja) = A(ja) + do
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-ppl
i --with-cloud aby umożliwić infrastrukturę transformacji pętli Graphite.

-floop-blok
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łci pętlę tak, jakby użytkownik napisał:

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
będzie iterować 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-ppl
i --with-cloud aby umożliwić 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 CLooG, na przykład index
dzielenie i eliminacja martwego kodu w pętlach.

spłaszczyć
Usuwa strukturę zagnieżdżania pętli: przekształca gniazdo pętli w pojedynczą pętlę. Ten
transformacja może być użyteczna jako transformacja umożliwiająca wektoryzację i
równoległość. Ta funkcja jest eksperymentalna. Aby użyć tej transformacji kodu, GCC
musi być skonfigurowany z --z-ppl i --with-cloud aby włączyć pętlę Graphite
infrastruktura transformacji.

-floop-równolegle-wszystko
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;

zostanie przekształcony 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
ZA(I) = 0
B(ja) = A(ja) + ja
KONIEC

przekształca się w

DO I = 1, N
ZA(I) = 0
KONIEC
DO I = 1, N
B(ja) = A(ja) + ja
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 byłyby
trudne do obsługi na poziomie RTL (wywołania funkcji, operacje, które rozwijają się do nietrywialnych)
sekwencje insns). Z -funswitch-pętle porusza również argumenty warunków, które
są niezmiennicze poza pętlą, dzięki czemu możemy użyć tylko trywialnej analizy niezmienności
w pętli rozłączania. 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.

-fivopty
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 -pwątek, a zatem jest obsługiwany tylko w obiektach docelowych, które obsługują
-pwątek.

-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 i
wyższy.

-ftree-koalescencja-zmienne-inline
Powiedz hasło copyrename (zobacz -fttree-copyrename) próbować połączyć małego użytkownika-
również zdefiniowane zmienne, ale tylko wtedy, gdy były wbudowane w inne funkcje. To jest
bardziej ograniczona forma -ftree-coalescce-vars. Może to zaszkodzić informacjom debugowania takich
zmienne śródliniowe, ale zachowa zmienne funkcji śródliniowej poza
wzajemnie, tak aby z większym prawdopodobieństwem zawierały oczekiwane wartości w
sesja debugowania. To było domyślne w wersjach GCC starszych niż 4.7.

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

-ftree-wektoryzuj
Wykonaj wektoryzację pętli na drzewach. Ta flaga jest domyślnie włączona w -O3.

-ftree-slp-wektoryzacja
Wykonaj podstawową wektoryzację blokową na drzewach. Ta flaga jest domyślnie włączona w -O3 i
jeśli chodzi o komunikację i motywację -ftree-wektoryzuj jest włączony.

-wersja-ftree-vect-loop
Wykonuj wersjonowanie pętli podczas wektoryzacji pętli na drzewach. Gdy pojawi się pętla
być wektoryzowalnym, z wyjątkiem tego, że nie można określić wyrównania danych lub zależności danych
w czasie kompilacji generowane są wektory i niewektoryzowane wersje pętli
wraz z kontrolami w czasie wykonywania pod kątem wyrównania lub zależności w celu kontrolowania, która wersja jest
wykonany. Ta opcja jest domyślnie włączona, z wyjątkiem poziomu -Os gdzie jest wyłączony.

-fvect-model-kosztowy
Włącz model kosztów dla wektoryzacji.

-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-sprawdzanie-zerowego-wskaźnika jest włączony.

-naprawca
Wykonaj duplikację ogona, aby powiększyć rozmiar superbloku. Ta transformacja upraszcza
przepływ sterowania funkcji, który umożliwia innym optymalizacje wykonanie lepszej pracy.

-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. Ta opcja sprawia, że
kod jest większy i może, ale nie musi, przyspieszyć jego działanie.

-funroll-wszystkie-pętle
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-wszystkie-pętle implikuje
te same opcje co -funroll-pętle,

-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że
w przypadku, gdy treść pętli jest bardziej skomplikowana niż pojedynczy blok podstawowy, nie jest to
wiarygodny. Nie działa też w ogóle na niektórych architekturach z powodu
ograniczenia w przepustce CSE.

Ta optymalizacja jest domyślnie włączona.

-fzmienne-rozwijanie-w-rolce
Dzięki tej opcji kompilator utworzy wiele kopii niektórych zmiennych lokalnych
podczas rozwijania 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.

-fprzewidywalne-wspólne
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-tablice
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 i -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. -f wizjer2 włączone na poziomach -O2, -O3, -Os.

-fno-zgadnij-oddział-prawdopodobieństwo
Nie zgaduj prawdopodobieństw gałęzi za pomocą heurystyki.

GCC użyje heurystyki do odgadnięcia prawdopodobieństw gałęzi, jeśli nie są one dostarczone 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 __wbudowany_oczekiwany, a później
heurystyka zostanie użyta do odgadnięcia prawdopodobieństw gałęzi dla reszty przepływu sterowania
wykres, biorąc __wbudowany_oczekiwany informacje pod uwagę. Interakcje między
heurystyki i __wbudowany_oczekiwany może być złożona, a w niektórych przypadkach może być przydatne:
wyłącz heurystykę, aby efekty __wbudowany_oczekiwany są łatwiejsze
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.

-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 będzie 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;
}

Połączenia -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 założy:
że wyrażenie takie jak „i + 10 > i” zawsze będzie prawdziwe dla znaku „i”. Ten
założenie jest poprawne tylko wtedy, gdy przepełnienie ze znakiem jest niezdefiniowane, ponieważ wyrażenie jest fałszywe
jeśli "i + 10" przepełnia się, gdy używasz arytmetyki dopełniającej dwójki. Gdy ta opcja jest włączona
wykonać każdą próbę ustalenia, czy operacja na podpisanych liczbach zostanie przepełniona
muszą być napisane starannie, 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 i -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.

Połączenia -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ównałby się do następnej 32-bajtowej granicy tylko wtedy, gdy
można to zrobić, pomijając 23 bajty lub mniej.

-fno-align-funkcje i -falign-funkcje=1 są równoważne i oznaczają, że funkcje
nie zostaną 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 i -falign-etykiety=1 są równoważne i oznaczają, że etykiety nie będą
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.
Mamy nadzieję, że pętla zostanie wykonana wiele razy, co wynagrodzi wszelkie
wykonanie fikcyjnych operacji.

-fno-wyrównaj pętle i -Falign-loops=1 są równoważne i oznaczają, że pętle nie będą
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 i -falign-skoki=1 są równoważne i oznaczają, że pętle nie będą
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-najwyższy poziom-zmiana kolejności i -fno-kotwy-sekcji.

Domyślnie włączone.

-fno-najwyższy poziom-zmiana kolejności
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 odniesień, nie zostaną usunięte. 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.

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 będą już pozostawać 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. Gdyby złoto jest używany jako wtyczka linkera,
Atrybuty "zewnętrznie_widoczne" są automatycznie dodawane do funkcji (jeszcze nie zmienna)
z powodu prądu złoto problem), które są dostępne poza obiektami LTO zgodnie z
plik rozdzielczości wyprodukowany przez złoto. W przypadku innych linkerów, które nie mogą generować rozdzielczości
pliku, wyraźne atrybuty „zewnętrznie_widoczne” są nadal potrzebne. Chociaż ta opcja
jest równoważne z właściwym użyciem słowa kluczowego „static” w programach składających się z
pojedynczy plik, w połączeniu z opcją -flto ta flaga może być użyta do skompilowania wielu
programy na mniejszą skalę, ponieważ funkcje i zmienne stają się lokalne dla całości
połączona jednostka kompilacji, a nie dla samego pojedynczego pliku źródłowego.

Ta opcja oznacza -fcały-plik dla programów Fortran.

-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 należy określić w czasie kompilacji i w trakcie
ostatni link. 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 fuo.o i bar.o. Ostatnie wywołanie odczytuje kod bajtowy GIMPLE
od fuo.o i bar.o, łączy oba pliki w jeden wewnętrzny obraz i kompiluje
wynik jak zwykle. Od kiedy oboje fuo.o i 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 fuo.o i wzajemnie.

Innym (prostszym) sposobem włączenia optymalizacji czasu łącza jest:

gcc -o mójprog -flto -O2 foo.c bar.c

Powyższe generuje kod bajtowy dla foo.c i 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,
-flto flaga musi być przekazana zarówno do poleceń kompilacji, jak i linku.

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 -wtyczka-łącznika bezpieczników) 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.

Zauważ, że gdy plik jest skompilowany z -flto, wygenerowany plik obiektowy jest większy niż
zwykły plik obiektowy, ponieważ zawiera kody bajtowe GIMPLE i zwykły kod końcowy.
Oznacza to, że pliki obiektowe z informacjami LTO mogą być połączone jak normalny obiekt
pliki; Jeśli -flto nie jest przekazywany do linkera, żadne optymalizacje międzyproceduralne nie są
stosowany.

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 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -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 bez -flto, następnie mójprog nie jest zoptymalizowany.

Podczas tworzenia ostatecznej wersji binarnej za pomocą -flto, GCC stosuje tylko optymalizację czasu łącza
do tych plików, które zawierają kod bajtowy. Dlatego możesz mieszać i dopasowywać pliki obiektowe
oraz 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. Obecnie następujące opcje
są zapisywane w plikach kodu bajtowego GIMPLE: -fPIC, -fwspólny i wszystkie -m flagi docelowe.

W czasie łączenia opcje te są odczytywane i ponownie stosowane. Zwróć uwagę, że obecny
implementacja nie próbuje rozpoznać sprzecznych wartości dla tych opcji. Gdyby
różne pliki mają sprzeczne wartości opcji (np. jeden plik jest skompilowany z -fPIC
a inny nie), kompilator po prostu używa ostatniej wartości odczytanej z kodu bajtowego
pliki. Zaleca się zatem, aby skompilować wszystkie pliki biorące udział w
ten sam link z tymi samymi opcjami.

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.

Kolejną cechą LTO jest możliwość zastosowania optymalizacji międzyproceduralnych
na plikach napisanych w różnych językach. Wymaga to wsparcia na froncie językowym
kończyć się. Obecnie frontendy C, C++ i Fortran mogą emitować GIMPLE
kody bajtowe, więc coś takiego powinno działać:

gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o mójprog -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; wszystko, co musisz dodać, to -flto do wszystkich
kompiluj i łącz polecenia.

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 włączyć tę funkcję, użyj flagi -wtyczka-łącznika bezpieczników
w czasie połączenia:

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.

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 i -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 -wtyczka-łącznika bezpieczników).

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 będą
pracować ze starszą/nowszą wersją GCC.

Optymalizacja czasu łącza nie działa dobrze z generowaniem informacji debugowania.
łącząc -flto w -g jest obecnie eksperymentalny i oczekuje się, że będzie produkował źle
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.

Ta opcja jest domyślnie wyłączona

-flto-partycja=ALG
Określ algorytm partycjonowania używany przez optymalizator czasu łącza. Wartość to
albo "1to1", aby określić partycjonowanie odzwierciedlające oryginalne pliki źródłowe lub
"zrównoważony", aby określić partycjonowanie na porcje o jednakowej wielkości (jeśli to możliwe).
Określenie „brak” jako algorytmu całkowicie wyłącza partycjonowanie i przesyłanie strumieniowe. ten
wartość domyślna to „zrównoważony”.

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

-wtyczka-łącznika bezpieczników
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". Widzieć -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 i ranlib muszą obsługiwać linker
wtyczki umożliwiające w pełni funkcjonalne środowisko kompilacji (zdolne do budowania statycznych
biblioteki itp.).

Wartość domyślna to -ffat-lto-obiekty ale ta wartość domyślna ma się zmienić w przyszłości
wydawane, gdy środowiska z włączonymi wtyczkami linkera stają się bardziej powszechne.

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

-bezpiecznik-ld=złoto
Użyj złoto linker zamiast domyślnego linkera.

-bezpiecznik-ld=bfd
Użyj ld.bfd linker zamiast domyślnego linkera.

-fcprop-rejestry
Po podziale instrukcji alokacji rejestru i porejestrowej instrukcji alokacji, my
wykonać przepustkę 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 będzie
użyj heurystyki, aby poprawić lub wygładzić takie niespójności. Domyślnie GCC będzie
emitować 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 i -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żyje
bieżący katalog jako ścieżka, w ten sposób plik danych profilu pojawi się w tym samym
katalog jako 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: „-fprofile-arcs”, „-fprofile-values”, „-fvpt”.

If ścieżka jest określony, GCC przyjrzy się ścieżka aby znaleźć dane opinii o profilu
pliki. Widzieć -fprofil-katalog.

-f-użycie-profilu
-f-użycie-profilu=ścieżka
Włącz optymalizacje ukierunkowane na opinie profilu, a optymalizacje są ogólnie opłacalne
tylko wtedy, gdy dostępna jest opinia o profilu.

Włączone są następujące opcje: "-fbranch-prawdopodobieństwo", "-fvpt",
„-funroll-loops”, „-fpeel-loops”, „-ftracer”

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 przyjrzy się ścieżka aby znaleźć dane opinii o profilu
pliki. Widzieć -fprofil-katalog.

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, wówczas nadmierna precyzja będzie 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
Zestawy -fno-matma-errno, -funsafe-matematyczne optymalizacje, -finite-tylko matematyka,
-fno-zaokrąglanie-matematyka, -fno-sygnalizacji-nans i -fcx-ograniczony-zakres.

Ta opcja powoduje zdefiniowanie makra preprocesora „__FAST_MATH__”.

Ta opcja nie jest włączona przez żadnego -O opcja poza tym -Oszybko 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 i - 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 i -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 i -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 -fpodpisane-zera.

-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. Kiedy 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 i
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 i -f-użycie-profilu.

-fvpt
W połączeniu z -f-łuki-profilu, instruuje kompilator, aby dodał kod do zbierania
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ę
operacja 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 przyniesie największe korzyści procesorom dzięki
wiele rejestrów. W zależności od formatu informacji debugowania przyjętego przez cel,
jednak może to uniemożliwić debugowanie, ponieważ zmienne nie będą już pozostawać w
„rejestr domowy”.

Włączone domyślnie z -funroll-pętle i -pętle-odczuwania.

-naprawca
Wykonaj duplikację ogona, aby powiększyć rozmiar superbloku. Ta transformacja upraszcza
przepływ sterowania funkcji, który umożliwia 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 i
-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-wszystkie-pętle
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-wszystkie-pętle 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 utworzą większy obiekt i
wykonywalnych, a także będzie wolniejszy. Nie będziesz mógł używać "gprof" na wszystkich
systemów, jeśli podasz tę opcję i możesz mieć problemy z debugowaniem, jeśli:
określ 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-wyłącznie
Podczas przeprowadzania optymalizacji obciążenia rejestru docelowego oddziału nie używaj ponownie celu oddziału
rejestry w obrębie dowolnego bloku podstawowego.

-fstack-ochrona
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 wywołujące alloca oraz 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ść.

UWAGA: W Ubuntu 6.10 i nowszych wersjach ta opcja jest domyślnie włączona dla C, C++,
ObjC, ObjC++, jeśli żaden z -fno-ochrona stosu, -nostdlib, ani -wolnostojący jest
znaleziono.

-fstack-protector-all
Jak -fstack-ochrona z wyjątkiem tego, że wszystkie funkcje są chronione.

-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 obliczyłby adresy wszystkich trzech zmiennych, ale jeśli to skompilujesz
w -kotwy-fsekcji, uzyska dostęp do zmiennych ze wspólnego punktu zakotwiczenia
zamiast. 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ę.

--parametr 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 wstawia funkcji, które zawierają więcej niż pewną
liczba instrukcji. Niektóre z tych stałych można kontrolować w wierszu poleceń
używając --parametr 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 są podane
poniższa tabela:

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.

krawędzie max-crossjump
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 przeskakujesz, 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 więcej niż ta dowolna liczba instrukcji wynosi
wyszukiwane, oszczędność czasu na zapełnieniu przedziału opóźnienia będzie minimalna, więc przestań
badawczy. Rosnące wartości oznaczają bardziej agresywną optymalizację, dzięki czemu
wzrost czasu kompilacji z prawdopodobnie niewielką poprawą czasu wykonania.

wyszukiwanie na żywo z maksymalnym opóźnieniem
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óra zostanie przydzielona w celu:
przeprowadzić globalną optymalizację eliminacji wspólnych podwyrażeń. Jeśli więcej pamięci
niż jest to wymagane, optymalizacja nie zostanie wykonana.

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 wstawi lub usunie wyrażenie, a tym samym opuści
częściowo nadmiarowe obliczenia w strumieniu instrukcji. Domyślna wartość to
20.

maksymalna-długość-listy-oczekującej
Maksymalna liczba oczekujących zależności, które umożliwi planowanie przed opróżnieniem
aktualny stan i rozpoczęcie od nowa. Duże funkcje z kilkoma oddziałami lub połączeniami
może 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 weźmie pod uwagę przy wyrównywaniu. Tylko ten
wpływa na 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 kompilator nie będzie brał pod uwagę ich wstawiania. Do
te funkcje, inny (bardziej restrykcyjny) limit w porównaniu do funkcji
można zastosować zadeklarowaną inline. Wartość domyślna to 40.

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 --parametr 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 --parametr wzrost-inline-jednostek. Dla małych jednostek
może to być zbyt ciasne (rozważ jednostkę składającą się z funkcji A, która jest wbudowana i
B, który dzwoni do 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 jednostek składających się z
małe funkcje nieliniowe, jednak ogólny limit wzrostu jednostki jest potrzebny, aby
uniknąć wykładniczej eksplozji rozmiaru kodu. Tak więc dla mniejszych jednostek rozmiar to
wzrosła do --parametr duża jednostka-insns przed złożeniem wniosku --parametr 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 30, co ogranicza wzrost jednostki do 1.3-krotności oryginalnego rozmiaru.

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-rekurencyjne
max-inline-insns-recursive-auto
Określa maksymalną liczbę instrukcji out-of-line kopii samorekurencyjnej inline
funkcja może wzrosnąć, wykonując rekurencyjne wstawianie.

Dla funkcji zadeklarowanych inline --parametr max-inline-insns-rekurencyjne jest wzięty do
konto. Dla funkcji nie zadeklarowanej inline, rekurencyjne inline ma miejsce tylko wtedy, gdy
-finline-funkcje (zawarte w -O3) jest włączony i --parametr max-inline-insns-
rekurencyjne-auto jest używany. Wartość domyślna to 450.

max-inline-recursive-głębokość
max-inline-rekurencyjna-głębokość-auto
Określa maksymalną głębokość rekurencji używaną przez rekurencyjne wstawianie.

Dla funkcji zadeklarowanych inline --parametr max-inline-recursive-głębokość jest wzięty do
konto. Dla funkcji nie zadeklarowanej inline, rekurencyjne inline ma miejsce tylko wtedy, gdy
-finline-funkcje (zawarte w -O3) jest włączony i --parametr max-inline-rekurencyjne-
głębokość-auto jest używany. 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 będzie rekursywać się przez dane wywołanie
wyrażenie. Ten parametr ogranicza tworzenie wstawek tylko do wywoływania wyrażenia, którego
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ść
inlining dla kodu z dużą karą za abstrakcję. Wartość domyślna to 10.

max-wczesne-inliner-iteracje
max-wczesne-inliner-iteracje
Limit iteracji wczesnego inlinera. To zasadniczo ogranicza liczbę zagnieżdżonych
połączenia pośrednie mogą zostać rozwiązane na wczesnym etapie. Głębsze łańcuchy są nadal obsługiwane do późna
podszewka.

prawdopodobieństwo-udostępniania comdat
prawdopodobieństwo-udostępniania comdat
Prawdopodobieństwo (w procentach), że funkcja inline C++ z widocznością comdat będzie
współużytkowane przez wiele jednostek kompilacji. Wartość domyślna to 20.

Związane z pętlą min-vect
Minimalna liczba iteracji, przy której pętla nie zostanie zwektoryzowana, 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 będzie podnoszenie kodu z prostym
wyrażenia, tj. wyrażenia, które kosztują mniej niż gcse-bez ograniczeń-
koszt. Określenie 0 wyłączy przenoszenie prostych wyrażeń. Domyślny
wartość wynosi 10.

gcse-nieograniczony-koszt
Koszt, z grubsza mierzony jako koszt pojedynczej typowej instrukcji obsługi maszyny, w
które 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 będzie przenoszenie kodu. Określenie 0 pozwoli na wszystko
wyrażenia umożliwiające podróżowanie 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 pozwoli uniknąć
ograniczenie wyszukiwania, ale może spowolnić kompilację ogromnych funkcji. Domyślny
wartość wynosi 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-iteracje
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 powinna mieć pętla, jeśli ta pętla to
rozwinięta, a jeśli pętla jest rozwinięta, określa, ile razy kod pętli
jest rozwijany.

max-średnie-rozwinięte-insns
Maksymalna liczba instrukcji obciążona prawdopodobieństwem ich wykonania, która
pętla powinna mieć, jeśli ta pętla jest rozwinięta, a jeśli pętla jest rozwinięta, to
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 powinna mieć pętla, jeśli ta pętla jest zdarta,
a jeśli pętla jest obierana, określa, ile razy kod pętli jest obierany.

maksymalne-czasy-obierania
Maksymalna liczba peelingów pojedynczej pętli.

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-całkowicie-peel-loop-nest-głębokość
Maksymalna głębokość gniazda pętelki odpowiednia do całkowitego obierania.

max-unswitch-insns
Maksymalna liczba wejść w niekomutowanej pętli.

maksymalny poziom wyłączenia
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 dla zmiennych indukcyjnych poniżej wszystkich kandydatów
są brane pod uwagę dla każdego zastosowania w optymalizacji zmiennych indukcyjnych. Tylko najbardziej
odpowiedni kandydaci są brani pod uwagę, jeśli jest więcej kandydatów, aby uniknąć
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-zawsze-prune-cand-set-bound
Jeśli liczba kandydatów w zbiorze jest mniejsza od tej wartości, zawsze staramy się
usuń niepotrzebne iv z zestawu podczas jego optymalizacji po dodaniu nowego iv
do zestawu.

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-geq
Maksymalna liczba nierówności w systemie ograniczeń Omega. Domyślny
wartość wynosi 256.

omega-max-równ
Maksymalna liczba równości w systemie ograniczeń Omega. Wartość domyślna
to 128.

omega-max-dzikie-karty
Maksymalna liczba zmiennych wieloznacznych, jaką będzie w stanie wykonać solwer Omega
wstawić. Wartość domyślna to 18.

rozmiar tablicy mieszającej omega
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. Zobacz opcję ftree-vect-loop-version
po więcej informacji.

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. Zobacz opcję ftree-vect-loop-version dla
więcej informacji.

max-iteracje-do-śledzenia
Maksymalna liczba iteracji pętli algorytmu brute force do analizy
z # iteracji pętli, które próbuje ocenić.

hot-bb-count-ułamek
Wybierz ułamek maksymalnej liczby powtórzeń bloku podstawowego w programie
dany blok podstawowy należy uznać za gorący.

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ę ze
nieznany. Znaną liczbę iteracji przewidujemy poprawnie, natomiast niewiadomą
liczba iteracji średnio do około 10. Oznacza to, że pętla bez
granice wydawałyby się sztucznie zimne w stosunku do drugiego.

próg wyrównania
Wybierz ułamek maksymalnej częstotliwości wykonania bloku podstawowego w funkcji
dany blok podstawowy zostanie wyrównany.

wyrównywanie-iteracji-pętli
Oczekuje się, że pętla będzie iterować co najmniej wybraną liczbę iteracji
wyrównane.

znacznik-dynamic-pokrycie
Tracer-dynamic-pokrycie-informacje zwrotne
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.

Połączenia Tracer-dynamic-pokrycie-informacje zwrotne jest używany tylko wtedy, gdy opinia profilu jest
do dyspozycji. Rzeczywiste profile (w przeciwieństwie do szacowanych statycznie) są dużo
mniej zrównoważony, dzięki czemu próg ma większą wartość.

znacznik-max-kod-wzrost
Zatrzymaj powielanie ogona, gdy wzrost kodu osiągnie określony procent. To jest
raczej hojny argument, ponieważ większość duplikatów zostanie wyeliminowana później w cross
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ż to
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.

maksymalna-cse-długość-ścieżki
Maksymalna liczba podstawowych bloków na ścieżce uwzględniana przez cse. Wartość domyślna to 10.

max-cse-insns
Maksymalne instrukcje CSE procesu przed płukaniem. Wartość domyślna to 1000.

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-rozmiar sterty
Minimalny rozmiar śmietnika zanim zacznie się kłopocze zbierać
Śmieci. Pierwsze zbieranie następuje po rozszerzeniu sterty o ggc-min-rozwiń%
Poza ggc-min-rozmiar sterty. 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-lokalizacje-pamięci
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 podstawową zmianę kolejności bloków, aby zdecydować, czy użyć gałęzi bezwarunkowej
lub powielić kod w miejscu docelowym. Kod jest duplikowany, gdy jest szacowany
rozmiar jest mniejszy niż ta wartość pomnożona przez szacowany rozmiar bezwarunkowego
wskoczyć w gorące punkty programu.

Połączenia zmiana kolejności blokowania duplikatów opinii jest używany tylko wtedy, gdy opinia profilu jest
dostępne i mogą być ustawione 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. 0 - wyłącz
rozszerzenie regionu, N - wykonaj co najwyżej N iteracji. Wartość domyślna to 0.

max-sched-insn-conflikt-opóźnienie
Maksymalne opóźnienie konfliktu dla insn, które należy uwzględnić w przypadku ruchu spekulacyjnego.
Wartość domyślna to 3.

harmonogram-specyfikacja-prob-odcięcie
Minimalne prawdopodobieństwo powodzenia spekulacji (w procentach), więc spekulacja
zaplanowana zostanie insn. Wartość domyślna to 40.

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

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.

min-wirtualne-mappingi
Określa minimalną liczbę mapowań wirtualnych w przyrostowym aktualizatorze SSA
które należy zarejestrować, aby uruchomić heurystykę mapowania wirtualnego zdefiniowaną przez
współczynnik odwzorowań wirtualnych. Wartość domyślna to 100.

wirtualny-stosunek-mapowania
Jeśli liczba wirtualnych odwzorowań jest większa niż liczba wirtualnych odwzorowań
symboli wirtualnych do zaktualizowania, to przyrostowy aktualizator SSA przełącza się na a
pełna aktualizacja dla tych symboli. Domyślny współczynnik to 3.

ssp-rozmiar-bufora
Minimalny rozmiar buforów (tj. tablic), które otrzymają rozbijanie stosu
ochrona, 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.

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, którą będziemy traktować w sposób wrażliwy na pola
podczas analizy wskaźnikowej. Wartość domyślna to zero dla -O0 i -O1 i 100 dla -Os,
-O2 i -O3.

opóźnienie pobierania z wyprzedzeniem
Oszacuj średnią liczbę instrukcji wykonywanych przed pobieraniem wstępnym
kończy. Odległość, którą pobieramy 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.

użyj typów-kanonicznych
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 odmówi 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 spowoduje:
pozwalają na nieograniczoną długość zestawu.

sccvn-max-scc-rozmiar
Maksymalny rozmiar silnie połączonego komponentu (SCC) podczas przetwarzania SCCVN. Gdyby
ten limit zostanie osiągnięty, przetwarzanie SCCVN dla całej funkcji nie zostanie wykonane i
optymalizacje w zależności od tego zostaną wyłączone. Domyślny maksymalny rozmiar SCC to
10000.

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.

Regulatove-de-pętla IRA
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.

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.

pętla-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 będą wtedy obsługiwane przez
optymalizacje z wykorzystaniem 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-głębokość
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ąpi wskaźnik do agregatu jednym lub kilkoma nowymi parametrami
tylko wtedy, gdy ich łączny rozmiar jest mniejszy lub równy ipa-sra-ptr-czynnik-wzrostu
razy rozmiar oryginalnego parametru wskaźnika.

tm-max-rozmiar-agregatu
Podczas tworzenia kopii zmiennych lokalnych wątków w transakcji, ten parametr
określa rozmiar w bajtach po jakim będą zapisywane zmienne 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-blok or
-floop-strip-kopalnia, 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.

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.

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 na ładowanie-danych-wyścigów
Pozwól optymalizatorom wprowadzać nowe wyścigi danych przy obciążeniach. Ustaw na 1, aby zezwolić,
w przeciwnym razie na 0. Ta opcja jest domyślnie włączona, chyba że jest niejawnie ustawiona przez
-fmodel-pamięci= opcja.

zezwalaj-przechowuj-wyścigi-danych
Pozwól optymalizatorom wprowadzić nowe wyścigi danych w sklepach. Ustaw na 1, aby zezwolić,
w przeciwnym razie na 0. Ta opcja jest domyślnie włączona, chyba że jest niejawnie ustawiona przez
-fmodel-pamięci= opcja.

zezwól na wyścigi-załadowane-danych
Pozwól optymalizatorom wprowadzać nowe wyścigi danych na spakowanych ładunkach danych. Ustaw od 1 do
allow, w przeciwnym razie 0. Ta opcja jest domyślnie włączona, chyba że niejawnie ustawiona przez
dotychczasowy -fmodel-pamięci= opcja.

zezwalaj na wyścigi-danych-w-sklepie z pakietami
Pozwól optymalizatorom wprowadzać nowe wyścigi danych w spakowanych magazynach danych. Ustaw od 1 do
allow, w przeciwnym razie 0. Ta opcja jest domyślnie włączona, chyba że niejawnie ustawiona przez
dotychczasowy -fmodel-pamięci= opcja.

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

Opcje Sterowanie dotychczasowy 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 potrafi rozpoznać.

Jeśli chcesz przekazać opcję, która wymaga argumentu, musisz użyć -Xpreprocesor
dwa razy, raz dla opcji i raz dla argumentu.

-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 i csh,
-D'Nazwa(argumenty...)=definicja' działa.

-D i -U opcje są przetwarzane w kolejności podanej w wierszu poleceń. Wszystko
-makros filet i -zawierać filet opcje są w końcu przetwarzane -D i -U opcje.

-U Nazwa
Anuluj poprzednią definicję Nazwa, wbudowane lub wyposażone w -D opcja.

-niedef
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 i -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ć.

-Wundefa
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 Jak -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
Jak -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 -zapisz-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.

Połączenia -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- jest
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
Przetwarzanie 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 i -isysroot.

-iprefiks prefiks
Sprecyzować prefiks jako przedrostek dla kolejnych -izprefiksem opcje. Jeśli przedrostek
reprezentuje katalog, powinieneś dołączyć końcowy /.

-izprefiksem reż
-izprzedrostkiemprzed reż
Dodać reż do prefiksu określonego wcześniej za pomocą -iprefiksi dodaj wynikowy
do katalogu dołączania ścieżki wyszukiwania. -izprzedrostkiemprzed umieszcza go w tym samym miejscu -I
zrobiłbym; -izprefiksem 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 i
-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 i -isysroot.

-f-dyrektywy-tylko
Podczas przetwarzania wstępnego obsługuj dyrektywy, ale nie rozwijaj makr.

Zachowanie opcji zależy od -E i -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 i -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. Ta opcja jest eksperymentalna; w
przyszłej wersji GCC będzie domyślnie włączone dla C99 i C++.

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

-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
w -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 dowództwo
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ź.

-dZNAKI
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 Jak M z wyjątkiem dwóch aspektów: to robi nie zawierać predefiniowane makra, a to
Wyjścia obie dotychczasowy #definiować dyrektywy i wynik przetwarzania wstępnego. Oba rodzaje
wyjścia przejdź do standardowego pliku wyjściowego.

N Jak D, ale emitują tylko nazwy makr, a nie ich rozwinięcia.

I Wydajność #zawierać dyrektywy oprócz wyniku przetwarzania wstępnego.

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

Połączenia -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 i -ansi
opcje.

Dziewięć trygrafów i ich zamienniki to

Trigraf: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Zastąpienie: [ ] { } # \ ^ | ~

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

-Xasembler opcja
Przechodzić opcja jako opcja dla montera. Możesz użyć tego do dostarczenia specyficznego systemu
opcje asemblera, których GCC nie potrafi rozpoznać.

Jeśli chcesz przekazać opcję, która wymaga argumentu, musisz użyć -Xasembler 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.

-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, fuo.o
-lz bar.o przeszukuje bibliotekę z po pliku fuo.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 w lib i .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 -defaultlibs Jest używane.

-defaultlibs
Podczas łączenia nie należy używać standardowych bibliotek systemowych. Tylko biblioteki, które określisz
zostaną przekazane linkerowi, opcje określające powiązanie bibliotek systemowych, takie jak
jako „-static-libgcc” lub „-shared-libgcc” będą ignorowane. Standardowe pliki startowe
są używane normalnie, chyba że -nostartfiles jest używany. Kompilator może generować wywołania do
„memcmp”, „memset”, „memcpy” i „memmove”. Te wpisy są zwykle rozwiązywane przez
wpisy w libc. Te punkty wejścia powinny być zasilane przez jakiś 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 zostaną przekazane do konsolidatora, opcje
określanie powiązania bibliotek systemowych, takich jak "-static-libgcc" lub
"-shared-libgcc" zostanie zignorowane. 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 jakiś inny mechanizm, gdy to
opcja jest określona.

Jedna ze standardowych bibliotek ominięta -nostdlib i -defaultlibs 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 -defaultlibs powinieneś zwykle
sprecyzować -lgcc także. Gwarantuje to, że nie masz nierozwiązanych odwołań do
wewnętrzne podprogramy biblioteki GCC. (Na przykład, __Główny, używany do zapewnienia C++
zostaną wywołane konstruktory.)

-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 został użyty do wygenerowania kodu
(-fpie, -fSROKAlub podopcje modelu) po określeniu tej opcji.

-rdynamiczne
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 został użyty do wygenerowania kodu (-fpic, -fPIClub
podopcje modelu) po określeniu tej opcji.[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ła
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 będzie połączony 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-ramka-hdr, połączy udostępnioną wersję libgcc do bibliotek współdzielonych przez
domyślny. W przeciwnym razie wykorzysta linker i zoptymalizuje
łączenie z udostępnioną wersją libgcc, łącząc się ze statyczną wersją libgcc
domyślnie. Pozwala to na propagację wyjątków przez takie biblioteki współdzielone,
bez ponoszenia 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-libstdc++
Podczas g ++ program jest używany do łączenia programu w C++, zwykle automatycznie
link przeciwko libstdc++. Jeśli libstdc++ jest dostępna jako biblioteka współdzielona, ​​a
-statyczny opcja nie jest używana, spowoduje to połączenie z udostępnioną wersją
libstdc++. To normalnie jest w porządku. Czasami jednak warto zamrozić
wersja libstdc++ używane przez program bez przechodzenia do pełnej statyki
połączyć. ten -static-libstdc++ opcja kieruje g ++ sterownik do połączenia libstdc++
statycznie, bez konieczności statycznego łączenia innych bibliotek.

-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 def). 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,
dotychczasowy -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,wyjście.mapa 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=wyjście.mapa.

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.

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 zostanie zignorowana. Katalog nadal będzie
przeszukiwany, ale jako katalog systemowy w swojej normalnej pozycji w systemie zawiera łańcuch.
Ma to na celu upewnienie się, że procedura GCC, aby naprawić błędne nagłówki systemowe i kolejność
dla dyrektywy include_next nie zostały przypadkowo zmienione. Jeśli naprawdę potrzebujesz
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 #zawierać "filet"; nie są wyszukiwane #zawierać <filet>,
inaczej po prostu 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 i 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 podano, kierowca próbuje dwóch standardowych
przedrostki, /usr/lib/gcc/ i /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 sprawdzi, czy ścieżka dostarczona przez -B odnosi się do katalogu,
a jeśli to konieczne, doda 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ż plików dołączanych 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 zostanie zastąpiony przez [katalog/]uwzględnij. Ma to pomóc
ładowanie kompilatora.

-specyfikacje=filet
Przetwarzanie 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 normalnie szukałby nagłówków w / Usr / include i biblioteki w / Usr / lib,
zamiast tego będzie szukać katalog/usr/include i katalog/usr/lib.

Jeśli używasz zarówno tej opcji, jak i -isysroot opcja, to --główny system opcja będzie
dotyczą bibliotek, ale -isysroot opcja zostanie zastosowana do 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 będzie działać, ale aspekt biblioteczny nie.

-JA- Ta opcja została wycofana. Proszę użyć -Cytuję zamiast tego -I katalogi przed
dotychczasowy -JA- i usuń -JA-. Wszelkie katalogi, które określisz za pomocą -I opcje przed
-JA- opcje są przeszukiwane tylko dla przypadku #zawierać "filet"; nie są przeszukiwane
dla #zawierać <filet>.

Jeśli dodatkowe katalogi są określone za pomocą -I opcje po -JA-te
katalogi są przeszukiwane dla wszystkich #zawierać dyrektywy. (Zwykle cała kolekcja -I katalogi
są używane w ten sposób.)

Dodatkowo -JA- opcja blokuje użycie bieżącego katalogu (gdzie
bieżący plik wejściowy pochodzi) jako pierwszy katalog wyszukiwania dla #zawierać "filet".
Nie ma możliwości zignorowania tego efektu -JA-. Z -I. możesz określić wyszukiwanie
katalog, który był 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- i -nostdinc są niezależne.

Określanie cel Maszyna i 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 i 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.

Adaptewa Ś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 jeśli to zmniejsza lub zwiększa rozmiar kodu
może się różnić w zależności od przypadku.

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

-mcprzesuń
Włącz generowanie ruchów warunkowych.

-mnops=num
Wydzielać num nops 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ść 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 wolniej, 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, kompilując program z
inne przesunięcie stosu niż biblioteki, z którymi zostały skompilowane, generalnie nie będzie
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
rejestr 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. Domyślny
is -mlong-rozmowy.

-msmały16
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, chociaż wiele interfejsów funkcji bibliotecznych będzie:
nie mają wpływu, jeśli nie używają trybów wektorowych SIMD w miejscach, w których wpływają na rozmiar
i/lub wyrównanie 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 reg to r43 i r63,
które określają, aby używać tego rejestru jako rejestru stałego, a żaden, co oznacza, że ​​nie
służy do tego rejestr. Wartość domyślna to -m1reg-brak.

AAArch64 Opcje

Te opcje są zdefiniowane dla implementacji AArch64:

-mbig-endian
Generuj kod big-endian. Jest to ustawienie domyślne, gdy GCC jest skonfigurowane dla
aarch64_be-*-* target.

-tylko-general-regs
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
arch64-*-* 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 będzie obsługiwał niewyrównane odwołania do pamięci.

-momit-liść-wskaźnik-ramki
-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.

-marzec=Nazwa
Podaj nazwę architektury docelowej, opcjonalnie z jednym lub kilkoma przyrostkami
modyfikatory cech. Ta opcja ma postać -marzec=łuk{+[Nie]cecha}*, gdzie
tylko wartość dla łuk is armv8-a. Możliwe 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 zespołu. Ta opcja może być używana w połączeniu z lub zamiast -mcpu=
opcja.

-mcpu=Nazwa
Podaj nazwę procesora docelowego, opcjonalnie z dodatkiem jednej lub więcej funkcji
modyfikatory. Ta opcja ma postać -mcpu=cpu{+[Nie]cecha}*, gdzie to możliwe
wartości dla cpu jest ogólny, duży. Możliwe wartości dla cecha są udokumentowane w
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.

-mtune=Nazwa
Podaj nazwę procesora, dla którego chcesz dostroić wydajność. Kod zostanie dostrojony
tak jakby docelowy procesor był typu określonego w tej opcji, ale nadal używał
instrukcje zgodne z procesorem docelowym określonym przez a -mcpu= opcja. To
opcja nie może być uzupełniana przez modyfikatory elementów.

-Marsz i -mcpu modyfikatory cech

Modyfikatory funkcji używane z -Marsz i -mcpu może być jednym z następujących:

Crypto
Włącz rozszerzenie Crypto. Oznacza to, że zaawansowana karta SIMD jest włączona.

fp Włącz instrukcje zmiennoprzecinkowe.

sim
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 i
-mcpu=.

ARM Opcje

Te -m opcje są zdefiniowane dla architektur Advanced RISC Machines (ARM):

-mabi=Nazwa
Wygeneruj kod dla określonego ABI. Dopuszczalne wartości to: apcs-gnu, wszt., aaszt,
aapcs-linux i 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-wskaźnik-ramki ta opcja spowoduje, że ramki stosu nie będą
generowane dla funkcji liścia. Wartość domyślna to -mno-apcs-rama.

-maszt
To jest synonim słowa -mapcs-rama.

-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 zaczną się od rozpoznawalnego zestawu instrukcji (a właściwie jednej z
wybór z małego zestawu prologów różnych funkcji), a informacje te mogą być:
służy do zlokalizowania funkcji start if wewnątrz wykonywalnego fragmentu kodu. Domyślny
is -msched-prolog.

-mfloat-abi=Nazwa
Określa, który zmiennoprzecinkowy ABI ma być używany. Dopuszczalne wartości to: miękki, softfp i
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.

-mwords-little-endian
Ta opcja ma zastosowanie tylko podczas generowania kodu dla procesorów big-endian. Generować
kod dla kolejności słów little-endian, ale dla kolejności bajtów big-endian. To znaczy bajt
kolejność formularza 32107654. Uwaga: ta opcja powinna być używana tylko wtedy, gdy potrzebujesz
zgodność z kodem dla procesorów big-endian ARM generowanych przez wersje
kompilator przed wersją 2.8. Ta opcja jest teraz przestarzała.

-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, iwmmxt, iwmmxt2, ep9312.

-marzec=rodzimy powoduje, że kompilator automatycznie wykrywa architekturę kompilacji
komputer. Obecnie ta funkcja jest obsługiwana tylko w systemie Linux, a 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-a15, kora-r4, kora-r4f, kora-r5, Cortex-m4, Cortex-m3, Cortex-m1,
Cortex-m0, xskala, iwmmxt, iwmmxt2, ep9312, fa526, fa626, FA606TE, FA626TE, fmp626,
FA726TE.

-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 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 -dostroić). Gdzie ta opcja
jest używany w połączeniu z -Marsz or -dostroić, te opcje mają pierwszeństwo przed
odpowiednią część tej opcji.

Dopuszczalne nazwy dla tej opcji są takie same jak dla -dostroić.

-mcpu=ogólny-łuk jest również dopuszczalne i jest równoważne z -marzec=łuk
-mtune=ogólny-łuk. Zobaczyć -dostroić po więcej informacji.

-mcpu=natywny powoduje, że kompilator automatycznie wykrywa procesor komputera kompilacji. Na
obecnie ta funkcja jest obsługiwana tylko w systemie Linux i nie wszystkie architektury są
rozpoznane. Jeśli automatyczne wykrywanie nie powiedzie się, opcja nie ma żadnego efektu.

-mfpu=Nazwa
-mfpe=numer
-mfp=numer
Określa, jaki sprzęt zmiennoprzecinkowy (lub emulacja sprzętu) jest dostępny na
cel. Dopuszczalne nazwy to: fpa, fpe2, fpe3, politycznie niezależny, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neon, neon-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 i neon-vfpv4. -mfp i -mfpe są synonimami słowa -mfpu=fpnumer, Dla
kompatybilność ze starszymi wersjami GCC.

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 będą używane 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
Rozmiar wszystkich struktur i związków zostanie zaokrąglony w górę do wielokrotności liczby
bitów ustawionych 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-return
Wygeneruj wywołanie funkcji „przerwij” na końcu funkcji „noreturn”. To będzie
być 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 będzie znajdować się poza adresowaniem 64 megabajtów
zakres opartej na przesunięciu wersji instrukcji wywołania podprogramu.

Nawet jeśli ten przełącznik jest włączony, nie wszystkie wywołania funkcji zostaną przekształcone w długie wywołania.
Heurystyka polega na tym, że funkcje statyczne, funkcje, które mają krótkie połączenie atrybut,
funkcje, które są w zakresie a #pragma no_long_calls dyrektywa i funkcje
których definicje zostały już skompilowane w ramach bieżącej jednostki kompilacji, będą:
nie zamieniaj się w długie rozmowy. Wyjątkiem od tej reguły jest ta słaba funkcja
definicje, funkcje z długi telefon atrybut lub Sekcja atrybut i
funkcje, które są w zakresie a #pragma długie_rozmowy dyrektywy, zawsze będzie
zamienił się w długie rozmowy.

Ta funkcja nie jest domyślnie włączona. Określanie -mno-długie-rozmowy przywróci
zachowanie domyślne, podobnie jak umieszczanie wywołań funkcji w zakresie a #pragma
długie_rozmowy_wyłączone dyrektywa. Zauważ, że te przełączniki nie mają wpływu na sposób działania kompilatora
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. Wartość domyślna to R10, chyba że stos-
sprawdzanie jest włączone, gdy używany jest R9.

-mcirrus-fix-nieprawidłowy-insns
Wstaw NOP do strumienia instrukcji, aby obejść problemy z
nieprawidłowe kombinacje instrukcji Maverick. Ta opcja jest ważna tylko wtedy, gdy
-mcpu=ep9312 użyto opcji umożliwiającej generowanie instrukcji dla Cirrus
Koprocesor zmiennoprzecinkowy Maverick. Ta opcja nie jest domyślnie włączona, ponieważ
problem występuje tylko w starszych implementacjach Maverick. Wartość domyślna może być ponownie
włączone przez użycie -mno-cirrus-fix-invalid-insns przełącznik.

-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
słowo 0xff000000 + (t1 - t0)
ARM_POKE_FUNCTION_NAME
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
subfp, 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
-mam
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-współpraca
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-współpraca
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 dialekty są
obsługiwane --- gnu antylopa i 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-niewyrównany-dostęp
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, wtedy słowa w spakowanych strukturach danych będą dostępne
bajt na raz.

Atrybut ARM „Tag_CPU_unaligned_access” zostanie ustawiony w wygenerowanym pliku obiektowym
na prawdę lub fałsz, w zależności od ustawienia tej opcji. Jeśli nie jest wyrównany
dostęp jest włączony, wtedy symbol preprocesora „__ARM_FEATURE_UNALIGNED” również będzie
zdefiniowane.

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

AVR Opcje

-mmcu=mcu
Określ architekturę zestawu instrukcji Atmel AVR (ISA) lub typ MCU.

Wartość domyślna dla tej opcji to@tie{}"avr2".

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

„ś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{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

„śr4”
„Ulepszone” urządzenia z maksymalnie 8@tie{}KiB pamięci programu. mcu@krawat{}=
„atmega48”, „atmega48a”, „atmega48p”, „atmega8”, „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{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
„atmega16m1”, „atmega16u4”, „atmega161”, „atmega162”, „atmega163”, „atmega164a”,
„atmega164p”, „atmega165”, „atmega165a”, „atmega165p”, „atmega168”, „atmega168a”,
„atmega168p”, „atmega169”, „atmega169a”, „atmega169p”, „atmega169pa”, „atmega32”,
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
„atmega323”, „atmega324a”, „atmega324p”, „atmega324pa”, „atmega325”, „atmega325a”,
„atmega325p”, „atmega3250”, „atmega3250a”, „atmega3250p”, „atmega328”,
„atmega328p”, „atmega329”, „atmega329a”, „atmega329p”, „atmega329pa”,
„atmega3290”, „atmega3290a”, „atmega3290p”, „atmega406”, „atmega64”, „atmega64c1”,
„atmega64hve”, „atmega64m1”, „atmega640”, „atmega644”, „atmega644a”, „atmega644p”,
„atmega644pa”, „atmega645”, „atmega645a”, „atmega645p”, „atmega6450”,
„atmega6450a”, „atmega6450p”, „atmega649”, „atmega649a”, „atmega649p”,
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
„at90usb646”, „at90usb647”, „at94k”, „m3000”.

„śr51”
„Ulepszone” urządzenia z 128@tie{}KiB pamięci programu. mcu@tie{}= "atmega128",
„atmega128rfa1”, „atmega1280”, „atmega1281”, „atmega1284p”, „at90can128”,
„z 90usb1286”, „z 90usb1287”.

„śr6”
„Ulepszone” urządzenia z 3-bajtowym komputerem PC, tj. z ponad 128@tie{}KiB programu
pamięć. mcu@tie{}= "atmega2560", "atmega2561".

„Avrxmega2”
Urządzenia „XMEGA” z ponad 8@tie{}KiB i do 64@tie{}KiB pamięci programu.
mcu@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
„atxmega32d4”, „atxmega32x1”.

„Avrxmega4”
Urządzenia „XMEGA” z ponad 64@tie{}KiB i do 128@tie{}KiB programu
pamięć. mcu@tie{}= "atxmega64a3", "atxmega64d3".

„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", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

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

„śr1”
Ten ISA jest implementowany przez minimalny rdzeń AVR i jest obsługiwany tylko przez asembler.
mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

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

-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 „-mrelax” po prostu dodaje opcję „--relax” do
wiersz poleceń konsolidatora, gdy konsolidator jest wywoływany.

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.

-mshort-połączenia
Ta opcja została wycofana i zostanie usunięta w GCC 4.8. Zobacz "-mrelax" dla
wymiana.

Użyj instrukcji „RCALL”/„RJMP” nawet na urządzeniach z 16@tie{}KiB lub więcej programu
pamięci, tj. na urządzeniach, które mają instrukcje „CALL” i „JMP”.

-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=avr2” lub „-mmcu=avr25” sterownik kompilatora
doda lub usunie tę opcję z wiersza poleceń kompilatora, ponieważ
kompilator wie, czy urządzenie lub architektura ma 8-bitowy wskaźnik stosu, a zatem
brak rejestru "SPH" 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 += stała
stary , X ; = *X
sbiw r26, const ; X -= stała

-mtiny-stos
Zmieniaj tylko dolne 8@tie{}bitów wskaźnika stosu.

"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" domyślnie 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 generował odgałęzienia
poprawnie wszystkie sytuacje. Zobacz opcję kompilatora "-mrelax" i opcję linler
"--zrelaksować się". Są przypadki narożne, w których linker powinien generować stuby, ale
przerywa bez relaksu i bez przydatnego 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 kodu startowego specyficznego dla użytkownika, 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 następujące dwa warunki są:
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 powinna być 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 specjalnych "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 zatem wyzwalane przez opcję wiersza polecenia "-mmcu=".

Aby uzyskać jeszcze więcej wbudowanych makr specyficznych dla AVR, zobacz AVR O imieniu Adres Spaces i 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, 102, 104, 105, 106, 107

dla mcu="śr2", "śr25", "śr3", "śr31", "śr35", "śr4", "śr5", "śr51", "śr6",
„avrxmega2”, „avrxmega4”, „avrxmega5”, „avrxmega6”, „avrxmega7”. Gdyby mcu
określa urządzenie, to wbudowane makro jest odpowiednio ustawiane. Na przykład z
"-mmcu=atmega8" makro zostanie zdefiniowane na 4.

„__AVR_Urządzenie__"
Ustawienie „-mmcu=urządzenie" definiuje to wbudowane makro, które odzwierciedla nazwę urządzenia.
Na 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 w "-mmcu=urządzenie" jest to, że ta ostatnia jest zawsze pisana małymi literami.

If urządzenie nie jest urządzeniem, ale tylko podstawową architekturą, taką jak „avr51”, to makro będzie
nie być zdefiniowany.

„__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 i jeśli nie ustawiono "-mshort-calls".

„__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 wpływa „-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=”, a w przypadku „-mmcu=avr2” i „-mmcu=avr25” także „-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 opcję wiersza polecenia „-mno-interrupts”.

„__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_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
Opcja konfiguracji "--with-avrlibc".

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
krzemowa wersja docelowego procesora Blackfin. Wszelkie obejścia dostępne dla
zostanie włączona ukierunkowana wersja krzemowa. Gdyby sirewizja is Żaden, nie ma obejść
włączony. Gdyby sirewizja is każdy, wszystkie obejścia dla docelowego procesora będą
włączony. Makro „__SILICON_REVISION__” jest zdefiniowane jako dwie cyfry szesnastkowe
reprezentujące główne i poboczne liczby w rewizji krzemowej. Gdyby sirewizja is
Żaden, „__SILICON_REVISION__” nie jest zdefiniowany. Gdyby sirewizja is każdyThe
„__SILICON_REVISION__” ma wartość 0xffff. Jeśli to opcjonalne sirewizja nie jest
używany, GCC zakłada najnowszą znaną krzemową wersję docelowego Blackfin
edytor.

Wsparcie dla bf561 jest niekompletna. Do bf561, Zdefiniowane jest tylko makro procesora.
Bez tej opcji bf532 jest domyślnie używany jako procesor. Odpowiednie
predefiniowane makra procesora dla cpu należy określić. I dla bfin-elf łańcuch narzędzi,
powoduje to, że sprzętowy BSP dostarczany przez libgloss jest linkowany w if -msim nie jest
dany.

-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 i -mfdpic, sugerować
-msim.

-momit-liść-wskaźnik-ramki
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-wskaźnik-ramki usuwa ramkę
wskaźnik na wszystkie funkcje, co może utrudnić debugowanie.

-mspecld-anomalia
Po włączeniu kompilator zapewni, że wygenerowany kod nie będzie 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 zapewni, że wygenerowany kod nie będzie zawierał CSYNC
lub instrukcje SSYNC 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-64 tys
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, że ​​są używane biblioteki współdzielone oparte 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 zostanie wygenerowany dla insns skoku i wywołania.

-id-biblioteki-mshared=n
Określono numer identyfikacyjny kompilowanej biblioteki współdzielonej opartej na identyfikatorze.
Określenie wartości 0 wygeneruje bardziej zwięzły kod, określenie innych wartości spowoduje:
wymusza przypisanie tego numeru do bieżącej biblioteki, ale nie ma już miejsca lub
mniej czasu 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-dane
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 przywróci
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.

-wielordzeniowy
Zbuduj samodzielną aplikację dla wielordzeniowego procesora Blackfin. Właściwe pliki startowe i
skrypty linków będą używane do obsługi wielordzeniowości. Ta opcja definiuje
„__BFIN_MULTICORE”. Może być używany tylko z -mcpu=bf561[-sirewizja]. To może być użyte
w -mcorea or -mcoreb. Jeśli jest używany bez -mcorea or -mcoreb, pojedynczy
Zastosowano model programowania aplikacji/dwurdzeniowego. W tym modelu główną funkcją
Rdzeń B powinien mieć nazwę coreb_main. Jeśli jest używany z -mcorea or -mcorebjeden
Aplikacja na podstawowy model programowania jest używana. Jeśli ta opcja nie jest używana, pojedynczy
używany jest podstawowy model programowania aplikacji.

-mcorea
Twórz samodzielną aplikację dla rdzenia A z BF561 przy użyciu jednej aplikacji na rdzeń
model programowania. Do obsługi Core A zostaną użyte odpowiednie pliki startowe i skrypty linków.
Ta opcja definiuje „__BFIN_COREA”. Musi być używany z -wielordzeniowy.

-mcoreb
Twórz samodzielną aplikację dla Core B z BF561 przy użyciu jednej aplikacji na rdzeń
model programowania. Do obsługi Core B zostaną użyte odpowiednie pliki startowe i skrypty linków.
Ta opcja definiuje „__BFIN_COREB”. Gdy ta opcja jest używana, coreb_main powinno być
używany zamiast głównego. Musi być używany z -wielordzeniowy.

-msdram
Zbuduj samodzielną aplikację dla SDRAM. Właściwe pliki startowe i skrypty linków będą
używany do umieszczania aplikacji w SDRAM-ie. Program ładujący powinien zainicjować SDRAM przed załadowaniem
aplikację do pamięci SDRAM. Ta opcja definiuje "__BFIN_SDRAM".

-mikplb
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 .bliskie dane sekcja, na którą wskazuje
zarejestrować „B14”. Umieść małe, niezainicjowane dane globalne i statyczne w .bss Sekcja,
który sąsiaduje z .bliskie dane Sekcja. Umieść małe dane tylko do odczytu w rodata
Sekcja. Odpowiednie sekcje używane dla dużych fragmentów danych to .fardane, .daleko
i .stała.

-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 dane globalne i statyczne w .fardane Sekcja,
i wszystkie niezainicjowane dane w .daleko Sekcja. Umieść wszystkie stałe dane w .stała


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 jest
v3, v8 i 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 jest
taki sam jak dla -marzec=typ architektury.

-mmax-ramka-stosu=n
Ostrzegaj, gdy ramka stosu funkcji przekracza n bajty.

-metax4
-metax100
Opcje -metax4 i -metax100 są synonimami słowa -marzec=v3 i -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 (brak opcji) układają (eliminują układy) dla stelażu 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 zmiennej lokalnej.

-mno-gotplt
-mgotplt
Z -fpic i -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.

-sym
Ta opcja, uznana za elf-osi cris, łączy się z wejściem-wyjściem
funkcje z biblioteki symulatora. Kod, dane zainicjowane i dane zainicjowane zerem
są przydzielane kolejno.

-sym2
Jak -sym, 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.

-mmak
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ów
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 model jest Blisko, daleko or średni. średni jest domyślny.
Jednakże, daleko nie działa, gdy wybrana jest opcja -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; utworzy plik obiektowy dla
pojedynczą architekturę, do której został zbudowany. GCC firmy Apple w sprawie Darwina tworzy
"grube" 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, zezwoli tylko na użycie instrukcji, które są ważne dla podtypu
plik, który generuje, więc nie możesz umieścić 64-bitowych instrukcji w a ppc750 plik obiektu.
Linker dla bibliotek współdzielonych, /usr/bin/libtool, nie powiedzie się i wyświetli błąd, jeśli zostaniesz o to poproszony
aby utworzyć bibliotekę współdzieloną 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 da 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
to kończy się na ".struktura". Nazwa frameworka to nazwa tego katalogu
z wyłączeniem ".struktura". Nagłówki związane z frameworkiem znajdują się w jednym z
te dwa katalogi, z „Nagłówki” przeszukiwane jako pierwsze. Rama podrzędna to
katalog framework, który znajduje się w frameworku „Ramy” informator. Zawiera
nagłówki subframeworku mogą pojawiać się tylko w nagłówku frameworka, który zawiera
subframework lub w siostrzanym nagłówku subframework. Dwie podstruktury są rodzeństwem, jeśli
występują w tych samych ramach. Rama podrzędna nie powinna mieć takiej samej nazwy jak a
ramy, ostrzeżenie zostanie wydane, jeśli zostanie to naruszone. Obecnie struktura podrzędna
nie może mieć subframeworków, w przyszłości mechanizm może zostać rozszerzony o wsparcie
ten. Standardowe frameworki można znaleźć w „/System/Biblioteka/Frame” i
„/Biblioteka/Ramy”. Przykład to wygląda jak „#include ",
gdzie Framework oznacza nazwę frameworka, a header.h znajduje się w
„Prywatne nagłówki” or „Nagłówki” katalogiem.

-Frameworkreż
Jak -F z wyjątkiem tego, że katalog jest traktowany jako katalog systemowy. Podstawowa różnica
między tym -Framework i -F czy to z? -Framework 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. Dla formatu debugowania STABS,
to umożliwia -feliminuj-nieużywane-symbole-debugowania. To jest domyślnie włączone.

-pełny
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-cxa-atexit, -fno-wyjątki, -fno-non-call-Exceptions, -fapple-kext, -fno-słaba
i -fno-rtti w stosownych przypadkach. Ten tryb również ustawia -mno-altivec, -msoft-float,
-fno-wbudowany i -mlong-gałąź dla celów PowerPC.

-mone-byte-bool
Zastąp ustawienia domyślne dla bool tak, że rozmiar(bool)==1. Domyślnie rozmiar (bool) is 4
podczas kompilacji dla Darwin/PowerPC i 1 podczas kompilacji dla Darwin/x86, więc ta opcja
nie ma wpływu na x86.

Ostrzeżenie: Połączenia -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
Generuj kod odpowiedni do szybkiego rozwoju. Potrzebne, aby umożliwić gdb, aby
dynamicznie ładuj pliki ".o" do już uruchomionych programów. -dane-bezpośrednie i
-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.

-program ładujący_pakiet plik wykonywalny
Ta opcja określa plik wykonywalny który będzie ładował plik wyjściowy kompilacji, który jest
połączony. Zobacz mężczyznę ld(1), aby uzyskać więcej informacji.

-dynamiczna biblioteka
Po przekazaniu tej opcji, GCC utworzy bibliotekę dynamiczną zamiast pliku wykonywalnego
podczas łączenia, używając Darwin libtool dowództwo.

-force_cpusubtype_ALL
Powoduje to, że plik wyjściowy GCC ma WSZYSTKO podtyp, zamiast jednego kontrolowanego przez
dotychczasowy -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
-lista_wyeksportowanych_symbolów
-lista plików
-płaska_przestrzeń nazw
-force_flat_przestrzeń_nazw
-headerpad_max_nazwy_instalacji
-baza_obrazu
-w tym
- nazwa_instalacji
-keep_private_externs
-multi_moduł
-zdefiniuj_wielokrotnie
-pomnóż_zdefiniowane_nieużywane
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefy
-noprebind
- edytuj powiązanie nosowe
-pagezero_size
-prebindować
- prebind_all_dwupoziomowe_moduły
-Pakiet_prywatny
-tylko_odczyt_relokacji
-wyrównanie przekroju
-sektoobiektsymbole
-dlaczego?
-seg1adres
-stwórz sektę
-sektoobiektsymbole
-sektora
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_tabela
-seg_addr_tabela_nazwa_pliku
-seglinkedytuj
-segprot
-segs_read_only_addr
-segs_read_write_addr
-pojedynczy_moduł
-statyczny
-sub_biblioteka
-sub_parasol
-dwupoziomowa_przestrzeń nazw
-parasol
-nieokreślony
-niewyeksportowana_lista_symbolów
-słabe_niezgodności_odniesień
-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 będzie używany do
wykonywać 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
podprogramów, te podprogramy będą wydawać operacje zmiennoprzecinkowe. Jeśli kompilujesz
dla alfa bez operacji zmiennoprzecinkowych, musisz upewnić się, że biblioteka jest
zbudowany tak, aby ich nie nazywać.

Zauważ, że implementacje Alpha bez operacji zmiennoprzecinkowych muszą mieć
rejestry zmiennoprzecinkowe.

-mfp-rej
-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
w -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 Jak u, ale instrukcje są oznaczone jako bezpieczne do ukończenia oprogramowania (zobacz
Podręcznik architektury Alpha w celu uzyskania szczegółowych informacji).

na Jak 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 -zakres_bezpieczny i
-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. W systemie DEC Unix ma to taki skutek, że
Zostaną połączone procedury biblioteki matematycznej zgodne z IEEE.

-mbuild-stałe
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, wypisze
jako literał i wygenerować 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ść).

Zazwyczaj użyjesz tej opcji do zbudowania dynamicznego programu ładującego biblioteki współdzielone. Samo
biblioteka współdzielona, ​​musi przenieść się w pamięci, zanim będzie mogła znaleźć zmienne
i stałych we własnym segmencie danych.

-malfa-as
-gaz
Wybierz, czy generować kod do złożenia przez asembler dostarczony przez dostawcę
(-malfa-as) lub przez asembler GNU -gaz.

-mbwx
-mno-bwx
-mcix
-mno-cix
-poprawka
-mno-poprawka
-mmmax
-mno-maks
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 żaden nie był
określony.

-mfloat-szczepionka
-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-jawne-relokacje
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
-powiększanie-danych
Kiedy -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 dane 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 -powiększanie-danych. 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 i -fPIC
sugeruje -powiększanie-danych.

-mały-tekst
-duży-tekst
Kiedy -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.
Kiedy -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
wybierze wartości domyślne dla zestawu instrukcji z procesora, który określisz.
Jeśli nie określisz typu procesora, GCC domyślnie wybierze procesor, na którym
kompilator został zbudowany.

Obsługiwane wartości dla typ_procesora jest

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 jest

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.

Grudzień Alfa/VMS Opcje

Te -m opcje są zdefiniowane dla implementacji DEC Alpha/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.

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

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

-mpodwójne
Użyj podwójnych instrukcji zmiennoprzecinkowych.

-mno-podwójny
Nie używaj podwójnych instrukcji zmiennoprzecinkowych.

-media
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 -fSROKA. 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 -fSROKA, 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.

-mtl
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 -fSROKA, 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 i -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 nop do poprzedniego pakietu.
Ta opcja działa tylko wtedy, gdy włączone jest pakowanie VLIW. Nie tworzy nowych
pakiety; po prostu dodaje nops 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.

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

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

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

-moptymalizuj składnię
Ten przełącznik usuwa zbędne instrukcje „membar” z kodu wygenerowanego 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-statystyki
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 i 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* i
*-*-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 i -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 i -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.

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

-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 jest
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 będzie 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.

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

-przeskok-opóźnienie
Wypełnij przedziały opóźnienia wywołań funkcji bezwarunkowymi instrukcjami skoku, modyfikując
wskaźnik powrotu dla wywołania funkcji, który ma być celem skoku warunkowego.

-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 będzie działać w obecności bibliotek współdzielonych lub funkcji zagnieżdżonych.

-mstały-zakres=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-sklep
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.

-gaz
Włącz używanie dyrektyw asemblera, które rozumie tylko GAS.

-mharmonogram=typ procesora
Kod harmonogramu zgodnie z ograniczeniami dla typu maszyny typ procesora. Wybory
dla typ procesora jest 700 7100, 7100LC, 7200, 7300 i 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-opc
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 powiedzenia podczas budowania wspólnego
Biblioteka. Jest to ustawienie domyślne, gdy GCC jest skonfigurowane, jawnie lub niejawnie, z
Konsolidator GNU. Ta opcja nie ma żadnego wpływu na wywołanie ld, tylko
zmienia jakie parametry są przekazywane do tego ld. Wywoływane ld jest określane przez
dotychczasowy --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-nazwa-programu=ld`.
Ta 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 powiedzenia podczas tworzenia biblioteki współdzielonej i
przebiegi +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
każdy efekt, na którym wywoływany jest ld, zmienia tylko parametry, które są do niego przekazywane
ld. Wywoływane ld jest określane przez --z-ld opcja konfiguracji, GCC
ścieżkę wyszukiwania programu, a na koniec przez użytkownika PATH. Linker używany przez GCC może być
drukowane za pomocą który gcc -print-nazwa-programu=ld`. Ta opcja jest dostępna tylko w
64-bit 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 -gaz i -mno-przenośny-runtime Opcje
razem pod HP-UX z linkerem SOM.

Zwykle nie jest pożądane używanie tej opcji, ponieważ obniży to wydajność.
Jednak może to być przydatne w dużych aplikacjach, szczególnie gdy częściowe linkowanie jest
używany do budowania aplikacji.

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-std jest 93, 95 i 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óć zmienną __xpg4_rozszerzona_maska w stosownych przypadkach. 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.

Intel 386 i AMD x86-64 Opcje

Te -m opcje są zdefiniowane dla rodziny komputerów i386 i x86-64:

-mtune=typ procesora
Dostrój do typ procesora wszystko, co dotyczy wygenerowanego kodu, z wyjątkiem ABI
oraz zestaw dostępnych instrukcji. Wybory dla typ procesora należą:

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
-dostroić opcja zamiast -mtune=ogólny. Ale jeśli nie wiesz dokładnie jaki procesor
użytkownicy Twojej aplikacji będą mieli, wtedy powinieneś skorzystać z tej opcji.

W miarę wdrażania nowych procesorów na rynku zachowanie tej opcji
ulegnie zmianie. Dlatego jeśli uaktualnisz do nowszej wersji GCC, kod
wygenerowana opcja zmieni się, aby odzwierciedlić procesory, które były najczęściej używane, gdy
ta wersja GCC została wydana.

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, -dostroić wskazuje podmiot przetwarzający (lub w tym przypadku
zbiór procesorów), dla których kod jest zoptymalizowany.

rodzimy
To wybiera procesor do dostrojenia w czasie kompilacji, określając procesor
typ kompilatora. Za pomocą -mtune=natywny wygeneruje zoptymalizowany kod
dla maszyny lokalnej pod ograniczeniami wybranego zestawu instrukcji.
Korzystanie z -marzec=rodzimy włączy wszystkie podzbiory instrukcji obsługiwane przez lokalny
komputer (stąd wynik może nie działać na różnych komputerach).

i386
Oryginalny procesor Intela i386.

i486
Procesor Intela i486. (Nie zaimplementowano harmonogramu dla tego układu.)

i586, Pentium
Procesor Intel Pentium bez obsługi MMX.

Pentium-MMX
Procesor Intel PentiumMMX oparty na rdzeniu Pentium z obsługą zestawu instrukcji MMX.

pentium pro
Procesor Intel PentiumPro.

i686
To samo co „ogólne”, ale gdy jest używane jako opcja „marsz”, zestaw instrukcji PentiumPro
zostanie użyty, więc kod będzie działał na wszystkich układach z rodziny i686.

pentium2
Procesor Intel Pentium2 oparty na rdzeniu PentiumPro z obsługą zestawu instrukcji MMX.

Pentium3, Pentium3m
Procesor Intel Pentium3 oparty na rdzeniu PentiumPro z zestawem instrukcji MMX i SSE
Wsparcie.

pentium m
Wersja procesora Intel Pentium3 o niskim poborze mocy z zestawem instrukcji MMX, SSE i SSE2
Pomoc. Używany przez notebooki Centrino.

Pentium4, Pentium4m
Procesor Intel Pentium4 z obsługą zestawu instrukcji MMX, SSE i SSE2.

Prescott
Ulepszona wersja procesora Intel Pentium4 z instrukcjami MMX, SSE, SSE2 i SSE3
ustaw wsparcie.

nocona
Ulepszona wersja procesora Intel Pentium4 z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2 i
Obsługa zestawu instrukcji SSE3.

core2
Procesor Intel Core2 z rozszerzeniami 64-bitowymi, instrukcje MMX, SSE, SSE2, SSE3 i SSSE3
ustaw wsparcie.

rdzeń7
Procesor Intel Core i7 z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 i
Obsługa zestawu instrukcji SSE4.2.

corei7-avx
Procesor Intel Core i7 z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Obsługa zestawu instrukcji SSE4.2, AVX, AES i PCLMUL.

rdzeń-avx-i
Procesor Intel Core z rozszerzeniami 64-bitowymi, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Obsługa zestawu instrukcji SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND i F16C.

atom
Procesor Intel Atom z rozszerzeniami 64-bitowymi, instrukcjami MMX, SSE, SSE2, SSE3 i SSSE3
ustaw wsparcie.

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.

atlon, Athlon-Tbird
Procesor AMD Athlon z MMX, 3dNOW!, ulepszonym 3DNow! i instrukcje pobierania wstępnego SSE
Wsparcie.

atlon-4, athlona-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 z rdzeniem AMD K8 z obsługą zestawu instrukcji x86-64. (To nadzbiory MMX,
SSE, SSE2, 3DNow!, ulepszone 3DNow! i rozszerzenia zestawu instrukcji 64-bitowych).

k8-sse3, opteron-sse3, athlon64-sse3
Ulepszone wersje k8, opteron i athlon64 z obsługą zestawu instrukcji SSE3.

amdfam10, Barcelona
Procesory z rdzeniem 10h z rodziny AMD 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 z rdzeniem 15h z rodziny AMD 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, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM i rozszerzenia zestawu instrukcji 64-bitowych.)

btver1
Procesory z rdzeniem 14h z rodziny AMD z obsługą zestawu instrukcji x86-64. (Ten
nadzbiory MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM i 64-bitowy zestaw instrukcji
rozszerzenia.)

wciągarka-c6
Procesor IDT Winchip C6, traktowany tak samo jak i486 z dodatkowym zestawem instrukcji MMX
Wsparcie.

wciągarka2
Procesor IDT Winchip2, traktowany tak samo jak i486 z dodatkowymi MMX i 3DNow!
obsługa zestawu instrukcji.

c3 Przez procesor C3 z MMX i 3DNow! obsługa zestawu instrukcji. (Żadne planowanie nie jest
zaimplementowany dla tego chipa.)

c3-2
Przez procesor C3-2 z obsługą zestawu instrukcji MMX i SSE. (Żadne planowanie nie jest
zaimplementowany dla tego chipa.)

geoda
Wbudowany procesor AMD z MMX i 3DNow! obsługa zestawu instrukcji.

Podczas wybierania konkretnego typ procesora zaplanuje rzeczy odpowiednio do tego
konkretnego układu, kompilator nie wygeneruje żadnego kodu, który nie działa na
domyślny typ maszyny bez -marzec=typ procesora używana opcja. Na przykład, jeśli
GCC jest więc skonfigurowane dla i686-pc-linux-gnu -mtune=pentium4 wygeneruje kod, który
jest dostrojony do Pentium4, ale nadal będzie działał na maszynach i686.

-marzec=typ procesora
Wygeneruj instrukcje dla typu maszyny typ procesora. Wybory dla typ procesora
tak samo jak dla -dostroić. Ponadto określenie -marzec=typ procesora sugeruje -mtune=typ procesora.

-mcpu=typ procesora
Przestarzały synonim słowa -dostroić.

-mfpmatematyka=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 kompilatora i386.

es Użyj skalarnych instrukcji zmiennoprzecinkowych obecnych w zestawie instrukcji SSE. Ten
zestaw instrukcji jest obsługiwany przez układy Pentium3 i nowsze, w linii AMD przez
Żetony Athlon-4, Athlon-xp i Athlon-mp. Wcześniejsza wersja instrukcji SSE
zestaw obsługuje tylko arytmetykę pojedynczej precyzji, a więc podwójne i rozszerzone-
arytmetyka precyzyjna jest nadal wykonywana przy użyciu 387. Późniejsza wersja, obecna tylko w
Pentium4 i przyszłe układy AMD x86-64 obsługują arytmetykę o podwójnej precyzji
też.

W przypadku kompilatora i386 musisz użyć -marzec=typ procesora, -mss or -msse2 przełączniki
aby włączyć rozszerzenia SSE i włączyć 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
se+387
obie
Spróbuj użyć obu zestawów instrukcji jednocześnie. To skutecznie podwaja
ilość dostępnych rejestrów i na chipach z oddzielnymi 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 skutkujące niestabilną wydajnością.

-masma=dialekt
Wyprowadź instrukcje asm za pomocą wybranych dialekt. Obsługiwane opcje to intel or do
(domyślny). Darwin nie obsługuje intel.

-mieee-fp
-mno-ieee-fp
Kontroluj, czy kompilator używa porównań zmiennoprzecinkowych IEEE. Te
obsłużyć prawidłowo 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 urządzenia zwykłego C . maszyny
używany jest kompilator, ale nie można tego zrobić bezpośrednio w kompilacji krzyżowej. Musisz
dokonać własnych ustaleń w celu zapewnienia odpowiednich funkcji bibliotecznych dla
kompilacja.

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 we FreeBSD, OpenBSD i NetBSD. Ta opcja jest zastępowana, gdy -Marsz
wskazuje, że docelowy procesor zawsze będzie miał FPU, więc instrukcja nie będzie
Potrzebujesz emulacji. Od wersji 2.6.1 instrukcje te nie są generowane, chyba że:
również użyj -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 a 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
zostanie wyrównany inaczej niż publikowany interfejs binarny aplikacji
specyfikacje dla 386 i nie będą zgodne binarnie ze strukturami w kodzie
skompilowane bez tego przełącznika.

-m96bit-long-double
-m128bit-long-double
Przełączniki te kontrolują rozmiar typu „long double”. Plik binarny aplikacji i386
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” ma być wyrównany do granicy 16-bajtów.

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, struktury i
tablice zawierające „długie podwójne” zmienne zmienią swój rozmiar oraz funkcję
Zmieniona zostanie konwencja wywoływania funkcji przyjmujących "long double". Stąd oni
nie będzie kompatybilny binarnie z tablicami lub strukturami w kodzie skompilowanym bez tego
przełącznik.

-próg-mlarge-data-=numer
Kiedy -mcmodel=średni jest określony, dane większe niż próg są umieszczone w dużych
sekcja danych. Ta wartość musi być taka sama we wszystkich obiektach połączonych z plikiem binarnym
i domyślnie 65535.

-mrtd
Użyj innej konwencji wywoływania funkcji, w której funkcje, które przyjmują ustaloną
liczba argumentów powraca z "ret" num 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 standardowe wywołanie. Możesz także nadpisać -mrtd opcja za pomocą
atrybut funkcji cdekl.

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 zostanie wygenerowany nieprawidłowy kod
dla wywołań tych funkcji.

Ponadto, wywołanie funkcji ze zbyt dużą liczbą spowoduje powstanie poważnie nieprawidłowego kodu
argumenty. (Zwykle dodatkowe argumenty są nieszkodliwie ignorowane.)

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

-msseegparm
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-w-pamięci
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 procesorze Intel x86 -mstackrealign opcja wygeneruje
alternatywny prolog i epilog, które w razie potrzeby dostosowują stos czasu wykonywania.
Obsługuje to mieszanie starszych kodów, które zachowują 4-bajtowy wyrównany stos z nowoczesnymi kodami
które zachowują 16-bajtowy stos 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. Musisz zbudować wszystkie moduły z -mpreferred-stos-granica=3,
w tym wszelkie biblioteki. Obejmuje to biblioteki systemowe i moduły startowe.

-mincoming-granica-stosu=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 będzie użyty.

W Pentium i PentiumPro 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 spowoduje przesunięcie stosu. 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
-mno-mmx
-mss
-mno-sse
-msse2
-mno-sse2
-msse3
-mno-sse3
-msss3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-śr
-mavx2
-mno-avx2
-Maes
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdrnd
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-mama
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mtbm
-mno-tbm
Przełączniki te włączają lub wyłączają korzystanie z instrukcji w MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT lub 3DNow!
rozszerzone zestawy instrukcji. Te rozszerzenia są również dostępne jako wbudowane
funkcje: patrz X86 Wbudowany Funkcje, aby uzyskać szczegółowe informacje o włączonych funkcjach i
wyłączone przez te przełączniki.

Aby instrukcje SSE/SSE2 były generowane automatycznie z kodu zmiennoprzecinkowego (jak
w przeciwieństwie do 387 instrukcji), zob -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żliwią GCC użycie tych rozszerzonych instrukcji w wygenerowanym kodzie,
nawet bez -mfpmath=sse. Aplikacje, które wykonują wykrywanie procesorów w czasie wykonywania, muszą:
skompiluj oddzielne pliki dla każdej obsługiwanej architektury, używając odpowiednich flag.
W szczególności plik zawierający kod wykrywania procesora powinien być skompilowany bez
te opcje.

-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, a także
usuń niepotrzebne elementy wewnętrzne zerouppera.

-mprefer-avx128
Ta opcja nakazuje GCC użycie 128-bitowych instrukcji AVX zamiast 256-bitowego AVX
instrukcje w automatycznym wektoryzatorze.

-mcx16
Ta opcja umożliwi GCC użycie instrukcji CMPXCHG16B w wygenerowanym kodzie.
CMPXCHG16B pozwala na atomowe operacje na 128-bitowych danych typu double quadword (lub oword)
typy. Jest to przydatne w przypadku liczników o wysokiej rozdzielczości, które mogą być aktualizowane przez wiele
procesory (lub rdzenie). Ta instrukcja jest generowana jako część wbudowanego modułu atomic
funkcje: patrz __synchronizacja Wbudowane or __atomowy Wbudowane dla szczegółów.

-msahf
Ta opcja umożliwi GCC użycie instrukcji SAHF w wygenerowanym 64-bitowym kodzie. Wczesny
Procesory Intel z procesorem Intel 64 nie miały instrukcji LAHF i SAHF obsługiwanych przez AMD64 do
wprowadzenie stopnia Pentium 4 G1 w grudniu 2005 r. LAHF i SAHF są ładowane i przechowywane
instrukcje, odpowiednio, dla określonych flag stanu. W trybie 64-bitowym SAHF
Instrukcja służy do optymalizacji wbudowanych funkcji "fmod", "drem" lub "remainder": patrz
Inne Wbudowane dla szczegółów.

-mmovbe
Ta opcja umożliwi GCC użycie instrukcji movbe do zaimplementowania "__builtin_bswap32"
i „__builtin_bswap64”.

-mcrc32
Ta opcja włączy wbudowane funkcje, "__builtin_ia32_crc32qi",
„__builtin_ia32_crc32hi”. „__builtin_ia32_crc32si” i „__builtin_ia32_crc32di”, aby
wygeneruj instrukcję maszynową crc32.

-mprzepis
Ta opcja umożliwi GCC używanie instrukcji RCPSS i RSQRTSS (oraz ich
zwektoryzowane warianty RCPPS i RSQRTPS) z dodatkowym krokiem Newtona-Raphsona do
zwiększyć precyzję zamiast DIVSS i SQRTSS (i ich zwektoryzowanych wariantów) dla
argumenty zmiennoprzecinkowe o pojedynczej precyzji. Te instrukcje są generowane tylko wtedy, gdy
-funsafe-matematyczne optymalizacje jest włączony razem z -tylko matematyka skończona i
-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)" pod względem RSQRTSS (lub RSQRTPS) już z
-fast-matematyka (lub powyższą kombinację opcji) i nie potrzebuje -mprzepis.

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

-mprzepis=optować
Ta opcja pozwala kontrolować, które odwrotne instrukcje szacowania mogą być użyte. optować
to oddzielona przecinkami lista opcji, które mogą być poprzedzone znakiem „!” odwrócić
opcja: "all": włącz wszystkie instrukcje szacowania, "default": włącz domyślne
instrukcje, równoważne z -mprzepis, "none": wyłącz wszystkie instrukcje szacowania,
równoważny -mno-recept, "div": włącza przybliżenie dla dzielenia skalarnego,
"vec-div": włącz przybliżenie dla dzielenia wektorowego, "sqrt": włącz
aproksymacja dla skalarnego pierwiastka kwadratowego, "vec-sqrt": włącz aproksymację dla
wektorowy pierwiastek kwadratowy.

Na przykład -mrecip=wszystkie,!sqrt umożliwiłoby 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 typy to „svml” dla krótkiej biblioteki matematycznej Intela i „acml” dla
Styl interfejsu biblioteki rdzenia matematycznego AMD. GCC będzie obecnie emitować połączenia do
„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
odpowiedni typ funkcji, gdy -mveclibabi=svml jest 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żywany. Obie -ftree-wektoryzuj i -funsafe-matematyczne optymalizacje mieć
do włączenia. Biblioteka zgodna z SVML lub ACML ABI będzie musiała zostać określona w link
czas.

-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. Domyślny
jest użycie Microsoft ABI podczas kierowania na system Windows. We wszystkich innych systemach domyślnie
jest SYSV ABI. Możesz kontrolować to zachowanie dla określonej funkcji, używając
atrybut funkcji ms_abi/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.

-makumuluj wychodzące argumenty
Jeśli ta opcja jest włączona, maksymalna ilość miejsca wymagana dla argumentów wychodzących będzie
obliczane w prologu funkcji. Jest to szybsze na większości nowoczesnych procesorów, ponieważ
zmniejszone 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 na Mingw32. Kod oparty 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 -Lingwthrd który czyści dane dotyczące obsługi wyjątków wątku.

-mno-wyrównaj-stringops
Nie wyrównuj miejsca docelowego operacji na ciągach wbudowanych. Ten przełącznik zmniejsza rozmiar kodu
i poprawia wydajność w przypadku, gdy miejsce docelowe jest już wyrównane, ale GCC nie
wiedzieć 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, zwiększenie rozmiaru kodu,
ale może poprawić wydajność kodu, który zależy od szybkiego memcpy, strlen i memset for
krótkie 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ą dotyczącą konkretnego algorytmu do wbudowanego ciągu
operacja z. Dozwolone wartości to „rep_byte”, „rep_4byte”, „rep_8byte” dla
rozszerzanie za pomocą prefiksu i386 "rep" o określonym rozmiarze, "byte_loop", "loop",
"unrolled_loop" do rozwijania pętli inline, "libcall" do ciągłego rozszerzania biblioteki
połączenie.

-momit-liść-wskaźnik-ramki
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-wskaźnik-ramki usuwa ramkę
wskaźnik na wszystkie funkcje, co może utrudnić debugowanie.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Kontroluje, czy do zmiennych TLS można uzyskać dostęp z przesunięciami z segmentu TLS
rejestru (%gs dla 32-bitów, %fs dla 64-bitów) lub czy wskaźnik bazowy wątku musi być
dodany. To, czy jest to legalne, zależy od systemu operacyjnego i tego, czy
mapuje segment tak, aby obejmował cały obszar TLS.

W przypadku systemów korzystających z biblioteki GNU libc domyślnie jest włączone.

-msse2avx
-mno-sse2avx
Określ, że asembler powinien kodować instrukcje SSE z prefiksem VEX. Opcja
-mavx włącza to domyślnie.

-mfentry
-mno-fentry
Jeśli profilowanie jest aktywne -str ustaw licznik profilowania przed prologiem. Uwaga: wł.
architektury x86 atrybut „ms_hook_prologue” nie jest obecnie możliwy dla
-mfentry i -str.

-M8bit-Idiv
-mno-8bit-idiv
Na niektórych procesorach, takich jak Intel Atom, dzielenie 8-bitowych liczb całkowitych bez znaku jest znacznie szybsze niż
Dzielenie liczby całkowitej 32-bitowej/64-bitowej. Ta opcja generuje kontrolę w czasie wykonywania. Jeśli oba
dzielna i dzielnik mieszczą się w zakresie od 0 do 255, dzielenie 8-bitowej liczby całkowitej bez znaku wynosi
używane zamiast dzielenia liczby całkowitej 32-bitowej/64-bitowej.

-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
Podziel 32-bajtowe niewyrównane ładowanie AVX i zapisz.

Te -m przełączniki są obsługiwane dodatkowo na procesorach AMD x86-64 w
Środowiska 64-bitowe.

-m32
-m64
-mx32
Generuj kod dla środowiska 32-bitowego lub 64-bitowego. ten -m32 zestawy opcji int, long i
wskaźnik do 32 bitów i generuje kod, który działa na dowolnym systemie i386. ten -m64 opcja
ustawia int na 32 bity i long oraz wskaźnik na 64 bity i generuje kod dla AMD
architektura x86-64. ten -mx32 opcja ustawia int, long i wskaźnik na 32 bity oraz
generuje kod dla architektury AMD x86-64. Dla Darwina tylko -m64 opcja obraca się
off -fno-zdjęcie i -mdynamic-no-pic opcje.

-mno-czerwona-strefa
Nie używaj tak zwanej czerwonej strefy dla kodu x86-64. Czerwona strefa jest nakazana przez
x86-64 ABI, jest to 128-bajtowy obszar poza lokalizacją wskaźnika stosu, który będzie
nie mogą być modyfikowane przez obsługę sygnałów lub przerwań i dlatego mogą być używane do
dane tymczasowe bez dostosowywania wskaźnika stosu. Flaga -mno-czerwona-strefa wyłącza
tę czerwoną strefę.

-mcmodel=mały
Wygeneruj kod dla małego modelu kodu: program i jego symbole muszą być połączone w
dolne 2 GB przestrzeni adresowej. Wskaźniki mają 64 bity. Programy mogą być
połączone statycznie lub dynamicznie. To jest domyślny model kodu.

-mcmodel=jądro
Wygeneruj kod dla modelu kodu jądra. Jądro działa w ujemnych 2 GB
przestrzeń adresowa. Ten model musi być używany w kodzie jądra Linuksa.

-mcmodel=średni
Wygeneruj kod dla średniego modelu: program jest połączony w dolnych 2 GB
przestrzeń adresowa. Umieszczono tam również małe symbole. Symbole o rozmiarach większych niż
-próg-mlarge-data-próg są umieszczane w dużych sekcjach danych lub bss i można je zlokalizować
powyżej 2GB. Programy mogą być łączone statycznie lub dynamicznie.

-mcmodel=duży
Generuj kod dla dużego modelu: ten model nie przyjmuje żadnych założeń dotyczących adresów i
rozmiary przekrojów.

-tryb-adresu=długi
Generuj kod dla trybu długiego adresu. Jest to obsługiwane tylko w wersjach 64-bitowych i x32
środowiska. Jest to domyślny tryb adresowania w środowiskach 64-bitowych.

-tryb-adresu=krótki
Wygeneruj kod dla trybu krótkiego adresu. Jest to obsługiwane tylko w wersjach 32-bitowych i x32
środowiska. Jest to domyślny tryb adresowania dla środowisk 32-bitowych i x32.

i386 i x86-64 Windows Opcje

Te dodatkowe opcje są dostępne dla podsystemów Windows:

-mkonsola
Ta opcja jest dostępna dla celów Cygwin i MinGW. Określa, że ​​konsola
aplikacja ma zostać wygenerowana, poprzez nakazanie linkerowi ustawienia nagłówka PE
typ podsystemu wymagany dla aplikacji konsolowych. To jest domyślne zachowanie dla
Cele Cygwina i MinGW.

-mdll
Ta opcja jest dostępna dla celów Cygwin i MinGW. Określa, że ​​biblioteka DLL - a
biblioteka dołączana dynamicznie - ma zostać wygenerowana, umożliwiając wybór wymaganej
Obiekt startowy środowiska uruchomieniowego i punkt wejścia.

-mnop-fun-dllimport
Ta opcja jest dostępna dla celów Cygwin i MinGW. Określa, że
Atrybut dllimport należy zignorować.

-mwątek
Ta opcja jest dostępna dla celów MinGW. Określa, że ​​wątek specyficzny dla MinGW
ma być wykorzystana pomoc.

-Municode
Ta opcja jest dostępna dla celów mingw-w64. Określa, że ​​makro UNICODE
jest predefiniowany i wybrany jest kod uruchamiania środowiska uruchomieniowego obsługujący standard Unicode.

-mwin32
Ta opcja jest dostępna dla celów Cygwin i MinGW. Określa, że ​​typowy
Predefiniowane makra Windows należy ustawić w preprocesorze, ale nie ma to wpływu
wybór biblioteki wykonawczej/kodu uruchomieniowego.

-mwindows
Ta opcja jest dostępna dla celów Cygwin i MinGW. Określa, że ​​GUI
aplikacja ma zostać wygenerowana przez polecenie linkerowi, aby ustawił nagłówek PE
odpowiedni typ podsystemu.

-fno-set-stack-wykonywalny
Ta opcja jest dostępna dla celów MinGW. Określa, że ​​flaga wykonywalna dla
stos używany przez funkcje zagnieżdżone nie jest ustawiony. Jest to konieczne dla plików binarnych działających w
tryb jądra systemu Windows, ponieważ istnieje interfejs API użytkownika 32, który służy do ustawiania pliku wykonywalnego
przywileje, nie jest dostępna.

-mpe-wyrównane-commons
Ta opcja jest dostępna dla celów Cygwin i MinGW. Określa, że ​​GNU
rozszerzenie formatu pliku PE, które pozwala na prawidłowe wyrównanie zmiennych COMMON
powinno być używane podczas generowania kodu. Będzie domyślnie włączone, jeśli GCC wykryje
że docelowy asembler znaleziony podczas konfiguracji obsługuje tę funkcję.

Zobacz także poniżej i386 i x86-64 Opcje dla opcji standardowych.

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-zdjęcie
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-opóźnienie
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-opóźnienie
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-dzielenie
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 DWARF2. Ten
może 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.

-mstały-zakres=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 harmonogram instrukcji dla konkretnego procesora, prawidłowe wartości to itanium,
itanium1, merced, itanium2 i 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. Spowoduje to
generowanie instrukcji ld.a i odpowiednich instrukcji kontrolnych (ld.c /
chk.a). Wartość domyślna to „wyłącz”.

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis) Możliwość spekulacyjnego planowania danych po przeładowaniu. Spowoduje to wygenerowanie
instrukcji ld.a i odpowiednich instrukcji kontrolnych (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). Spowoduje to wygenerowanie ld.s
instrukcje i odpowiednie instrukcje sprawdzania 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 ta opcja jest włączona, instrukcje spekulacyjne dotyczące danych będą wybierane do harmonogramu tylko wtedy, gdy istnieją
w tej chwili nie ma innych wyborów. Spowoduje to wykorzystanie spekulacji danymi
znacznie bardziej konserwatywny. Wartość domyślna to „wyłącz”.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Jeśli ta opcja jest włączona, sterujące instrukcje spekulatywne będą wybierane do harmonogramu tylko wtedy, gdy istnieją
w tej chwili nie ma innych wyborów. Spowoduje to wykorzystanie spekulacji kontrolnych
znacznie 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 będą brane pod uwagę podczas obliczania
priorytety instrukcji. Spowoduje to nieco większe wykorzystanie spekulacji
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
Nie zezwalaj na więcej niż `msched-max-memory-insns' w grupie instrukcji. W przeciwnym razie ogranicz
jest „miękkie”, co oznacza, że ​​po osiągnięciu limitu preferujemy operacje bez pamięci, ale
może nadal planować operacje pamięci.

IA-64/VMS Opcje

Te -m opcje są zdefiniowane dla implementacji IA-64/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.

LM32 Opcje

Te -m opcje są zdefiniowane dla architektury Lattice Mico32:

-włączona zmiana mbarrel
Włącz instrukcje zmiany beczki.

- włączone mdivide
Włącz instrukcje dzielenia i modułu.

-multiply włączone
Włącz mnożenie instrukcji.

-msign-extend włączone
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), m32 cm 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 będzie używać podczas kodu
Pokolenie. Te pseudorejestry będą używane jak rejestry rzeczywiste, więc istnieje
kompromis między zdolnością GCC do dopasowania kodu do dostępnych rejestrów, a
kara wydajności wynikająca z używania pamięci zamiast rejestrów. Zwróć uwagę, że wszystkie moduły w a
program musi być skompilowany z tą samą wartością dla tej opcji. Z tego powodu ty
nie wolno używać tej opcji z domyślnymi bibliotekami wykonawczymi, które buduje 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 wygeneruje
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 wygeneruje
instrukcje „seth/add3”, aby załadować ich adresy) i zakładamy, że podprogramy mogą nie być
osiągalny za pomocą instrukcji "bl" (kompilator wygeneruje znacznie wolniej)
sekwencja instrukcji "seth/add3/jl").

-msdata=brak
Wyłącz korzystanie z małego obszaru danych. Zmienne zostaną umieszczone w jednym z .dane, bsslub
rodata (chyba że określono atrybut „sekcja”). To jest ustawienie domyślne.

Mały obszar danych składa się z sekcji .sdane i .sbss. Obiekty mogą być wyraźnie
umieść w małym obszarze danych z atrybutem „sekcja”, używając jednej z tych sekcji.

-msdata=sdane
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 dane 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świetli błąd
komunikat ---niepoprawny kod nie zostanie wygenerowany.

-mdebug
Sprawia, że ​​kod specyficzny dla M32R w kompilatorze wyświetla 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-wyrównaj-pętle
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, gałęzie będą preferowane w stosunku do
kod warunkowy, jeśli wynosi 2, to będzie obowiązywać odwrotnie.

-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-funkcja=Nazwa
Określa nazwę funkcji systemu operacyjnego do wywołania w celu opróżnienia pamięci podręcznej. ten
wartość domyślna to _Flush_cache, ale wywołanie funkcji zostanie użyte tylko wtedy, gdy pułapka nie jest
dostępny.

-mno-flush-funkcja
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 i cpu32. Architektury ColdFire są wybierane zgodnie z Freescale's
Klasyfikacja ISA i dopuszczalne wartości to: Izaach, isaaplus, isab i Isac.

gcc definiuje makro __mcfłuk__ zawsze, gdy generuje kod dla celu ColdFire.
Połączenia łuk w tym makro jest jednym z -Marsz argumenty podane powyżej.

Używane razem, -Marsz i -dostroić 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 i cpu32. Zimny ​​Ogień cpus
są podane w poniższej tabeli, która również klasyfikuje procesory do rodzin:

Rodzina : -mcpu argumenty
51 : 51 51ac 51cn 51em 51qe
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 i -Marsz są odrzucane.

gcc definiuje makro __mcf_procesor_cpu gdy cel ColdFire cpu jest zaznaczona. To również
definiuje __mcf_rodzina_członków Twojej rodziny, gdzie wartość członków Twojej rodziny podano w powyższej tabeli.

-mtune=melodia
Dostosuj kod do konkretnej mikroarchitektury, w ramach ograniczeń określonych przez -Marsz
i -mcpu. Mikroarchitektury M680x0 to: 68000, 68010, 68020, 68030, 68040,
68060 i cpu32. Mikroarchitektury ColdFire to: cfv1, cfv2, cfv3, cfv4 i
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 i -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
68040.

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

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 __MAM_68881__ na M680x0
cele i __mcffpu__ na cele 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-dział
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.

-mkrótki
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.

-mnobitpole
-mno-bitfield
Nie używaj instrukcji pól bitowych. ten -m68000, -mcpu32 i -m5200 opcje implikują
-mnobitpole.

-mbitpole
Korzystaj z instrukcji pól bitowych. ten -m68020 opcja implikuje -mbitpole. 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 zostanie wygenerowany nieprawidłowy kod
dla wywołań tych funkcji.

Ponadto, wywołanie funkcji ze zbyt dużą liczbą spowoduje powstanie poważnie nieprawidłowego kodu
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ówna struktury zawierające
powyższe typy inaczej niż większość opublikowanych interfejsów binarnych aplikacji
specyfikacje 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 niewyrównane odwołania do pamięci będą obsługiwane przez system.

-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ą. Ta opcja oznacza -fPIC.

-mno-sep-dane
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, że ​​są używane biblioteki współdzielone oparte na identyfikatorach. To jest
domyślny.

-id-biblioteki-mshared=n
Określono numer identyfikacyjny kompilowanej biblioteki współdzielonej opartej na identyfikatorze.
Określenie wartości 0 wygeneruje bardziej zwięzły kod, określenie innych wartości spowoduje:
wymusza przypisanie tego numeru do bieżącej biblioteki, ale nie ma już miejsca lub
mniej czasu 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-twardo oświetlony
Wstawiaj stałe do strumienia kodu, jeśli można to zrobić w dwóch instrukcjach lub mniej.

-mdiv
-mno-dział
Użyj instrukcji dzielenia. (Domyślnie włączone).

-mrelax-natychmiastowy
-mno-relaks-natychmiastowy
Zezwalaj na wartości natychmiastowe o dowolnym rozmiarze w operacjach bitowych.

-mwide-bitfields
-mno-szerokie-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-dane
-mno-dane wykresu wywoławczego
Emituj informacje z grafu.

-mslow-bajty
-mno-wolne bajty
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 - operacje uśredniania, mnożenia, dzielenia, bitów,
wiodące zero, różnica bezwzględna, min/maks, przycinanie i nasycenie.

-przeciętny
Włącza instrukcję "ave", która oblicza średnią z dwóch rejestrów.

-mbazowany=n
Zmienne wielkości n bajty lub mniejsze zostaną umieszczone w sekcji ".based" przez
domyślny. Zmienne bazowe używają rejestru $tp jako rejestru bazowego, a
128-bajtowe ograniczenie do sekcji „.based”.

-mbittopy
Włącza instrukcje operacji na bitach - bit test ("btstm"), set ("bsetm"), wyczyść
("bclrm"), odwróć ("bnotm") i test-i-set ("tas").

-mc=Nazwa
Wybiera, w której sekcji zostaną umieszczone stałe dane. Nazwa może być „mały”, „blisko” lub
"daleko".

-mclip
Włącza instrukcję "clip". Pamiętaj, że "-mclip" nie jest przydatne, chyba że ty też
podaj "-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ślna”.

-mcop
Włącza instrukcje koprocesora. Domyślnie jest to koprocesor 32-bitowy. Notatka
że koprocesor jest zwykle włączany za pomocą opcji "-mconfig=".

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

-mminmaks
Włącza instrukcje „min” i „maks”.

-mmult
Włącza instrukcje mnożenia i mnożenia akumulacji.

-mno-opcje
Wyłącza wszystkie opcjonalne instrukcje włączone przez „-mall-opts”.

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

-msatura
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 zostaną przydzielone 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”.

MikroBlaze Opcje

-msoft-float
Użyj emulacji programowej dla zmiennoprzecinkowych (domyślnie).

-mhard-float
Użyj instrukcji sprzętowych zmiennoprzecinkowych.

-mmmcpy
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 są w formacie
vX.YY.Z, Gdzie X jest główną wersją, YY jest wersją pomocniczą i Z jest kompatybilność
kod. 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-przesunięcie-beczki
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. Zamiast tego użyj -fstack-check.

-mxl-gp-opc
Użyj sekcji sdata/sbss dotyczących GP.

-mxl-pomnóż-wysokie
Użyj instrukcji pomnóż-wysoki dla dużej części mnożenia 32x32.

-mxl-float-konwertuj
Użyj sprzętowych instrukcji konwersji zmiennoprzecinkowych.

-mxl-float-sqrt
Użyj sprzętowej instrukcji pierwiastka zmiennoprzecinkowego.

-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 ma mieć wartość 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.

Option -tryb-xl-model aplikacji to przestarzały alias dla -tryb-mxl-model aplikacji.

MIPS Opcje

-EB Generuj kod big-endian.

-TEN Generuj kod little-endian. To jest domyślne dla mips*el-*-* konfiguracje.

-marzec=łuk
Wygeneruj kod, który będzie działał łuk, która może być nazwą ogólnego MIPS ISA, lub
nazwa konkretnego procesora. Nazwy ISA to: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips64 i mips64r2. Nazwy procesorów to: 4 tys, 4km, 4kp, 4 ksc,
4kec, 4kem, 4kp, 4ksd, 5 tys, 5kf, 20 tys, 24 tys, 24kf2_1, 24kf1_1, 24kec, 24kef2_1,
24kef1_1, 34 tys, 34kf2_1, 34kf1_1, 74 tys, 74kf2_1, 74kf1_1, 74kf3_2, 1004 tys, 1004kf2_1,
1004kf1_1, loongson2e, loongson2f, Loongson3a, M4K, okteon, okteon+, okteon2, orion,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 i Xlr. Specjalna wartość z-abi wybiera najbardziej kompatybilny
architektury dla wybranego ABI (czyli mips1 dla 32-bitowych ABI i mips3 dla 64-bitów
ABI).

Natywne łańcuchy narzędzi Linux/GNU i IRIX również obsługują tę wartość rodzimy, który wybiera
najlepsza opcja architektury dla procesora hosta. -marzec=rodzimy nie działa, jeśli GCC
nie rozpoznaje 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 i 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 jest skapitalizowaną wartością _MIPS_ARCH, Na przykład,
-marzec=r2000 ustawi _MIPS_ARCH do „r2000” i zdefiniuj makro _MIPS_ARCH_R2000.

Zauważ, że _MIPS_ARCH makro używa nazw procesorów podanych powyżej. Innymi słowy,
będzie miał pełny przedrostek i nie będzie skrótów 000 as k, W przypadku z-
abi, makro nazywa rozwiązaną architekturę (albo "mips1" or "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 zoptymalizuje dla procesora określonego przez -Marsz.
Za pomocą -Marsz i -dostroić razem można wygenerować kod, który będzie działał
rodzinę procesorów, ale zoptymalizuj kod dla jednego konkretnego członka tej rodziny
rodzina.

-dostroić definiuje makra _MIPS_TUNE i _MIPS_TUNE_bla, które działają w taki sam sposób jak
dotychczasowy -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.

-mips32r2
Równoważny -marzec=mips32r2.

-mips64
Równoważny -marzec=mips64.

-mips64r2
Równoważny -marzec=mips64r2.

-mips16
-mno-mips16
Generuj (nie generuj) kodu MIPS16. Jeśli GCC celuje w MIPS32 lub MIPS64
architektury, będzie korzystał z 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-MIPS16
-mno-połączenie-mips16
Wymagaj (nie wymagaj), aby kod inny niż MIPS16 był zgodny z kodem MIPS16.

Na przykład kod inny niż MIPS16 nie może przejść bezpośrednio do kodu MIPS16; musi albo użyć a
wezwanie lub skok pośredni. -Minterlink-MIPS16 dlatego wyłącza bezpośrednie skoki, chyba że
GCC wie, że celem skoku nie jest MIPS16.

-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
polega na mthc1 i mfhc1 instrukcji i dlatego jest obsługiwany tylko dla
Procesory MIPS32R2.

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 zapisanych połączeń również pozostaje taki sam, ale wszystkie 64 bity
są zapisywane.

-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-udostępnione
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 i -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-udostępnione.

-mno-udostępnione 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-udostępnione będzie
generalnie sprawiają, że pliki wykonywalne są zarówno mniejsze, jak i szybsze.

-mshared jest wartością domyślną.

-mplt
-mno-pl
Załóż (nie zakładaj), że statyczne i dynamiczne linkery obsługują PLT i kopiują
relokacje. Ta opcja dotyczy tylko -mno-udostępnione -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-pl 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, będzie działał tylko wtedy, gdy GOT jest mniejszy niż około 64k.
Wszystko większe spowoduje, że linker zgłosi 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. Powinien wtedy działać z
bardzo duże GOT-y, choć będzie też mniej wydajne, ponieważ zajmie 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.

-mhard-float
Użyj instrukcji koprocesora zmiennoprzecinkowego.

-msoft-float
Nie używaj instrukcji koprocesora zmiennoprzecinkowego. Implementuj zmiennoprzecinkowe
obliczenia przy użyciu wywołań bibliotecznych.

-msingle-float
Załóżmy, że koprocesor zmiennoprzecinkowy obsługuje tylko operacje o pojedynczej precyzji.

-mpodwójny pływak
Załóżmy, że koprocesor zmiennoprzecinkowy obsługuje operacje o podwójnej precyzji. Ten
jest wartością domyślną.

-mllsc
-mno-llsc
Użyj (nie używaj) ll, sc, synchronizować instrukcje implementacji wbudowanej pamięci atomowej
Funkcje. Jeśli żadna opcja nie zostanie określona, ​​GCC użyje instrukcji, jeśli
wspiera je architektura docelowa.

-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ą --z-llsc i --bez-llsc odpowiednio.
--z-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 do 1.

-mdspr2
-mno-dspr2
Użyj (nie używaj) wersji 2 MIPS DSP ASE.
Ta opcja definiuje makra preprocesora __mips_dsp i __mips_dspr2. Również
definiuje __mips_dsp_rev do 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.

-mmt
-mno-mt
Użyj (nie używaj) instrukcji wielowątkowości MT.

-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 i -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 uzyskać bardziej efektywny dostęp do danych; zobaczyć -mgpopt dla
detale.

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 będą znajdować się w małej sekcji danych, jeśli:
że dane są w obrębie -G limit. -mextern-sdata jest domyślnym dla wszystkich
konfiguracje.

Jeśli skompilujesz moduł Sposób w -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 i -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 przekażą nieznaną wartość w $gp.
(W takich sytuacjach sam monitor rozruchu byłby zwykle skompilowany z -G0.)

-mno-gpopt sugeruje -mno-lokalne-dane i -mno-extern-sdata.

-wbudowane dane
-mno-osadzone-dane
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-jawne-relokacje
Używaj (nie używaj) operatorów relokacji asemblera podczas pracy z adresami symbolicznymi.
Alternatywa, wybrana przez -mno-jawne-relokacje, 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-dzielenie-zero
Pułapka (nie zalewkuje) przy dzieleniu liczb całkowitych przez zero.

Wartość domyślna to -mcheck-zero-dzielenie.

-mdivide-pułapki
-mdivide-przerwy
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-przerwy 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-dzielenie-zero.

-mmmcpy
-mno-memcpy
Wymuś (nie wymuszaj) użycia funkcji „memcpy()” dla nietrywialnych ruchów blokowych. Domyślny
is -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.

-mam
-mno-szalony
Włącz (wyłącz) korzystanie z instrukcji „mad”, „madu” i „mul”, zgodnie z instrukcjami
R4650 ISA.

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

W przypadku użycia instrukcji mnożenia akumulacji obliczany jest produkt pośredni
z nieskończoną precyzją i nie podlega FCSR Flush to Zero bit. To może być
niepożądane w niektórych okolicznościach.

-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-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 niektóre 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 będzie 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 był 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 z pamięci podręcznej nadpiszą 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 będą miały 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=ładuj magazyn
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-funkcja=funkcjonować
-mno-flush-funkcja
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_funkcja or __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 -dostroić 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,
Rozgałęzione instrukcje prawdopodobnie nie będą 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 to, jak planujemy FP
instrukcje dla niektórych procesoró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 będzie
wyrównaj 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 są włączone) zostaną wygenerowane, gdy
„__builtin___clear_cache()” jest skompilowany.

Ta opcja jest domyślnie ustawiona na "-mno-synci", ale wartość domyślną można zmienić, konfigurując
z „--with-synci”.

Podczas kompilowania kodu dla systemów jednoprocesorowych ogólnie bezpiecznie jest używać „synci”.
Jednak w wielu systemach wielordzeniowych (SMP) nie spowoduje to unieważnienia instrukcji
buforuje na wszystkich rdzeniach i może prowadzić do niezdefiniowanego zachowania.

-mrelax-pic-połączenia
-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-połączenia 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. W przypadku „-mno-explicit-relocs” optymalizację tę można przeprowadzić 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.

· Zapisanie 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:

-mlibfunkcje
-mno-libfunks
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-rozszerzenie
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
dotychczasowy 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-błąd
Nie generuj kodu, aby uniknąć błędów w instrukcjach mnożenia dla MN10300
procesorów.

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

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

-mwskaźnik-powrotu-na-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 powodowałyby 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.

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

-mnoli
Nie zezwalaj kompilatorowi na generowanie długo Instrukcja słowo instrukcje. Ta opcja
definiuje makro preprocesora __NIE_LIW__.

-msetlb
Pozwól kompilatorowi wygenerować SETLB i Lcc instrukcje, jeśli celem jest
AM33 lub później. To jest ustawienie domyślne. Ta opcja definiuje makro preprocesora
__ZESTAWLB__.

-mnosetlb
Nie zezwalaj kompilatorowi na generowanie SETLB or Lcc instrukcje. Ta opcja definiuje
makro preprocesora __NIE_USTAWLB__.

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.

-mbkopia
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=typ_ae
Ustaw zestaw instrukcji, zestaw rejestrów i parametry planowania instrukcji dla tablicy
typ elementu typ_ae. Obsługiwane wartości dla typ_ae jest JAKIEKOLWIEK, MAM, PROCHOWIEC.

-mae = DOWOLNY wybiera całkowicie ogólny typ AE. Kod wygenerowany za pomocą tej opcji będzie
uruchomić na dowolnym innym typie AE. Kod nie będzie tak wydajny, jak gdyby
skompilowany dla określonego typu AE i niektórych typów operacji (np. mnożenie)
nie będzie działać poprawnie ze wszystkimi typami 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 wygeneruje większe programy, które będą działać szybciej niż gdy opcja nie jest
używany. Jednak wyniki różnią się w zależności od programu, więc pozostawia się go jako użytkownika
opcję, zamiast być na stałe włączonym.

-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 zostanie wygenerowane ostrzeżenie wskazujące
programistom, że powinni przepisać kod, aby uniknąć operacji bajtowych lub
Typ AE, który ma niezbędną obsługę sprzętu. Ta opcja włącza ostrzeżenie, aby:
być wyłączony.

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
„brak”, który wykorzystuje funkcje mnożenia oprogramowania. Opcja „g13” jest przeznaczona dla
sprzętowe mnożenie/dzielenie urządzeń peryferyjnych tylko w celach RL78/G13. Opcja „rl78”
dotyczy standardowego zwielokrotnienia sprzętowego zdefiniowanego w instrukcji oprogramowania RL78.

IBM RS / 6000 i PowerPC Opcje

Te -m opcje są zdefiniowane dla IBM RS/6000 i PowerPC:

-moc
-mno-moc
-mmoc2
-mno-moc2
-mmoc szt
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-Mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-Mhard-DFP
-mno-twardy-dfp
GCC obsługuje dwie powiązane architektury zestawów instrukcji dla RS/6000 i PowerPC.
Połączenia MOC zestaw instrukcji to te instrukcje obsługiwane przez rzeki używany zestaw chipów
w oryginalnych systemach RS/6000 i PowerPC zestaw instrukcji jest architekturą
mikroprocesory Freescale MPC5xx, MPC6xx, MPC8xx oraz IBM 4xx, 6xx i
kolejne mikroprocesory.

Żadna architektura nie jest podzbiorem drugiej. Istnieje jednak duży wspólny podzbiór
instrukcji obsługiwanych przez oba. Rejestr MQ jest zawarty w procesorach
wspieranie architektury POWER.

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.

Połączenia -moc opcja pozwala GCC generować instrukcje, które znajdują się tylko w
Architektura POWER oraz korzystanie z rejestru MQ. Określanie -mmoc2 sugeruje -Power i
pozwala również GCC na generowanie instrukcji, które są obecne w architekturze POWER2
ale nie oryginalną architekturę POWER.

Połączenia -mmoc szt opcja pozwala GCC generować instrukcje, które znajdują się tylko w
32-bitowy podzbiór architektury PowerPC. Określanie -mpowerpc-gpopt sugeruje
-mmoc szt a także pozwala GCC na użycie opcjonalnych instrukcji architektury PowerPC w
grupa Ogólnego przeznaczenia, w tym pierwiastek kwadratowy zmiennoprzecinkowy. Określanie
-mpowerpc-gfxopt sugeruje -mmoc szt a także pozwala GCC na użycie opcjonalnego PowerPC
instrukcje architektury w grupie Graphics, w tym wybór zmiennoprzecinkowy.

Połączenia -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.
Połączenia -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.

Połączenia -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.

Jeśli określisz oba -mno-moc i -mno-powerpc, GCC użyje tylko instrukcji zawartych w
wspólny podzbiór obu architektur oraz kilka specjalnych wywołań trybu wspólnego AIX oraz
nie będzie korzystać z rejestru MQ. Określanie obu -moc i -mmoc szt zezwala GCC na
użyć dowolnej instrukcji z dowolnej architektury i zezwolić na korzystanie z rejestru MQ;
określ to dla Motorola MPC601.

-mnew-mnemonika
-mnemotechnika pleśni
Wybierz, których mnemotechniki użyć w wygenerowanym kodzie asemblera. Z -mnew-mnemonika,
GCC używa mnemotechniki assemblera zdefiniowanej dla architektury PowerPC. Z
-mnemotechnika pleśni używa mnemotechniki assemblera zdefiniowanej dla architektury POWER.
Instrukcje zdefiniowane tylko w jednej architekturze mają tylko jeden mnemonik; GCC używa tego
mnemonik niezależnie od tego, która z tych opcji jest określona.

GCC domyślnie używa mnemoników odpowiednich dla używanej architektury. Określanie
-mcpu=typ_procesora czasami zastępuje wartość tych opcji. Chyba że budujesz
kompilator skrośny, zwykle nie powinieneś też podawać tego -mnew-mnemonika or
-mnemotechnika pleśni, ale zamiast tego powinien akceptować wartość domyślną.

-mcpu=typ_procesora
Ustaw typ architektury, użycie rejestru, wybór mnemoników i planowanie instrukcji
parametry dla typu maszyny typ_procesora. Obsługiwane wartości dla typ_procesora jest 401, 403,
405, 405 klatek na sekundę, 440, 440 klatek na sekundę, 464, 464 klatek na sekundę, 476, 476 klatek na sekundę, 505, 601, 602, 603, 603e, 604, 604e,
620, 630, 740, 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
e500mc, e500mc64, ec603e, G3, G4, G5, tytan, power, power2, power3, power4, power5,
moc5+, power6, moc6x, power7, pospolity, komputer mocy, moc pc64, rzeki, rzeki 1, rzeki 2, rsc,
i rs64.

-mcpu=wspólne wybiera całkowicie generyczny procesor. Kod wygenerowany w ramach tej opcji
będzie działać na dowolnym procesorze POWER lub PowerPC. GCC użyje tylko instrukcji zawartych w
wspólny podzbiór obu architektur i nie będzie korzystał z rejestru MQ. GCC zakłada
ogólny model procesora do celów planowania.

-mcpu=moc, -mcpu=moc2, -mcpu=moc pc, -mcpu=mocpc64 określić ogólną MOC,
POWER2, ​​czysty 32-bitowy PowerPC (tj. nie MPC601) i 64-bitowa architektura PowerPC
typy maszyn, z przyjętym do harmonogramowania odpowiednim, generycznym modelem procesora
celów.

Pozostałe opcje określają konkretny procesor. Kod wygenerowany w ramach tych opcji
będzie działać najlepiej na tym procesorze i może w ogóle nie działać na innych.

Połączenia -mcpu opcje automatycznie włączają lub wyłączają następujące opcje:

-maltivec -mfprnd -mhard-float -mmfcrf -mwielokrotność -mnew-mnemonika -mpopcntb
-Mpopcntd -moc -mmoc2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-float -mpodwójny pływak -msimple-fpu -mciąg -mmulhw -mdlmzb -mmfpgpr -mvsx

Poszczególne opcje ustawione dla konkretnego procesora będą się różnić 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 i -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, użycie rejestru lub wybór mnemotechniki, jak -mcpu=typ_procesora
zrobiłbym. Te same wartości dla typ_procesora są używane do -dostroić Jeśli chodzi o -mcpu. Jeśli oba są
określony, wygenerowany kod będzie używał zestawu architektury, rejestrów i mnemoników
by -mcpu, ale parametry planowania ustawione przez -dostroić.

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

-mvrsave
-mno-vrsave
Generuj instrukcje VRSAVE podczas generowania kodu AltiVec.

-mgen-komórka-mikrokod
Generuj instrukcje mikrokodu Cell

-mwarn-komórka-mikrokod
Ostrzeżenie, gdy zostanie wyemitowana instrukcja mikrokodu Cell. Przykład komórki
Instrukcja mikrokodu jest zmienną zmianą.

-msecure-plt
Generuj kod, który pozwala ld i ld.so budować pliki wykonywalne i biblioteki współdzielone za pomocą
sekcje non-exec .plt i .got. To jest 32-bitowa opcja SYSV ABI dla PowerPC.

-mbss-plt
Wygeneruj kod, który używa sekcji BSS .plt wypełnianej przez ld.so i wymaga .plt i
.got sekcje, które są zarówno zapisywalne, jak i wykonywalne. To jest 32-bitowy SYSV PowerPC
Opcja 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 i -mno-isel zamiast.

-msp
-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ę -msp i -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.

-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ójna 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-suma-w-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
przydzieli co najmniej jeden wpis spisu treści dla każdego unikalnego nieautomatycznego odniesienia do zmiennej
w twoim programie. GCC umieści również stałe zmiennoprzecinkowe w spisie treści. Jednakże,
tylko 16,384 XNUMX wpisów jest dostępnych w spisie treści.

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 i
-mno-suma-w-toc opcje. -mno-fp-w-toc zapobiega umieszczaniu przez GCC liczb zmiennoprzecinkowych
stałe w TOC i -mno-suma-w-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. Gdy określisz tę opcję, GCC wygeneruje kod, który będzie wolniejszy i
większy, ale zużywa bardzo mało miejsca na TOC. Możesz skorzystać z tej opcji
tylko na plikach, które zawierają 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 i
-mmoc szt, 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.

-mp
Wsparcie 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 -mp
opcja i -pwątek opcje są niezgodne.

-złośliwy-naturalny
-złośliwa moc
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 -złośliwa moc 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 -złośliwa moc 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
-mpodwójny pływak
Generuj kod dla operacji zmiennoprzecinkowych o pojedynczej lub podwójnej precyzji.
-mpodwójny pływak sugeruje -msingle-float.

-msimple-fpu
Nie generuj instrukcji sqrt i div dla sprzętowej jednostki zmiennoprzecinkowej.

-mfpu
Określ typ jednostki zmiennoprzecinkowej. Prawidłowe wartości to sp_lite (równoważny
-msingle-float -msimple-fpu), dp_lite (odpowiednik -mdouble-float -msimple-fpu),
sp_full (odpowiednik -msingle-float) i dp_pełne (odpowiednik -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.

-mciąg
-mno-ciąg
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ć -mciąg 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.

-aktualizacja
-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
ukierunkowanie na te procesory.

-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 będą 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
Jak -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-tok
-mtok
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.

-mpriorytet-restricted-insns=priorytet
Ta opcja kontroluje priorytet przypisany do ograniczonego slotu wysyłki
instrukcje podczas drugiego przejścia harmonogramu. Argument priorytet przyjmuje wartość
0/1/2 przypisać brak/najwyższy/drugi najwyższy Ograniczony priorytet do wysyłki
instrukcje.

-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 uzależnienia są kosztowne,
true_store_to_load: prawdziwa zależność od sklepu do załadunku jest kosztowna, przechowaj_do_wczytania: dowolny
uzależnienie od sklepu do załadunku jest kosztowne, numer: dowolna zależność dla której latencji >=
numer jest kosztowna.

-minsert-sched-nops=schemat
Ta opcja kontroluje, który schemat wstawiania nop będzie używany podczas drugiego
Planowanie przepustki. Argument schemat przyjmuje jedną z następujących wartości: Nie: Nie
wstaw nopy. ścieżka: Pad z nopsami dowolna grupa dyspozytorska, która ma wolne miejsca na wydania,
zgodnie z grupowaniem harmonogramu. przegrupuj_dokładnie: Wstaw nops, aby wymusić kosztowne
zależne zajazdy na osobne grupy. Wstaw dokładnie tyle nopsów, ile potrzeba do wymuszenia
insn do nowej grupy, zgodnie z szacowanym grupowaniem procesorów. numer: Wstawić
nops, aby zmusić kosztowne zależne insns do oddzielnych grup. Wstawić numer nop dla
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:
jest zgodny z wersją roboczą interfejsu binarnego aplikacji System V z marca 1995 r., PowerPC
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 i -meabi opcje.

-mcall-sysv-noeabi
Określ oba -mcall-sysv i -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
pomimo napiętego harmonogramu

-mcall-freebsd
W systemie V.4 i wbudowanych systemach PowerPC skompiluj kod do obsługi FreeBSD
pomimo napiętego harmonogramu

-mcall-netbsd
Na Systemie V.4 i wbudowanych systemach PowerPC kompiluje kod dla działania NetBSD
pomimo napiętego harmonogramu

-mcall-openbsd
W systemie V.4 i wbudowanych systemach PowerPC skompiluj kod do obsługi OpenBSD
pomimo napiętego harmonogramu

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

-mabi=spec
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 Booke 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=ieeelongpodwójne
Zmień bieżący ABI, aby używał długiego podwójnego o rozszerzonej precyzji IEEE. To jest PowerPC
Opcja 32-bitowego ABI Linuksa.

-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 nieprototypowym wywołaniem ustawienia lub wyczyszczenia bitu 6 rejestru kodu warunku
(CR), aby wskazać, czy wartości zmiennoprzecinkowe zostały przekazane w postaci zmiennoprzecinkowej
rejestruje się w przypadku, gdy funkcja przyjmuje zmienne argumenty. Z -mprototyp, tylko połączenia
do prototypowanych funkcji zmiennych argumentów ustawi lub wyczyści bit.

-msim
W przypadku wbudowanych systemów PowerPC załóżmy, że moduł startowy nazywa się sim-crt0.o i
że standardowe biblioteki C są libsim.a i 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 i libc.a.

-szalony
W przypadku wbudowanych systemów PowerPC załóżmy, że moduł startowy nazywa się crt0.o oraz
standardowe biblioteki C są libads.a i 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 i 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 PPC_EMB bit w nagłówku flag ELF wskazujący
ż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 do Systemu V.4
specyfikacje. 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
nie wywołuj funkcji inicjującej z "main", a -msdata opcja użyje tylko
„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 .sdata2 sekcji, na którą wskazuje rejestr „r2”. Umieść mały
zainicjowane nie-stałe dane globalne i statyczne w .sdane sekcja, która jest wskazana
do rejestru "r13". Umieść małe, niezainicjowane dane globalne i statyczne w .sbss
sekcji, która sąsiaduje z .sdane Sekcja. ten -msdata=eabi Jest opcja
niezgodne 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
.sdane sekcji, na którą wskazuje rejestr „r13”. Umieść mały, niezainicjowany globalny
i dane statyczne w .sbss sekcji, która sąsiaduje z .sdane 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 systemach System V.4 i wbudowanych systemach PowerPC umieść niewielkie dane globalne w .sdane
Sekcja. Umieść małe niezainicjowane dane globalne w .sbss Sekcja. 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 .dane
sekcji i wszystkie niezainicjowane dane w .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 normalnej 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ść.

-mregnamy
-mno-regnamy
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.

-mdługie połączenie
-mno-długie połączenie
Domyślnie zakładaj, że wszystkie połączenia są daleko, więc dłuższe, droższe połączenia
wymagana jest sekwencja. 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 zostanie wygenerowane, 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” wygeneruje „jbsr callee, L42” plus
„wyspa gałęzi” (kod kleju). Dwa adresy docelowe reprezentują rozmówcę, a
„odgałęzienie wyspy”. Linker Darwin/PPC będzie preferował pierwszy adres i wygeneruje
„bl wywoływany” jeśli instrukcja PPC „bl” dotrze bezpośrednio do wywoływanego; w przeciwnym razie
linker wygeneruje "bl L42", aby wywołać "odgałęzienie wyspy". „Wyspa gałęzi” to
dołączony do ciała funkcji wywołującej; oblicza pełny 32-bitowy adres
Callee 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 możemy spowodować, że GCC zignoruje wszystkie specyfikacje długich wywołań, gdy linker
wiadomo, że generuje klej.

-znaczniki-mtls
-mno-tls-markery
Zaznacz (nie zaznaczaj) wywołania "__tls_get_addr" z relokacją określającą funkcję
argument. Relokacja pozwala ld na niezawodne powiązanie wywołania funkcji z argumentem
instrukcje konfiguracji optymalizacji TLS, co z kolei pozwala gcc na lepsze planowanie
sekwencja.

-pwątek
Dodaje obsługę wielowątkowości z wątki Biblioteka. Ta opcja ustawia flagi dla
zarówno preprocesor, jak i linker.

-mprzepis
-mno-recept
Ta opcja umożliwi GCC użycie odwrotności oszacowania i odwrotności pierwiastka kwadratowego
oszacuj instrukcje z dodatkowymi krokami Newtona-Raphsona w celu zwiększenia precyzji
zamiast robić dzielenie lub pierwiastek kwadratowy i dzielenie dla argumentów zmiennoprzecinkowych. Ty
powinien użyć -fast-matematyka opcja podczas używania -mprzepis (Lub przynajmniej
-funsafe-matematyczne optymalizacje, -tylko matematyka skończona, - matematyka częsta i
-fno-trapping-matematyka). Zauważ, że podczas gdy przepustowość sekwencji jest ogólnie
wyższa niż przepustowość instrukcji nieodwrotnej, precyzja
sekwencja może być zmniejszona maksymalnie o 2 ulp (tzn. odwrotność 1.0 równa się 0.99999994)
dla wzajemnych pierwiastków kwadratowych.

-mprzepis=optować
Ta opcja pozwala kontrolować, które odwrotne instrukcje szacowania mogą być użyte. optować
to oddzielona przecinkami lista opcji, które mogą być poprzedzone znakiem „!” odwrócić
opcja: "all": włącz wszystkie instrukcje szacowania, "default": włącz domyślne
instrukcje, równoważne z -mprzepis, "none": wyłącz wszystkie instrukcje szacowania,
równoważny -mno-recept; "div": włącz wzajemne instrukcje aproksymacji dla
zarówno pojedyncza, jak i podwójna precyzja; "divf": włącz odwrotność pojedynczej precyzji
instrukcje zbliżenia; "divd": włącz odwrotność podwójnej precyzji
instrukcje zbliżenia; "rsqrt": włącz odwrotność aproksymacji pierwiastka kwadratowego
instrukcje dla pojedynczej i podwójnej precyzji; "rsqrtf": włącz pojedynczy
precyzyjne odwrotne instrukcje aproksymacji pierwiastka kwadratowego; "rsqrtd": włącz
instrukcje aproksymacji pierwiastka kwadratowego o podwójnej precyzji;

Na przykład -mrecip=wszystko,!rsqrtd umożliwiłoby wszystkie wzajemne oszacowanie
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 or
-mcpu=moc7 automatycznie wybiera -mrecip-precyzja. Kwadrat podwójnej precyzji
instrukcje oszacowania korzeni nie są domyślnie generowane na maszynach o niskiej precyzji,
ponieważ nie zapewniają oszacowania, które jest zbieżne po trzech krokach.

-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
Biblioteki Mathematical Acceleration Subsystem (MASS) do wektoryzacji elementów wewnętrznych przy użyciu
biblioteki zewnętrzne. GCC będzie obecnie emitować 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 i
-funsafe-matematyczne optymalizacje muszą być włączone. Biblioteki MASS będą musiały 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) kiedy
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
zarejestrować r2i wartość łańcucha statycznego do załadowania w rejestrze r11,
-wskaźniki-do-funkcji zagnieżdżonych jest domyślnie włączony. Nie będziesz mógł dzwonić
wskaźniki do funkcji zagnieżdżonych lub wskaźniki do funkcji skompilowanych w innych językach, które
użyj łańcucha statycznego, 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.

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. Note 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 RX600 seria i wyłączone dla RX200 series.

Instrukcje zmiennoprzecinkowe będą generowane tylko dla 32-bitowych wartości zmiennoprzecinkowych
jednak, więc jeśli -m64bit-podwaja opcja jest w użyciu, wtedy sprzęt FPU nie będzie
używany do deblów.

Note 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 i RX200 sprzęt seryjny i specyficzny RX610 PROCESOR. Wartość domyślna to
RX600.

Jedyna różnica między RX600 i RX610 jest to, że RX610 nie obsługuje
Instrukcja „MVTIPL”.

Połączenia RX200 seria nie ma sprzętowej jednostki zmiennoprzecinkowej, a więc -nofpu jest włączony
domyślnie po wybraniu tego typu.

-mbig-endian-dane
-mlittle-endian-dane
Przechowuj dane (ale nie kod) w formacie big-endian. Wartość domyślna to
-mlittle-endian-dane, 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, które kiedyś mogły znajdować się w rejestrze zarezerwowanym, są teraz
wepchnięty na stos.

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-sym
Użyj środowiska wykonawczego symulatora. Domyślnie używane jest środowisko wykonawcze 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 generowanie go nie jest opcją domyślną.

-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 będzie
próbować zmniejszyć rozmiar programu, znajdując krótsze wersje różnych
instrukcje. 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” będzie
zarezerwowane do wyłącznego użytku obsługi szybkich przerwań. Wartość 2 rezerw
„r13” i „r12”. Wartość 3 rezerw „r13”, „r12” i „r11” oraz wartość 4
rezerwuje od „r13” do „r10”. Wartość 0, domyślna, nie rezerwuje żadnego
rejestry.

-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 będą realizowane poprzez przesunięcie od 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:
dotychczasowy -msmall-limit danych 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-limit danych. W ten sposób możliwe jest, aby rejestr małego obszaru danych miał wartość „r8”
Jeśli oba -rejestr-mięty=4 i -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ń.

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 zapewni, że używa tylko
rejestruje „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 i 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 będzie użyty
do wykonywania operacji zmiennoprzecinkowych. 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
będzie używany do wykonywania operacji na liczbach zmiennoprzecinkowych dziesiętnych. Kiedy -Mhard-DFP is
określony, kompilator generuje instrukcje sprzętowe zmiennoprzecinkowe dziesiętne. Ten
jest domyślnym 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.

-Mbackain
-mno-łańcuch wsteczny
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-opakowany-stos jest w
efekt, wskaźnik backchain jest przechowywany na dole ramki stosu; gdy
-mpacked-stos obowiązuje, backchain jest umieszczony w najwyższym słowie
96/160 bajtowy obszar zapisywania rejestru.

Ogólnie kod skompilowany za pomocą -Mbackain 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 -Mbackain. Zauważ, że kombinacja
-Mbackain, -mpacked-stos i -mhard-float nie jest wspierany. W celu zbudowania
korzystanie z jądra linuksa -msoft-float.

Domyślnie nie jest utrzymywany backchain.

-mpacked-stos
-mno-opakowany-stos
Użyj (nie używaj) układu spakowanego stosu. Kiedy -mno-opakowany-stos 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-stos 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 -Mbackain 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-stos
jest kompatybilny z kodem wygenerowanym za pomocą -mno-opakowany-stos. 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-stos. Zwróć też uwagę, że kombinacja
-Mbackain, -mpacked-stos i -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
Kiedy -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
-meza
Kiedy -mzarch jest określony, wygeneruj kod korzystając z instrukcji dostępnych na
z/Architektura. Kiedy -meza jest określony, wygeneruj kod korzystając z instrukcji
dostępne w ESA/390. Zauważ, że -meza nie jest możliwe z -m64. Podczas generowania
kod zgodny z GNU/Linux dla S/390 ABI, domyślnie -meza. 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-debugowanie
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 będzie działał typ procesora, który jest nazwą systemu reprezentującego a
określony typ procesora. Możliwe wartości dla typ procesora jest g5, g6, z900, z990, z9-109,
z9-ec i z10. Podczas generowania kodu przy użyciu instrukcji dostępnych na
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-śledzenie
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łuje alloca lub używa tablic o dynamicznych rozmiarach. To jest
ogólnie zły pomysł z ograniczonym rozmiarem stosu.

-mstack-strażnik=strażnik stosu
-mstack-rozmiar=rozmiar stosu
Jeśli te opcje są dostępne, zaplecze s390 emituje dodatkowe instrukcje w
prolog funkcji, która wyzwala pułapkę, jeśli rozmiar stosu wynosi strażnik stosu bajtów powyżej
dotychczasowy rozmiar stosu (pamiętaj, że stos na s390 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 produkcyjnych, takich jak systemy 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.

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ównanego obciążenia i zapisywanie instrukcji.

-mmak
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-singiel
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-pojedynczy
Wygeneruj kod dla SH4 zakładając, że jednostka zmiennoprzecinkowa jest w trybie pojedynczej precyzji
domyślnie.

-m4 Wygeneruj kod dla SH4.

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

-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 będą działać, 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.

-mbittopy
Włącz korzystanie z instrukcji manipulacji bitami na SH2A.

-mfmovd
Włącz użycie instrukcji „fmovd”. Sprawdzać -mdalign dla wiązań linii trasowania.

-mhitachi
Przestrzegaj konwencji wywoływania określonych przez Renesasa.

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

-mnomaczapisz
Oznacz rejestr „MAC” jako ogłuszony, nawet jeśli: -mhitachi 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 jest włączony i wybrany
Opcja generowania kodu (np. -m4) nie pozwala na użycie instrukcji icbi. Gdyby
wybrana opcja generowania kodu nie pozwala na użycie instrukcji icbi,
oraz -musermode nie działa, kod wbudowany będzie manipulował instrukcją
tablica adresów pamięci podręcznej bezpośrednio z zapisem asocjacyjnym. To nie tylko wymaga
tryb uprzywilejowany, ale nie powiedzie się również, jeśli linia pamięci podręcznej została zmapowana przez TLB
i stał się niezmapowany.

-niewielkość
Zrzuć rozmiar i lokalizację instrukcji w kodzie zespołu.

-mpadstruktura
Ta opcja jest przestarzała. Dopełnia struktury do wielokrotności 4 bajtów, co oznacza
niezgodne z SH ABI.

-msoft-atomowy
Generuj sekwencje atomowe zgodne z GNU/Linux w oprogramowaniu gUSA dla wbudowanego oprogramowania atomic
Funkcje. Wygenerowane sekwencje atomowe wymagają obsługi przerwania /
kod obsługi wyjątków systemu i są odpowiednie tylko dla systemów jednordzeniowych.
Nie będą działać poprawnie w systemach wielordzeniowych. Ta opcja jest włączona przez
domyślnie, gdy celem jest "sh-*-linux*". Aby uzyskać szczegółowe informacje na temat wbudowanego atomu
funkcje patrz __atomowy Wbudowane.

-mprzestrzeń
Optymalizuj pod kątem miejsca zamiast prędkości. Zasugerowany przez -Os.

-mprefergot
Podczas generowania kodu niezależnego od pozycji emituj wywołania funkcji za pomocą globalnego przesunięcia
Tabela zamiast procedury łączenia tabeli.

-tryb użytkownika
Nie generuj kodu tylko w trybie uprzywilejowanym; implikuje -mno-inline-ic_invalidate, jeśli
kod wbudowany nie działałby w trybie użytkownika. Jest to ustawienie domyślne, gdy celem jest
"sz-*-linux*".

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

inw: 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 inw: 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ń
inw:zadzwoń2
inw: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
inw20l
Warianty inw: 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 inw20l
zakłada, że ​​jest to prawdopodobne.

Dla celów innych niż SHmedia strategia może być jednym z:

wywołanie-dział1
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
Precision FPU ustawi się domyślnie 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ślenie tego dla celów, które nie mają instrukcji dynamicznego przesunięcia, spowoduje:
domyślnie "call-div1".

Jeśli strategia podziału nie została określona, ​​zostanie wybrana strategia domyślna
na podstawie aktualnego celu. W przypadku SH2A domyślną strategią jest użycie „divs” i
Instrukcje "divu" zamiast wywołań funkcji bibliotecznych.

-makumuluj wychodzące argumenty
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
wpływają tylko na nazwę używaną w strategiach podziału call i inv:call, a
kompilator nadal będzie oczekiwał tych samych zestawów rejestrów wejściowych/wyjściowych/obszytych, jak gdyby
ta opcja nie była obecna.

-mstały-zakres=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.

-dostosuj-rozwiń
Przyspiesz rozwijanie, aby uniknąć niszczenia rejestrów docelowych. Ta opcja ma tylko
efekt, jeśli baza kodu gcc obsługuje zaczep docelowy TARGET_ADJUST_UNROLL_MAX.

-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 wygeneruje lepsze harmonogramy
kod, ale jest niebezpieczny na obecnym sprzęcie. Obecna definicja architektury mówi
że ptabs i ptrel trap, gdy cel ied z 3 wynosi 3. To ma
niezamierzony efekt uniemożliwiający zaplanowanie ptabs / ptrel przed rozgałęzieniem lub
wyciągnąć go z pętli. Na przykład __do_global_ctors, działająca część libgcc
konstruktory podczas uruchamiania programu wywołują funkcje na liście oddzielonej przez -1.
Z opcją -mpt-fixed, ptabs zostaną wykonane przed testowaniem względem -1. To
oznacza, że ​​wszystkie konstruktory zostaną uruchomione nieco szybciej, ale gdy dojdzie do pętli
koniec listy, program się zawiesza, ponieważ ptabs ładuje -1 do celu
Zarejestruj się. Ponieważ ta opcja jest niebezpieczna dla jakiegokolwiek sprzętu implementującego prąd
specyfikacji architektury, domyślnie -mno-pt-fixed. Chyba że użytkownik określi
konkretny koszt z -mgettrkoszt, -mno-pt-fixed również implikuje -mgettrkoszt=100; to
powstrzymuje przydział rejestrów za pomocą 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 będzie można ładować z movi/shori/ptabs lub movi/shori/ptrel, ale z
triki asemblera i/lub linkera możliwe jest generowanie symboli, które spowodują
ptabs / ptrel do pułapki. Ta opcja ma sens tylko wtedy, gdy -mno-pt-naprawione jest w
efekt. Zapobiegnie to blokowaniu między blokami podstawowymi, podnoszeniu ciężarów i większości harmonogramów
ładuje symbole. Wartość domyślna to -mno-nieprawidłowe-symbole.

-koszt-oddzialu=num
Założyć num być kosztem instrukcji oddziału. Wyższe liczby sprawią, że
kompilator spróbuj wygenerować więcej kodu bez rozgałęzień, jeśli to możliwe. Jeśli nie określono
wartość jest wybierana w zależności od typu procesora, dla którego jest kompilowana.

-mcbranchdi
Włącz wzorzec instrukcji „cbranchdi4”.

-mcmpeqdi
Emituj wzorzec instrukcji "cmpeqdi_t" nawet wtedy, gdy -mcbranchdi obowiązuje.

-mfused-madd
Zezwól na użycie instrukcji „fmac” (zmiennoprzecinkowe mnożenie i akumulowanie), jeśli
obsługuje go typ procesora. Włączenie tej opcji może generować kod, który produkuje
różne wyniki liczbowe zmiennoprzecinkowe w porównaniu do ścisłej arytmetyki IEEE 754.

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

-niewierny-tekst
-niewierny-tekst, używane dodatkowo do -wspólny, mówi kompilatorowi, żeby nie przechodził -z XNUMX 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 spowodują
podczas zapisu, 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.

-pwątek
To jest synonim słowa -pwątki.

SPARC Opcje

Te -m W SPARC obsługiwane są opcje:

-mno-app-regs
-map-regs
Sprecyzować -map-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 będą 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-*-out i sparclit-*-*
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-niewyrównane-double
-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.

-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 wynikowy kod
nie będą bezpośrednio zgodne 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_procesora jest v7, cyprys, v8, supersparc,
hipersparc, leon, sparklit, f930, f934, sparclite86x, błyskotka, tsc701, v9,
ultrasparc, ultrasparc3, Niagara, niagara2, niagara3, 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, sparklit, błyskotka, v9.

Oto lista każdej obsługiwanej architektury i obsługiwanych implementacji.

cyprys v7

v8 supersparc, hipersparc, leon

sparklit
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=superspark, kompilator dodatkowo optymalizuje go pod kątem układu SuperSPARC, ponieważ
używany w serii SPARCStation 10, 1000 i 2000.

Z -mcpu=spaklit, 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=błyszczący, 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 doskonałe.

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, f930, f934, sparclite86x, tsc701, ultrasparc,
ultrasparc3, Niagara, niagara2, niagara3 i niagara4. Z rodzimym Solarisem i
łańcuchy narzędzi 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 i -mvis.

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

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

miód
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.

Emmedany
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=model mem
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 da
błąd, gdy generuje kod, który wymaga dynamicznej relokacji. -mno-błąd-reloc
wyłącza błąd, -mwarn-reloc zamiast tego wygeneruje 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. Użytkownicy zazwyczaj
rozwiązać ten problem, używając słowa kluczowego volatile, ale może to prowadzić do nieefektywnego kodu
w miejscach, o których wiadomo, że pamięć się nie zmienia. Zamiast oznaczać pamięć jako
volatile traktujemy instrukcje DMA jako potencjalnie wpływające na całą pamięć. Z
-munsafe-dma użytkownicy muszą używać słowa kluczowego volatile, aby chronić dostęp do pamięci.

-wskazówki-gałęzi
Domyślnie GCC wygeneruje instrukcję podpowiedzi do gałęzi, aby uniknąć przestojów w potoku dla
zawsze brał lub prawdopodobnie brał gałęzie. Podpowiedź nie zostanie wygenerowana 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
-mały-pamięć
Domyślnie GCC generuje kod zakładając, że adresy nigdy nie są większe niż 18 bitów.
Z -mały-pamięć 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, GCC połączy
twój program przeciwko kodowi startowemu, który zakłada interfejs w stylu C99 do "main",
w tym lokalną kopię ciągów „argv”.

-mstały-zakres=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 zostać 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ęcznej jest 8, 16, 32, 64
i 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 będzie kolidował 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 będzie więcej
wydajny. Domyślnym zachowaniem jest użycie aktualizacji atomowych.

-podwójne-nie
-mdual-nops=n
Domyślnie GCC wstawia nops, aby zwiększyć podwójny problem, gdy spodziewa się, że wzrośnie
wydajność. n może być wartością od 0 do 10. Mniejszy n wstawi mniej nopów. 10
jest wartością domyślną, 0 to to samo co -mno-podwójne-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. GCC wstawi maksymalnie n nop dla
wymusza to, w przeciwnym razie nie wygeneruje 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
125.

-msafe-podpowiedzi
Obejdź błąd sprzętowy, który powoduje, że SPU zawiesza się na czas nieokreślony. Domyślnie GCC
wstawi instrukcję "hbrp", aby upewnić się, że to nie nastąpi.

Opcje dla Konfiguracja 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.

-Pyt 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:

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

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 załaduje adres funkcji do rejestru i wywoła indirect
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.

-mprzestrzeń
Postaraj się, aby kod był jak najmniejszy. Obecnie to tylko włącza -mep
i -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.

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

-map-regs
Ta opcja spowoduje, że r2 i r5 będą używane w kodzie generowanym przez kompilator.
To ustawienie jest domyślne.

-mno-app-regs
Ta opcja spowoduje, że r2 i r5 będą traktowane jako rejestry stałe.

-mv850e2v3
Określ, że procesor docelowy to V850E2V3. Stałe preprocesora
__v850e2v3__ zostanie zdefiniowany, jeśli ta opcja zostanie użyta.

-mv850e2
Określ, że procesor docelowy to V850E2. Stałe preprocesora
__v850e2__ zostanie zdefiniowany, jeśli ta opcja zostanie użyta.

-mv850e1
Określ, że procesor docelowy to V850E1. Stałe preprocesora
__v850e1__ i __v850e__ zostanie zdefiniowany, jeśli ta opcja zostanie użyta.

-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__
zostanie zdefiniowany, jeśli ta opcja zostanie użyta.

Jeśli nie -mv850 ani -mv850e ani -mv850e1 ani -mv850e2 ani -mv850e2v3 są określone
następnie zostanie wybrany domyślny procesor docelowy i odpowiedni __v850*__ preprocesor
zostanie zdefiniowana stała.

Stałe preprocesora __v850 i __v851__ są zawsze zdefiniowane, niezależnie od tego,
wariant procesora jest celem.

-mdisable-call
Ta opcja blokuje generowanie instrukcji CALLT dla v850e, v850e1,
Smaki v850e2 i v850e2v3 architektury v850. Wartość domyślna to
-mno-wyłącz-wezwanie co pozwala na użycie instrukcji CALLT.

VAX Opcje

Te -m opcje są zdefiniowane dla VAX:

-muniks
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 będziesz asemblować z
Asembler GNU.

-mg Kod wyjściowy dla liczb zmiennoprzecinkowych w formacie G zamiast formatu D.

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 i -wspólny może być również używany do RTP; -statyczny jest wartością domyślną.

-Bstatyczny
-Bdynamika
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-64 Opcje

Są one wymienione poniżej

Xburza16 Opcje

Te opcje są zdefiniowane dla Xstormy16:

-msim
Wybierz pliki startowe i skrypt linkera odpowiednie dla symulatora.

Xtensa Opcje

Te opcje są obsługiwane dla celów Xtensa:

-mkonst16
-mno-stała16
Włącz lub wyłącz użycie instrukcji „CONST16” do ładowania stałych wartości. ten
Instrukcja „CONST16” nie jest obecnie standardową opcją firmy Tensilica. Kiedy
włączone, instrukcje „CONST16” są zawsze używane zamiast standardowego „L32R”
instrukcje. Użycie „CONST16” jest domyślnie włączone tylko wtedy, gdy „L32R”
instrukcja nie jest dostępna.

-mfused-madd
-mno-skondensowany-madd
Włącz lub wyłącz użycie połączonych instrukcji mnożenia/dodawania i mnożenia/odejmowania w
opcja zmiennoprzecinkowa. Nie ma to żadnego efektu, jeśli opcja zmiennoprzecinkowa również nie jest
włączony. Wyłączenie połączonych instrukcji mnożenia/dodawania i mnożenia/odejmowania wymusza
kompilator do używania oddzielnych instrukcji dla operacji mnożenia i dodawania/odejmowania.
Może to być pożądane w niektórych przypadkach, gdy wyniki są ściśle zgodne z IEEE 754
wymagane: połączone instrukcje mnożenia dodawania/odejmowania nie zaokrąglają półproduktu
wynik, dając w ten sposób wyniki z jeszcze bity precyzji niż określone przez
Standard IEEE. Wyłączenie połączonych instrukcji mnożenia dodawania/odejmowania zapewnia również, że
wyjście programu nie jest wrażliwe na zdolność kompilatora do łączenia mnożenia i
operacje dodawania/odejmowania.

-mserialize-volatile
-mno-serialize-volatile
Gdy ta opcja jest włączona, GCC wstawia instrukcje „MEMW” przed „ulotną” pamięcią
odniesienia w celu zagwarantowania sekwencyjnej spójności. Wartość domyślna to -mserialize-volatile.
Zastosowanie -mno-serialize-volatile aby pominąć instrukcje „MEMW”.

-mforce-bez-zdjęcia
Dla celów, takich jak GNU/Linux, gdzie cały kod Xtensa w trybie użytkownika musi być
niezależny kod (PIC), ta opcja wyłącza PIC do kompilowania kodu jądra.

-mtext-sekcja-literałów
-mno-tekst-sekcja-literałów
Kontroluj traktowanie dosłownych pul. Wartość domyślna to -mno-tekst-sekcja-literałów,
co umieszcza literały w osobnej sekcji w pliku wyjściowym. Pozwala to na
dosłowna pula do umieszczenia w pamięci RAM/ROM danych, a także umożliwia łączenie linkera
pule literałów z oddzielnych plików obiektowych w celu usunięcia zbędnych literałów i ulepszenia kodu
rozmiar. Z -mtext-sekcja-literałów, literały są przeplatane w sekcji tekstowej
aby były jak najbliżej ich referencji. Może to być konieczne
dla dużych plików zespołów.

-mtarget-wyrównaj
-mno-dopasuj do celu
Gdy ta opcja jest włączona, GCC instruuje asembler, aby automatycznie wyrównał
instrukcje, aby zmniejszyć kary dla oddziałów kosztem pewnej gęstości kodu. ten
asembler próbuje poszerzyć instrukcje gęstości, aby wyrównać cele rozgałęzień i
instrukcje następujące po instrukcji wywołania. Jeśli nie ma wystarczającej liczby poprzedzających sejfów
instrukcje dotyczące gęstości, aby wyrównać cel, nie zostanie wykonane poszerzenie. Wartość domyślna to
-mtarget-wyrównaj. Te opcje nie wpływają na leczenie auto-wyrównania
instrukcje takie jak „LOOP”, które asembler zawsze wyrówna, albo przez poszerzenie
instrukcji gęstości lub przez wstawienie instrukcji no-op.

-mdługie rozmowy
-mno-długie połączenia
Gdy ta opcja jest włączona, GCC instruuje asembler, aby tłumaczył bezpośrednie wywołania na
połączenia pośrednie, chyba że może określić, że cel połączenia bezpośredniego znajduje się w
zakres dozwolony przez instrukcję call. To tłumaczenie zwykle występuje w przypadku połączeń do
funkcje w innych plikach źródłowych. W szczególności asembler tłumaczy bezpośredni
Instrukcja „CALL” do „L32R”, po której następuje instrukcja „CALLX”. Wartość domyślna to
-mno-długie połączenia. Ta opcja powinna być używana w programach, w których cel wywołania może:
potencjalnie być poza zasięgiem. Ta opcja jest zaimplementowana w asemblerze, a nie w
kompilator, więc kod asemblera generowany przez GCC nadal będzie pokazywał bezpośrednie wywołanie
instrukcje --- spójrz na zdemontowany kod obiektowy, aby zobaczyć rzeczywiste instrukcje.
Zauważ, że asembler użyje wywołania pośredniego dla każdego wywołania między plikami, nie tylko
te, które naprawdę będą poza zasięgiem.

zSeria Opcje

Są one wymienione poniżej

Opcje dla Code Pożądania Konwencje
Te opcje niezależne od maszyny kontrolują konwencje interfejsu używane w kodzie
generacja.

Większość z nich ma zarówno formy pozytywne, jak i negatywne; negatywna forma -fuuu byłby
-fno-foo. W poniższej tabeli wymieniony jest tylko jeden z formularzy --- ten, który nie jest
domyślny. Możesz dowiedzieć się, jaka jest druga forma, usuwając no- lub dodanie go.

-fbounds-check
Dla frontendów, które to obsługują, wygeneruj dodatkowy kod, aby sprawdzić, czy indeksy używane do
tablice dostępowe mieszczą się w zadeklarowanym zakresie. Jest to obecnie obsługiwane tylko przez
Interfejsy Java i Fortran, w których domyślnie ta opcja ma wartość true i false
odpowiednio.

-ftrapv
Ta opcja generuje pułapki dla podpisanego przepełnienia przy dodawaniu, odejmowaniu,
operacje mnożenia.

-fwrapv
Ta opcja instruuje kompilator, aby założył, że przepełnienie arytmetyczne ze znakiem
dodawanie, odejmowanie i mnożenie owija się za pomocą uzupełniania dwójkowego
reprezentacja. Ta flaga włącza niektóre optymalizacje i wyłącza inne. Ten
opcja jest domyślnie włączona dla interfejsu Java, zgodnie z wymaganiami języka Java
specyfikacja.

-wyjątki
Włącz obsługę wyjątków. Generuje dodatkowy kod potrzebny do propagowania wyjątków. Do
niektóre cele, oznacza to, że GCC wygeneruje informacje o rozwijaniu ramki dla wszystkich
funkcje, które mogą generować znaczne obciążenie danych, chociaż tak nie jest
wpływają na wykonanie. Jeśli nie określisz tej opcji, GCC włączy ją domyślnie
dla języków takich jak C++, które zwykle wymagają obsługi wyjątków i wyłącz ją dla
języki takie jak C, które normalnie tego nie wymagają. Jednak może być konieczne włączenie
ta opcja podczas kompilowania kodu C, który musi działać poprawnie z wyjątkiem
handlery napisane w C++. Możesz również wyłączyć tę opcję, jeśli:
kompilowanie starszych programów C++, które nie używają obsługi wyjątków.

-fnon-call-Exceptions
Generuj kod, który umożliwia instrukcje zalewkowania w celu zgłaszania wyjątków. Zauważ, że to
wymaga obsługi środowiska uruchomieniowego specyficznej dla platformy, która nie istnieje wszędzie. Ponadto,
to tylko pozwala odłowu instrukcje zgłaszania wyjątków, tj. odwołania do pamięci lub
instrukcje zmiennoprzecinkowe. Nie pozwala na wyrzucanie wyjątków z dowolnych
programy obsługi sygnałów, takie jak „SIGALRM”.

-Funwind-stoliki
Podobny do -wyjątki, poza tym, że wygeneruje tylko potrzebne dane statyczne, ale
nie wpłynie w żaden inny sposób na wygenerowany kod. Zwykle nie włączasz
ta opcja; zamiast tego procesor języka, który wymaga takiej obsługi, umożliwiłby jego włączenie
w Twoim imieniu.

-fasynchroniczne-rozwijające-tabele
Generuj tabelę rozwijania w formacie dwarf2, jeśli jest obsługiwana przez maszynę docelową. Tabela jest
dokładny na każdej granicy instrukcji, dzięki czemu może być używany do rozwijania stosu z
zdarzenia asynchroniczne (takie jak debugger lub odśmiecacz).

-fpcc-struct-return
Zwraca wartości "short" "struct" i "union" w pamięci jak dłuższe, a nie in
rejestry. Ta konwencja jest mniej wydajna, ale ma tę zaletę, że pozwala
intercallability między plikami skompilowanymi GCC i plikami skompilowanymi innymi kompilatorami,
szczególnie Portable C Compiler (pcc).

Dokładna konwencja zwracania struktur w pamięci zależy od celu
makra konfiguracyjne.

Krótkie struktury i połączenia to takie, których rozmiar i wyrównanie odpowiadają niektórym
typ liczby całkowitej.

Ostrzeżenie: kod skompilowany z -fpcc-struct-return przełącznik nie jest kompatybilny binarnie
z kodem skompilowanym za pomocą -freg-struct-return przełącznik. Użyj go, aby dostosować się do nie-
domyślny interfejs binarny aplikacji.

-freg-struct-return
Jeśli to możliwe, zwróć wartości „struct” i „union” w rejestrach. To jest bardziej wydajne
dla małych konstrukcji niż -fpcc-struct-return.

Jeśli nie określisz żadnego -fpcc-struct-return ani -freg-struct-return, GCC domyślnie to
dowolna konwencja jest standardowa dla celu. Jeśli nie ma standardowej konwencji,
GCC domyślnie to -fpcc-struct-return, z wyjątkiem celów, w których głównym celem jest GCC
kompilator. W takich przypadkach możemy wybrać standard, a my wybraliśmy bardziej wydajny
zarejestruj alternatywę zwrotu.

Ostrzeżenie: kod skompilowany z -freg-struct-return przełącznik nie jest kompatybilny binarnie
z kodem skompilowanym za pomocą -fpcc-struct-return przełącznik. Użyj go, aby dostosować się do nie-
domyślny interfejs binarny aplikacji.

-fshort-wyliczenia
Przydziel do typu „enum” tylko tyle bajtów, ile potrzeba dla zadeklarowanego zakresu
możliwa wartość. W szczególności typ „enum” będzie równoważny z najmniejszym
typ liczby całkowitej, który ma wystarczająco dużo miejsca.

Ostrzeżenie: dotychczasowy -fshort-wyliczenia przełącznik powoduje, że GCC generuje kod, który nie jest binarny
kompatybilny z kodem wygenerowanym bez tego przełącznika. Użyj go, aby dostosować się do nie-
domyślny interfejs binarny aplikacji.

-fshort-double
Użyj tego samego rozmiaru dla „podwójnych” jak dla „float”.

Ostrzeżenie: dotychczasowy -fshort-double przełącznik powoduje, że GCC generuje kod, który nie jest binarny
kompatybilny z kodem wygenerowanym bez tego przełącznika. Użyj go, aby dostosować się do nie-
domyślny interfejs binarny aplikacji.

-fshort-wchar
Zastąp typ bazowy dla wchar_t być krótki unsigned int zamiast tego
domyślne dla celu. Ta opcja jest przydatna przy tworzeniu programów do uruchamiania
WINO.

Ostrzeżenie: dotychczasowy -fshort-wchar przełącznik powoduje, że GCC generuje kod, który nie jest binarny
kompatybilny z kodem wygenerowanym bez tego przełącznika. Użyj go, aby dostosować się do nie-
domyślny interfejs binarny aplikacji.

-fno-wspólny
W kodzie C kontroluje umieszczanie niezainicjowanych zmiennych globalnych. Kompilatory Uniksa C
tradycyjnie dopuszczali wiele definicji takich zmiennych w różnych
jednostki kompilacji poprzez umieszczenie zmiennych we wspólnym bloku. To jest zachowanie
określone przez -fwspólnyi jest domyślnym ustawieniem GCC w większości celów. Z drugiej strony,
to zachowanie nie jest wymagane przez ISO C, a na niektórych celach może nosić prędkość lub kod
kara za wielkość odniesień do zmiennych. ten -fno-wspólny opcja określa, że
kompilator powinien umieścić niezainicjowane zmienne globalne w sekcji danych obiektu
plik, zamiast generować je jako wspólne bloki. Skutkuje to tym, że jeśli
ta sama zmienna jest zadeklarowana (bez „extern”) w dwóch różnych kompilacjach, będziesz
podczas łączenia ich pojawia się błąd z wieloma definicjami. W takim przypadku musisz skompilować
w -fwspólny zamiast. Kompilacja z -fno-wspólny jest przydatny na celach, dla których to
zapewnia lepszą wydajność lub jeśli chcesz sprawdzić, czy program będzie działał
inne systemy, które zawsze traktują w ten sposób niezainicjowane deklaracje zmiennych.

-Fno-ident
Zignoruj #identyfikator Dyrektywa.

-Dyrektywa-finhibit-rozmiar
Nie wypisuj dyrektywy asemblera ".size" ani niczego innego, co mogłoby spowodować kłopoty
jeśli funkcja jest podzielona pośrodku, a dwie połówki są umieszczone daleko
w pamięci. Ta opcja jest używana podczas kompilacji crtstuff.c; nie powinieneś potrzebować
używać go do czegokolwiek innego.

-fverbose-asm
Umieść dodatkowe informacje w komentarzu w wygenerowanym kodzie asemblera, aby było więcej
czytelny. Ta opcja jest zazwyczaj przydatna tylko dla tych, którzy rzeczywiście muszą przeczytać
wygenerowany kod asemblera (być może podczas debugowania samego kompilatora).

-fno-gadatliwy-asm, domyślnie, powoduje pominięcie dodatkowych informacji i jest
przydatne przy porównywaniu dwóch plików asemblera.

-przełączniki frecord-gcc
Ten przełącznik powoduje, że wiersz poleceń, który został użyty do wywołania kompilatora, zostanie
zapisane w tworzonym pliku obiektowym. Ten przełącznik jest zaimplementowany tylko
na niektórych celach, a dokładny format nagrania to docelowy i binarny format pliku
zależne, ale zwykle ma postać sekcji zawierającej tekst ASCII. Ten
przełącznik jest powiązany z -fverbose-asm przełącznik, ale ten przełącznik tylko nagrywa
informacje w pliku wyjściowym asemblera jako komentarze, więc nigdy nie docierają do obiektu
plik. Zobacz też -przełączniki-grecord-gcc dla innego sposobu przechowywania opcji kompilatora w
plik obiektowy.

-fpic
Wygeneruj kod niezależny od pozycji (PIC) odpowiedni do użycia w bibliotece współdzielonej, jeśli:
obsługiwane dla maszyny docelowej. Taki kod uzyskuje dostęp do wszystkich stałych adresów poprzez a
globalna tablica ofsetów (GOT). Dynamiczny moduł ładujący rozwiązuje wpisy GOT, gdy
program uruchamia się (dynamiczny loader nie jest częścią GCC; jest częścią operacji)
system). Jeśli rozmiar GOT dla połączonego pliku wykonywalnego przekracza maksimum specyficzne dla maszyny
rozmiar, otrzymasz komunikat o błędzie z linkera wskazujący, że -fpic nie działa; w
w takim przypadku przekompiluj z -fPIC zamiast. (Te maksima to 8k na SPARC i 32k
na m68k i RS/6000. 386 nie ma takiego limitu).

Kod niezależny od pozycji wymaga specjalnego wsparcia, dlatego działa tylko na
niektórych maszyn. W przypadku 386 GCC obsługuje PIC dla Systemu V, ale nie dla Sun
386i. Kod generowany dla IBM RS/6000 jest zawsze niezależny od pozycji.

Gdy ta flaga jest ustawiona, makra „__pic__” i „__PIC__” mają wartość 1.

-fPIC
Jeśli jest obsługiwany dla maszyny docelowej, wyemituj kod niezależny od pozycji, odpowiedni dla
dynamiczne łączenie i unikanie jakichkolwiek ograniczeń rozmiaru tablicy globalnych ofsetów. Ten
opcja robi różnicę na m68k, PowerPC i SPARC.

Kod niezależny od pozycji wymaga specjalnego wsparcia, dlatego działa tylko na
niektórych maszyn.

Gdy ta flaga jest ustawiona, makra „__pic__” i „__PIC__” mają wartość 2.

-fpie
-fSROKA
Te opcje są podobne do -fpic i -fPIC, ale wygenerowany kod niezależny od pozycji
można łączyć tylko z plikami wykonywalnymi. Zwykle te opcje są używane, gdy -ciasto GCC
opcja będzie używana podczas łączenia.

-fpie i -fSROKA oba definiują makra „__pie__” i „__PIE__”. Makra mają
wartość 1 dla -fpie i 2 dla -fSROKA.

-fno-skok-stoliki
Nie używaj tabel skoku dla instrukcji switch, nawet jeśli byłoby to bardziej wydajne
niż inne strategie generowania kodu. Ta opcja jest używana w połączeniu z
-fpic or -fPIC do budowania kodu, który stanowi część dynamicznego linkera i nie może
odwołuje się do adresu tablicy skoków. W przypadku niektórych celów tabele skoków nie wymagają
GOT i ta opcja nie jest potrzebna.

-stały-reg
Traktuj rejestr o nazwie reg jako rejestr stały; wygenerowany kod nigdy nie powinien odnosić się do
to (z wyjątkiem być może jako wskaźnik stosu, wskaźnik ramki lub w innej stałej roli).

reg musi być nazwą rejestru. Akceptowane nazwy rejestrów są specyficzne dla maszyny
i są zdefiniowane w makrze „REGISTER_NAMES” w pliku makra opisu maszyny.

Ta flaga nie ma formy ujemnej, ponieważ określa wybór trójstronny.

-wywołanie-używane-reg
Traktuj rejestr o nazwie reg jako możliwy do przydzielenia rejestr, który jest obciążony przez funkcję
wzywa. Może być przydzielony do tymczasowych lub zmiennych, które nie znajdują się w
połączenie. Skompilowane w ten sposób funkcje nie zapisują i nie przywracają rejestru reg.

Używanie tej flagi ze wskaźnikiem ramki lub wskaźnika stosu jest błędem. Użyj tego
flaga dla innych rejestrów, które mają ustalone wszechobecne role w wykonaniu maszyny
model przyniesie katastrofalne wyniki.

Ta flaga nie ma formy ujemnej, ponieważ określa wybór trójstronny.

-wezwanie-zapisane-reg
Traktuj rejestr o nazwie reg jako możliwy do przydzielenia rejestr zapisany przez funkcje. Może być
przydzielane nawet dla tymczasowych lub zmiennych, które występują w trakcie połączenia. Funkcje
skompilowany w ten sposób zapisze i przywróci rejestr reg jeśli go użyją.

Używanie tej flagi ze wskaźnikiem ramki lub wskaźnika stosu jest błędem. Użyj tego
flaga dla innych rejestrów, które mają ustalone wszechobecne role w wykonaniu maszyny
model przyniesie katastrofalne wyniki.

Użycie tej flagi do rejestru w
jakie wartości funkcji mogą zostać zwrócone.

Ta flaga nie ma formy ujemnej, ponieważ określa wybór trójstronny.

-fpack-struct[=n]
Bez określonej wartości, spakuj wszystkie elementy konstrukcji razem bez otworów. Kiedy
podana jest wartość (która musi być małą potęgą dwójki), elementy struktury spakuj
zgodnie z tą wartością, reprezentującą maksymalne wyrównanie (czyli obiekty z
domyślne wymagania wyrównania większe niż te, które będą wyświetlane jako potencjalnie niewyrównane
w następnym miejscu montażu.

Ostrzeżenie: dotychczasowy -fpack-struct przełącznik powoduje, że GCC generuje kod, który nie jest binarny
kompatybilny z kodem wygenerowanym bez tego przełącznika. Dodatkowo tworzy kod
nieoptymalne. Użyj go, aby dostosować się do niestandardowego interfejsu binarnego aplikacji.

-instrument-funkcje
Generuj wywołania instrumentacji dla wejścia i wyjścia z funkcji. Tuż po funkcji
wejście i tuż przed wyjściem z funkcji zostaną wywołane następujące funkcje profilowania
z adresem aktualnej funkcji i jej miejscem wywołania. (Na niektórych platformach
"__builtin_return_address" nie działa poza bieżącą funkcją, więc strona wywołania
w przeciwnym razie informacje mogą nie być dostępne dla funkcji profilowania.)

void __cyg_profile_func_enter (nieważny *this_fn,
nieważne *call_site);
void __cyg_profile_func_exit (nieważne *this_fn,
nieważne *call_site);

Pierwszym argumentem jest adres początku bieżącej funkcji, którym może być
spojrzał dokładnie w tabelę symboli.

Ta instrumentacja jest również wykonywana dla funkcji rozszerzonych w linii w innych funkcjach.
Wywołania profilowania wskażą, gdzie koncepcyjnie wprowadzono funkcję inline
i wyszedł. Oznacza to, że muszą być dostępne wersje adresowalne takich funkcji.
Jeśli wszystkie twoje zastosowania funkcji są rozwijane w tekście, może to oznaczać dodatkowe
rozszerzenie rozmiaru kodu. Jeśli użyjesz zewnętrzny inline w kodzie C adresowalny
należy podać wersję takich funkcji. (Zwykle tak jest, ale
jeśli masz szczęście, a optymalizator zawsze rozszerza funkcje inline, możesz mieć
uciekł bez dostarczenia statycznych kopii).

Funkcji można nadać atrybut „no_instrument_function”, w takim przypadku to
oprzyrządowanie nie zostanie wykonane. Można to wykorzystać np. do profilowania
funkcje wymienione powyżej, procedury przerwań o wysokim priorytecie i wszelkie funkcje, z których
funkcje profilowania nie mogą być bezpiecznie wywoływane (być może programy obsługi sygnałów, jeśli
procedury profilowania generują dane wyjściowe lub alokują pamięć).

-funkcje-instrumentu-wykluczenia-listy-plików=filet,filet, ...
Ustaw listę funkcji, które są wyłączone z oprzyrządowania (patrz opis
"-funkcji-instrumentów"). Jeśli plik zawierający definicję funkcji pasuje
z jednym z filet, ta funkcja nie jest oprzyrządowana. Mecz odbywa się w dniu
podciągi: jeśli filet parametr jest podciągiem nazwy pliku, uważa się, że
być meczem.

Na przykład:

-funkcje-instrumentu-wykluczenia-listy-plików=/bits/stl,include/sys

wykluczy każdą funkcję inline zdefiniowaną w plikach, których nazwy ścieżek zawierają "/bits/stl"
lub „włącz/sys”.

Jeśli z jakiegoś powodu chcesz dołączyć literę „,” do jednego z sym, pisać ','. Do
przykład, "-finstrument-functions-exclude-file-list=',,tmp'" (zwróć uwagę na pojedynczy cudzysłów
wokół opcji).

-funkcje-instrumentu-wykluczanie-listy-funkcji=sym,sym, ...
Jest to podobne do "-finstrument-functions-exclude-file-list", ale ta opcja ustawia
lista nazw funkcji, które mają być wykluczone z oprzyrządowania. Nazwa funkcji do
być dopasowanym, to jego nazwa widoczna dla użytkownika, na przykład „wektor bla (stały wektor &)",
nie wewnętrzna zniekształcona nazwa (np. "_Z4blahRSt6vectorIiSaIiEE"). Mecz skończony
na podciągach: jeśli sym parametr jest podciągiem nazwy funkcji, to jest
uważane za dopasowanie. Dla rozszerzonych identyfikatorów C99 i C++ nazwa funkcji
musi być podany w UTF-8, bez uniwersalnych nazw znaków.

-fstack-sprawdzenie
Wygeneruj kod, aby sprawdzić, czy nie wykraczasz poza granicę stosu. Ty
należy określić tę flagę, jeśli pracujesz w środowisku z wieloma wątkami,
ale rzadko trzeba to określać w środowisku jednowątkowym, ponieważ stos
przepełnienie jest automatycznie wykrywane w prawie wszystkich systemach, jeśli istnieje tylko jeden stos.

Zauważ, że ten przełącznik w rzeczywistości nie powoduje sprawdzania; operacyjny
system lub środowisko uruchomieniowe języka musi to zrobić. Przełącznik powoduje generowanie kodu do
upewnij się, że widzą, że stos się rozciąga.

Możesz dodatkowo określić parametr ciągu: „no” oznacza brak sprawdzania, „generic”
oznacza wymuszać stosowanie sprawdzania w starym stylu, „konkretne” oznacza stosowanie najlepszego sprawdzania
metoda i jest odpowiednikiem bare -fstack-sprawdzenie.

Sprawdzanie w starym stylu jest ogólnym mechanizmem, który nie wymaga specyficznej obsługi celu w
kompilator, ale ma następujące wady:

1. Zmodyfikowana strategia alokacji dla dużych obiektów: zawsze będą alokowane
dynamicznie, jeśli ich rozmiar przekracza ustalony próg.

2. Stały limit rozmiaru ramki statycznej funkcji: gdy jest zakończony przez a
konkretna funkcja, sprawdzanie stosu nie jest wiarygodne i pojawia się ostrzeżenie
kompilator.

3. Nieefektywność: zarówno z powodu zmodyfikowanej strategii alokacji, jak i ogólnej
wdrożenie, działanie kodu jest utrudnione.

Zwróć uwagę, że sprawdzanie stosu w starym stylu jest również metodą zastępczą dla „konkretnych”, jeśli nie
w kompilatorze dodano obsługę celów.

-fstack-limit-rejestr=reg
-fstack-symbol-limitu=sym
-fno-limit stosu
Wygeneruj kod, aby upewnić się, że stos nie przekroczy określonej wartości
wartość rejestru lub adres symbolu. Gdyby stos urósł poza
wartość, sygnał jest podniesiony. W przypadku większości celów sygnał jest podnoszony przed
stos przekracza granicę, dzięki czemu możliwe jest złapanie sygnału bez podejmowania
specjalne środki ostrożności.

Na przykład, jeśli stos zaczyna się od adresu bezwzględnego 0x80000000 i rośnie w dół,
możesz użyć flag -fstack-symbol-limitu=__stack_limit i
-Wl,--defsym,__stack_limit=0x7ffe0000 aby wymusić limit stosu wynoszący 128 KB. Zauważ, że
może to działać tylko z linkerem GNU.

-fsplit-stos
Wygeneruj kod, aby automatycznie podzielić stos przed przepełnieniem. Wynikowy
program ma nieciągły stos, który może się przepełnić tylko wtedy, gdy program nie jest w stanie
przydziel więcej pamięci. Jest to najbardziej przydatne podczas uruchamiania programów z wątkami, ponieważ
nie jest już konieczne obliczanie odpowiedniego rozmiaru stosu dla każdego wątku. To jest
obecnie zaimplementowane tylko dla zaplecza i386 i x86_64 z systemem GNU/Linux.

Gdy kod skompilowany z -fsplit-stos wywołuje kod skompilowany bez -fsplit-stosnie
może nie być dużo miejsca na stosie dostępnego do uruchomienia drugiego kodu. Jeśli kompilujesz wszystko
kod, w tym kod biblioteki, z -fsplit-stos nie jest opcją, linker może
napraw te wywołania, aby kod skompilowany bez -fsplit-stos zawsze ma duży
stos. Wsparcie dla tego zostało zaimplementowane w złotym linkerze w wydaniu GNU binutils
2.21 i później.

-przelotne-podkreślenie
Ta opcja i jej odpowiednik, -fno-lider-podkreślenie, na siłę zmień sposób C
symbole są reprezentowane w pliku obiektowym. Jednym z zastosowań jest pomoc w łączeniu ze dziedzictwem
kod zespołu.

Ostrzeżenie: dotychczasowy -przelotne-podkreślenie przełącznik powoduje, że GCC generuje kod, który nie jest
binarny kompatybilny z kodem wygenerowanym bez tego przełącznika. Użyj go, aby dostosować się do
inny niż domyślny interfejs binarny aplikacji. Nie wszystkie cele zapewniają pełne wsparcie
dla tego przełącznika.

-ftls-model=model
Zmień model przechowywania lokalnego wątku, który ma być używany. ten model argument powinien być jednym z
„global-dynamic”, „local-dynamic”, „initial-exec” lub „local-exec”.

Domyślnie bez -fpic jest „początkowe-exec”; z -fpic domyślnie
„globalna dynamiczna”.

-widoczność=domyślne|wewnętrzne|ukryte|chronione
Ustaw domyślną widoczność symbolu obrazu ELF na określoną opcję --- wszystkie symbole będą
być oznaczone tym, chyba że jest nadpisane w kodzie. Korzystanie z tej funkcji może bardzo
znacznie poprawiają czasy łączenia i ładowania współdzielonych bibliotek obiektów, produkują więcej
zoptymalizowany kod, zapewnia niemal doskonały eksport API i zapobiega kolizjom symboli. To jest
strongly zaleca się używanie tego w dowolnych udostępnianych obiektach.

Pomimo nomenklatury „default” zawsze oznacza publiczne; tj. dostępne do połączenia
z zewnątrz wspólnego obiektu. „chronione” i „wewnętrzne” są dość bezużyteczne
w rzeczywistym świecie, więc jedyną inną często używaną opcją będzie „ukryta”. ten
domyślne, jeśli -widzialność nie jest określony, jest "domyślny", tj. uczyń każdy symbol
public --- to powoduje to samo zachowanie, co poprzednie wersje GCC.

Dobre wyjaśnienie korzyści płynących z upewnienia się, że symbole ELF mają poprawność
widoczność jest podana przez „How To Write Shared Libraries” autorstwa Ulricha Dreppera (która może być
znaleźć whttp://people.redhat.com/~drepper/>) --- jednak wykonano doskonałe rozwiązanie
możliwe dzięki tej opcji, aby zaznaczyć rzeczy ukryte, gdy domyślnie jest to publiczne, to zrobić
domyślnie ukryte i oznaczać rzeczy jako publiczne. Jest to norma w przypadku bibliotek DLL w systemie Windows i
w -fvisibility=ukryty i "__attribute__ ((visibility("default")))" zamiast
"__declspec(dllexport)" otrzymujesz prawie identyczną semantykę z identyczną składnią.
To wielkie dobrodziejstwo dla osób pracujących z projektami wieloplatformowymi.

Dla tych, którzy dodają obsługę widoczności do istniejącego kodu, możesz znaleźć #pragma GCC
widoczność użytkowania. Działa to przez załączanie deklaracji, które chcesz ustawić
widoczność dla z (na przykład) #pragma GCC widoczność popchnij (ukryty) i #pragma GCC
widoczność muzyka pop. Pamiętaj, że widoczność symbolu powinna być oglądana as część of dotychczasowy
API Interfejs umowa dlatego każdy nowy kod powinien zawsze określać widoczność, gdy jest
nie jest domyślnym; tj. deklaracje wyłącznie do użytku w ramach lokalnego OSD powinny: zawsze
być wyraźnie oznaczone jako ukryte, aby uniknąć pośrednich kosztów PLT --- robienie tego
bardzo przejrzysty ułatwia również czytelność i samodokumentację kodu. Zauważ, że
ze względu na wymagania specyfikacji ISO C++, operator nowy i operator usuń muszą
zawsze mieć domyślną widoczność.

Należy pamiętać, że nagłówki spoza projektu, w szczególności nagłówki systemowe i
nagłówki z dowolnej innej biblioteki, której używasz, mogą nie być skompilowane z
widoczność inna niż domyślna. Być może będziesz musiał wyraźnie powiedzieć #pragma GCC
widoczność wciśnij (domyślnie) przed dołączeniem takich nagłówków.

zewnętrzny na deklaracje nie ma wpływu -widzialność, więc dużo kodu może być
przekompilowany z -fvisibility=ukryty bez modyfikacji. Oznacza to jednak, że
dzwoni do zewnętrzny funkcje bez wyraźnej widoczności będą korzystać z PLT, więc jest więcej
skuteczny w użyciu __atrybut ((widoczność)) i / lub #pragma GCC widoczność powiedzieć
kompilator, który zewnętrzny deklaracje należy traktować jako ukryte.

Należy pamiętać, że -widzialność wpływa na niejasne encje powiązania C++. Oznacza to, że dla
na przykład klasa wyjątku, która będzie rzucana między DSO, musi być jawnie
oznaczone z domyślną widocznością, aby typ_informacje węzły zostaną zunifikowane między
OSD.

Przegląd tych technik, ich korzyści i sposobów ich wykorzystania znajduje się na:
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
Ta opcja powinna być używana, jeśli dostęp do ulotnych pól bitowych (lub innej struktury)
pola, chociaż kompilator i tak zwykle honoruje te typy) powinien używać pojedynczego
dostęp do szerokości typu pola, w miarę możliwości wyrównany do naturalnego wyrównania.
Na przykład cele z mapowanymi w pamięci rejestrami peryferyjnymi mogą wymagać wszystkich takich
dostępy mają szerokość 16 bitów; z tą flagą użytkownik może zadeklarować wszystkie bity peryferyjne
pola jako „krótkie bez znaku” (zakładając, że krótki to 16 bitów w tych celach), aby wymusić GCC
używać dostępu 16-bitowego zamiast, być może, bardziej wydajnego dostępu 32-bitowego.

Jeśli ta opcja jest wyłączona, kompilator użyje najbardziej wydajnej instrukcji. w
w poprzednim przykładzie może to być 32-bitowa instrukcja ładowania, mimo że to będzie
bajty dostępu, które nie zawierają żadnej części pola bitowego lub są mapowane w pamięci
rejestry niepowiązane z aktualizowanym.

Jeśli cel wymaga ścisłego wyrównania, a honorowanie typu pola wymagałoby
naruszenie tego wyrównania, zostanie wygenerowane ostrzeżenie. Jeśli pole ma atrybut „packed”,
dostęp odbywa się bez honorowania typu pola. Jeśli pole nie ma
atrybut „packed”, dostęp odbywa się z uwzględnieniem typu pola. W obu przypadkach GCC
zakłada, że ​​użytkownik wie coś o sprzęcie docelowym, czego nie jest świadomy.

Domyślna wartość tej opcji jest określona przez binarny interfejs aplikacji dla
procesor docelowy.

ŚRODOWISKO


Ta sekcja opisuje kilka zmiennych środowiskowych, które wpływają na działanie GCC. Trochę
z nich działa, określając katalogi lub przedrostki, które mają być używane podczas wyszukiwania różnych rodzajów
plików. Niektóre są używane do określenia innych aspektów środowiska kompilacji.

Pamiętaj, że możesz również określić miejsca do przeszukania za pomocą opcji takich jak -B, -I i -L.
Mają one pierwszeństwo przed miejscami określonymi za pomocą zmiennych środowiskowych, które z kolei
mają pierwszeństwo przed tymi określonymi w konfiguracji GCC.

JĘZYK
LC_CTYPE
LC_MESSAGES
LC_ALL
Te zmienne środowiskowe kontrolują sposób, w jaki GCC wykorzystuje informacje o lokalizacji
co pozwala GCC pracować z różnymi konwencjami krajowymi. GCC sprawdza ustawienia regionalne
kategorie LC_CTYPE i LC_MESSAGES jeśli został tak skonfigurowany. Te ustawienia regionalne
kategorie można ustawić na dowolną wartość obsługiwaną przez twoją instalację. Typowa wartość to
en_GB.UTF-8 dla języka angielskiego w Wielkiej Brytanii zakodowane w UTF-8.

Połączenia LC_CTYPE zmienna środowiskowa określa klasyfikację znaków. GCC używa go do
określić granice znaków w ciągu; jest to potrzebne w przypadku niektórych wielobajtów
kodowania zawierające cudzysłowy i znaki ucieczki, które w przeciwnym razie zostałyby zinterpretowane
jako koniec łańcucha lub ucieczka.

Połączenia LC_MESSAGES zmienna środowiskowa określa język używany w diagnostyce
wiadomości.

Jeśli LC_ALL zmienna środowiskowa jest ustawiona, zastępuje ona wartość LC_CTYPE i
LC_MESSAGES; Inaczej, LC_CTYPE i LC_MESSAGES domyślnie do wartości JĘZYK
Zmienna środowiskowa. Jeśli żadna z tych zmiennych nie jest ustawiona, GCC domyślnie przyjmuje wartość tradycyjna
C Angielskie zachowanie.

TMPDIR
If TMPDIR jest ustawiony, określa katalog, który ma być używany dla plików tymczasowych. Zastosowania GCC
pliki tymczasowe do przechowywania danych wyjściowych jednego etapu kompilacji, który ma być używany jako
dane wejściowe do następnego etapu: na przykład dane wyjściowe z preprocesora, czyli
dane wejściowe do właściwego kompilatora.

GCC_COMPARE_DEBUG
Oprawa GCC_COMPARE_DEBUG jest prawie równoznaczne z przejściem -fcompare-debugowanie do
sterownik kompilatora. Więcej informacji można znaleźć w dokumentacji tej opcji.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX jest ustawiony, określa prefiks do użycia w nazwach
podprogramy wykonywane przez kompilator. Po połączeniu tego przedrostka nie jest dodawany ukośnik
z nazwą podprogramu, ale możesz określić przedrostek kończący się ukośnikiem, jeśli
chcesz.

If GCC_EXEC_PREFIX nie jest ustawiona, GCC spróbuje znaleźć odpowiedni przedrostek do
użyj na podstawie ścieżki, z którą został wywołany.

Jeśli GCC nie może znaleźć podprogramu przy użyciu określonego przedrostka, próbuje szukać w
zwykłe miejsca dla podprogramu.

Domyślna wartość GCC_EXEC_PREFIX is prefiks/lib/gcc/ gdzie prefiks jest przedrostkiem do
zainstalowany kompilator. W wielu przypadkach prefiks jest wartością „prefiksu” po uruchomieniu
skonfigurować skrypt.

Inne przedrostki określone przez -B mają pierwszeństwo przed tym prefiksem.

Ten prefiks jest również używany do wyszukiwania plików, takich jak crt0.o które są używane do łączenia.

Ponadto prefiks jest używany w nietypowy sposób przy wyszukiwaniu katalogów do przeszukania
dla plików nagłówkowych. Dla każdego ze standardowych katalogów, których nazwa normalnie się zaczyna
w /usr/local/lib/gcc (dokładniej o wartości GCC_INCLUDE_DIR), GCC próbuje
zastąpienie tego zaczynającego się określonym przedrostkiem, aby utworzyć alternatywny katalog
Nazwa. Tak więc, z -Bfuj/, GCC będzie szukać foo/bar gdzie normalnie by szukał
/usr/local/lib/bar. Te alternatywne katalogi są przeszukiwane jako pierwsze; standard
katalogi są następne. Jeśli standardowy katalog zaczyna się od skonfigurowanego prefiks następnie
wartość prefiks zastępuje się GCC_EXEC_PREFIX podczas wyszukiwania plików nagłówkowych.

ŚCIEŻKA_KOMPILERA
Wartość ŚCIEŻKA_KOMPILERA to rozdzielona dwukropkami lista katalogów, podobnie jak PATH.
GCC próbuje katalogów określonych w ten sposób podczas wyszukiwania podprogramów, jeśli nie może
znajdź podprogramy za pomocą GCC_EXEC_PREFIX.

ŚCIEŻKA_BIBLIOTEKI
Wartość ŚCIEŻKA_BIBLIOTEKI to rozdzielona dwukropkami lista katalogów, podobnie jak PATH.
Gdy jest skonfigurowany jako natywny kompilator, GCC próbuje katalogów określonych w ten sposób, gdy
wyszukiwanie specjalnych plików linkera, jeśli nie może ich znaleźć za pomocą GCC_EXEC_PREFIX.
Łączenie za pomocą GCC również używa tych katalogów podczas wyszukiwania zwykłych bibliotek
dla -l opcja (ale katalogi określone przez -L Przyjdź pierwszy).

JĘZYK
Ta zmienna służy do przekazywania informacji o lokalizacji do kompilatora. Jeden sposób, w jaki
ta informacja jest używana do określenia zestawu znaków, który ma być użyty, gdy znak
literały, literały łańcuchowe i komentarze są analizowane w C i C++. Kiedy kompilator jest
skonfigurowany tak, aby zezwalał na znaki wielobajtowe, następujące wartości dla JĘZYK jest
rozpoznano:

C-JIS
Rozpoznawaj znaki JIS.

C-SJIS
Rozpoznawaj znaki SJIS.

C-EUCJP
Rozpoznawaj znaki EUCJP.

If JĘZYK nie jest zdefiniowana lub jeśli ma inną wartość, kompilator użyje
mblen i mbtowc zdefiniowane przez domyślne ustawienia regionalne do rozpoznawania i tłumaczenia wielobajtowego
postacie.

Niektóre dodatkowe zmienne środowiskowe wpływają na zachowanie preprocesora.

ŚCIEŻKA
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Wartość każdej zmiennej jest listą katalogów oddzielonych specjalnym znakiem, dużo
lubić PATH, w którym szukać plików nagłówkowych. Specjalny charakter,
„PATH_SEPARATOR” jest zależny od celu i określany w czasie kompilacji GCC. Dla Microsoft
Cele oparte na systemie Windows jest to średnik, a dla prawie wszystkich innych celów jest to
dwukropek.

ŚCIEŻKA określa listę katalogów do przeszukania, tak jakby określono za pomocą -I, ale
po dowolnych ścieżkach podanych z -I opcje w wierszu poleceń. Ta zmienna środowiskowa
jest używany niezależnie od tego, który język jest wstępnie przetwarzany.

Pozostałe zmienne środowiskowe mają zastosowanie tylko podczas wstępnego przetwarzania określonego
wskazany język. Każdy określa listę katalogów do przeszukania, tak jakby
określony z -isystem, ale po dowolnych ścieżkach podanych z -isystem opcje na
wiersz poleceń.

We wszystkich tych zmiennych pusty element instruuje kompilator, aby przeszukał jego bieżący
katalog roboczy. Puste elementy mogą pojawić się na początku lub na końcu ścieżki. Do
przykład, jeśli wartość ŚCIEŻKA to ":/special/include", który ma taki sam efekt jak
-I. -I/specjalne/zawiera.

DEPENDENCIES_OUTPUT
Jeśli ta zmienna jest ustawiona, jej wartość określa sposób wyprowadzania zależności dla Make based
na niesystemowych plikach nagłówkowych przetwarzanych przez kompilator. Systemowe pliki nagłówkowe są
ignorowane w danych wyjściowych zależności.

Wartość DEPENDENCIES_OUTPUT może być tylko nazwą pliku, w takim przypadku reguły tworzenia
są zapisywane do tego pliku, odgadując nazwę docelową z nazwy pliku źródłowego. Albo
wartość może mieć postać filet cel, w takim przypadku zasady są zapisywane do pliku filet
za pomocą cel jako nazwę docelową.

Innymi słowy, ta zmienna środowiskowa jest równoważna połączeniu opcji -MM
i -MF, z opcjonalnym -MT przełącznik też.

SUNPRO_DEPENDENCIES
Ta zmienna jest taka sama jak DEPENDENCIES_OUTPUT (patrz wyżej), z wyjątkiem tego systemu
pliki nagłówkowe nie są ignorowane, co sugeruje -M zamiast -MM. Jednakże
zależność od głównego pliku wejściowego jest pomijana.

Korzystaj z g++-4.7 online za pomocą usług onworks.net


Darmowe serwery i stacje robocze

Pobierz aplikacje Windows i Linux

  • 1
    turkdewops
    turkdewops
    TurkDevOps a�?k kaynak yaz?l?m
    żel tirici topluluklar? Zespół DevTurks
    Taraf?ndan desteklenmektedir..
    Funkcje: https://github.com/turkdevops https://turkdevops.g...
    Pobierz turkdevops
  • 2
    asammdf
    asammdf
    *asammdf* to szybki parser Pythona i
    edytor dla ASAM (Association for
    Standaryzacja Automatyki i
    Systemy pomiarowe) MDF / MF4
    (Format danych pomiarowych...
    Pobierz asammdf
  • 3
    LAME (Klama nie jest enkoderem MP3)
    LAME (Klama nie jest enkoderem MP3)
    LAME jest narzędziem edukacyjnym, którego należy używać
    do nauki kodowania MP3. The
    Celem projektu LAME jest poprawa
    psychoakustyka, jakość i szybkość
    posła...
    Pobierz LAME (Lame Aint an MP3 Encoder)
  • 4
    wxPython
    wxPython
    Zestaw modułów rozszerzeń Pythona, który
    zawiń międzyplatformowe klasy GUI z
    wxWidgets. Odbiorcy: Deweloperzy. Użytkownik
    interfejs: X Window System (X11), Win32...
    Pobierz wxPython
  • 5
    menedżer plików pakietów
    menedżer plików pakietów
    To jest menedżer plików pakietu Total War
    projekt, począwszy od wersji 1.7. A
    krótkie wprowadzenie do Warscape
    modowanie: ...
    Pobierz menedżera plików pack
  • 6
    IPerf2
    IPerf2
    Narzędzie do pomiaru ruchu sieciowego
    Wydajność TCP i UDP z metrykami
    zarówno pod względem przepustowości, jak i opóźnień. The
    cele obejmują utrzymanie aktywności
    iperf dorsz...
    Pobierz IPerf2
  • więcej »

Komendy systemu Linux

Ad