EngelsFransSpaans

Ad


OnWorks-favicon

mips64-linux-gnuabi64-g++-5 - Online in de cloud

Voer mips64-linux-gnuabi64-g++-5 uit in OnWorks gratis hostingprovider via Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

Dit is de opdracht mips64-linux-gnuabi64-g++-5 die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

PROGRAMMA:

NAAM


gcc - GNU project C en C++ compiler

KORTE INHOUD


gcc [-c|-S|-E] [-standaard=standaard]
[-g] [-blz] [-Oniveau]
[-Wwaarschuwen...] [-Wpedant]
[-Idir...] [-Ldir
[-Dmacro[=def]...] [-Umacro]
[-foptie...] [-mmachine-optie
[-o uitbestand] [@filet] in bestand...

Alleen de meest bruikbare opties worden hier vermeld; zie hieronder voor de rest. g ++ accepteert
meestal dezelfde opties als gcc.

PRODUCTBESCHRIJVING


Wanneer u GCC aanroept, doet het normaal gesproken de voorbewerking, compilatie, montage en koppeling.
Met de "algemene opties" kunt u dit proces tussentijds stopzetten. Voor
bijvoorbeeld, de -c optie zegt de linker niet uit te voeren. Dan bestaat de uitvoer uit object
bestanden die door de assembler worden uitgevoerd.

Andere opties worden doorgegeven aan één verwerkingsstadium. Sommige opties regelen de
preprocessor en anderen de compiler zelf. Nog andere opties besturen de assembler en
koppelaar; de meeste hiervan zijn hier niet gedocumenteerd, omdat u ze zelden hoeft te gebruiken.

De meeste opdrachtregelopties die u met GCC kunt gebruiken, zijn handig voor C-programma's; wanneer
een optie is alleen handig met een andere taal (meestal C++), de uitleg zegt het zo
uitdrukkelijk. Als de beschrijving voor een bepaalde optie geen bron vermeldt
taal, kunt u die optie gebruiken met alle ondersteunde talen.

De gcc programma accepteert opties en bestandsnamen als operanden. Veel opties hebben meerdere
letter namen; daarom kunnen meerdere opties van één letter niet worden gegroepeerd: -dv is zeer
verschillend van -d -v.

U kunt opties en andere argumenten door elkaar halen. De volgorde die u gebruikt, doet dat voor het grootste deel niet
materie. Volgorde is belangrijk als je meerdere opties van dezelfde soort gebruikt; bijvoorbeeld, als
jij specificeert -L meerdere keren, worden de mappen doorzocht in de opgegeven volgorde. Ook,
de plaatsing van de -l optie is aanzienlijk.

Veel opties hebben lange namen die beginnen met -f of -W---bijvoorbeeld,
-fmove-loop-invarianten, -Wformaat enzovoort. De meeste hiervan hebben zowel positieve als negatieve
formulieren; de negatieve vorm van -foei is -fno-foo. Deze handleiding documenteert slechts één van deze
twee vormen, welke niet de standaard is.

OPTIES


Keuze Samengevat
Hier is een overzicht van alle opties, gegroepeerd op type. Verklaringen zijn in de volgende:
secties.

globaal Opties
-c -S -E -o filet -geen-canonieke-voorvoegsels -pijp -pass-exit-codes -x taal -v
-### --help[=klasse[, ...]] --doel-hulp --versie -wikkel @filet -fplugin=filet
-fplugin-arg-naam=arg -fdump-ada-specificatie[-slank] -fada-spec-ouder=eenheid
-fdump-go-spec=filet

C Taal Opties
-ansi -standaard=standaard -fgnu89-inline -aux-info bestandsnaam
-fallow-parameterloze-variadic-functies -fno-asm -fno-ingebouwd -fno-ingebouwd-functie
-gehost -vrijstaand -fopenacc -fopenmp -fopenmp-simd -fms-extensies
-fplan9-extensies -trigrafieën - traditioneel -traditionele-cpp -fallow-single-precisie
-fcond-mismatch -vlas-vector-conversies -fsigned-bitvelden -fsigned-char
-funsigned-bitvelden -funsigned-char

C + + Taal Opties
-fabi-versie=n -fno-toegangscontrole -fcheck-nieuw -fconstexpr-diepte=n
-ffriend-injectie -fno-elide-constructeurs -fno-enforce-eh-specificaties -ffor-bereik
-fno-voor-scope -fno-gnu-trefwoorden -fno-impliciete-sjablonen
-fno-impliciete-inline-sjablonen -fno-implementeren-inlines -fms-extensies
-fno-nonansi-ingebouwd -fnothrow-opt -fno-operatornamen -fno-optionele-diags
-fpermissief -fno-mooie-sjablonen -frepo -fno-rtti -fsized-deallocatie -statistieken
-ftemplate-backtrace-limiet=n -ftemplate-diepte=n -fno-threadsafe-statica
-zekering-cxa-atexit -fno-zwak -nostdinc++ -zichtbaarheid-inlijnen-verborgen
-fvtable-verify=[soa|voorinit|geen] -fvtv-tellingen -fvtv-foutopsporing -zichtbaarheid-ms-compat
-fext-numerieke-letters -Wabi=n -Wabi-tag -Wconversie-null -Wctor-dtor-privacy
-Wwis-niet-virtuele-dtor -Wliteral-achtervoegsel -vernauwing -Wnobehalve -Wniet-virtuele-dtor
-Worden -Weffc++ -Wstrict-null-schildwacht -Wno-niet-sjabloon-vriend -Wold-stijl-cast
-Woverloaded-virtueel -Wno-pmf-conversies -Wsign-promo

Doelstelling C en Objectief-C++ Taal Opties
-fconstante-string-klasse=naam van de klasse -fgnu-looptijd -fnext-runtime -fno-nul-ontvangers
-fobjc-abi-versie=n -fobjc-call-cxx-cdtors -fobjc-directe-verzending -fobjc-uitzonderingen
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-lokale-ivars
-fivar-zichtbaarheid=[publiek|beschermd|privaat|pakket] -freeplace-objc-klassen
-fzero-link -gen-decls -Wassign-onderscheppen -Wno-protocol -Wkiezer
-Wstrict-selector-overeenkomst -Wondeclared-selector

Taal Onafhankelijk Opties
-fbericht-lengte=n -fdiagnostics-show-locatie=[eens|elke lijn]
-fdiagnose-kleur=[auto|nooit|altijd] -fno-diagnose-show-optie
-fno-diagnostiek-show-caret

waarschuwing Opties
-fsyntaxis-alleen -fmax-fouten=n -Wpedant -pedant-fouten -w -Wextra -Muur
-Wadres -Waggregate-retour -Waggressive-loop-optimalisaties -Warray-grenzen
-Warray-grenzen=n -Wbool-vergelijken -Wno-attributen -Wno-ingebouwde-macro-opnieuw gedefinieerd
-Wc90-c99-compatibel -Wc99-c11-compatibel -Wc++-compatibel -Wc++11-compatibel -Wc++14-compatibel
-Wcast-uitlijnen -Wcast-kwaliteit -Wchar-abonnementen -Wingewikkeld -Wcommentaar
-Wvoorwaardelijk ondersteund -Wconversie -Wdekking-mismatch -Wdate-tijd
-Wdelete-onvolledig -Wno-cpp -Wno-verouderd -Wno-verouderde-declaraties
-Wno-aangewezen-init -Wdisabled-optimalisatie -Wno-weggegooide kwalificaties
-Wno-weggegooide-array-kwalificaties -Wno-div-door-nul -Wdubbele-promotie -Weeg lichaam
-Wenum-vergelijken -Wno-endif-labels -fout -Fout=* -Wfatal-fouten -Wfloat-gelijk
-Wformaat -Wformaat=2 -Wno-formaat-bevat-nul -Wgeen-formaat-extra-args
-Wformat-niet-letterlijk -Wformat-beveiliging -Wformat-ondertekening -Wformat-y2k
-Wframe-groter-dan=len -Wno-vrij-nonheap-object -Wjump-missers-init
-Wignored-kwalificaties -Wincompatibele aanwijzer-types -Wimpliciet
-Wimplicit-functie-declaratie -Wimpliciet-int -Winit-zelf -Winlijn
-Wno-in-conversie -Wno-in-naar-pointer-cast -Wno-ongeldige-offsetof -Winvalid-pch
-Wgroter-dan=len -Wunsafe-loop-optimalisaties -Wlogische-op -Wlogische-niet-haakjes
-Lang-lang -Wbelangrijk -Wmisschien-niet-geïnitialiseerd -Wmemset-getransponeerde-args -Wmissing-bretels
-Wmissing-veld-initializers -Ontbrekende-include-dirs -Wno-multichar -Wnonnull
-Wgenormaliseerd=[geen|id|nfc|nfkc]
-Woord -Wno-overloop -Wopenmp-simd -Woverlengte-snaren -Wingepakt
-Wpacked-bitfield-compatibel -Gevoerd - Tussen haakjes -Wpedantic-ms-formaat
-Wno-pedant-ms-formaat -Wpointer-arith -Wno-aanwijzer-naar-int-cast -Wredundant-verklaart
-Wno-retour-lokale-addr -Wretour-type -Wvolgorde-punt -Wschaduw -Wno-schaduw-ivar
-Wshift-telling-negatief -Wshift-telling-overloop -Wsign-vergelijk -Wsign-conversie
-Wfloat-conversie -Wsizeof-pointer-memtoegang -Wsizeof-array-argument
-Wstack-beschermer -Wstack-gebruik=len -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-overloop -Wstrict-overloop=n -Wsuggest-attribuut=[zuiver|const|geen terugkeer|formaat]
-Wsuggest-laatste-types -Wsuggest-definitieve-methoden -Wsuggestie overschrijven
-Wmissing-formaat-kenmerk -Wschakelaar -Wswitch-standaard -Wswitch-opsomming -Wswitch-bool
-Wsync-nand -Wsysteem-headers -Wtrampolines -Schrijven -Wtype-limieten -Wundef
-Geïnitialiseerd -Wunknown-pragma's -Wno-pragma's -Wunsuffixed-float-constanten
-Wongebruikt -Wunused-functie -Wongebruikt-label -Wunused-local-typedefs -Wunused-parameter
-Wno-ongebruikt-resultaat -Wunused-waarde -Wunused-variabele -Wunused-maar-set-parameter
-Wunused-maar-set-variabele -Wuseless-gegoten -Wvariadic-macro's
-Wvector-operatie-prestaties -Wvla -Wvluchtig-register-var -Wwrite-tekenreeksen
-Wzero-als-null-pointer-constante

C en Objectief-C-only waarschuwing Opties
-Wbad-functie-cast -Wmissing-verklaringen -Ontbrekend-parametertype
-Wmissing-prototypes -Wnested-externen -Wold-stijl-verklaring -Wold-stijl-definitie
-Wstrict-prototypes -Wtraditioneel -Wtraditionele-conversie
-Wdeclaratie-na-statement -Wpointer-teken

Debugging Opties
-dbrieven -stortspecificaties - dumpmachine -dumpversie -fsanitize=stijl -fsanitize-herstel
-fsanitize-herstellen=stijl -fasan-schaduw-offset=aantal
-fsanitize-ungedefinieerde-trap-on-error -fcheck-pointer-grenzen -fchkp-controle-onvolledig-type
-fchkp-eerste-veld-heeft-eigen-grenzen -fchkp-smalle grenzen
-fchkp-smal-naar-binnenste-array -fchkp-optimaliseren -fchkp-gebruik-fast-string-functies
-fchkp-gebruik-nochk-string-functies -fchkp-gebruik-statische-grenzen
-fchkp-gebruik-statische-const-grenzen -fchkp-behandel-nul-dynamische-grootte-als-oneindig
-fchkp-controleren-lezen -fchkp-controleren-lezen -fchkp-controle-schrijven -fchkp-winkelgrenzen
-fchkp-instrument-oproepen -fchkp-instrument-gemarkeerd-alleen -fchkp-gebruik-wrappers
-fdbg-cnt-lijst -fdbg-cnt=tegenwaardelijst -fdisable-ipa-pas_naam
-fdisable-rtl-pas_naam -fdisable-rtl-pas-naam=bereiklijst -fdisable-boom-pas_naam
-fdisable-boom-pas-naam=bereiklijst -fdump-noaddr -fdump-ongenummerd
-fdump-ongenummerde-links -fdump-vertaaleenheid[-n] -fdump-klasse-hiërarchie[-n]
-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline -fdump-passen -fdump-statistieken
-fdump-boom-alles -fdump-tree-origineel[-n] -fdump-tree-geoptimaliseerd[-n] -fdump-boom-cfg
-fdump-tree-alias -fdump-boom-ch -fdump-boom-ssa[-n] -fdump-boom-pre[-n]
-fdump-boom-ccp[-n] -fdump-boom-dce[-n] -fdump-boom-gimple[-trekken] -fdump-boom-dom[-n]
-fdump-boom-dse[-n] -fdump-boom-phiprop[-n] -fdump-boom-phiopt[-n]
-fdump-boom-forwprop[-n] -fdump-boom-kopieernaam[-n] -fdump-tree-nr -fdump-boom-vect
-fdump-boom-gootsteen -fdump-boom-sra[-n] -fdump-boom-forwprop[-n] -fdump-boom-vrij[-n]
-fdump-tree-vtable-verifiëren -fdump-boom-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-finale-insns=filet -fvergelijk-foutopsporing[=kiest] -fvergelijk-foutopsporing-seconde
-feliminate-dwerg2-dups -fno-elimineren-ongebruikte-debug-types
-feliminate-ongebruikte-debug-symbolen -femit-class-debug-altijd -weerbaar-soort-passeren
-weerbaar-soort-passeren=bereiklijst -fdebug-types-sectie -fmem-rapport-wpa -fmem-rapport
-fpre-ipa-mem-rapport -fpost-ipa-mem-rapport -fprofile-bogen -fopt-info
-fopt-info-opties[=filet] -random-seed=aantal -fsched-verbose=n -fsel-sched-uitgebreid
-fsel-sched-dump-cfg -fsel-sched-pipelining-uitgebreid -fstack-gebruik -fest-dekking
-ftime-rapport -fvar-tracking -fvar-tracking-opdrachten
-fvar-tracking-toewijzingen-toggle -g -gniveau -goggle -gcoff -gdwerg-versie -ggdb
-grecord-gcc-schakelaars -gno-record-gcc-schakelaars -gstabs -gstabs+ -gstrict-dwerg
-gno-strikte-dwerg -gvms -gxcoff -gxcoff+ -gz[= type dan: ] -fno-samenvoegen-debug-strings
-fno-dwerg2-cfi-asm -fdebug-prefix-map=oud=nieuwe -femit-struct-debug-baseonly
-femit-struct-debug-gereduceerd -femit-struct-debug-gedetailleerd[=spec-lijst] -p -blz
-print-bestandsnaam=bibliotheek -print-libgcc-bestandsnaam -print-meerdere mappen
-print-multi-lib -print-multi-os-map -print-prog-naam=programma
-print-zoekmap -Q -print-sysroot -print-sysroot-headers-achtervoegsel -opslaan-temps
-save-temps=cwd -save-temps=obj -tijd[=filet]

Optimalisatie Opties
-fagressieve-loop-optimalisaties -falign-functies[=n] -falign-sprongen[=n]
-falign-labels[=n] -falign-loops[=n] -Fassociatieve-wiskunde -fauto-profiel
-fauto-profiel[=pad] -fauto-inc-dec -fbranch-waarschijnlijkheden
-fbranch-target-load-optimize -fbranch-target-load-optimize2 -fbtr-bb-exclusief
-fcaller-opslaat -fcheck-data-deps -fcombine-stack-aanpassingen -fconserve-stack
-fvergelijk-elim -fcprop-registers -fcrossspringen -fcse-volg-sprongen -fcse-blokken-overslaan
-fcx-fortran-regels -fcx-beperkt bereik -fdata-secties -fdce -fvertraagde-tak
-fdelete-null-pointer-controles -fdevirtualiseren -fdevirtualiseren-speculatief
-fdevirtualiseer-op-ltrans -fdse -angstig-inlining -fipa-sra -fexpensive-optimalisaties
-ffat-lto-objecten -ffast-wiskunde -alleen eindige-wiskunde -float-winkel
-fexcess-precisie=stijl -vooruit-propageren -ffp-contract=stijl -ffunctie-secties
-fgcse -fgcse-na-herladen -fgcse-las -fgcse-lm -fgrafiet-identiteit -fgcse-sm
-hijs-aangrenzende-ladingen -fif-conversie -fif-conversie2 -findirect-inlining
-finline-functies -finline-functies-eenmaal genoemd -finline-limiet=n
-finline-kleine-functies -fipa-cp -fipa-cp-kloon -fipa-cp-uitlijning -fipa-pta
-fipa-profiel -fipa-pure-const -fipa-referentie -fipa-icf -fira-algoritme=algoritme
-fira-regio=regio -fira-hijs-druk -fira-loop-druk -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose=n -fisoleren-foutieve-paden-dereferentie
-fisolaat-foutieve-paden-attribuut -vijfpunten -fkeep-inline-functies
-fhoud-statische-consts -flive-range-krimp -floop-blok -floop-uitwisseling
-floop-strip-mijn -floop-uitrollen-en-jam -floop-nest-optimaliseren -floop-paralleliseer-alles
-fla-remat -flto -fto-compressie-niveau -flto-partitie=alg -flto-rapport
-flto-rapport-wpa -fmerge-alle-constanten -fmerge-constanten -fmodulo-sched
-fmodulo-sched-toestaan-regmoves -fmove-loop-invarianten -fno-filiaal-tel-reg
-fno-uitstellen-pop -fno-functie-cse -fno-raad-tak-waarschijnlijkheid -fno-inline
-fno-wiskunde-errno -fno-kijkgaatje -fno-kijkgaatje2 -fno-sched-interblock -fno-sched-specificatie
-fno-ondertekende nullen -fno-toplevel-herordenen -fno-trapping-wiskunde
-fno-nul-geïnitialiseerd-in-bss -fomit-frame-aanwijzer -foptimize-broer-zus-oproepen
-fgedeeltelijke-inlining -fpel-loops -fvoorspellende-commoning -fprefetch-loop-arrays
-fprofile-rapport -fprofiel-correctie -fprofiel-dir=pad -fprofile-genereren
-fprofile-genereren=pad -fprofile-gebruik -fprofile-gebruik=pad -fprofile-waarden
-fprofile-reorder-functies -freciprocal-wiskunde -vrij -frename-registers
-freeorder-blokken -freeorder-blokken-en-partitie -freeorder-functies
-frerun-cse-na-lus -nieuwe planning-modulo-geplande-lussen -grond-wiskunde
-fsched2-gebruik-superblokken -fsched-druk -fsched-specificatie-laden
-fsched-spec-load-gevaarlijk -fsched-vastgelopen-insns-dep[=n] -fsched-vastgelopen-insns[=n]
-fsched-groep-heuristiek -fsched-kritiek-pad-heuristiek -fsched-spec-insn-heuristiek
-fsched-rank-heuristiek -fsched-laatste-insn-heuristiek -fsched-dep-count-heuristiek
-fschema-fusie -fschema-insns -fschema-insns2 -fsectie-ankers
-fselectieve planning -fselectieve planning2 -fsel-sched-pijpleidingen
-fsel-sched-pipelining-buitenste lussen -fsemantische-interpositie -fkrimpfolie
-fsignalering-nans -fsingle-precisie-constante -fsplit-ivs-in-uitroller
-fsplit-wide-types -fssa-phiopt -stack-beschermer -fstack-protector-all
-fstack-beschermer-sterk -fstack-protector-expliciet -fstdarg-opt -fstrict-aliasing
-fstrict-overloop -fthread-sprongen -ftracer -ftree-bit-ccp -ftree-ingebouwde-aanroep-dce
-ftree-ccp -ftree-ch -ftree-coalescentie-inline-vars -ftree-coalescentie-vars -ftree-kopie-prop
-ftree-kopieernaam -ftree-dce -ftree-dominator-opteert -ftree-dse -ftree-forwprop
- vrij van bomen -ftree-lus-als-omzetten -ftree-loop-if-convert-winkels -ftree-lus-im
-ftree-phiprop -ftree-loop-distributie -ftree-loop-distribueer-patronen
-ftree-loop-ivcanon -ftree-loop-lineair -ftree-loop-optimaliseren -ftree-loop-vectoriseren
-ftree-parallelize-loops=n -ftree-pre -ftree-gedeeltelijke-pre -ftree-pta -ftree-redenoc
-vtree-gootsteen -ftree-slsr -ftree-sra -ftree-switch-conversie -ftree-staart-samenvoegen
-ftree-ter -ftree-vectoriseren -ftree-vrp -fun-at-a-time -funroll-alle-loops
-funroll-loops -funsafe-loop-optimalisaties -funsafe-math-optimalisaties
-funswitch-loops -fipa-ra -fvariabele-uitbreiding-in-afroller -fvect-kostenmodel -fvpt
-fweb -f hele-programma -fwpa -fuse-linker-plug-in --param naam=waarde -O -O0 -O1 -O2
-O3 -Jij -Of snel -Og

preprocessor Opties
-Avraag=beantwoorden -A-vraag[=beantwoorden] -C -dd -dI -dM -DN -Dmacro[=def] -E -H
-idirna dir omvatten filet -imacro's filet -ipvoorvoegsel filet -imetvoorvoegsel dir
-imetvoorvoegselvoor dir -isysteem dir -imultilib dir -isysroot dir -M -MM -MF -MG
- MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-uitbreiding -fworking-map
-opnieuw toewijzen -trigrafieën -ondef -Umacro -Wp,optie -Xpreprocessor optie -geen-geïntegreerde-cpp

Assembler Keuze
-Wah,optie -Xmonteur optie

Links Opties
object-bestandsnaam -zekering-ld=Links -lbibliotheek -nostartbestanden -nodefaultlibs -nostlib
-taart -rdynamisch -s -statisch -statisch-libgcc -statische-libstdc++ -statisch-libasan
-statische-libtsan -statisch-liblsan -statisch-libubsan -statische-libmpx -statische-libmpxwrappers
-gedeeld -gedeelde-libgcc -symbolisch -T script -Wl,optie -Xlinker optie -u symbool -z
trefwoord

Directory Opties
-Bvoorvoegsel -Idir -iplugindir=dir -ikquotedir -Ldir -specificaties=filet -IK- --sysroot=dir
--no-sysroot-achtervoegsel

Machine Afhankelijk Opties
Arch64 Opties -mabi=naam -mbig-endian -mlittle-endian -mgeneral-regs-only
-mcmodel=klein -mcmodel=klein -mcmodel=groot -mstrict-uitlijnen -momit-blad-frame-aanwijzer
-mno-weglaten-blad-frame-aanwijzer -mtls-dialect=besch -mtls-dialect=traditioneel
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 -maart=naam -mcpu=naam -mtune=naam

Adapteva Driekoningen Opties -mhalf-reg-bestand -mprefer-short-insn-regs -mbranch-kosten=num
-mcverplaatsen -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-wijzigen
-mstack-offset=num -mround-dichtstbijzijnde -mlong-oproepen -mkorte-oproepen -mklein16 -mfp-modus=mode
-mvect-dubbel -max-vect-align=num -msplit-vecmove-vroeg -m1reg-reg

ARC Opties -mbarrel-shifter -mcpu=cpu -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-compact -mdpfp-snel -mno-dpfp-lrsr -me -mno-mpy -mmul32x16 -mmul64 -normaal
-mspfp -mspfp-compact -mspfp-snel -msimd -msoft-zweven -mswap -mcrc -mdsp-pakket -mdvbf
-mlok -mmac-d16 -mmac-24 -mrtsc -mswap -mtelefonie -mxy -mismaat -mannoteren-uitlijnen
-marclinux -marclinux_prof -mepiloog-cfi -mlong-oproepen -mmedium-oproepen -msgegevens
-mucb-mcount -mvluchtige-cache -kwaadaardige oproep -mauto-wijzig-reg -mbbit-kijkgaatje -mno-brcc
-mcase-vector-pcrel -mcompacte-casesi -mno-cond-exec -mearly-cbranchsi -mexpand-adddi
-Mindexed-loads -mlra -mlra-prioriteit-geen -mlra-prioriteit-compact mlra-prioriteit-
niet-compact -mno-millicode -mmixed-code -mq-klasse -mRcq -mRcw -msize-niveau=niveau
-mtune=cpu -mmultkosten=num -munalign-prob-drempel=waarschijnlijkheid

ARM Opties -maps-frame -mno-apcs-frame -mabi=naam -mapcs-stapelcontrole
-mno-apcs-stapelcontrole -mapcs-zweven -mno-apcs-float -maps-herintredende
-mno-apcs-reentrant -msched-proloog -mno-sched-proloog -mlittle-endian -mbig-endian
-mfloat-abi=naam -mfp16-formaat=naam -mthumb-interactie -mno-duim-interwork -mcpu=naam
-maart=naam -mfpu=naam -mtune=naam -mprint-tune-info -mstructuur-grootte-grens=n
-mabort-op-noreturn -mlong-oproepen -mno-lange gesprekken -msingle-pic-basis
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mpoke-functie-naam
-duim -marme -mtpcs-frame -mtpcs-blad-frame -mcaller-super-interworking
-mcallee-super-interworking -mtp=naam -mtls-dialect=tongval -mword-verhuizingen
-mfix-cortex-m3-ldrd -munaligned-toegang -mneon-voor-64bits -mslow-flash-gegevens
-masm-syntaxis-verenigd -mbeperk-het

AVR Opties -mmcu=MCU -maccumuleren-args -mbranch-kosten=kosten -mcall-prologen -mint8
-mn_flash=grootte -mno-onderbreekt -montspan -mrmw -mstrict-X -mtiny-stapel -nodevicelib
-Wadd-ruimte-omzetten

Zwartvintonijn Opties -mcpu=cpu[-sirene] -msim -momit-blad-frame-aanwijzer
-mno-weglaten-blad-frame-aanwijzer -mspecld-anomalie -mno-specld-anomalie -mcsync-afwijking
-mno-csync-anomalie -mlow-64k -mno-low64k -mstack-check-l1 -midden-gedeelde-bibliotheek
-mno-id-gedeelde-bibliotheek -mshared-bibliotheek-id=n -mleaf-id-gedeelde-bibliotheek
-mno-blad-id-gedeelde-bibliotheek -msep-gegevens -mno-sep-gegevens -mlong-oproepen -mno-lange gesprekken
-mfast-fp -minline-plt -mmulticore -mcore -mcoreb -msdram -micplb

C6X Opties -mbig-endian -mlittle-endian -maart=cpu -msim -msdata=sdata-type

CRIS Opties -mcpu=cpu -maart=cpu -mtune=cpu -mmax-stackframe=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-bijwerkingen
-mstack-uitlijnen -mdata-uitlijnen -mconst-uitlijnen -m32-bit -m16-bit -m8-bit
-mno-proloog-epiloog -mno-gotplt -melf -maout -melinux -mlinux -sim -sim2
-mmul-bug-oplossing -mno-mul-bug-oplossing

CR16 Opties -mmac -mcr16cplus -mcr16c -msim -mint32 -mbit-ops -mdata-model=model

Darwin Opties -alle_laden -allowable_client -boog -arch_errors_fataal -arch_only
-bind_at_load -bundel -bundel_lader -klantnaam -compatibiliteit_versie
-huidige versie -dode_strip -afhankelijkheidsbestand -dylib_bestand -dylinker_installatienaam
-dynamisch -dynamische lib -geëxporteerde_symbols_list -bestandslijst -flat_naamruimte
-force_cpusubtype_ALL -force_flat_naamruimte -headerpad_max_install_names -iframework
-afbeelding_basis -in het -installatienaam -keep_private_externs -multi_module
-vermenigvuldig_gedefinieerd -vermenigvuldig_gedefinieerd_ongebruikt -noall_load
-no_dead_strip_inits_and_terms -nofixvoorbinding -geenmultidefs -niet voorbinden
-neuslinkedit -pagezero_size -voorbinden -prebind_all_twolevel_modules -private_bundel
-read_only_relocs -seks uitlijnen -sectieobjectsymbolen -waarom? -seg1adr -secreteren
-sectieobjectsymbolen -sectorder -segadr -segs_read_only_adr -segs_read_write_adr
-seg_addr_tabel -seg_addr_tabel_bestandsnaam -seglinkedit -segrot -segs_read_only_adr
-segs_read_write_adr -enkele_module -statisch -sub_bibliotheek -sub_paraplu
-tweeniveau_naamruimte -paraplu -onbepaald -niet-geëxporteerde_symbolen_lijst
-zwakke_referentie_mismatches -wat is geladen -F -gespuugd -vol -mmacosx-versie-min=versie
-mkernel -moon-byte-bool

December Alpha Opties -mno-fp-regs -msoft-zweven -mieeee -mieee-met-onnauwkeurig
-mieee-conform -mfp-trap-modus=mode -mfp-afrondingsmodus=mode -mtrap-precisie=mode
-mbuild-constanten -mcpu=CPU-type -mtune=CPU-type -mbwx -m max -mfix -mcix
-mfloat-vax -mfloat-ieee -mexpliciete-relocs -msmall-gegevens -mgrote-gegevens -msmall-tekst
-mgrote-tekst -geheugen-latentie=niet de tijd of

FR30 Opties -mklein-model -mno-lsim

FRV Opties -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-zweven -msoft-zweven
-malloc-cc -mfixed-cc -mdwoord -mno-dword -mdubbel -mno-dubbel -media -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -multilib-bibliotheek-foto
-mlinked-fp -mlong-oproepen -kwaadaardige-labels -mlibrary-foto -macc-4 -macc-8 -mpak
-mno-pakket -mno-vlaggen -mcond-zet -mno-cond-zet -moptimize-lid
-mno-optimaliseer-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-tak
-mno-vliw-tak -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-geneste-cond-exec -mtomcat-statistieken -mTLS -mtls -mcpu=cpu

GNU / Linux Opties -mglibc -muclib -mbionisch -mandroïde -tno-android-cc -tno-android-ld

H8 / 300 Opties -montspan -mh -Mevrouw - mn -mexr -mno-exr -mint32 -kwaadaardig-300

HPPA Opties -maart=architectuur-type -mdisable-fpregs -mdisable-indexering
-mfast-indirecte-oproepen -mg -mgnu-ld -mhp-ld -mvast-bereik=register-bereik
-mjump-in-vertraging -mlinker-opt -mlong-oproepen -mlong-load-store -mno-fpregs-uitschakelen
-mno-indexering uitschakelen -mno-snel-indirecte-oproepen -mno-gas -mno-sprong-in-vertraging
-mno-long-load-store -mno-draagbare-runtime -mno-soft-float -mno-space-regs
-msoft-zweven -mpa-risico-1-0 -mpa-risico-1-1 -mpa-risico-2-0 -mportable-runtime
-mschema=CPU-type -mspace-regs -msio -mwsio -munix=unix-standaard -nolibld -statisch
-draden

IA-64 Opties -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-foto
-mvluchtige-asm-stop -mregister-namen -msgegevens -mno-sdata -mconstante-gp -mauto-foto
-mfused-gek -minline-float-deel-min-latentie -minline-float-deel-max-doorvoer
-mno-inline-float-delen -minline-int-verdeel-min-latentie
-minline-int-verdeel-max-doorvoer -mno-inline-int-delen -minline-sqrt-min-latentie
-minline-sqrt-max-doorvoer -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits
-mvast-bereik=register-bereik -mtls-grootte=tls-formaat -mtune=CPU-type -milp32 -mlp64
-msched-br-data-specificatie -msched-ar-data-specificatie -msched-controle-specificatie -msched-br-in-data-specificatie
-msched-ar-in-data-specificatie -msched-in-control-specificatie -msched-spec-ldc
-msched-specificatie-controle-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-na-elke-cyclus
-msched-telling-spec-in-kritiek-pad -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-nul-kosten -msched-max-geheugen-insns-harde-limiet
-msched-max-geheugen-insns=max-insns

LM32 Opties -mbarrel-shift ingeschakeld -mdivide ingeschakeld -mmultiply ingeschakeld
-msign-uitbreiden ingeschakeld -muser ingeschakeld

M32R/D Opties -m32r2 -m32rx -m32r -mdebug -kwaadaardige-loops -mno-align-loops
-missue-tarief=aantal -mbranch-kosten=aantal -mmodel=code-grootte-model-type -msdata=sdata-
type dan: -mno-flush-func -mflush-func=naam -mno-flush-trap -mflush-trap=aantal -G num

M32C Opties -mcpu=cpu -msim -memregs=aantal

M680x0 Opties -maart=boog -mcpu=cpu -mtune=toon -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitveld -mno-bitveld -mc68000 -mc68020 -mnobitveld -mrtd -mno-rtd
-mdiv -mno-div -mkort -mno-kort -mhard-zweven -m68881 -msoft-zweven -mprel
-kwaadaardig-in -mstrict-uitlijnen -msep-gegevens -mno-sep-gegevens -mshared-bibliotheek-id=n
-midden-gedeelde-bibliotheek -mno-id-gedeelde-bibliotheek -mxgot -mno-xgot

MCore Opties -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-onmiddellijk
-mno-relax-onmiddellijk -mwide-bitvelden -mno-brede bitvelden -m4byte-functies
-mno-4byte-functies -mcallgraph-gegevens -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-increment

IkP Opties -mabsdiff -mall-opteert -gemiddeld -mgebaseerd=n -mbitoppen -mc=n -mclip
-mconfig=naam -mkop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-vluchtig -ml
-mleadz -mm -mmminmax -mmult -mno-opteert -mherhalen -Mevrouw -msatur -msdram -msim -msimnovec
-mtf -min=n

MicroBlaze Opties -msoft-zweven -mhard-zweven -mklein-verdeelt -mcpu=cpu -mmmpy
-mxl-zacht-mul -mxl-zacht-div -mxl-barrel-shift -mxl-patroon-vergelijken -mxl-stapelcontrole
-mxl-gp-opt -mno-clearbss -mxl-vermenigvuldigen-hoog -mxl-float-omzetten -mxl-float-sqrt
-mbig-endian -mlittle-endian -mxl-opnieuw bestellen -mxl-modus-app-model

MIPS Opties -DE -EB -maart=boog -mtune=boog -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-gecomprimeerd
-mno-interlink-gecomprimeerd -minterlink-mips16 -mno-interlink-mips16 -mabi=abi
-mabicbellen -mno-abicalls -mgedeeld -mno-gedeeld -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-zweven -msoft-zweven -mno-zweven
-msingle-float -mdubbele-zwevende -modd-sreg -mno-oneven-spreg -mabs=mode -mnan=codering
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -meva -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -mmmicromips -mno-micromips -mfpu=fpu-type -msmartmips -mno-smartmips
-gehandicapt-single -mno-gepaarde-single -mdmx -mno-mdmx -mips3d -mno-mips3d - mmt
-mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum
-mlokale-sdata -mno-lokale-sdata -mextern-sdata -mno-externe-sdata -mgpopt -mno-gopt
-ingesloten-gegevens -mno-ingebedde-gegevens -muninit-const-in-rodata
-mno-unitit-const-in-rodata -mcode-leesbaar=het instellen van -msplit-adressen
-mno-split-adressen -mexpliciete-relocs -mno-expliciete-relocs -mcheck-nul-divisie
-mno-check-nul-divisie -mdivide-vallen -tussenpauzes -mmmpy -mno-memcpy
-mlong-oproepen -mno-lange gesprekken -mad -mno-gek -mimadd -mno-imadd -mfused-gek
-mno-gefuseerd-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000
-mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000
-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=func -mno-flush-func -mbranch-kosten=num -mbranch-waarschijnlijk
-mno-tak-waarschijnlijk -mfp-uitzonderingen -mno-fp-uitzonderingen -mvr4130-uitlijnen -mno-vr4130-uitlijnen
-msynci -mno-sync -mrelax-pic-oproepen -mno-relax-pic-oproepen -mmcount-ra-adres

MMIX Opties -mlibfuncties -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-uitbreiden -mknuthdiv -mtoplevel-symbolen -melf -mtak-voorspellen
-mno-tak-voorspelling -mbase-adressen -mno-base-adressen -msingle-uitgang
-mno-enkele-uitgang

MN10300 Opties -mmult-bug -mno-multi-bug -mno-am33 -mama33 -mam33-2 -mama34 -mtune=processor-
type dan: -mretourwijzer-op-d0 -mno-crt0 -montspan -mlw -msetlb

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

MSP430 Opties -msim -masm-hex -mmcu= -mcpu= -groter -mklein -montspan -mhwmult= -minrt

NDS32 Opties -mbig-endian -mlittle-endian -mgereduceerde-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vectorgrootte=num
-mcache-blokgrootte=num -maart=boog -mcmodel=codemodel -mctor-dtor -montspan

Nios II Opties -G num -mgpopt=optie -mgpopt -mno-gpopt -mel -meb -mno-bypass-cache
-mbypass-cache -mno-cache-vluchtig -mcache-vluchtig -mno-snel-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -maangepast-ins=N
-mno-aangepast-ins -mcustom-fpu-cfg=naam -mhal -mkleinc -msys-crt0=naam -msys-lib=naam

Nvidia PTX Opties -m32 -m64 -mainkernel

PDP-11 Opties -mfpu -msoft-zweven -mac0 -mno-ac0 -m40 -m45 -m10 -mbkopie
-mbcopy-ingebouwd -mint32 -mno-int16 -mint16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -mbranch-duur -mbrach-goedkoop
-munix-asm -mdec-asm

picoChip Opties -mae=een_type -mvliw-vooruitblik=N -msymbool-als-adres
-mno-inefficiënte-waarschuwingen

PowerPC Opties Zie RS/6000- en PowerPC-opties.

RL78 Opties -msim -mmul=geen -mmul=g13 -mmul=rl78 -m64bit-verdubbelt -m32bit-verdubbelt

RS / 6000 en PowerPC Opties -mcpu=CPU-type -mtune=CPU-type -mcmodel=codemodel
-mpowerpc64 -maltiefc -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfpnd -mno-vprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-harde-dfp -mfull-toc -minimale-toc -mno-fp-in-toc -mno-som-in-toc
-m64 -m32 -mxl-compatibel -mno-xl-compatibel -mp -kwaadaardige macht -kwaadaardig-natuurlijk
-msoft-zweven -mhard-zweven -mveelvoudig -mno-meerdere -msingle-float -mdubbele-zwevende
-msimple-fpu -mtekenreeks -mno-tekenreeks -mupdate -mno-update -mavoid-geïndexeerde-adressen
-mno-vermijd-geïndexeerde-adressen -mfused-gek -mno-gefuseerd-madd -mbit-uitlijnen
-mno-bit-align -mstrict-uitlijnen -mno-strikt-uitlijnen -mrelocable -mno-verplaatsbaar
-mrelocable-lib -mno-verplaatsbare-lib -mtoc -mno-toc -kleine -mlittle-endian
-groot -mbig-endian -mdynamic-geen-foto -maltiefc -mswdiv -msingle-pic-basis
-mprioritize-restricted-insns=prioriteit -msched-kostbare-dep=afhankelijkheidstype
-minsert-sched-nops=schema -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt
-mblock-move-inline-limit=num - misel -mno-isel -misel=ja -misel=nee -msp -mno-spec
-mspe=ja -mspe=nee -verslechterd -mgen-cel-microcode -mwarn-cel-microcode -mvropslaan
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=ja -mfloat-gprs=nee
-mfloat-gprs=enkel -mfloat-gprs=dubbel -m prototype -mno-prototype -msim -mmvme
-gekken -mgeel mes -lid -msgegevens -msdata=opteren -mvxwerkt -G num -pdraad -mrecipe
-mrecept=opteren -mno-recept -mrecip-precisie -mno-recept-precisie -mveclibabi= type dan: -mfriz
-mno-friz -mpointers-naar-geneste-functies -mno-pointers-naar-geneste-functies
-msave-toc-indirect -mno-save-toc-indirect -mpower8-fusie -mno-mpower8-fusie
-mpower8-vector -mno-power8-vector -crypto -mno-crypto -mdirect-verplaatsen -mno-directe-zet
-mquad-geheugen -mno-quad-geheugen -mquad-geheugen-atomisch -mno-quad-geheugen-atomaire
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf -mupper-regs -mno-upper-regs

RX Opties -m64bit-verdubbelt -m32bit-verdubbelt -fpu -nofpu -mcpu= -mbig-endian-gegevens
-mlittle-endian-gegevens -msmall-gegevens -msim -mno-sim -mas100-syntaxis -mno-as100-syntaxis
-montspan -mmax-constante-grootte= -mint-register= -mpid -mno-waarschuwing-meerdere-snelle-interrupts
-msave-acc-in-onderbreekt

S / 390 en zSerie Opties -mtune=CPU-type -maart=CPU-type -mhard-zweven -msoft-zweven
-mhard-dfp -mno-harde-dfp -mlong-dubbel-64 -mlong-dubbel-128 -mbackchain
-mno-backchain -mpacked-stack -mno-verpakt-stack -msmall-exec -mno-klein-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-foutopsporing -mesa -mzar -mtpf-trace
-mno-tpf-trace -mfused-gek -mno-gefuseerd-madd -mwarn-framegrootte -mwarn-dynamicstack
-mstack-grootte -mstack-bewaker -mhotpatch=halve woorden,halve woorden

Score Opties -meb -mel - mnhwloop -muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH Opties -m1 -m2 -m2e -m2a-nofpu -m2a-enkelvoudig -m2a-eenpersoons -m2a -m3 -m3e
-m4-nofpu -m4-enkelvoudig -m4-single -m4 -m4a-nofpu -m4a-enkelvoudig -m4a-eenpersoons
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compact
-m5-compact-nofpu -mb -ml -muitlijnen -montspan - twijfelbaar -mfmovd -mhitachi -mrenesas
-mno-renas -mnomacsave -mieeee -mno-ieee -mbitoppen -mismaat -minline-ic_invalidate
-mpadstructuur -mruimte -prefergot -musermodus -multikosten=aantal -mdiv=strategie
-mdivsi3_libfunc=naam -mvast-bereik=register-bereik -mindexed-adressering
-mgettrcost=aantal -mpt-vast -bereken-uitgaande-args -mingeldige-symbolen
-matomisch-model=atoommodel -mbranch-kosten=num -mzdctak -mno-zdcbranch
-mcbranch-force-delay-slot -mfused-gek -mno-gefuseerd-madd -mfsc -mno-fsca -mfsrra
-mno-fsrra -verweer-cmove -mtas

solaris 2 Opties -mclear-hwcap -mno-clear-hwcap -mimpure-tekst -mno-onzuivere-tekst
-pthreads -pdraad

SPARC Opties -mcpu=CPU-type -mtune=CPU-type -mcmodel=codemodel -geheugen-model=mem-
model -m32 -m64 -map-regs -mno-app-regs -mfaster-structuren -mno-sneller-structs
-mplat -mno-plat -mfpu -mno-fpu -mhard-zweven -msoft-zweven -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stack-bias -unaligned-dubbels
-mno-niet-uitgelijnde dubbels -muser-modus -mno-gebruikersmodus -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699

SPU Opties -mwarn-reloc -fout-reloc -msafe-dma -munsafe-dma -mtak-hints
-mklein-mem -grote-mem -mstdmain -mvast-bereik=register-bereik -me32 -me64
-adres-ruimte-conversie -mno-adres-ruimte-conversie -mcache-grootte=cache grootte
-matomische-updates -mno-atomaire-updates

Systeem V Opties -Qy -Qn -YP,paden -Ja,dir

TEGEL-Gx Opties -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian -mcmodel=codemodel

TEGELPro Opties -mcpu=cpu -m32

V850 Opties -mlong-oproepen -mno-lange gesprekken -mep -mno-ep -mprolog-functie
-mno-prolog-functie -mruimte -mtda=n -msda=n -mzda=n -map-regs -mno-app-regs
-mdisable-callt -mno-uitschakelen-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -mlus -montspan -mverspringen -msoft-zweven -mhard-zweven -mgcc-abi
-mrh850-abi -mbig-schakelaar

VAX Opties - mg -mg nu -munix

Visium Opties -mdebug -msim -mfpu -mno-fpu -mhard-zweven -msoft-zweven -mcpu=CPU-type
-mtune=CPU-type -msv-modus -muser-modus

VMS Opties -mvms-retourcodes -mdebug-main=voorvoegsel -mmalloc64 -mpointer-grootte=grootte

VxWorks Opties -mrtp -niet-statisch -Bstatisch -Bdynamisch -Xbind-lui -Xbind-nu

x86 Opties -mtune=CPU-type -maart=CPU-type -mtune-ctrl=lijst met functies
-mdump-tune-functies -mno-standaard -mfpmath=eenheid -masm=tongval -mno-fancy-wiskunde-387
-mno-fp-ret-in-387 -msoft-zweven -mno-breed-vermenigvuldigen -mrtd -kwaadaardig-dubbel
-mpreferred-stack-grens=num -mincoming-stack-grens=num -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mrecipe -mrecept=opteren -mvzerupper -mpprefer-avx128 - mmmx -ms -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxopgeslagen -msse4a -m3dnu -mpopcnt -mabm -mbmi -MTB -mfma4 -mxop
-mlzct -mbmi2 -mfxsr -mxopslaan -mxsaveopt -mrtm -mlwp -mmpx -mmwachtx -mthreads
-mno-uitlijnen-stringops -minline-all-stringops -minline-stringops-dynamisch
-mstringop-strategie=alg -mmemcpy-strategie=strategie -mmemset-strategie=strategie
-mpush-args -bereken-uitgaande-args -m128bit-lang-dubbel -m96bit-lang-dubbel
-mlong-dubbel-64 -mlong-dubbel-80 -mlong-dubbel-128 -mregparm=num -msseregparm
-mveclibabi= type dan: -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstack opnieuw uitlijnen
-momit-blad-frame-aanwijzer -mno-rode-zone -mno-tls-direct-seg-refs -mcmodel=codemodel
-mabi=naam -madress-mode=mode -m32 -m64 -mx32 -m16 -mlarge-data-drempel=num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-gesplitste niet-uitgelijnde belasting -mavx256-split-unaligned-store -kwaadaardige-gegevens= type dan:
-mstack-protector-guard=bewaker

x86 Dakramen en raamkozijnen Opties -mconsole -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
-muncode -mwin32 -mvensters -fno-set-stack-uitvoerbaar

Xstormy16 Opties -msim

Xtensa Opties -mconst16 -mno-const16 -mfused-gek -mno-gefuseerd-madd -mforce-geen-pic
-mserialiseren-vluchtig -mno-serialiseren-vluchtig -mtext-sectie-literals
-mno-tekst-sectie-literals -mtarget-uitlijnen -mno-target-uitlijnen -lange oproepen
-mno-longcalls

zSerie Opties Zie S/390- en zSeries-opties.

Code Generatie Opties
-fcall-opgeslagen-reg -fcall-gebruikt-reg -fvast-reg -uitzonderingen -fnon-call-uitzonderingen
-fverwijder-dode-uitzonderingen -funwind-tafels -fasynchrone-afwikkel-tabellen -fno-gnu-uniek
-finhibit-maat-richtlijn -finstrument-functies
-finstrument-functions-exclude-function-list=sym,sym, ...
-finstrument-functions-exclude-file-list=filet,filet, ... -fno-gemeenschappelijk -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tafels -frecord-gcc-schakelaars
-freg-struct-return -fkorte-enums -fkort-dubbel -fkort-wchar -fverbose-asm
-fpack-structuur[=n] -fstack-controle -fstack-limiet-register=reg -fstack-limiet-symbool=sym
-fno-stack-limiet -fsplitstack -fleading-onderstrepingsteken -ftls-model=model
-fstack-hergebruik=hergebruik_niveau -ftrapv -fwrapv -fbounds-controle
-fzichtbaarheid=[verzuim|intern|verborgen|beschermd] -fstrict-vluchtige-bitfields
-fsync-libcalls

Opties Controlling de Soort of uitgang
Compilatie kan tot vier fasen omvatten: voorbewerking, eigenlijke compilatie, assemblage en
koppelen, altijd in die volgorde. GCC is in staat om meerdere
bestanden ofwel in verschillende assembler-invoerbestanden, of in één assembler-invoerbestand; dan
elk invoerbestand van de assembler produceert een objectbestand en het koppelen combineert al het object
bestanden (die nieuw zijn gecompileerd en die zijn opgegeven als invoer) in een uitvoerbaar bestand.

Voor een bepaald invoerbestand bepaalt het achtervoegsel van de bestandsnaam wat voor soort compilatie is
gedaan:

filet.c
C-broncode die moet worden voorbewerkt.

filet.i
C-broncode die niet mag worden voorbewerkt.

filet.ii
C++ broncode die niet voorbewerkt mag worden.

filet.m
Objective-C broncode. Merk op dat je moet linken met de libobjc bibliotheek om een
Objectief-C programma werk.

filet.mi
Objective-C-broncode die niet mag worden voorbewerkt.

filet.MM
filet.M
Objective-C++ broncode. Merk op dat je moet linken met de libobjc bibliotheek om te maken
een Objective-C++ programma werk. Let daar op .M verwijst naar een letterlijke hoofdletter M.

filet.miii
Objective-C++ broncode die niet voorbewerkt mag worden.

filet.h
C-, C++-, Objective-C- of Objective-C++-headerbestand dat moet worden omgezet in een voorgecompileerd
header (standaard), of C, C++ header-bestand dat moet worden omgezet in een Ada-specificatie (via de
-fdump-ada-specificatie schakelaar).

filet. Cc
filet.cp
filet.cxx
filet.cpp
filet.CPP
filet.c++
filet.C
C++-broncode die moet worden voorbewerkt. Merk op dat in .cxx, de laatste twee letters
moeten beide letterlijk zijn x. Hetzelfde, .C verwijst naar een letterlijke hoofdletter C.

filet.MM
filet.M
Objective-C++ broncode die moet worden voorbewerkt.

filet.miii
Objective-C++ broncode die niet voorbewerkt mag worden.

filet.H H
filet.H
filet.pk
filet.hxx
filet.pk
filet.HPP
filet.h++
filet.tcc
C++-headerbestand dat moet worden omgezet in een vooraf gecompileerde header of Ada-specificatie.

filet.f
filet.voor
filet.ftn
Vaste vorm Fortran-broncode die niet voorbewerkt mag worden.

filet.F
filet.VOOR
filet.fpp
filet.FPP
filet.FTN
Vaste vorm Fortran-broncode die moet worden voorbewerkt (met de traditionele
voorverwerker).

filet.f90
filet.f95
filet.f03
filet.f08
Vrije Fortran-broncode die niet voorbewerkt mag worden.

filet.F90
filet.F95
filet.F03
filet.F08
Vrije vorm Fortran-broncode die moet worden voorbewerkt (met de traditionele
voorverwerker).

filet.Gaan
Ga broncode.

filet.advertenties
Ada-broncodebestand dat een declaratie van een bibliotheekeenheid bevat (een declaratie van a
pakket, subprogramma of generiek, of een generieke instantie), of een bibliotheekeenheid
hernoemingsdeclaratie (een pakket-, generieke of subprogramma hernoemingsdeclaratie). Zo een
bestanden worden ook wel bril.

filet.adb
Ada-broncodebestand met de body van een bibliotheekeenheid (een subprogramma of pakketbody).
Dergelijke bestanden worden ook wel lichamen.

filet.s
Montagecode.

filet.S
filet.sx
Assemblercode die moet worden voorbewerkt.

anders
Een objectbestand dat direct in het linken moet worden ingevoerd. Elke bestandsnaam zonder herkend
achtervoegsel wordt op deze manier behandeld.

U kunt de invoertaal expliciet specificeren met de -x optie:

-x taal
Specificeer expliciet de taal voor de volgende invoerbestanden (in plaats van de
compiler een standaard kiezen op basis van het achtervoegsel van de bestandsnaam). Deze optie geldt voor iedereen
volgende invoerbestanden tot de volgende -x optie. Mogelijke waarden voor taal zijn:

c c-header cpp-uitvoer
c++ c++-header c++-cpp-uitvoer
doelstelling-c doelstelling-c-header doelstelling-c-cpp-output
objectieve-c++ objectieve-c++-header objectieve-c++-cpp-output
assembler assembler-met-cpp
ada
f77 f77-cpp-invoer f95 f95-cpp-invoer
go
Java

-x geen
Schakel elke specificatie van een taal uit, zodat volgende bestanden worden afgehandeld
volgens de achtervoegsels van hun bestandsnaam (zoals ze zijn als -x helemaal niet gebruikt).

-pass-exit-codes
Normaal gesproken gcc programma wordt afgesloten met de code van 1 als een fase van de compiler terugkeert
een niet-succesvolle retourcode. Als u opgeeft: -pass-exit-codes gcc in plaats daarvan programmeren
retourneert met de numeriek hoogste fout geproduceerd door een fase die een fout retourneert
indicatie. De front-ends van C, C++ en Fortran retourneren 4 als een interne compilerfout
wordt aangetroffen.

Als u slechts enkele van de compilatiestadia wilt, kunt u gebruik maken van -x (of bestandsnaam achtervoegsels)
vertellen gcc waar te beginnen, en een van de opties -c, -Sof -E om te zeggen waar gcc is
stop. Merk op dat sommige combinaties (bijvoorbeeld -x cpp-uitgang -E) instrueren gcc doen
helemaal niets.

-c Compileer of assembleer de bronbestanden, maar koppel niet. De koppelingsfase is gewoon:
niet klaar. De uiteindelijke uitvoer is in de vorm van een objectbestand voor elk bronbestand.

Standaard wordt de naam van het objectbestand voor een bronbestand gemaakt door het achtervoegsel te vervangen .c,
.i, .s, enz., met .o.

Niet-herkende invoerbestanden, waarvoor geen compilatie of montage vereist is, worden genegeerd.

-S Stop na de eigenlijke compilatiefase; niet monteren. De uitvoer is in de
vorm van een assembler-codebestand voor elk gespecificeerd niet-assembler-invoerbestand.

Standaard wordt de assembler-bestandsnaam voor een bronbestand gemaakt door het achtervoegsel te vervangen
.c, .i, enz., met .s.

Invoerbestanden die geen compilatie vereisen, worden genegeerd.

-E Stop na de voorbewerkingsfase; voer de compiler niet goed uit. De uitvoer is binnen
de vorm van voorbewerkte broncode, die naar de standaarduitvoer wordt gestuurd.

Invoerbestanden die geen voorbewerking vereisen, worden genegeerd.

-o filet
Plaats uitvoer in bestand filet. Dit geldt voor alle soorten output die wordt geproduceerd,
of het nu gaat om een ​​uitvoerbaar bestand, een objectbestand, een assemblerbestand of een voorbewerkt C
code.

If -o niet is opgegeven, is de standaardinstelling om een ​​uitvoerbaar bestand in a.out, het object
bestand voor bron.achtervoegsel in bron.o, het assembler-bestand in bron.s, een voorgecompileerde
header-bestand in bron.achtervoegsel.gch, en alle voorbewerkte C-bronnen op standaarduitvoer.

-v Druk (op standaardfoutuitvoer) de opdrachten af ​​die zijn uitgevoerd om de fasen van uit te voeren
compilatie. Druk ook het versienummer af van het compiler-stuurprogramma en van de
preprocessor en de eigenlijke compiler.

-###
Like -v behalve dat de commando's niet worden uitgevoerd en argumenten worden geciteerd tenzij ze
alleen alfanumerieke tekens of "./-_" bevatten. Dit is handig voor shellscripts om:
de door de bestuurder gegenereerde opdrachtregels vastleggen.

-pijp
Gebruik pijpen in plaats van tijdelijke bestanden voor communicatie tussen de verschillende stadia van
compilatie. Dit werkt niet op sommige systemen waar de assembler niet kan lezen
uit een pijp; maar de GNU-assembler heeft geen problemen.

--help
Druk (op de standaarduitvoer) een beschrijving af van de opdrachtregelopties die worden begrepen door
gcc. Indien de -v optie is dan ook gespecificeerd --help wordt ook doorgegeven aan de verschillende
processen aangeroepen door gcc, zodat ze de opdrachtregelopties kunnen weergeven die ze
aanvaarden. Als de -Wextra optie is ook gespecificeerd (vóór de --help optie),
dan zijn opdrachtregelopties waaraan geen documentatie is gekoppeld ook:
weergegeven.

--doel-hulp
Druk (op de standaarduitvoer) een beschrijving af van doelspecifieke opdrachtregelopties
voor elk gereedschap. Voor sommige doelen kan ook extra doelspecifieke informatie zijn:
afgedrukt.

--help={klasse|[^]qualifier}[, ...]
Druk (op de standaarduitvoer) een beschrijving af van de opdrachtregelopties die worden begrepen door
de compiler die in alle opgegeven klassen en kwalificaties past. Dit zijn de
ondersteunde klassen:

optimalisatieprogramma's
Geef alle optimalisatie-opties weer die door de compiler worden ondersteund.

waarschuwingen
Geef alle opties weer die waarschuwingsberichten besturen die door de compiler zijn geproduceerd.

doel
Doelspecifieke opties weergeven. In tegenstelling tot de --doel-hulp optie echter, doel-
specifieke opties van de linker en assembler worden niet weergegeven. Dit is zo omdat
die tools ondersteunen momenteel niet de extended --help= syntaxis.

params
Geef de waarden weer die worden herkend door de --param optie.

taal
Geef de opties weer die worden ondersteund voor taal, Waar taal is de naam van een van
de talen die in deze versie van GCC worden ondersteund.

gemeenschappelijk
Geef de opties weer die voor alle talen gelden.

Dit zijn de ondersteunde kwalificaties:

ongedocumenteerde
Geef alleen die opties weer die niet gedocumenteerd zijn.

toegetreden
Geef opties weer met een argument dat verschijnt na een gelijkteken in dezelfde
doorlopend stuk tekst, zoals: --help=doel.

apart
Geef opties weer met een argument dat als een afzonderlijk woord wordt weergegeven na de
originele optie, zoals: -o output-bestand.

Dus om bijvoorbeeld alle ongedocumenteerde doelspecifieke schakelaars weer te geven die worden ondersteund door
de compiler, gebruik:

--help=doel,ongedocumenteerd

De betekenis van een kwalificatie kan worden omgekeerd door deze vooraf te laten gaan door de ^ karakter, dus voor
voorbeeld om alle binaire waarschuwingsopties weer te geven (dwz degenen die aan of uit zijn)
en die geen argument aannemen) die een beschrijving hebben, gebruik:

--help=waarschuwingen,^toegetreden,^ongedocumenteerd

Het argument om --help= mag niet uitsluitend uit omgekeerde kwalificaties bestaan.

Het combineren van meerdere klassen is mogelijk, hoewel dit meestal de output beperkt, dus
zoveel dat er niets te zien is. Een geval waarin het wel werkt, is wanneer:
een van de lessen is doel. Om bijvoorbeeld alle doelspecifieke
optimalisatie opties, gebruik:

--help=doel, optimalisaties

De --help= optie kan worden herhaald op de opdrachtregel. Elk opeenvolgend gebruik wordt weergegeven:
de gevraagde klasse van opties, waarbij de al getoonde opties worden overgeslagen.

Indien de -Q optie verschijnt op de opdrachtregel voor de --help= optie, dan de
beschrijvende tekst weergegeven door --help= is gewijzigd. In plaats van de weergegeven
opties, wordt aangegeven of de optie is ingeschakeld, uitgeschakeld of ingesteld
naar een specifieke waarde (ervan uitgaande dat de compiler dit weet op het punt waar de
--help= optie wordt gebruikt).

Hier is een ingekort voorbeeld van de ARM-poort van: gcc:

% gcc -Q -mabi=2 --help=doel -c
De volgende opties zijn doelspecifiek:
-mabie= 2
-mabort-on-noreturn [uitgeschakeld]
-mapcs [uitgeschakeld]

De uitvoer is gevoelig voor de effecten van eerdere opdrachtregelopties, dus voor:
het is bijvoorbeeld mogelijk om erachter te komen welke optimalisaties zijn ingeschakeld op -O2 door het gebruiken van:

-Q -O2 --help=optimalisaties

Als alternatief kunt u ontdekken welke binaire optimalisaties zijn ingeschakeld door: -O3 door het gebruiken van:

gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep ingeschakeld

-geen-canonieke-voorvoegsels
Breid geen symbolische links uit, los verwijzingen op naar: /../ or /./, of maak het pad
absoluut bij het genereren van een relatief voorvoegsel.

--versie
Geef het versienummer en de copyrights van de ingeroepen GCC weer.

-wikkel
Roep alle subcommando's op onder een wrapper-programma. De naam van het wrapper-programma en
de parameters worden doorgegeven als een door komma's gescheiden lijst.

gcc -c tc -wrapper gdb,--args

Dit roept alle subprogramma's van op gcc voor gdb --argumenten, dus de aanroeping van cc1 is
gdb --argumenten cc1 ....

-fplugin=naam.zo
Laad de plug-incode in bestand naam.so, verondersteld een gedeeld object te zijn om door te dlopen'
de compiler. De basisnaam van het gedeelde objectbestand wordt gebruikt om de plug-in te identificeren
voor het ontleden van argumenten (Zie -fplugin-arg-naam-sleutel=waarde onderstaand). Elk
plugin moet de callback-functies definiëren die zijn gespecificeerd in de Plugins-API.

-fplugin-arg-naam-sleutel=waarde
Definieer een argument genaamd sleutel met een waarde van waarde voor de plug-in genaamd naam.

-fdump-ada-specificatie[-slank]
Genereer voor C- en C++ source- en include-bestanden de bijbehorende Ada-specificaties.

-fada-spec-ouder=eenheid
In combinatie met -fdump-ada-specificatie[-slank] hierboven, genereer Ada-specificaties als onderliggende eenheden van
ouder eenheid.

-fdump-go-spec=filet
Voor invoerbestanden in elke taal, genereer overeenkomstige Go-declaraties in filet. Deze
genereert Go "const", "type", "var" en "func" declaraties die een handige manier kunnen zijn
om te beginnen met het schrijven van een Go-interface naar code die in een andere taal is geschreven.

@filet
Lees opdrachtregelopties van filet. De gelezen opties worden ingevoegd in plaats van de
origineel @filet optie. Indien filet niet bestaat, of niet kan worden gelezen, dan is de optie
wordt letterlijk behandeld en niet verwijderd.

opties in filet worden gescheiden door witruimte. Een witruimteteken kan worden opgenomen
in een optie door de hele optie tussen enkele of dubbele aanhalingstekens te plaatsen. Ieder
teken (inclusief een backslash) kan worden toegevoegd door het teken voor te zetten dat moet worden
inclusief backslash. De filet kan zelf extra @ bevattenfilet opties; ieder
dergelijke opties worden recursief verwerkt.

Het compileren C + + Programma's
C++-bronbestanden gebruiken gewoonlijk een van de achtervoegsels .C, . Cc, .cpp, .CPP, .c++, .cpof
.cxx; C++-headerbestanden gebruiken vaak .H H, .pk, .H, of (voor gedeelde sjablooncode) .tccund
voorverwerkte C++-bestanden gebruiken het achtervoegsel .ii. GCC herkent bestanden met deze namen en
compileert ze als C++-programma's, zelfs als je de compiler op dezelfde manier aanroept als voor compileren
C-programma's (meestal met de naam gcc).

Het gebruik van gcc voegt de C++-bibliotheek niet toe. g ++ is een programma dat GCC aanroept en
specificeert automatisch koppeling met de C++-bibliotheek. Het behandelt .c, .h en .i bestanden als
C++-bronbestanden in plaats van C-bronbestanden, tenzij -x is gebruikt. Dit programma is ook handig
bij het precompileren van een C-headerbestand met a .h extensie voor gebruik in C++-compilaties. Op
veel systemen, g ++ is ook geïnstalleerd met de naam C ++.

Wanneer u C++-programma's compileert, kunt u veel van dezelfde opdrachtregelopties opgeven die:
u gebruikt voor het compileren van programma's in elke taal; of opdrachtregelopties die zinvol zijn voor C
en verwante talen; of opties die alleen zinvol zijn voor C++-programma's.

Opties Controlling C tongval
De volgende opties bepalen het dialect van C (of talen afgeleid van C, zoals C++,
Objective-C en Objective-C++) die de compiler accepteert:

-ansi
In C-modus is dit gelijk aan -standaard=c90. In C++-modus is het equivalent aan
-standaard=c++98.

Dit schakelt bepaalde functies van GCC uit die niet compatibel zijn met ISO C90 (wanneer
compileren van C-code), of van standaard C++ (bij het compileren van C++-code), zoals de "asm" en
"typeof" trefwoorden en vooraf gedefinieerde macro's zoals "unix" en "vax" die de
type systeem dat u gebruikt. Het maakt ook de ongewenste en zelden gebruikte ISO
trigraaf functie. Voor de C-compiler schakelt het de herkenning van de C++-stijl uit //
opmerkingen en het trefwoord "inline".

De alternatieve trefwoorden "__asm__", "__extension__", "__inline__" en "__typeof__"
blijven werken ondanks -ansi. Je zou ze niet willen gebruiken in een ISO C-programma,
natuurlijk, maar het is handig om ze in header-bestanden te plaatsen die mogelijk zijn opgenomen in
compilaties gedaan met -ansi. Alternatieve vooraf gedefinieerde macro's zoals "__unix__" en
"__vax__" zijn ook beschikbaar, met of zonder -ansi.

De -ansi optie zorgt er niet voor dat niet-ISO-programma's gratis worden afgewezen. Voor
dat -Wpedant is vereist in aanvulling op: -ansi.

De macro "__STRICT_ANSI__" is vooraf gedefinieerd wanneer de -ansi optie wordt gebruikt. een koptekst
bestanden kunnen deze macro opmerken en afzien van het declareren van bepaalde functies of definiëren
bepaalde macro's waar de ISO-norm niet om vraagt; dit is om interferentie te voorkomen
met alle programma's die deze namen voor andere dingen zouden kunnen gebruiken.

Functies die normaal gesproken ingebouwd zijn, maar geen semantiek hebben die is gedefinieerd door ISO C (zoals:
als "alloca" en "ffs") zijn geen ingebouwde functies wanneer: -ansi is gebruikt.

-standaard=
Bepaal de taalstandaard. Deze optie wordt momenteel alleen ondersteund wanneer:
het compileren van C of C++.

De compiler kan verschillende basisstandaarden accepteren, zoals: c90 or c++98, en GNU-dialecten
van die normen, zoals: gnu90 or gnu++98. Wanneer een basisstandaard wordt gespecificeerd,
compiler accepteert alle programma's die die standaard volgen, plus programma's die GNU-extensies gebruiken
die het niet tegenspreken. Bijvoorbeeld, -standaard=c90 schakelt bepaalde functies van GCC . uit
die incompatibel zijn met ISO C90, zoals de trefwoorden "asm" en "typeof", maar niet
andere GNU-extensies die geen betekenis hebben in ISO C90, zoals het weglaten van de
middelste term van een "?:" uitdrukking. Aan de andere kant, wanneer een GNU-dialect van een standaard
is opgegeven, zijn alle functies die door de compiler worden ondersteund, ingeschakeld, zelfs als die
kenmerken veranderen de betekenis van de basisstandaard. Dientengevolge, sommige strikt-conforme
programma's kunnen worden afgewezen. De specifieke standaard wordt gebruikt door: -Wpedant te identificeren
welke functies GNU-extensies zijn gezien die versie van de standaard. Bijvoorbeeld
-standaard=gnu90 -Wpedant waarschuwt voor C++-stijl // opmerkingen, terwijl -standaard=gnu99 -Wpedant
doet niet.

Er moet een waarde voor deze optie worden opgegeven; mogelijke waarden zijn

c90
c89
iso9899:1990
Ondersteuning van alle ISO C90-programma's (bepaalde GNU-extensies die in strijd zijn met ISO C90
zijn uitgeschakeld). Hetzelfde als -ansi voor C-code.

iso9899:199409
ISO C90 zoals gewijzigd in amendement 1.

c99
c9x
iso9899:1999
iso9899:199x
ISOC99. Deze standaard wordt nagenoeg volledig ondersteund, modulo bugs en
problemen met drijvende komma (voornamelijk maar niet volledig gerelateerd aan optionele C99-functies)
uit bijlagen F en G). Zienhttp://gcc.gnu.org/c99status.html> voor meer
informatie. De namen c9x en iso9899:199x zijn afgekeurd.

c11
c1x
iso9899:2011
ISO C11, de herziening van de ISO C-norm uit 2011. Deze norm is substantieel
volledig ondersteund, modulo-bugs, problemen met drijvende komma's (voornamelijk maar niet volledig
met betrekking tot optionele C11-kenmerken uit bijlagen F en G) en de optionele bijlagen K
(interfaces voor grenscontrole) en L (analyseerbaarheid). De naam c1x is verouderd.

gnu90
gnu89
GNU-dialect van ISO C90 (inclusief enkele C99-functies).

gnu99
gnu9x
GNU-dialect van ISO C99. De naam gnu9x is verouderd.

gnu11
gnu1x
GNU-dialect van ISO C11. Dit is de standaard voor C-code. De naam gnu1x is
verouderd.

c++98
c++03
De ISO C++-norm uit 1998 plus de technische rectificatie van 2003 en enkele aanvullende
defectmeldingen. Hetzelfde als -ansi voor C++-code.

gnu++98
gnu++03
GNU-dialect van -standaard=c++98. Dit is de standaard voor C++-code.

c++11
c++0x
De 2011 ISO C++ norm plus amendementen. De naam c++0x is verouderd.

gnu++11
gnu++0x
GNU-dialect van -standaard=c++11. De naam gnu++0x is verouderd.

c++14
c++1j
De 2014 ISO C++ norm plus amendementen. De naam c++1j is verouderd.

gnu++14
gnu++1j
GNU-dialect van -standaard=c++14. De naam gnu++1j is verouderd.

c++1z
De volgende herziening van de ISO C++-standaard, voorlopig gepland voor 2017. Ondersteuning
is zeer experimenteel en zal vrijwel zeker op onverenigbare manieren veranderen in
toekomstige uitgaven.

gnu++1z
GNU-dialect van -std=c++1z. Ondersteuning is zeer experimenteel en zal bijna
zeker veranderen op onverenigbare manieren in toekomstige releases.

-fgnu89-inline
De optie -fgnu89-inline vertelt GCC om de traditionele GNU-semantiek te gebruiken voor "inline"
functioneert in de C99-modus.

Het gebruik van deze optie komt ongeveer overeen met het toevoegen van het functiekenmerk "gnu_inline"
voor alle inline-functies.

De optie -fno-gnu89-inline vertelt GCC expliciet om de C99-semantiek te gebruiken voor:
"inline" in C99- of gnu99-modus (dwz het specificeert het standaardgedrag). Dit
optie wordt niet ondersteund in -standaard=c90 or -standaard=gnu90 modus.

De preprocessor-macro's "__GNUC_GNU_INLINE__" en "__GNUC_STDC_INLINE__" kunnen worden gebruikt
om te controleren welke semantiek van kracht is voor "inline"-functies.

-aux-info bestandsnaam
Uitvoer naar de opgegeven bestandsnaam prototype-declaraties voor alle gedeclareerde functies en/of
gedefinieerd in een vertaaleenheid, inclusief die in headerbestanden. Deze optie is
stilzwijgend genegeerd in een andere taal dan C.

Naast aangiften geeft het bestand in opmerkingen de herkomst van elke aangifte aan
(bronbestand en regel), of de declaratie impliciet, prototyped of . was
niet-geprototypeerd (I, N voor nieuwe of O voor oud, respectievelijk in het eerste teken na
het regelnummer en de dubbele punt), en of het afkomstig is van een aangifte of een definitie
(C or F, respectievelijk in het volgende teken). In het geval van functie:
definities, een K&R-stijl lijst van argumenten gevolgd door hun verklaringen is ook
verstrekt, inside comments, na de verklaring.

-fallow-parameterloze-variadic-functies
Accepteer variadische functies zonder benoemde parameters.

Hoewel het mogelijk is om zo'n functie te definiëren, is dit niet erg handig omdat het is
niet mogelijk om de argumenten te lezen. Dit wordt alleen ondersteund voor C omdat dit construct is
toegestaan ​​door C++.

-fno-asm
Herken "asm", "inline" of "typeof" niet als trefwoord, zodat code deze kan gebruiken
woorden als identificatie. U kunt de trefwoorden "__asm__", "__inline__" en
"__typeof__" in plaats daarvan. -ansi impliceert -fno-asm.

In C++ heeft deze schakelaar alleen invloed op het trefwoord "typeof", aangezien "asm" en "inline" dit zijn
standaard trefwoorden. Misschien wilt u de -fno-gnu-trefwoorden vlag in plaats daarvan, die heeft
hetzelfde effekt. In C99-modus (-standaard=c99 or -standaard=gnu99), heeft deze schakelaar alleen invloed op de
"asm" en "typeof" trefwoorden, aangezien "inline" een standaard trefwoord is in ISO C99.

-fno-ingebouwd
-fno-ingebouwd-functie
Herken geen ingebouwde functies die niet beginnen met __ingebouwd_ als voorvoegsel.

GCC genereert normaal gesproken speciale code om bepaalde ingebouwde functies meer af te handelen
efficiënt; aanroepen naar "alloca" kunnen bijvoorbeeld enkele instructies worden die:
pas de stapel direct aan, en oproepen naar "memcpy" kunnen inline kopieerlussen worden. De
resulterende code is vaak zowel kleiner als sneller, maar aangezien de functie no . aanroept
langer als zodanig verschijnen, kunt u geen onderbrekingspunt instellen voor die oproepen, noch kunt u deze wijzigen
het gedrag van de functies door te koppelen met een andere bibliotheek. Bovendien, wanneer?
een functie wordt herkend als een ingebouwde functie, GCC kan daar informatie over gebruiken
functie om te waarschuwen voor problemen met aanroepen naar die functie, of om meer te genereren
efficiënte code, zelfs als de resulterende code nog steeds aanroepen naar die functie bevat. Voor
waarschuwingen worden bijvoorbeeld gegeven met -Wformaat voor slechte aanroepen naar "printf" wanneer "printf" is
ingebouwd en het is bekend dat "strlen" het globale geheugen niet wijzigt.

Met de -fno-ingebouwd-functie optie alleen de ingebouwde functie functie is uitgeschakeld.
functie mag niet beginnen met __ingebouwd_. Als een functie wordt genoemd die niet is ingebouwd
in deze versie van GCC wordt deze optie genegeerd. Er is geen corresponderend
-fingebouwd-functie optie; als u de ingebouwde functies selectief wilt inschakelen wanneer:
gebruik -fno-ingebouwd or -vrijstaand, kunt u macro's definiëren zoals:

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

-gehost
Stel dat compilatie is gericht op een gehoste omgeving. Dit houdt in -fingebouwd. Een
gehoste omgeving is er een waarin de volledige standaardbibliotheek beschikbaar is, en in
welke "main" een retourtype "int" heeft. Voorbeelden zijn bijna alles behalve a
kern. Dit is gelijk aan -fno-vrijstaand.

-vrijstaand
Beweer dat compilatie gericht is op een vrijstaande omgeving. Dit houdt in
-fno-ingebouwd. Een vrijstaande omgeving is er een waarin de standaardbibliotheek dat niet mag
bestaan, en het opstarten van het programma hoeft niet noodzakelijkerwijs op "hoofd" te zijn. Het meest voor de hand liggende voorbeeld
is een OS-kernel. Dit is gelijk aan -fno-gehost.

-fopenacc
Schakel de verwerking van OpenACC-richtlijnen "#pragma acc" in C/C++ en "!$acc" in Fortran in.
. -fopenacc is opgegeven, genereert de compiler versnelde code volgens de
OpenACC Application Programming Interface v2.0http://www.openacc.org/>. Deze optie
impliceert -pdraad, en wordt dus alleen ondersteund op doelen die ondersteuning hebben voor
-pdraad.

Merk op dat dit een experimentele functie is, onvolledig en onderhevig aan wijzigingen in de toekomst
versies van GCC. Zienhttps://gcc.gnu.org/wiki/OpenACC> voor meer informatie.

-fopenmp
Schakel de verwerking van OpenMP-richtlijnen "#pragma omp" in C/C++ en "!$omp" in Fortran in.
. -fopenmp is opgegeven, genereert de compiler parallelle code volgens de
OpenMP-toepassingsprogramma-interface v4.0http://www.openmp.org/>. Deze optie
impliceert -pdraad, en wordt dus alleen ondersteund op doelen die ondersteuning hebben voor
-pdraad. -fopenmp impliceert -fopenmp-simd.

-fopenmp-simd
Schakel de verwerking van de SIMD-richtlijnen van OpenMP in met "#pragma omp" in C/C++ en "!$omp" in
Fortran. Andere OpenMP-richtlijnen worden genegeerd.

-fcilkplus
Schakel het gebruik van Cilk Plus-taaluitbreidingsfuncties voor C/C++ in. Wanneer de optie
-fcilkplus is opgegeven, schakelt u het gebruik van de functies van de Cilk Plus-taaluitbreiding in
voor C/C++. De huidige implementatie volgt ABI versie 1.2. Dit is een
experimentele functie die slechts gedeeltelijk is voltooid en waarvan de interface kan veranderen
in toekomstige versies van GCC als de officiële specificatie verandert. Momenteel alle
functies maar "_Cilk_for" zijn geïmplementeerd.

-fgnu-tm
Wanneer de optie -fgnu-tm is opgegeven, genereert de compiler code voor de Linux
variant van Intel's huidige Transactional Memory ABI-specificatiedocument (Revision
1.1, 6 mei 2009). Dit is een experimentele functie waarvan de interface kan veranderen in
toekomstige versies van GCC, als de officiële specificatie verandert. Houd er rekening mee dat niet
alle architecturen worden ondersteund voor deze functie.

Voor meer informatie over de ondersteuning van GCC voor transactiegeheugen,

Houd er rekening mee dat de transactiegeheugenfunctie niet wordt ondersteund met uitzonderingen voor niet-oproepen
(-fnon-call-uitzonderingen).

-fms-extensies
Accepteer enkele niet-standaard constructies die worden gebruikt in Microsoft-headerbestanden.

In C++-code kunnen hierdoor namen van leden in structuren vergelijkbaar zijn met eerdere typen
verklaringen.

typedef int UOW;
structuur ABC {
UOW UOW;
};

Sommige gevallen van naamloze velden in structuren en vakbonden worden alleen hiermee geaccepteerd
optie.

Merk op dat deze optie is uitgeschakeld voor alle doelen behalve x86-doelen die ms-abi gebruiken.

-fplan9-extensies
Accepteer enkele niet-standaard constructies die worden gebruikt in de code van Plan 9.

Dit maakt het mogelijk -fms-extensies, staat het doorgeven van verwijzingen naar structuren toe met anoniem
velden naar functies die verwijzingen verwachten naar elementen van het type veld, en
vergunningen die verwijzen naar anonieme velden die zijn gedeclareerd met een typedef. Dit is alleen
ondersteund voor C, niet voor C++.

-trigrafieën
Ondersteuning ISO C trigraphs. De -ansi optie (en -soa opties voor strikte ISO C
conformiteit) impliceert: -trigrafieën.

- traditioneel
-traditionele-cpp
Voorheen zorgden deze opties ervoor dat GCC probeerde een pre-standaard C-compiler te emuleren.
Ze worden nu alleen ondersteund met de -E schakelaar. De preprocessor blijft ondersteunen
een pre-standaard modus. Zie de GNU CPP-handleiding voor details.

-fcond-mismatch
Sta voorwaardelijke expressies met niet-overeenkomende typen toe in het tweede en derde argument.
De waarde van een dergelijke uitdrukking is ongeldig. Deze optie wordt niet ondersteund voor C++.

-vlas-vector-conversies
Sta impliciete conversies toe tussen vectoren met verschillende aantallen elementen en/of
incompatibele elementtypen. Deze optie mag niet worden gebruikt voor nieuwe code.

-funsigned-char
Laat het type "char" unsigned zijn, zoals "unsigned char".

Elk soort machine heeft een standaard voor wat "char" zou moeten zijn. Het is ofwel zoals
"unsigned char" standaard of zoals "signed char" standaard.

Idealiter zou een draagbaar programma altijd "signed char" of "unsigned char" moeten gebruiken wanneer het
hangt af van de signatuur van een object. Maar er zijn veel programma's geschreven om te gebruiken
gewoon "char" en verwacht dat het is ondertekend, of verwacht dat het niet is ondertekend, afhankelijk van de
machines waarvoor ze zijn geschreven. Met deze optie, en zijn inverse, kun je zo'n
programma werkt met de tegenovergestelde standaard.

Het type "char" is altijd een ander type van elk van "signed char" of "unsigned
char", hoewel zijn gedrag altijd hetzelfde is als een van die twee.

-fsigned-char
Laat het type "char" ondertekend zijn, zoals "signed char".

Merk op dat dit gelijk is aan -fno-unsigned-char, wat de negatieve vorm is van
-funsigned-char. Evenzo is de optie -fno-ondertekend-char is gelijk aan
-funsigned-char.

-fsigned-bitvelden
-funsigned-bitvelden
-fno-ondertekende bitvelden
-fno-niet-ondertekende-bitvelden
Deze opties bepalen of een bitveld is ondertekend of niet ondertekend, wanneer de verklaring
gebruikt geen "ondertekend" of "niet ondertekend". Standaard is zo'n bitveld ondertekend,
omdat dit consistent is: de basistypes voor gehele getallen zoals "int" zijn ondertekende typen.

Opties Controlling C + + tongval
In deze sectie worden de opdrachtregelopties beschreven die alleen zinvol zijn voor C++-programma's.
U kunt ook de meeste GNU-compileropties gebruiken, ongeacht de taal van uw programma
is in. U kunt bijvoorbeeld een bestand compileren eersteKlasse.C soortgelijk:

g++ -g -frepo -O -c eerste Klasse.C

In dit voorbeeld alleen -frepo is een optie die alleen bedoeld is voor C++-programma's; je kunt de gebruiken
andere opties met elke taal die door GCC wordt ondersteund.

Hier is een lijst met opties die zijn: Slechts voor het compileren van C++-programma's:

-fabi-versie=n
Gebruik versie n van de C++ ABI. De standaard is versie 0.

Versie 0 verwijst naar de versie die het meest overeenkomt met de C++ ABI-specificatie.
Daarom zal de ABI verkregen met versie 0 veranderen in verschillende versies van G++
aangezien ABI-bugs zijn opgelost.

Versie 1 is de versie van de C++ ABI die voor het eerst verscheen in G++ 3.2.

Versie 2 is de versie van de C++ ABI die voor het eerst verscheen in G++ 3.4, en was de
standaard via G++ 4.9.

Versie 3 corrigeert een fout bij het mangelen van een constant adres als een sjabloonargument.

Versie 4, die voor het eerst verscheen in G++ 4.5, implementeert een standaard mangeling voor vector
types.

Versie 5, die voor het eerst verscheen in G++ 4.6, corrigeert het mangelen van attributen
const/volatile op functieaanwijzertypes, decltype van een gewone decl en gebruik van a
functieparameter in de declaratie van een andere parameter.

Versie 6, die voor het eerst verscheen in G++ 4.7, corrigeert het promotiegedrag van C++11
scoped opsommingen en het mangelen van template argument packs, const/static_cast, prefix ++
en --, en een functie voor het bereik van de klasse die als sjabloonargument wordt gebruikt.

Versie 7, die voor het eerst verscheen in G++ 4.8, behandelt nullptr_t als een ingebouwd type
en corrigeert het mangelen van lambda's in het bereik van het standaardargument.

Versie 8, die voor het eerst verscheen in G++ 4.9, corrigeert het vervangingsgedrag van
functietypes met functie-cv-kwalificaties.

Zie ook -Wabi.

-fabi-compat-versie=n
Op doelen die sterke aliassen ondersteunen, werkt G++ om het mangelen van wijzigingen door het creëren van
een alias met de juiste verminkte naam bij het definiëren van een symbool met een incorrecte
verminkte naam. Deze schakeloptie geeft aan welke ABI-versie voor de alias moet worden gebruikt.

met -fabi-versie=0 (de standaard), dit is standaard 2. Als een andere ABI-versie is
expliciet geselecteerd, staat dit standaard op 0.

De compatibiliteitsversie wordt ook ingesteld door -Wabi=n.

-fno-toegangscontrole
Schakel alle toegangscontrole uit. Deze schakelaar is vooral handig voor het omzeilen van bugs in
de toegangscontrolecode.

-fcheck-nieuw
Controleer of de aanwijzer die wordt geretourneerd door "operator nieuw" niet-null is voordat u probeert om:
de toegewezen opslagruimte wijzigen. Deze controle is normaal gesproken niet nodig omdat de C++
standaard specificeert dat "operator nieuw" alleen 0 retourneert als het is gedeclareerd als "throw()", in
in dat geval controleert de compiler altijd de retourwaarde, zelfs zonder deze optie. In
alle andere gevallen, wanneer "operator nieuw" een niet-lege uitzonderingsspecificatie heeft, geheugen
uitputting wordt gesignaleerd door "std::bad_alloc" te gooien. Zie ook nieuwe (noord).

-fconstexpr-diepte=n
Stel de maximale geneste evaluatiediepte voor C++11 constexpr-functies in op n. Een limiet
is nodig om eindeloze recursie te detecteren tijdens constante expressie-evaluatie. De
minimum gespecificeerd door de norm is 512.

-fduceer-init-lijst
Schakel aftrek van een sjabloontypeparameter in als "std::initializer_list" van een accolade-
bijgevoegde initialisatielijst, d.w.z

sjabloon auto forward(T t) -> decltype (realfn (t))
{
retourneer realfn (t);
}

ongeldig f()
{
vooruit({1,2}); // doorschakelen >
}

Deze aftrek werd geïmplementeerd als een mogelijke uitbreiding van de oorspronkelijk voorgestelde
semantiek voor de C++11-standaard, maar maakte geen deel uit van de uiteindelijke standaard, dus dat is het wel
standaard uitgeschakeld. Deze optie is verouderd en kan in de toekomst worden verwijderd
versie van G++.

-ffriend-injectie
Injecteer vriendenfuncties in de omsluitende naamruimte, zodat ze buiten zichtbaar zijn
het bereik van de klasse waarin ze zijn gedeclareerd. Vriendenfuncties werden gedocumenteerd
om op deze manier te werken in de oude Annotated C++ Reference Manual. Echter, in ISO C++ a
vriend-functie die niet in een omsluitende scope is gedeclareerd, kan alleen worden gevonden met
argument afhankelijk opzoeken. GCC gebruikt standaard het standaardgedrag.

Deze optie is voor compatibiliteit en kan in een toekomstige versie van G++ worden verwijderd.

-fno-elide-constructeurs
De C++-standaard staat een implementatie toe om het maken van een tijdelijke die alleen is
gebruikt om een ​​ander object van hetzelfde type te initialiseren. Door deze optie op te geven, wordt uitgeschakeld
die optimalisatie, en dwingt G++ om in alle gevallen de copy-constructor aan te roepen.

-fno-enforce-eh-specificaties
Genereer geen code om tijdens runtime te controleren op schending van uitzonderingsspecificaties.
Deze optie schendt de C++-standaard, maar kan handig zijn om de codegrootte in
productie builds, net zoals het definiëren van "NDEBUG". Dit geeft geen gebruikerscode
toestemming om exceptions te gooien in strijd met de exceptionspecificaties; de
compiler optimaliseert nog steeds op basis van de specificaties, dus het gooien van een onverwachte
uitzondering resulteert in ongedefinieerd gedrag tijdens runtime.

-fextern-tls-init
-fno-extern-tls-init
De C++11- en OpenMP-standaarden staan ​​"thread_local" en "threadprivate" variabelen toe om
dynamische (runtime) initialisatie hebben. Om dit te ondersteunen, kan elk gebruik van een dergelijke variabele
doorloopt een wrapper-functie die de nodige initialisatie uitvoert. Wanneer de
gebruik en definitie van de variabele zijn in dezelfde vertaaleenheid, deze overhead kan
weg worden geoptimaliseerd, maar wanneer het gebruik in een andere vertaaleenheid is, is er
aanzienlijke overhead, zelfs als de variabele niet echt dynamisch nodig heeft
initialisatie. Als de programmeur er zeker van kan zijn dat geen gebruik van de variabele in een niet-
het definiëren van TU moet dynamische initialisatie activeren (ofwel omdat de variabele is
statisch geïnitialiseerd, of een gebruik van de variabele in de definiërende TU wordt uitgevoerd
vóór gebruik in een andere TU), kunnen ze deze overhead vermijden met de
-fno-extern-tls-init optie.

Op doelen die symboolaliassen ondersteunen, is de standaard -fextern-tls-init. op doelen
die geen symboolaliassen ondersteunen, is de standaard -fno-extern-tls-init.

-ffor-bereik
-fno-voor-scope
If -ffor-bereik is opgegeven, het bereik van variabelen gedeclareerd in a for-init-verklaring
is beperkt tot de "for"-lus zelf, zoals gespecificeerd door de C++-standaard. Indien
-fno-voor-scope is opgegeven, het bereik van variabelen gedeclareerd in a for-init-verklaring
strekt zich uit tot het einde van het omsluitende bereik, zoals het geval was in oude versies van G++, en
andere (traditionele) implementaties van C++.

Als geen van beide vlaggen wordt gegeven, is de standaardinstelling om de standaard te volgen, maar om toe te staan ​​en te geven
een waarschuwing voor oude code die anders ongeldig zou zijn, of anders zou zijn
gedrag.

-fno-gnu-trefwoorden
Herken "typeof" niet als een trefwoord, zodat de code dit woord als een kan gebruiken
identificatie. U kunt in plaats daarvan het trefwoord "__typeof__" gebruiken. -ansi impliceert
-fno-gnu-trefwoorden.

-fno-impliciete-sjablonen
Zend nooit code uit voor niet-inline sjablonen die impliciet zijn geïnstantieerd (bijv
gebruik maken van); zend alleen code uit voor expliciete instantiaties.

-fno-impliciete-inline-sjablonen
Zend ook geen code uit voor impliciete instantiaties van inline-sjablonen. De standaard
is om inlines anders te behandelen, zodat compiles met en zonder optimalisatie nodig zijn
dezelfde set van expliciete instantiaties.

-fno-implementeren-inlines
Stuur om ruimte te besparen geen out-of-line kopieën van inline functies die worden bestuurd door
"#pragma implementatie". Dit veroorzaakt linkerfouten als deze functies dat niet zijn
inline overal waar ze worden genoemd.

-fms-extensies
Schakel Wpedantic-waarschuwingen uit over constructies die in MFC worden gebruikt, zoals impliciete int en
een verwijzing naar de lidfunctie krijgen via niet-standaard syntaxis.

-fno-nonansi-ingebouwd
Schakel ingebouwde declaraties van functies uit die niet verplicht zijn door ANSI/ISO C. Deze:
omvatten "ffs", "alloca", "_exit", "index", "bzero", "conjf", en andere gerelateerde
functies.

-fnothrow-opt
Behandel een uitzonderingsspecificatie "throw()" alsof het een "nobehalve"-specificatie is om
verminder of elimineer de overhead van de tekstgrootte ten opzichte van een functie zonder uitzondering
specificatie. Als de functie lokale variabelen heeft van typen met niet-triviaal
destructors, de uitzonderingsspecificatie maakt de functie eigenlijk kleiner omdat:
de EH-opschoning voor die variabelen kan weg worden geoptimaliseerd. Het semantische effect is
dat een uitzondering uit een functie wordt gegooid met een dergelijke uitzonderingsspecificatie
resulteert in een oproep tot "beëindigen" in plaats van "onverwacht".

-fno-operatornamen
Behandel de operatornaam trefwoorden "and", "bitand", "bitor", "compl", "not", "or" niet
en "xor" als synoniemen als trefwoorden.

-fno-optionele-diags
Schakel diagnostiek uit waarvan de standaard zegt dat een compiler deze niet hoeft uit te geven.
Momenteel is de enige diagnose die door G++ wordt uitgegeven, die voor een naam met:
meerdere betekenissen binnen een klasse.

-fpermissief
Downgrade sommige diagnostische gegevens over niet-conforme code van fouten naar waarschuwingen. Dus,
gebruik -fpermissief staat toe dat een niet-conforme code wordt gecompileerd.

-fno-mooie-sjablonen
Wanneer een foutmelding verwijst naar een specialisatie van een functiesjabloon, zal de compiler
drukt normaal gesproken de handtekening van de sjabloon af gevolgd door de sjabloonargumenten en
eventuele typedefs of typenamen in de handtekening (bijv. "void f(T) [with T = int]" liever
dan "void f(int)") zodat het duidelijk is om welk sjabloon het gaat. Wanneer een fout
bericht verwijst naar een specialisatie van een klassensjabloon, de compiler laat elke weg
sjabloonargumenten die overeenkomen met de standaardsjabloonargumenten voor die sjabloon. Indien
een van deze gedragingen maakt het moeilijker om de foutmelding te begrijpen dan:
gemakkelijker, u kunt gebruiken -fno-mooie-sjablonen om ze uit te schakelen.

-frepo
Schakel automatische sjablooninstantiatie in op het moment van de koppeling. Deze optie houdt ook in:
-fno-impliciete-sjablonen.

-fno-rtti
Schakel het genereren van informatie over elke klasse uit met virtuele functies voor gebruik door
de C++ runtime type-identificatiefuncties ("dynamic_cast" en "typeid"). als jij
gebruik die delen van de taal niet, u kunt wat ruimte besparen door deze vlag te gebruiken.
Merk op dat het afhandelen van uitzonderingen dezelfde informatie gebruikt, maar G++ genereert het als
nodig zijn. De operator "dynamic_cast" kan nog steeds worden gebruikt voor casts die niet nodig zijn
runtime-type-informatie, dwz casts naar "void *" of naar ondubbelzinnige basisklassen.

-fsized-deallocatie
Schakel de ingebouwde globale declaraties in

void operator delete (void *, std::size_t) nobehalve;
void operator delete[] (void *, std::size_t) nobehalve;

zoals geïntroduceerd in C++14. Dit is handig voor door de gebruiker gedefinieerde vervangingsdeallocatie
functies die bijvoorbeeld de grootte van het object gebruiken om deallocatie sneller te maken.
Standaard ingeschakeld onder -standaard=c++14 en hoger. De vlag -Wsized-deallocatie waarschuwt
over plaatsen die mogelijk een definitie willen toevoegen.

-statistieken
Verzend statistieken over front-end verwerking aan het einde van de compilatie. Dit
informatie is over het algemeen alleen nuttig voor het G++-ontwikkelteam.

-fstrict-opsommingen
Sta de compiler toe om te optimaliseren met behulp van de veronderstelling dat een waarde van het opgesomde type
kan slechts een van de waarden van de opsomming zijn (zoals gedefinieerd in de C++-standaard;
eigenlijk een waarde die kan worden weergegeven in het minimum aantal bits dat nodig is om
vertegenwoordigen alle tellers). Deze veronderstelling is mogelijk niet geldig als het programma
een cast om een ​​willekeurig geheel getal om te zetten in het opgesomde type.

-ftemplate-backtrace-limiet=n
Stel het maximale aantal sjablooninitiatienotities in voor een enkele waarschuwing of fout
naar n. De standaardwaarde is 10.

-ftemplate-diepte=n
Stel de maximale instantiatiediepte voor sjabloonklassen in op n. Een limiet op de
sjabloon-instantiatiediepte is nodig om eindeloze recursies tijdens sjabloon te detecteren
klasse instantiatie. ANSI/ISO C++-conforme programma's mogen niet afhankelijk zijn van een maximum
diepte groter dan 17 (veranderd in 1024 in C++11). De standaardwaarde is 900, aangezien de
compiler kan in sommige situaties onvoldoende stackruimte hebben voordat hij 1024 bereikt.

-fno-threadsafe-statica
Zend niet de extra code uit om de routines te gebruiken die zijn gespecificeerd in de C++ ABI voor thread-
veilige initialisatie van lokale statica. U kunt deze optie gebruiken om de codegrootte te verkleinen
enigszins in code die niet thread-safe hoeft te zijn.

-zekering-cxa-atexit
Registreer destructors voor objecten met een statische opslagduur met de "__cxa_atexit"
functie in plaats van de "atexit" -functie. Deze optie is vereist voor volledig
normconforme verwerking van statische destructors, maar werkt alleen als uw C-bibliotheek
ondersteunt "__cxa_atexit".

-fno-gebruik-cxa-get-exception-ptr
Gebruik de runtime-routine "__cxa_get_exception_ptr" niet. Dit veroorzaakt
"std::uncaught_exception" is onjuist, maar is noodzakelijk als de runtime-routine is
niet beschikbaar.

-zichtbaarheid-inlijnen-verborgen
Deze schakelaar verklaart dat de gebruiker niet probeert om pointers te vergelijken met inline
functies of methoden waarbij de adressen van de twee functies in verschillende
gedeelde objecten.

Het effect hiervan is dat GCC inline-methoden effectief kan markeren met:
"__attribute__ ((zichtbaarheid ("verborgen")))" zodat ze niet in de export verschijnen
tabel van een DNB en vereisen geen PLT-indirectie bij gebruik binnen de DNB.
Het inschakelen van deze optie kan een dramatisch effect hebben op de laad- en linktijden van een DSO omdat het
verkleint de grootte van de dynamische exporttabel enorm wanneer de bibliotheek zwaar maakt
gebruik van sjablonen.

Het gedrag van deze schakelaar is niet helemaal hetzelfde als het markeren van de methoden als verborgen
rechtstreeks, omdat het geen invloed heeft op statische variabelen die lokaal zijn voor de functie of oorzaak
de compiler om af te leiden dat de functie in slechts één gedeeld object is gedefinieerd.

U kunt een methode markeren als een methode die expliciet zichtbaar is om het effect van de
overschakelen naar die methode. Als u bijvoorbeeld pointers wilt vergelijken met a
bepaalde inline-methode, kunt u deze markeren als standaard zichtbaarheid. Het markeren van de
omsluitende klasse met expliciete zichtbaarheid heeft geen effect.

Expliciet geïnstantieerde inline-methoden worden niet beïnvloed door deze optie omdat hun koppeling
zou anders een grens van een gedeelde bibliotheek kunnen overschrijden.

-zichtbaarheid-ms-compat
Deze vlag probeert zichtbaarheidsinstellingen te gebruiken om het C++-koppelingsmodel van GCC te maken
compatibel met die van Microsoft Visual Studio.

De vlag brengt deze wijzigingen aan in het koppelingsmodel van GCC:

1. Het stelt de standaard zichtbaarheid in op "verborgen", zoals -fzichtbaarheid=verborgen.

2. Typen, maar niet hun leden, zijn standaard niet verborgen.

3. De One Definition Rule is versoepeld voor typen zonder expliciete zichtbaarheid
specificaties die zijn gedefinieerd in meer dan één gedeeld object: die verklaringen
zijn toegestaan ​​als ze zijn toegestaan ​​wanneer deze optie niet wordt gebruikt.

In nieuwe code is het beter om te gebruiken -fzichtbaarheid=verborgen en exporteer die klassen die zijn
bedoeld om van buitenaf zichtbaar te zijn. Helaas is het mogelijk dat code vertrouwt,
misschien per ongeluk, op het gedrag van Visual Studio.

Een van de gevolgen van deze wijzigingen is dat statische gegevensleden van hetzelfde type
met dezelfde naam maar gedefinieerd in verschillende gedeelde objecten zijn verschillend, dus veranderen
het een verandert het ander niet; en dat verwijst naar functieleden gedefinieerd in
verschillende gedeelde objecten zijn mogelijk niet gelijk. Wanneer deze vlag wordt gegeven, is het a
schending van de ODR om typen met dezelfde naam anders te definiëren.

-fvtable-verify=[soa|voorinit|geen]
Schakel in (of uit, indien gebruikt) -fvtable-verify=geen) de beveiligingsfunctie die verifieert op
looptijd, voor elke virtuele oproep, dat de vtable-aanwijzer via welke de oproep is
made is geldig voor het type object en is niet beschadigd of overschreven.
Als tijdens runtime een ongeldige vtable-aanwijzer wordt gedetecteerd, wordt een fout gerapporteerd en
uitvoering van het programma wordt onmiddellijk stopgezet.

Deze optie zorgt ervoor dat runtime-gegevensstructuren worden gebouwd bij het opstarten van het programma, die:
gebruikt voor het verifiëren van de vtable-pointers. De opties soa en voorinit controle over de
timing van wanneer deze datastructuren worden gebouwd. In beide gevallen zijn de datastructuren:
gebouwd voordat de uitvoering "main" bereikt. Gebruik makend van -fvtable-verify=std veroorzaakt de gegevens
structuren die moeten worden gebouwd nadat gedeelde bibliotheken zijn geladen en geïnitialiseerd.
-fvtable-verify=preinit zorgt ervoor dat ze worden gebouwd voordat gedeelde bibliotheken zijn
geladen en geïnitialiseerd.

Als deze optie meerdere keren in de opdrachtregel met verschillende waarden verschijnt
gespecificeerd, geen heeft de hoogste prioriteit boven beide soa en voorinit; voorinit neemt
prioriteit boven soa.

-fvtv-foutopsporing
Bij gebruik in combinatie met -fvtable-verify=std or -fvtable-verify=preinit, oorzaken
debug-versies van de runtime-functies voor de vtable-verificatiefunctie
genaamd. Deze vlag zorgt er ook voor dat de compiler informatie logt over welke vtable
pointers die het voor elke klasse vindt. Deze informatie wordt weggeschreven naar een bestand met de naam
vtv_set_ptr_data.log in de map genoemd door de omgevingsvariabele VTV_LOGS_DIR
als dat is gedefinieerd of de huidige werkdirectory anders.

Opmerking: deze functie: voegt gegevens naar het logbestand. Als je een nieuw logbestand wilt, be
zorg ervoor dat u een bestaande verwijdert.

-fvtv-tellingen
Dit is een foutopsporingsvlag. Bij gebruik in combinatie met -fvtable-verify=std or
-fvtable-verify=preinit, dit zorgt ervoor dat de compiler het totale aantal . bijhoudt
virtuele oproepen die het tegenkomt en het aantal verificaties dat het invoegt. Het ook
telt het aantal oproepen naar bepaalde runtime bibliotheekfuncties die het invoegt en
logt deze informatie voor elke compilatie-eenheid. De compiler schrijft deze informatie
naar een bestand met de naam vtv_count_data.log in de map genoemd door de omgevingsvariabele
VTV_LOGS_DIR als dat is gedefinieerd of de huidige werkdirectory anders. Het ook
telt de grootte van de vtable-pointersets voor elke klasse en schrijft deze informatie
naar vtv_class_set_sizes.log In dezelfde map.

Opmerking: deze functie: voegt gegevens naar de logbestanden. Zorg ervoor dat u nieuwe logbestanden krijgt:
verwijder alle bestaande.

-fno-zwak
Gebruik geen ondersteuning voor zwakke symbolen, ook niet als deze door de linker wordt geleverd. Standaard is G++
gebruikt zwakke symbolen als deze beschikbaar zijn. Deze optie bestaat alleen voor testen, en
mag niet worden gebruikt door eindgebruikers; het resulteert in inferieure code en heeft geen voordelen.
Deze optie kan in een toekomstige versie van G++ worden verwijderd.

-nostdinc++
Zoek niet naar header-bestanden in de standaarddirectory's die specifiek zijn voor C++, maar doe
zoek nog steeds in de andere standaardmappen. (Deze optie wordt gebruikt bij het bouwen van de
C++ bibliotheek.)

Bovendien hebben deze opties voor optimalisatie, waarschuwing en codegeneratie alleen een betekenis
voor C++-programma's:

-Wabi (alleen C, Objective-C, C++ en Objective-C++)
Wanneer een expliciete -fabi-versie=n optie wordt gebruikt, zorgt ervoor dat G++ waarschuwt wanneer het genereert
code die waarschijnlijk niet compatibel is met de leverancierneutrale C++ ABI. Sinds G++ nu
standaard -fabi-versie=0, -Wabi heeft geen effect tenzij een oudere ABI-versie is
geselecteerd (met -fabi-versie=n) of een oudere compatibiliteitsversie is geselecteerd (met
-Wabi=n or -fabi-compat-versie=n).

Hoewel er een poging is gedaan om voor al dergelijke gevallen te waarschuwen, zijn er waarschijnlijk enkele:
gevallen waarvoor niet wordt gewaarschuwd, ook al genereert G++ incompatibele code.
Er kunnen ook gevallen zijn waarin waarschuwingen worden afgegeven, ook al is de code die is
gegenereerd is compatibel.

U moet uw code herschrijven om deze waarschuwingen te vermijden als u zich zorgen maakt over de
feit dat code gegenereerd door G++ mogelijk niet binair compatibel is met code gegenereerd door
andere samenstellers.

-Wabi kan ook worden gebruikt met een expliciet versienummer om te waarschuwen voor compatibiliteit
met een bepaalde -fabi-versie niveau, bijv -Wabi=2 om te waarschuwen voor wijzigingen ten opzichte van
-fabi-versie=2. Het opgeven van een versienummer wordt ook ingesteld -fabi-compat-versie=n.

De bekende onverenigbaarheden in -fabi-versie=2 (wat de standaard was van GCC 3.4 naar
4.9) omvatten:

* Een sjabloon met een niet-type sjabloonparameter van het referentietype is verminkt
verkeerd:

externe int N;
sjabloon structuur S {};
leegte n (S ) {2}

Dit is opgelost in -fabi-versie=3.

* SIMD-vectortypen gedeclareerd met "__attribute ((vector_size))" werden verminkt in a
niet-standaard manier die overbelasting van functies met vectoren niet toestaat
van verschillende maten.

De mangeling is veranderd in -fabi-versie=4.

* "__attribute ((const))" en "noreturn" werden verminkt als typekwalificaties, en
"decltype" van een gewone aangifte was weggevouwen.

Deze verminkingsproblemen zijn opgelost in -fabi-versie=5.

* Scoped enumerators die als argumenten aan een variadische functie worden doorgegeven, worden gepromoot zoals
unscoped enumerators, waardoor "va_arg" klaagt. Bij de meeste doelen is dit niet het geval
daadwerkelijk invloed hebben op de parameter die ABI doorgeeft, omdat er geen manier is om een ​​argument door te geven
kleiner dan "int".

Ook heeft de ABI het mangelen van pakketten met sjabloonargumenten gewijzigd, "const_cast",
"static_cast", prefix increment/decrement, en een class scope-functie gebruikt als a
sjabloon argument.

Deze problemen zijn verholpen in -fabi-versie=6.

* Lambda's in het bereik van het standaardargument zijn onjuist verminkt en de ABI is gewijzigd
het mangelen van "nullptr_t".

Deze problemen zijn verholpen in -fabi-versie=7.

* Bij het mangelen van een functietype met functie-cv-kwalificaties, wordt de niet-gekwalificeerde
functietype is ten onrechte behandeld als een kandidaat-vervanging.

Dit is opgelost in -fabi-versie=8.

Het waarschuwt ook voor psABI-gerelateerde veranderingen. De bekende psABI verandert op dit punt
omvatten:

* Voor SysV/x86-64 worden vakbonden met "lange dubbele" leden in het geheugen doorgegeven als
gespecificeerd in psABI. Bijvoorbeeld:

vakbond U {
lange dubbele ld;
int i;
};

"union U" wordt altijd doorgegeven in het geheugen.

-Wabi-tag (alleen C++ en Objective-C++)
Waarschuw wanneer een type met een ABI-tag wordt gebruikt in een context die die ABI-tag niet heeft.
Bekijk C + + Attributen voor meer informatie over ABI-tags.

-Wctor-dtor-privacy (alleen C++ en Objective-C++)
Waarschuw wanneer een klasse onbruikbaar lijkt omdat alle constructors of destructors daarin
class is privé en heeft geen vrienden- of openbare statische lidfuncties.
Waarschuw ook als er geen niet-privémethoden zijn en er minstens één privélid is
functie die geen constructor of destructor is.

-Wwis-niet-virtuele-dtor (alleen C++ en Objective-C++)
Waarschuwen wanneer "delete" wordt gebruikt om een ​​instantie van een klasse met virtual . te vernietigen
functies en niet-virtuele destructor. Het is onveilig om een ​​instantie van een afgeleid . te verwijderen
class via een pointer naar een basisklasse als de basisklasse geen virtual . heeft
vernietiger. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wliteral-achtervoegsel (alleen C++ en Objective-C++)
Waarschuw wanneer een tekenreeks of letterteken wordt gevolgd door een ud-achtervoegsel dat niet
beginnen met een onderstrepingsteken. Als een conforme extensie behandelt GCC dergelijke achtervoegsels als:
aparte preprocessing tokens om achterwaartse compatibiliteit met code te behouden
die opmaakmacro's gebruikt van " ". Bijvoorbeeld:

#define __STDC_FORMAT_MACROS
#erbij betrekken
# omvat

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

In dit geval wordt "PRId64" behandeld als een afzonderlijk preprocessing-token.

Deze waarschuwing is standaard ingeschakeld.

-vernauwing (alleen C++ en Objective-C++)
Waarschuwen wanneer een beperkende conversie die verboden is door C++11 plaatsvindt binnen { }, bijv

int ik = {2.2 }; // error: vernauwing van double naar int

Deze vlag is inbegrepen in: -Muur en -Wc++11-compatibel.

met -standaard=c++11, -Niet-vernauwing onderdrukt de door de norm vereiste diagnose.
Merk op dat dit geen invloed heeft op de betekenis van goed gevormde code; conversies verkleinen
worden nog steeds als slecht gevormd beschouwd in de SFINAE-context.

-Wnobehalve (alleen C++ en Objective-C++)
Waarschuwen wanneer een nobehalve-expressie evalueert naar onwaar vanwege een aanroep van een functie
die geen niet-gooiende uitzonderingsspecificatie heeft (dwz "throw()" of
"nobehalve"), maar de compiler staat erom bekend nooit een uitzondering te genereren.

-Wniet-virtuele-dtor (alleen C++ en Objective-C++)
Waarschuw wanneer een klasse virtuele functies en een toegankelijke niet-virtuele destructor heeft
zelf of in een toegankelijke polymorfe basisklasse, in welk geval het mogelijk is, maar
onveilig om een ​​instantie van een afgeleide klasse te verwijderen via een verwijzing naar de klasse zelf
of basisklasse. Deze waarschuwing wordt automatisch ingeschakeld als: -Weffc++ is gespecificeerd.

-Worden (alleen C++ en Objective-C++)
Waarschuw wanneer de volgorde van de ledeninitialisaties in de code niet overeenkomt met de volgorde
waarin ze moeten worden uitgevoerd. Bijvoorbeeld:

structuur A {
int i;
intj;
A(): j (0), ik (1) { }
};

De compiler herschikt de lidinitialisatoren voor "i" en "j" om overeen te komen met de
declaratievolgorde van de leden, met een daartoe strekkende waarschuwing. Deze waarschuwing is:
ingeschakeld door -Muur.

-fext-numerieke-letters (alleen C++ en Objective-C++)
Accepteer denkbeeldige, vast-komma of machine-gedefinieerde letterlijke achtervoegsels als GNU
uitbreidingen. Als deze optie is uitgeschakeld, worden deze achtervoegsels behandeld als C++11 user-
gedefinieerde letterlijke numerieke achtervoegsels. Dit is standaard ingeschakeld voor alle pre-C++11 dialecten
en alle GNU-dialecten: -standaard=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14. Deze
optie is standaard uitgeschakeld voor ISO C++11 en later (-standaard=c++11, ...).

De volgende -W... opties worden niet beïnvloed door: -Muur.

-Weffc++ (alleen C++ en Objective-C++)
Waarschuw voor schendingen van de volgende stijlrichtlijnen van Scott Meyers' effectief
C + + serie boeken:

* Definieer een kopieerconstructor en een toewijzingsoperator voor klassen met dynamisch-
toegewezen geheugen.

* Liever initialisatie dan toewijzing in constructors.

* Laat "operator=" een verwijzing naar *this retourneren.

* Probeer geen referentie te retourneren wanneer u een object moet retourneren.

* Maak onderscheid tussen prefix- en postfix-vormen van increment- en decrement-operators.

* Overbelast "&&", "||", of "," nooit.

Deze optie schakelt ook -Wniet-virtuele-dtor, wat ook een van de effectieve C++ . is
aanbevelingen. De controle wordt echter uitgebreid om te waarschuwen voor het ontbreken van virtuele
destructor ook in toegankelijke niet-polymorfe basenklassen.

Houd er bij het selecteren van deze optie rekening mee dat de standaard bibliotheekkoppen niet aan alle voldoen
van deze richtlijnen; gebruik maken van grep -v om die waarschuwingen eruit te filteren.

-Wstrict-null-schildwacht (alleen C++ en Objective-C++)
Waarschuw voor het gebruik van een niet-gecaste "NULL" als schildwacht. Bij het compileren alleen met GCC
dit is een geldige schildwacht, aangezien "NULL" is gedefinieerd als "__null". Hoewel het een nul is
pointerconstante in plaats van een null-pointer, het is gegarandeerd van dezelfde grootte
als aanwijzer. Maar dit gebruik is niet overdraagbaar tussen verschillende compilers.

-Wno-niet-sjabloon-vriend (alleen C++ en Objective-C++)
Schakel waarschuwingen uit wanneer niet-getempleerde vriendfuncties binnen een sjabloon worden gedeclareerd.
Sinds de komst van expliciete ondersteuning voor sjabloonspecificaties in G++, als de naam van de
vriend is een niet-gekwalificeerde id (dwz vriend foo(int)), de C++-taalspecificatie
vereist dat de vriend een gewone, niet-sjabloonfunctie verklaart of definieert. (Sectie
14.5.3). Voordat G++ expliciete specificatie implementeerde, konden niet-gekwalificeerde id's zijn:
geïnterpreteerd als een specifieke specialisatie van een sjabloonfunctie. Omdat dit
afwijkend gedrag is niet langer het standaardgedrag voor G++,
-Wnon-sjabloon-vriend stelt de compiler in staat om bestaande code te controleren op mogelijke problemen
spots en is standaard ingeschakeld. Dit nieuwe compilergedrag kan worden uitgeschakeld met
-Wno-niet-sjabloon-vriend, die de conforme compilercode behoudt, maar de . uitschakelt
nuttige waarschuwing.

-Wold-stijl-cast (alleen C++ en Objective-C++)
Waarschuw als een oude stijl (C-stijl) cast naar een niet-ongeldig type wordt gebruikt binnen een C++-programma.
De casts in nieuwe stijl ("dynamic_cast", "static_cast", "reinterpret_cast", en
"const_cast") zijn minder kwetsbaar voor onbedoelde effecten en veel gemakkelijker om naar te zoeken.

-Woverloaded-virtueel (alleen C++ en Objective-C++)
Waarschuwen wanneer een functiedeclaratie virtuele functies verbergt voor een basisklasse. Voor
bijvoorbeeld in:

structuur A {
virtuele leegte f();
};

struct B: openbaar A {
ongeldig f(int);
};

de "A" klasse versie van "f" is verborgen in "B", en code zoals:

B*b;
b->f();

compileren lukt niet.

-Wno-pmf-conversies (alleen C++ en Objective-C++)
Schakel de diagnose uit voor het converteren van een gebonden aanwijzer naar een lidfunctie naar een platte
wijzer.

-Wsign-promo (alleen C++ en Objective-C++)
Waarschuw wanneer de oplossing voor overbelasting een promotie kiest van het niet-ondertekende of opgesomde type tot
een ondertekend type, over een conversie naar een niet-ondertekend type van dezelfde grootte. Vorig
versies van G++ probeerden unsignedness te behouden, maar de standaard verplicht de huidige
gedrag.

Opties Controlling Doelstelling C en Objectief-C++ dialecten
(OPMERKING: deze handleiding beschrijft niet de talen Objective-C en Objective-C++)
zich.

Deze sectie beschrijft de opdrachtregelopties die alleen zinvol zijn voor Objective-C
en Objective-C++ programma's. U kunt ook de meeste taalonafhankelijke GNU
compiler opties. U kunt bijvoorbeeld een bestand compileren een_klas.m soortgelijk:

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

In dit voorbeeld -fgnu-looptijd is een optie die alleen bedoeld is voor Objective-C en Objective-C++
programma's; u kunt de andere opties gebruiken met elke taal die door GCC wordt ondersteund.

Merk op dat aangezien Objective-C een uitbreiding is van de C-taal, Objective-C-compilaties
kan ook opties gebruiken die specifiek zijn voor de C-front-end (bijv. -Wtraditioneel). Evenzo
Objective-C++-compilaties kunnen C++-specifieke opties gebruiken (bijv. -Wabi).

Hier is een lijst met opties die zijn: Slechts voor het compileren van Objective-C en Objective-C++
programma's:

-fconstante-string-klasse=naam van de klasse
Te gebruiken naam van de klasse als de naam van de klasse die moet worden geïnstantieerd voor elke letterlijke tekenreeks
opgegeven met de syntaxis "@"..."". De standaardklassenaam is "NXConstantString" als
de GNU-runtime wordt gebruikt, en "NSConstantString" als de NeXT-runtime wordt
gebruikt (zie hieronder). De -fconstante-cfstrings optie, indien ook aanwezig, overschrijft de
-fconstante-tekenreeksklasse instelling en ervoor zorgen dat "@"..."" letterlijke waarden worden opgemaakt als constant
CoreFoundation-snaren.

-fgnu-looptijd
Genereer objectcode die compatibel is met de standaard GNU Objective-C-runtime. Dit is
de standaard voor de meeste soorten systemen.

-fnext-runtime
Genereer output die compatibel is met de NeXT-runtime. Dit is de standaardinstelling voor op NeXT gebaseerde
systemen, waaronder Darwin en Mac OS X. De macro "__NEXT_RUNTIME__" is vooraf gedefinieerd als:
(en alleen als) deze optie wordt gebruikt.

-fno-nul-ontvangers
Neem aan dat alle Objective-C-berichten worden verzonden ("[receiver message:arg]") in deze
vertaaleenheid zorg ervoor dat de ontvanger niet "nihil" is. Dit zorgt voor meer
efficiënte ingangspunten in de te gebruiken runtime. Deze optie is alleen beschikbaar in
combinatie met de NeXT runtime en ABI versie 0 of 1.

-fobjc-abi-versie=n
Gebruik versie n van de Objective-C ABI voor de geselecteerde runtime. Deze optie is
momenteel alleen ondersteund voor de NeXT-runtime. In dat geval is versie 0 de
traditionele (32-bits) ABI zonder ondersteuning voor eigenschappen en andere Objective-C 2.0
toevoegingen. Versie 1 is de traditionele (32-bit) ABI met ondersteuning voor eigenschappen en
andere Objective-C 2.0 toevoegingen. Versie 2 is de moderne (64-bit) ABI. Als niets is
opgegeven, is de standaard versie 0 op 32-bits doelcomputers en versie 2 op 64-bit
doelmachines.

-fobjc-call-cxx-cdtors
Controleer voor elke Objective-C-klasse of een van de instantievariabelen een C++-object is
met een niet-triviale standaardconstructor. Als dat zo is, synthetiseer dan een speciale "- (id)
.cxx_construct" instantiemethode die niet-triviale standaardconstructors uitvoert op elke
dergelijke instantievariabelen, in volgorde, en retourneer vervolgens "zelf". Evenzo, controleer indien aanwezig
instantievariabele is een C++-object met een niet-triviale destructor, en zo ja, synthetiseren
een speciale "- (void) .cxx_destruct" methode die al dergelijke standaard destructors uitvoert, in
omgekeerde volgorde.

De methoden "- (id) .cxx_construct" en "- (void) .cxx_destruct" werden dus alleen gegenereerd
werken op instantievariabelen die zijn gedeclareerd in de huidige Objective-C-klasse, en niet op die
geërfd van superklassen. Het is de verantwoordelijkheid van de Objective-C-runtime om:
al dergelijke methoden in de overervingshiërarchie van een object aanroepen. Het ID)
.cxx_construct"-methoden worden aangeroepen door de runtime onmiddellijk na een nieuw object
instantie wordt toegewezen; de "- (void) .cxx_destruct" methoden worden onmiddellijk aangeroepen
voordat de runtime de toewijzing van een objectinstantie ongedaan maakt.

Op het moment van schrijven heeft alleen de NeXT-runtime op Mac OS X 10.4 en hoger ondersteuning voor:
het aanroepen van de "- (id) .cxx_construct" en "- (void) .cxx_destruct" methoden.

-fobjc-directe-verzending
Snelle sprongen naar de berichtverzender toestaan. Op Darwin gebeurt dit via de
com pagina.

-fobjc-uitzonderingen
Schakel syntactische ondersteuning in voor gestructureerde afhandeling van uitzonderingen in Objective-C, vergelijkbaar met:
wat wordt aangeboden door C++ en Java. Deze optie is vereist om de Objective-C . te gebruiken
trefwoorden @try, @throw, @catch, @finally en @synchronized. Deze optie is beschikbaar
met zowel de GNU-runtime als de NeXT-runtime (maar niet beschikbaar in combinatie met
de NeXT-runtime op Mac OS X 10.2 en eerder).

-fobjc-gc
Schakel garbage collection (GC) in in Objective-C- en Objective-C++-programma's. Deze optie
is alleen beschikbaar met de NeXT-runtime; de GNU-runtime heeft een andere rommel
collectie-implementatie waarvoor geen speciale compilervlaggen vereist zijn.

-fobjc-nilcheck
Controleer voor de NeXT-runtime met versie 2 van de ABI op een nulontvanger in de methode
aanroepen voordat u de daadwerkelijke methodeaanroep doet. Dit is de standaard en kan worden
uitgeschakeld met behulp van -fno-objc-nilcheck. Klassemethoden en superaanroepen worden nooit gecontroleerd
op deze manier voor nul, ongeacht waar deze vlag op is ingesteld. Momenteel doet deze vlag het
niets wanneer de GNU runtime, of een oudere versie van de NeXT runtime ABI, wordt gebruikt.

-fobjc-std=objc1
Conform de taalsyntaxis van Objective-C 1.0, de taal die wordt herkend door GCC 4.0.
Dit heeft alleen invloed op de Objective-C-toevoegingen aan de C/C++-taal; het heeft geen invloed op
conformiteit met C/C++-standaarden, die wordt gecontroleerd door het afzonderlijke C/C++-dialect
optie vlaggen. Wanneer deze optie wordt gebruikt met Objective-C of Objective-C++
compiler, wordt elke Objective-C-syntaxis die niet wordt herkend door GCC 4.0 afgewezen. Dit
is handig als u ervoor moet zorgen dat uw Objective-C-code kan worden gecompileerd met
oudere versies van GCC.

-freeplace-objc-klassen
Zend een speciale markering uit die instructies geeft ld(1) om het resulterende object niet statisch te linken
bestand, en sta toe dylde(1) om het in plaats daarvan tijdens runtime te laden. Dit wordt gebruikt in
combinatie met de foutopsporingsmodus Fix-and-Continue, waarbij het objectbestand in
vraag kan opnieuw worden gecompileerd en dynamisch opnieuw worden geladen in de loop van het programma
uitvoering, zonder dat u het programma zelf opnieuw hoeft te starten. Momenteel is Fix-and-
Doorgaan-functionaliteit is alleen beschikbaar in combinatie met de NeXT-runtime op Mac
OS X 10.3 en hoger.

-fzero-link
Bij het compileren voor de NeXT-runtime vervangt de compiler gewoonlijk oproepen naar:
"objc_getClass("...")" (wanneer de naam van de klasse bekend is tijdens het compileren) met
statische klassereferenties die worden geïnitialiseerd tijdens het laden, wat de runtime verbetert
uitvoering. Specificeren van de -fzero-link vlag onderdrukt dit gedrag en veroorzaakt
aanroepen naar "objc_getClass("...")" om te behouden. Dit is handig in Zero-Link
debugging-modus, omdat hiermee individuele klasse-implementaties kunnen worden gewijzigd
tijdens de uitvoering van het programma. De GNU-runtime behoudt momenteel altijd oproepen naar:
"objc_get_class("...")" ongeacht de opdrachtregelopties.

-fno-lokale-ivars
Standaard kunnen instantievariabelen in Objective-C worden benaderd alsof ze lokaal zijn
variabelen vanuit de methoden van de klasse waarin ze zijn gedeclareerd. Dit kan leiden tot:
schaduwen tussen instantievariabelen en andere variabelen die lokaal zijn gedeclareerd
binnen een klassenmethode of globaal met dezelfde naam. Specificeren van de -fno-lokale-ivars
flag schakelt dit gedrag uit, waardoor problemen met variabele schaduw worden vermeden.

-fivar-zichtbaarheid=[publiek|beschermd|privaat|pakket]
Stel de standaard zichtbaarheid van de instantievariabele in op de opgegeven optie, zodat instantie
variabelen gedeclareerd buiten het bereik van alle richtlijnen voor toegangsmodificatie standaard op de
gespecificeerde zichtbaarheid.

-gen-decls
Dump interface-declaraties voor alle klassen die in het bronbestand worden gezien naar een bestand met de naam
bronnaam.decl.

-Wassign-onderscheppen (Alleen Objective-C en Objective-C++)
Waarschuw wanneer een Objective-C-opdracht wordt onderschept door de vuilnisman.

-Wno-protocol (Alleen Objective-C en Objective-C++)
Als een klasse wordt gedeclareerd om een ​​protocol te implementeren, wordt voor elke methode een waarschuwing gegeven
in het protocol dat niet door de klas wordt geïmplementeerd. Het standaardgedrag is om
een waarschuwing geven voor elke methode die niet expliciet in de klasse is geïmplementeerd, zelfs als a
methode-implementatie is overgenomen van de superklasse. Als u de -Wno-protocol
optie, dan worden methoden die zijn geërfd van de superklasse als geïmplementeerd beschouwd,
en er wordt geen waarschuwing voor hen afgegeven.

-Wkiezer (Alleen Objective-C en Objective-C++)
Waarschuwen als meerdere methoden van verschillende typen voor dezelfde selector worden gevonden tijdens
compilatie. De controle wordt uitgevoerd op de lijst met methoden in de laatste fase van:
compilatie. Bovendien wordt een controle uitgevoerd voor elke selector die in een
"@selector(...)" expressie, en een corresponderende methode voor die selector is
gevonden tijdens het samenstellen. Omdat deze controles de methodetabel pas aan het einde scannen
van compilatie, worden deze waarschuwingen niet geproduceerd als de laatste fase van compilatie is
niet bereikt, bijvoorbeeld omdat er een fout is gevonden tijdens het compileren, of omdat de
-fsyntaxis-alleen optie wordt gebruikt.

-Wstrict-selector-overeenkomst (Alleen Objective-C en Objective-C++)
Waarschuw als er meerdere methoden met verschillende argument- en/of retourtypen worden gevonden voor a
gegeven selector bij een poging om een ​​bericht te verzenden met behulp van deze selector naar een ontvanger van
typ "id" of "Klasse". Wanneer deze vlag uit is (wat het standaardgedrag is), zal de
compiler laat dergelijke waarschuwingen weg als eventuele gevonden verschillen beperkt zijn tot typen die delen
dezelfde grootte en uitlijning.

-Wondeclared-selector (Alleen Objective-C en Objective-C++)
Waarschuwen als een "@selector(...)"-expressie die verwijst naar een niet-aangegeven selector wordt gevonden. EEN
selector wordt als niet gedeclareerd beschouwd als er nog geen methode met die naam is gedeclareerd
de uitdrukking "@selector(...)", expliciet in een @interface of @protocol
verklaring, of impliciet in een @implementation-sectie. Deze optie presteert altijd
zijn controles zodra een "@selector(...)"-expressie wordt gevonden, terwijl -Wkiezer Slechts
voert zijn controles uit in de laatste fase van de compilatie. Dit dwingt ook de codering af
stijlconventie dat methoden en selectors moeten worden gedeclareerd voordat ze worden gebruikt.

-print-object-runtime-info
Genereer een C-header die de grootste structuur beschrijft die door waarde wordt doorgegeven, indien aanwezig.

Opties naar Controle Diagnostisch Berichten opmaak
Traditioneel zijn diagnostische berichten geformatteerd, ongeacht het uitvoerapparaat
aspect (bijv. de breedte, ...). U kunt de hieronder beschreven opties gebruiken om de
opmaakalgoritme voor diagnostische berichten, bijv. hoeveel tekens per regel, hoe vaak
bronlocatie-informatie moet worden gerapporteerd. Merk op dat sommige taal-frontends mogelijk
deze opties niet respecteren.

-fbericht-lengte=n
Probeer foutmeldingen zo op te maken dat ze passen op regels van ongeveer n karakters. Indien n is
nul, dan wordt er geen line-wrapping gedaan; elke foutmelding verschijnt op een enkele regel.
Dit is de standaardinstelling voor alle frontends.

-fdiagnostics-show-location=eenmaal
Alleen zinvol in de modus voor regelterugloop. Instrueert de diagnostische berichten-reporter om:
bronlocatie-informatie uitzenden eens; dat wil zeggen, voor het geval het bericht te lang is om te passen
op een enkele fysieke lijn en moet worden ingepakt, wordt de bronlocatie niet uitgezonden
(als voorvoegsel) opnieuw, steeds opnieuw, in volgende vervolgregels. Dit is de
standaard gedrag.

-fdiagnostics-show-location=elke-regel
Alleen zinvol in de modus voor regelterugloop. Instrueert de diagnostische berichten-reporter om:
dezelfde bronlocatie-informatie uitzenden (als prefix) voor fysieke lijnen die resulteren
van het proces van het breken van een bericht dat te lang is om op een enkele regel te passen.

-fdiagnostics-kleur[=WANNEER]
-fno-diagnose-kleur
Gebruik kleur in diagnostiek. WANNEER is nooit, altijdof auto. De standaard hangt af van hoe:
de compiler is geconfigureerd, het kan een van de bovenstaande zijn WANNEER opties of ook
nooit if GCC_COLORS omgevingsvariabele is niet aanwezig in de omgeving, en auto
anders. auto betekent om alleen kleur te gebruiken als de standaardfout een terminal is. De
formulieren -fdiagnose-kleur en -fno-diagnose-kleur zijn aliassen voor
-fdiagnose-kleur=altijd en -fdiagnostics-color=nooit, Respectievelijk.

De kleuren worden gedefinieerd door de omgevingsvariabele GCC_COLORS. De waarde ervan is een dubbele
gescheiden lijst met mogelijkheden en Select Graphic Rendition (SGR) substrings. SGR
commando's worden geïnterpreteerd door de terminal of terminalemulator. (Zie het gedeelte in
de documentatie van uw tekstterminal voor toegestane waarden en hun betekenis als
karakterattributen.) Deze subtekenreekswaarden zijn gehele getallen in decimale weergave
en kan worden samengevoegd met puntkomma's. Veelvoorkomende waarden om samen te voegen zijn: 1 For
stoutmoedig, 4 voor onderstrepen, 5 voor knipperen, 7 voor inverse, 39 voor standaard voorgrondkleur, 30
naar 37 voor voorgrondkleuren, 90 naar 97 voor 16-kleurenmodus voorgrondkleuren, 38, 5, 0 naar
38, 5, 255 voor 88-kleuren en 256-kleuren modi voorgrondkleuren, 49 voor standaard achtergrond
kleur, 40 naar 47 voor achtergrondkleuren, 100 naar 107 voor achtergrondkleuren in 16 kleuren,
en 48, 5, 0 naar 48, 5, 255 voor achtergrondkleuren met 88 kleuren en 256 kleuren.

De standaard GCC_COLORS is

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

WAAR 01; 31 is vet rood, 01; 35 is vet magenta, 01; 36 is vet cyaan, 01; 32 is vet
groen en 01 is gewaagd. Instelling GCC_COLORS naar de lege tekenreeks schakelt kleuren uit.
Ondersteunde mogelijkheden zijn als volgt.

"fout="
SGR-subtekenreeks voor fout: markeringen.

"waarschuwing="
SGR-subtekenreeks voor waarschuwing: markeringen.

"note="
SGR-subtekenreeks voor opmerking: markeringen.

"caret="
SGR-substring voor caret-lijn.

"locus="
SGR-substring voor locatie-informatie, bestand:regel or bestand:regel:kolom enz.

"quote="
SGR-subtekenreeks voor informatie die tussen aanhalingstekens wordt afgedrukt.

-fno-diagnose-show-optie
Standaard bevat elke uitgezonden diagnose tekst die de opdrachtregeloptie aangeeft
die de diagnostiek direct aanstuurt (indien een dergelijke optie bij de diagnostiek bekend is)
machines). Specificeren van de -fno-diagnose-show-optie vlag onderdrukt dat
gedrag.

-fno-diagnostiek-show-caret
Standaard bevat elke uitgezonden diagnose de originele bronregel en een caret '^'
de kolom aangeeft. Deze optie onderdrukt deze informatie. De bronregel is
afgekapt tot n tekens, als de -fbericht-lengte=n optie wordt gegeven. Wanneer de uitvoer
wordt gedaan naar de terminal, is de breedte beperkt tot de breedte die wordt gegeven door de COLUMNS
omgevingsvariabele of, indien niet ingesteld, op de terminalbreedte.

Opties naar Aanvraag or Onderdrukken waarschuwingen
Waarschuwingen zijn diagnostische berichten die constructies rapporteren die niet inherent zijn aan
foutief zijn, maar die riskant zijn of erop wijzen dat er mogelijk een fout is geweest.

De volgende taalonafhankelijke opties schakelen geen specifieke waarschuwingen in, maar regelen de:
soorten diagnostiek geproduceerd door GCC.

-fsyntaxis-alleen
Controleer de code op syntaxisfouten, maar doe verder niets.

-fmax-fouten=n
Beperkt het maximum aantal foutmeldingen tot n, op welk punt GCC eerder terugvalt
dan proberen door te gaan met het verwerken van de broncode. Indien n is 0 (de standaard),
er is geen limiet aan het aantal geproduceerde foutmeldingen. Indien -Wfatal-fouten Ook
gespecificeerd, dan -Wfatal-fouten heeft voorrang op deze optie.

-w Blokkeer alle waarschuwingsberichten.

-fout
Maak van alle waarschuwingen fouten.

-Fout=
Maak van de opgegeven waarschuwing een fout. De specificatie voor een waarschuwing wordt toegevoegd;
bij voorbeeld -Werror=schakelaar draait de waarschuwingen gecontroleerd door -Wschakelaar in fouten.
Deze schakelaar heeft een negatieve vorm, om te worden gebruikt om te ontkennen -fout voor specifieke waarschuwingen;
bij voorbeeld -Wno-fout = schakelaar merken -Wschakelaar waarschuwingen zijn geen fouten, zelfs niet wanneer -fout
van kracht is.

Het waarschuwingsbericht voor elke beheersbare waarschuwing bevat de optie waarmee:
de waarschuwing. Die optie kan dan worden gebruikt met -Fout= en -Wno-fout= zoals beschreven
bovenstaand. (Het afdrukken van de optie in het waarschuwingsbericht kan worden uitgeschakeld met de
-fno-diagnose-show-optie vlag.)

Merk op dat het specificeren van -Fout=foo impliceert automatisch -Wfoo. Echter, -Wno-fout=foo
stelt niets voor.

-Wfatal-fouten
Deze optie zorgt ervoor dat de compiler de compilatie afbreekt bij de eerste fout die zich voordeed
in plaats van te proberen door te gaan en verdere foutmeldingen af ​​te drukken.

U kunt veel specifieke waarschuwingen aanvragen met opties die beginnen met -WBijvoorbeeld
-Wimpliciet om waarschuwingen te vragen over impliciete verklaringen. Elk van deze specifieke waarschuwingen
opties heeft ook een negatieve vorm begin -Wnee- om waarschuwingen uit te schakelen; bijvoorbeeld,
-Wno-impliciet. Deze handleiding vermeldt slechts één van de twee vormen, welke niet de standaard is.
Zie voor meer taalspecifieke opties ook: C + + tongval Opties en Doelstelling C
en Objectief-C++ tongval Opties.

Sommige opties, zoals: -Muur en -Wextra, schakel andere opties in, zoals -Wongebruikt, welke
kan andere opties inschakelen, zoals: -Wunused-waarde. Het gecombineerde effect van positieve en
negatieve vormen is dat meer specifieke opties voorrang hebben op minder specifieke,
onafhankelijk van hun positie in de opdrachtregel. Voor opties met dezelfde specificiteit,
de laatste treedt in werking. Opties in- of uitgeschakeld via pragma's worden van kracht alsof ze
verscheen aan het einde van de opdrachtregel.

Wanneer een niet-herkende waarschuwingsoptie wordt gevraagd (bijv. -Onbekende-waarschuwing), zendt GCC a . uit
diagnostic waarin staat dat de optie niet wordt herkend. Als de -Wnee- formulier wordt gebruikt,
het gedrag is iets anders: er wordt geen diagnose voor gemaakt -Wno-onbekend-waarschuwing
tenzij andere diagnostiek wordt geproduceerd. Dit maakt het gebruik van nieuwe -Wnee- opties
met oude compilers, maar als er iets misgaat, waarschuwt de compiler dat een niet-herkende
optie aanwezig is.

-Wpedant
-pedant
Geef alle waarschuwingen die worden vereist door strikte ISO C en ISO C++; weiger alle programma's die
gebruik verboden extensies en sommige andere programma's die ISO C en ISO niet volgen
C++. Voor ISO C volgt de versie van de ISO C-norm gespecificeerd door any -soa
optie gebruikt.

Geldige ISO C- en ISO C++-programma's moeten correct worden gecompileerd, met of zonder deze optie
(hoewel een paar zeldzame vereisen) -ansi of -soa optie die de vereiste versie van specificeert
ISOC). Zonder deze optie kunnen echter bepaalde GNU-extensies en traditionele C en
C++-functies worden ook ondersteund. Met deze optie worden ze afgewezen.

-Wpedant veroorzaakt geen waarschuwingsberichten voor het gebruik van de alternatieve trefwoorden waarvan
namen beginnen en eindigen met __. Pedantische waarschuwingen zijn ook uitgeschakeld in de uitdrukking
die volgt op "__extensie__". Alleen systeemkopbestanden mogen deze echter gebruiken
vluchtroutes; toepassingsprogramma's moeten ze vermijden.

Sommige gebruikers proberen te gebruiken -Wpedant om programma's te controleren op strikte ISO C-conformiteit. Zij
ontdekken al snel dat het niet helemaal doet wat ze willen: het vindt een aantal niet-ISO-praktijken,
maar niet alle --- alleen die waarvoor ISO C vereist een diagnose, en enkele anderen voor
welke diagnostiek zijn toegevoegd.

Een functie om elke niet-naleving van ISO C te melden, kan in sommige gevallen nuttig zijn,
maar zou aanzienlijk meer werk vergen en zou heel anders zijn dan
-Wpedant. We hebben geen plannen om een ​​dergelijke functie in de nabije toekomst te ondersteunen.

Waar de norm gespecificeerd met -soa staat voor een GNU uitgebreid dialect van C, zoals
gnu90 or gnu99, er is een overeenkomstige baseren standaard, de versie van ISO C waarop:
het uitgebreide GNU-dialect is gebaseerd. Waarschuwingen van -Wpedant worden gegeven waar ze zijn
vereist door de basisnorm. (Het heeft geen zin om zulke waarschuwingen te geven)
alleen voor functies die niet in het gespecificeerde GNU C-dialect zijn, aangezien per definitie de GNU
dialecten van C bevatten alle functies die de compiler ondersteunt met de gegeven optie, en
er zou niets zijn om voor te waarschuwen.)

-pedant-fouten
Geef een fout wanneer de baseren standaard (Zie -Wpedant) vereist een diagnose, in
sommige gevallen waarin er ongedefinieerd gedrag is tijdens het compileren en in sommige andere gevallen
die het compileren van programma's die volgens de norm geldig zijn niet in de weg staan.
Dit is niet gelijk aan -Werror = pedant, aangezien er hierdoor fouten mogelijk zijn
optie en niet ingeschakeld door de laatste en vice versa.

-Muur
Dit maakt alle waarschuwingen over constructies mogelijk die sommige gebruikers overwegen
twijfelachtig zijn, en die gemakkelijk te vermijden zijn (of aan te passen om de waarschuwing te voorkomen), zelfs in
combinatie met macro's. Dit maakt ook enkele taalspecifieke waarschuwingen mogelijk die worden beschreven
in C + + tongval Opties en Doelstelling C en Objectief-C++ tongval Opties.

-Muur schakelt de volgende waarschuwingsvlaggen in:

-Wadres -Warray-grenzen = 1 (alleen met -O2) -Wc++11-compatibel -Wc++14-compatibel
-Wchar-abonnementen -Wenum-vergelijken (in C/ObjC; dit staat standaard aan in C++)
-Wimpliciet-int (alleen C en Objective-C) -Wimplicit-functie-declaratie (C en
Alleen Objectief-C) -Wcommentaar -Wformaat -Wbelangrijk (alleen voor C/ObjC en tenzij
-vrijstaand) -Wmisschien-niet-geïnitialiseerd -Wmissing-bretels (alleen voor C/ObjC) -Wnonnull
-Wopenmp-simd - Tussen haakjes -Wpointer-teken -Worden -Wretour-type -Wvolgorde-punt
-Wsign-vergelijk (alleen in C++) -Wstrict-aliasing -Wstrict-overloop=1 -Wschakelaar
-Schrijven -Geïnitialiseerd -Wunknown-pragma's -Wunused-functie -Wongebruikt-label
-Wunused-waarde -Wunused-variabele -Wvluchtig-register-var

Merk op dat sommige waarschuwingsvlaggen niet worden geïmpliceerd door: -Muur. Sommigen van hen waarschuwen voor:
constructies die gebruikers over het algemeen niet twijfelachtig vinden, maar die
af en toe wilt u misschien controleren op; anderen waarschuwen voor constructies die
in sommige gevallen noodzakelijk of moeilijk te vermijden, en er is geen eenvoudige manier om de
code om de waarschuwing te onderdrukken. Sommigen van hen worden ingeschakeld door: -Wextra maar veel van hen
moeten afzonderlijk worden ingeschakeld.

-Wextra
Dit maakt enkele extra waarschuwingsvlaggen mogelijk die niet zijn ingeschakeld door -Muur. (Deze optie gebruikt
genoemd te worden -W. De oudere naam wordt nog steeds ondersteund, maar de nieuwere naam is meer
beschrijvend.)

-Wingewikkeld -Weeg lichaam -Wignored-kwalificaties -Wmissing-veld-initializers
-Ontbrekend-parametertype (alleen C) -Wold-stijl-verklaring (alleen C) -Woverride-init
-Wsign-vergelijk -Wtype-limieten -Geïnitialiseerd -Wunused-parameter (alleen met -Wongebruikt or
-Muur) -Wunused-maar-set-parameter (alleen met -Wongebruikt or -Muur)

De optie -Wextra drukt ook waarschuwingsberichten af ​​voor de volgende gevallen:

* Een pointer wordt vergeleken met geheel getal nul met "<", "<=", ">" of ">=".

* (Alleen C++) Een enumerator en een niet-enumerator verschijnen beide in een voorwaardelijke
expressie.

* (alleen C++) Dubbelzinnige virtuele bases.

* (Alleen C++) Subscripting van een array die is gedeclareerd als "register".

* (Alleen C++) Het adres nemen van een variabele die als "register" is gedeclareerd.

* (Alleen C++) Een basisklasse wordt niet geïnitialiseerd in de kopieerconstructor van een afgeleide klasse.

-Wchar-abonnementen
Waarschuwen als een array-subscript het type "char" heeft. Dit is een veelvoorkomende oorzaak van fouten, zoals:
programmeurs vergeten vaak dat dit type op sommige machines is ondertekend. Deze waarschuwing is:
ingeschakeld door -Muur.

-Wcommentaar
Waarschuwen wanneer een commentaar-startreeks /* verschijnt in a /* commentaar, of wanneer een
Backslash-Newline verschijnt in a // opmerking. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wno-dekking-mismatch
Waarschuw als feedbackprofielen niet overeenkomen bij gebruik van de -fprofile-gebruik optie. Als een
bronbestand is gewijzigd tussen compileren met -fprofile-gen en -fprofile-gebruik,
de bestanden met de profielfeedback komen mogelijk niet overeen met het bronbestand en GCC kan dit niet
gebruik de profielfeedbackinformatie. Deze waarschuwing is standaard ingeschakeld en is
behandeld als een fout. -Wno-dekking-mismatch kan worden gebruikt om de waarschuwing uit te schakelen of
-Wno-error=dekking-mismatch kan worden gebruikt om de fout uit te schakelen. De fout uitschakelen
want deze waarschuwing kan resulteren in slecht geoptimaliseerde code en is alleen nuttig in het geval van:
zeer kleine wijzigingen zoals bugfixes in een bestaande codebasis. Volledig uitschakelen
de waarschuwing wordt niet aanbevolen.

-Wno-cpp
(alleen C, Objective-C, C++, Objective-C++ en Fortran)

Onderdruk waarschuwingsberichten die worden uitgezonden door "#warning"-richtlijnen.

-Wdubbele-promotie (alleen C, C++, Objective-C en Objective-C++)
Geef een waarschuwing wanneer een waarde van het type "float" impliciet wordt gepromoveerd tot "double". CPU's
met een 32-bits "single-precision" drijvende-kommaeenheid "zweven" in hardware,
maar emuleer "dubbel" in software. Op zo'n machine, berekeningen uitvoeren met
"dubbele" waarden zijn veel duurder vanwege de overhead die nodig is voor software
emulatie.

Het is gemakkelijk om per ongeluk berekeningen uit te voeren met "dubbel", omdat drijvende-komma
letterlijke zijn impliciet van het type "dubbel". Bijvoorbeeld bij:

vlottergebied (drijvende straal)
{
retour 3.14159 * straal * straal;
}

de compiler voert de hele berekening uit met "dubbel" omdat de drijvende-komma
letterlijk is een "dubbel".

-Wformaat
-Wformaat=n
Controleer aanroepen naar "printf" en "scanf", enz., om er zeker van te zijn dat de opgegeven argumenten
typen hebben die geschikt zijn voor de opgegeven formaattekenreeks, en dat de conversies
gespecificeerd in de opmaakreeks zinvol. Dit omvat standaardfuncties, en
andere gespecificeerd door formaatkenmerken, in de "printf", "scanf", "strftime" en
"strfmon" (een X/Open-extensie, niet in de C-standaard) families (of andere doel-
bepaalde gezinnen). Welke functies worden gecontroleerd zonder formaatattributen?
gespecificeerd hangt af van de geselecteerde standaardversie en dergelijke controles van functies
zonder het opgegeven kenmerk worden uitgeschakeld door -vrijstaand or -fno-ingebouwd.

De formaten worden vergeleken met de formaatkenmerken die worden ondersteund door GNU libc versie 2.2.
Deze omvatten alle ISO C90- en C99-functies, evenals functies van de Single Unix
Specificatie en enkele BSD- en GNU-extensies. Andere bibliotheekimplementaties mogelijk niet
al deze functies ondersteunen; GCC ondersteunt geen waarschuwing over functies die verder gaan dan
de beperkingen van een bepaalde bibliotheek. Echter, als -Wpedant wordt gebruikt met -Wformaat,
waarschuwingen worden gegeven over formaatfuncties die niet in de geselecteerde standaardversie zijn (maar niet
voor "strfmon"-formaten, aangezien deze in geen enkele versie van de C-standaard voorkomen).

-Wformaat=1
-Wformaat
Keuze -Wformaat is gelijk aan -Wformaat=1 en -Wno-formaat is gelijk aan
-Wformaat=0. Sinds -Wformaat controleert ook op null-formaatargumenten voor meerdere
functies -Wformaat houdt ook in -Wnonnull. Enkele aspecten van dit formaat
controle kan worden uitgeschakeld door de opties: -Wno-formaat-bevat-nul,
-Wgeen-formaat-extra-args en -Wno-formaat-nul-lengte. -Wformaat is ingeschakeld door
-Muur.

-Wno-formaat-bevat-nul
If -Wformaat is opgegeven, waarschuwt u niet voor tekenreeksen die NUL-bytes bevatten.

-Wgeen-formaat-extra-args
If -Wformaat is opgegeven, waarschuw niet voor overtollige argumenten naar een "printf" of
"scanf" formaat functie. De C-standaard specificeert dat dergelijke argumenten zijn
buiten beschouwing gelaten.

Waar de ongebruikte argumenten liggen tussen gebruikte argumenten die zijn opgegeven met $
operandnummerspecificaties, normaal worden er nog steeds waarschuwingen gegeven, aangezien de
implementatie kon niet weten welk type door te geven aan "va_arg" om het ongebruikte over te slaan
argumenten. In het geval van "scanf"-formaten onderdrukt deze optie echter de
waarschuwing als de ongebruikte argumenten allemaal pointers zijn, aangezien de Single Unix
Specificatie zegt dat dergelijke ongebruikte argumenten zijn toegestaan.

-Wno-formaat-nul-lengte
If -Wformaat is opgegeven, waarschuw niet voor formaten met een lengte van nul. De C-standaard
geeft aan dat formaten met een lengte nul zijn toegestaan.

-Wformaat=2
Enable -Wformaat plus extra formaatcontroles. Momenteel gelijk aan -Wformaat
-Wformat-niet-letterlijk -Wformat-beveiliging -Wformat-y2k.

-Wformat-niet-letterlijk
If -Wformaat is opgegeven, waarschuw ook als de notatietekenreeks geen letterlijke tekenreeks is
en kan dus niet worden gecontroleerd, tenzij de formaatfunctie zijn formaatargumenten aanneemt als
een "va_list".

-Wformat-beveiliging
If -Wformaat is opgegeven, waarschuw ook voor het gebruik van formaatfuncties die vertegenwoordigen
mogelijke beveiligingsproblemen. Op dit moment waarschuwt dit voor oproepen naar "printf" en
"scanf" functies waarbij de format string geen letterlijke string is en er geen
formaatargumenten, zoals in "printf (foo);". Dit kan een beveiligingslek zijn als de
format string kwam van niet-vertrouwde invoer en bevat %n. (Dit is momenteel een
subset van wat -Wformat-niet-letterlijk waarschuwt, maar in de toekomst kunnen waarschuwingen
toegevoegd -Wformat-beveiliging die niet zijn inbegrepen in -Wformat-niet-letterlijk.)

-Wformat-ondertekening
If -Wformaat is opgegeven, waarschuw ook als de opmaakstring een unsigned . vereist
argument en het argument is ondertekend en vice versa.

OPMERKING: In Ubuntu 8.10 en latere versies is deze optie standaard ingeschakeld voor C,
C++, ObjC, ObjC++. Gebruik . om uit te schakelen -Wno-formaat-beveiligingof schakel alle formaten uit
waarschuwingen met -Wformaat=0. Om formaatbeveiligingswaarschuwingen fataal te maken, specificeert u:
-Werror=format-beveiliging.

-Wformat-y2k
If -Wformaat is opgegeven, waarschuw ook voor "strftime"-indelingen die mogelijk slechts a
jaartal van twee cijfers.

-Wnonnull
Waarschuw voor het doorgeven van een null-aanwijzer voor argumenten die zijn gemarkeerd als een niet-null-waarde
door het functiekenmerk "nonnull".

-Wnonnull is inbegrepen in -Muur en -Wformaat. Het kan worden uitgeschakeld met de -Wno-niet-null
optie.

-Winit-zelf (alleen C, C++, Objective-C en Objective-C++)
Waarschuw voor niet-geïnitialiseerde variabelen die met zichzelf zijn geïnitialiseerd. Let op:
optie kan alleen worden gebruikt met de -Geïnitialiseerd optie.

GCC waarschuwt bijvoorbeeld dat 'i' alleen in het volgende fragment wordt geïnitialiseerd:
wanneer -Winit-zelf is opgegeven:

intf()
{
int ik = ik;
retour ik;
}

Deze waarschuwing is mogelijk gemaakt door: -Muur in C++.

-Wimpliciet-int (alleen C en Objective-C)
Waarschuwen wanneer een aangifte geen type specificeert. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wimplicit-functie-declaratie (alleen C en Objective-C)
Geef een waarschuwing wanneer een functie wordt gebruikt voordat deze wordt gedeclareerd. In C99-modus
(-standaard=c99 or -standaard=gnu99), is deze waarschuwing standaard ingeschakeld en is er een
fout door -pedant-fouten. Deze waarschuwing wordt ook ingeschakeld door: -Muur.

-Wimpliciet (alleen C en Objective-C)
Hetzelfde als -Wimpliciet-int en -Wimplicit-functie-declaratie. Deze waarschuwing is ingeschakeld
by -Muur.

-Wignored-kwalificaties (alleen C en C++)
Waarschuwen als het retourtype van een functie een typekwalificatie heeft zoals "const". Voor ISO C
zo'n typekwalificatie heeft geen effect, omdat de waarde die door een functie wordt geretourneerd geen is
waarde. Voor C++ wordt de waarschuwing alleen uitgezonden voor scalaire typen of "void". ISO C
verbiedt gekwalificeerde "ongeldige" retourtypen voor functiedefinities, dus dergelijke retourtypen
ontvang altijd een waarschuwing, ook zonder deze optie.

Deze waarschuwing wordt ook ingeschakeld door: -Wextra.

-Wbelangrijk
Waarschuw als het type "hoofd" verdacht is. "main" moet een functie zijn met external
linkage, retourneert int, waarbij ofwel nul argumenten, twee of drie argumenten van
passende soorten. Deze waarschuwing is standaard ingeschakeld in C++ en wordt ingeschakeld door ofwel:
-Muur or -Wpedant.

-Wmissing-bretels
Waarschuwen als een aggregaat of unie-initialisatie niet volledig tussen haakjes staat. In de volgende
de initialisatie voor "a" staat bijvoorbeeld niet volledig tussen haakjes, maar die voor "b" is volledig
tussen haakjes. Deze waarschuwing is mogelijk gemaakt door: -Muur in C.

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

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Ontbrekende-include-dirs (alleen C, C++, Objective-C en Objective-C++)
Waarschuwen als een door de gebruiker aangeleverde include-map niet bestaat.

- Tussen haakjes
Waarschuw als haakjes worden weggelaten in bepaalde contexten, zoals wanneer er een
toewijzing in een context waarin een waarheidswaarde wordt verwacht, of wanneer operators genest zijn
wiens voorrang mensen vaak in de war raken.

Waarschuw ook als een vergelijking zoals "x<=y<=z" verschijnt; dit komt overeen met "(x<=y ? 1 :
0) <= z", wat een andere interpretatie is dan die van gewone wiskundige
notatie.

Waarschuw ook voor constructies waarbij verwarring kan bestaan ​​over welke "if"-instructie en
"else" tak behoort. Hier is een voorbeeld van zo'n geval:

{
als een)
als (b)
hoezo ();
anders
bar ();
}

In C/C++ behoort elke "else" -tak tot de binnenste mogelijke "if" -instructie, die
in dit voorbeeld is "if (b)". Dit is vaak niet wat de programmeur verwachtte, want
geïllustreerd in het bovenstaande voorbeeld door inspringing die de programmeur heeft gekozen. wanneer er is
het potentieel voor deze verwarring, geeft GCC een waarschuwing af wanneer deze vlag wordt gespecificeerd.
Om de waarschuwing te verwijderen, voegt u expliciete accolades toe rond de binnenste "if"-instructie, dus
het "anders" kan op geen enkele manier bij het omsluitende "als" horen. De resulterende code ziet er uit
soortgelijk:

{
als een)
{
als (b)
hoezo ();
anders
bar ();
}
}

Waarschuw ook voor gevaarlijk gebruik van de GNU-extensie naar "?:" met weggelaten middelste operand.
Als de voorwaarde in de "?":-operator een booleaanse uitdrukking is, is de weggelaten waarde
altijd 1. Vaak verwachten programmeurs dat het een waarde is die wordt berekend in de voorwaardelijke
uitdrukking in plaats daarvan.

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wvolgorde-punt
Waarschuw voor code die mogelijk ongedefinieerde semantiek heeft vanwege schendingen van de volgorde
puntregels in de C- en C++-normen.

De C- en C++-standaarden definiëren de volgorde waarin uitdrukkingen in een C/C++-programma zijn
beoordeeld in termen van volgorde punten, die een gedeeltelijke ordening vertegenwoordigen tussen de
uitvoering van delen van het programma: die welke worden uitgevoerd vóór het volgordepunt, en die
daarna uitgevoerd. Deze treden op na de evaluatie van een volledige uitdrukking (een die
maakt geen deel uit van een grotere uitdrukking), na de evaluatie van de eerste operand van a
"&&", "||", "? :" of "," (komma) operator, voordat een functie wordt aangeroepen (maar na de
evaluatie van zijn argumenten en de uitdrukking die de aangeroepen functie aangeeft), en in
bepaalde andere plaatsen. Anders dan zoals uitgedrukt door de volgordepuntregels, is de volgorde
van evaluatie van subexpressies van een expressie is niet gespecificeerd. Al deze regels
beschrijf alleen een gedeeltelijke bestelling in plaats van een totale bestelling, omdat bijvoorbeeld als twee
functies worden aangeroepen binnen één uitdrukking zonder sequentiepunt ertussen, de
volgorde waarin de functies worden aangeroepen is niet gespecificeerd. Echter, de normen
commissie hebben geoordeeld dat functieaanroepen elkaar niet overlappen.

Het is niet gespecificeerd wanneer tussen reekspunten wijzigingen aan de waarden van
objecten treden in werking. Programma's waarvan het gedrag hiervan afhangt, vertonen ongedefinieerd gedrag;
de C- en C++-normen specificeren dat "Tussen het vorige en volgende sequentiepunt an
object zal zijn opgeslagen waarde hoogstens één keer gewijzigd hebben door de evaluatie van een
uitdrukking. Bovendien moet de eerdere waarde alleen worden gelezen om de waarde te bepalen tot
worden opgeslagen.". Als een programma deze regels overtreedt, worden de resultaten op een bepaald
uitvoering zijn volledig onvoorspelbaar.

Voorbeelden van code met ongedefinieerd gedrag zijn "a = a++;", "a[n] = b[n++]" en "a[i++] =
i;". Sommige meer gecompliceerde gevallen worden niet gediagnosticeerd door deze optie, en het kan een
af en toe een vals-positief resultaat, maar over het algemeen is het redelijk effectief gebleken bij:
het detecteren van dit soort problemen in programma's.

De norm is verwarrend geformuleerd, daarom is er enige discussie over de precieze
betekenis van de volgordepuntregels in subtiele gevallen. Links naar discussies over de
probleem, inclusief voorgestelde formele definities, zijn te vinden op de GCC-leespagina,
Bijhttp://gcc.gnu.org/readings.html>.

Deze waarschuwing is mogelijk gemaakt door: -Muur voor C en C++.

-Wno-retour-lokale-addr
Waarschuw niet voor het retourneren van een aanwijzer (of in C++, een verwijzing) naar een variabele die gaat
buiten bereik nadat de functie is geretourneerd.

-Wretour-type
Waarschuw wanneer een functie is gedefinieerd met een retourtype dat standaard is ingesteld op "int". Ook
waarschuwen voor elke "return"-instructie zonder retourwaarde in een functie waarvan het retourtype
is niet "leeg" (van het einde van de functie-body vallen wordt beschouwd als terugkerend)
zonder waarde), en over een "return"-statement met een expressie in een functie
waarvan het retourtype "ongeldig" is.

Voor C++ produceert een functie zonder retourtype altijd een diagnostisch bericht, zelfs
wanneer -Wno-retourtype is gespecificeerd. De enige uitzonderingen zijn "hoofd" en functies
gedefinieerd in systeemkoppen.

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wshift-telling-negatief
Waarschuw als het aantal ploegen negatief is. Deze waarschuwing is standaard ingeschakeld.

-Wshift-telling-overloop
Waarschuwen als aantal ploegen >= breedte van type. Deze waarschuwing is standaard ingeschakeld.

-Wschakelaar
Waarschuwen wanneer een "switch"-instructie een index van het opgesomde type heeft en geen "case" heeft
voor een of meer van de genoemde codes van die opsomming. (De aanwezigheid van een "standaard"
label voorkomt deze waarschuwing.) "case"-labels buiten het opsommingsbereik ook
waarschuwingen uitlokken wanneer deze optie wordt gebruikt (zelfs als er een "standaard" label is). Dit
waarschuwing is ingeschakeld door -Muur.

-Wswitch-standaard
Waarschuw wanneer een "switch"-instructie geen "standaard" case heeft.

-Wswitch-opsomming
Waarschuwen wanneer een "switch"-instructie een index van het opgesomde type heeft en geen "case" heeft
voor een of meer van de genoemde codes van die opsomming. "case"-labels buiten de
opsommingsbereik veroorzaken ook waarschuwingen wanneer deze optie wordt gebruikt. Het enige verschil
tussen -Wschakelaar en deze optie is dat deze optie een waarschuwing geeft over een weggelaten
opsommingscode, zelfs als er een "standaard" label is.

-Wswitch-bool
Waarschuw wanneer een "switch"-instructie een index van het booleaanse type heeft. Het is mogelijk om
onderdruk deze waarschuwing door de controlerende expressie te casten naar een ander type dan
"boei". Bijvoorbeeld:

schakelaar ((int) (a == 4))
{
...
}

Deze waarschuwing is standaard ingeschakeld voor C- en C++-programma's.

-Wsync-nand (alleen C en C++)
Waarschuwen wanneer de ingebouwde functies "__sync_fetch_and_nand" en "__sync_nand_and_fetch" zijn
gebruikt. Deze functies hebben de semantiek gewijzigd in GCC 4.4.

-Schrijven
Waarschuw als er trigraphs worden aangetroffen die de betekenis van het programma kunnen veranderen
(trigraphs in opmerkingen worden niet gewaarschuwd). Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wunused-maar-set-parameter
Waarschuw wanneer een functieparameter is toegewezen aan, maar verder niet wordt gebruikt (afgezien van
zijn verklaring).

Gebruik het attribuut "unused" om deze waarschuwing te onderdrukken.

Deze waarschuwing wordt ook ingeschakeld door: -Wongebruikt met -Wextra.

-Wunused-maar-set-variabele
Waarschuw wanneer een lokale variabele is toegewezen aan, maar verder niet wordt gebruikt (afgezien van zijn
verklaring). Deze waarschuwing is mogelijk gemaakt door: -Muur.

Gebruik het attribuut "unused" om deze waarschuwing te onderdrukken.

Deze waarschuwing wordt ook ingeschakeld door: -Wongebruikt, die is ingeschakeld door -Muur.

-Wunused-functie
Waarschuwen wanneer een statische functie is gedeclareerd maar niet gedefinieerd of een niet-inline statische functie
functie is ongebruikt. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wongebruikt-label
Waarschuw wanneer een label wordt aangegeven maar niet wordt gebruikt. Deze waarschuwing is mogelijk gemaakt door: -Muur.

Gebruik het attribuut "unused" om deze waarschuwing te onderdrukken.

-Wunused-local-typedefs (alleen C, Objective-C, C++ en Objective-C++)
Waarschuwen wanneer een typedef lokaal gedefinieerd in een functie niet wordt gebruikt. Deze waarschuwing is:
ingeschakeld door -Muur.

-Wunused-parameter
Waarschuw wanneer een functieparameter niet wordt gebruikt, afgezien van de declaratie.

Gebruik het attribuut "unused" om deze waarschuwing te onderdrukken.

-Wno-ongebruikt-resultaat
Waarschuw niet als een aanroeper van een functie gemarkeerd met attribuut "warn_unused_result" dit doet
de retourwaarde niet gebruiken. De standaard is -Wunused-resultaat.

-Wunused-variabele
Waarschuw wanneer een lokale variabele of niet-constante statische variabele niet wordt gebruikt, afgezien van:
zijn verklaring. Deze waarschuwing is mogelijk gemaakt door: -Muur.

Gebruik het attribuut "unused" om deze waarschuwing te onderdrukken.

-Wunused-waarde
Waarschuwen wanneer een instructie een resultaat berekent dat expliciet niet wordt gebruikt. Onderdrukken
deze waarschuwing wierp de ongebruikte expressie op "void". Dit omvat een uitdrukking-
uitspraak of de linkerkant van een komma-uitdrukking die geen bijwerkingen bevat.
Een uitdrukking zoals "x[i,j]" veroorzaakt bijvoorbeeld een waarschuwing, terwijl "x[(void)i,j]"
doet niet.

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wongebruikt
Alle bovenstaande -Wongebruikt opties gecombineerd.

Om een ​​waarschuwing te krijgen over een ongebruikte functieparameter, moet u ofwel:
-Wextra -Wongebruikt (Let daar op -Muur impliceert -Wongebruikt), of apart specificeren
-Wunused-parameter.

-Geïnitialiseerd
Waarschuwen als een automatische variabele wordt gebruikt zonder eerst te zijn geïnitialiseerd of als een variabele
kan worden belaagd door een "setjmp" -aanroep. Waarschuw in C++ als een niet-statische verwijzing of niet-
statisch "const" lid verschijnt in een klasse zonder constructors.

Als u wilt waarschuwen voor code die gebruikmaakt van de niet-geïnitialiseerde waarde van de variabele in
zijn eigen initialisatie, gebruik de -Winit-zelf optie.

Deze waarschuwingen treden op voor individuele niet-geïnitialiseerde of gehackte elementen van structuur,
unie- of arrayvariabelen, evenals voor variabelen die niet zijn geïnitialiseerd of onleesbaar zijn
Als geheel. Ze komen niet voor bij variabelen of elementen die als "vluchtig" zijn verklaard. Omdat
deze waarschuwingen zijn afhankelijk van optimalisatie, de exacte variabelen of elementen waarvoor er
zijn waarschuwingen hangt af van de precieze optimalisatie-opties en de gebruikte versie van GCC.

Merk op dat er mogelijk geen waarschuwing is over een variabele die alleen wordt gebruikt om a . te berekenen
waarde die zelf nooit wordt gebruikt, omdat dergelijke berekeningen door de gegevensstroom kunnen worden verwijderd
analyse voordat de waarschuwingen worden afgedrukt.

-Wmisschien-niet-geïnitialiseerd
Voor een automatische variabele, als er een pad bestaat van de functie-invoer naar een gebruik van
de variabele die is geïnitialiseerd, maar er zijn enkele andere paden waarvoor de
variabele niet is geïnitialiseerd, geeft de compiler een waarschuwing als het niet kan bewijzen dat de
niet-geïnitialiseerde paden worden niet uitgevoerd tijdens runtime. Deze waarschuwingen zijn optioneel gemaakt
omdat GCC niet slim genoeg is om alle redenen te zien waarom de code correct zou kunnen zijn
ondanks het feit dat er een fout lijkt te zijn. Hier is een voorbeeld van hoe dit kan gebeuren:

{
int x;
schakelaar (y)
{
geval 1: x = 1;
te breken;
geval 2: x = 4;
te breken;
geval 3: x = 5;
}
foo (x);
}

Als de waarde van "y" altijd 1, 2 of 3 is, wordt "x" altijd geïnitialiseerd, maar GCC
weet dit niet. Om de waarschuwing te onderdrukken, moet u een standaardgeval opgeven met:
beweren(0) of soortgelijke code.

Deze optie waarschuwt ook wanneer een niet-vluchtige automatische variabele kan worden gewijzigd door a
bel naar "longjmp". Ook deze waarschuwingen zijn alleen mogelijk bij het optimaliseren
compilatie.

De compiler ziet alleen de aanroepen naar "setjmp". Het kan niet weten waar "longjmp" zal zijn
genaamd; in feite zou een signaalbehandelaar het op elk punt in de code kunnen aanroepen. Als een
resultaat, kunt u een waarschuwing krijgen, zelfs als er in feite geen probleem is, omdat "longjmp"
niet kan worden gebeld op de plaats die een probleem zou veroorzaken.

Sommige valse waarschuwingen kunnen worden vermeden als u alle functies die u gebruikt, declareert
keer nooit terug als "noreturn".

Deze waarschuwing is mogelijk gemaakt door: -Muur or -Wextra.

-Wunknown-pragma's
Waarschuw wanneer een "#pragma"-richtlijn wordt aangetroffen die niet wordt begrepen door GCC. Als dit
opdrachtregeloptie wordt gebruikt, er worden zelfs waarschuwingen gegeven voor onbekende pragma's in het systeem
header-bestanden. Dit is niet het geval als de waarschuwingen alleen worden ingeschakeld door de -Muur
opdrachtregeloptie.

-Wno-pragma's
Waarschuw niet voor misbruik van pragma's, zoals onjuiste parameters, ongeldige syntaxis of
conflicten tussen pragma's. Zie ook -Wunknown-pragma's.

-Wstrict-aliasing
Deze optie is alleen actief wanneer: -fstrict-aliasing is actief. Het waarschuwt voor code die:
kan de strikte aliasing-regels overtreden die de compiler gebruikt voor optimalisatie.
De waarschuwing vangt niet alle gevallen, maar probeert wel de meest voorkomende te vangen
valkuilen. Het is inbegrepen in -Muur. Het is gelijk aan -Wstrict-aliasing=3

-Wstrict-aliasing=n
Deze optie is alleen actief wanneer: -fstrict-aliasing is actief. Het waarschuwt voor code die:
kan de strikte aliasing-regels overtreden die de compiler gebruikt voor optimalisatie.
Hogere niveaus komen overeen met een hogere nauwkeurigheid (minder valse positieven). Hogere levels
komen ook overeen met meer inspanning, vergelijkbaar met de manier waarop -O werkt. -Wstrict-aliasing is
gelijkwaardig -Wstrict-aliasing=3.

Niveau 1: Meest agressief, snel, minst nauwkeurig. Mogelijk handig bij hogere niveaus
niet waarschuwen maar -fstrict-aliasing breekt de code nog steeds, omdat er maar heel weinig false is
negatieven. Het heeft echter veel valse positieven. Waarschuwt voor alle aanwijzerconversies
tussen mogelijk onverenigbare typen, zelfs als ze nooit worden verwijderd. Loopt vooraan
alleen eindigen.

Niveau 2: Agressief, snel, niet te precies. Kan nog steeds veel valse positieven hebben (niet
maar liefst niveau 1) en weinig fout-negatieven (maar mogelijk meer dan niveau 1).
In tegenstelling tot niveau 1 waarschuwt het alleen wanneer een adres wordt ingenomen. Waarschuwt voor onvolledige typen.
Loopt alleen aan de voorkant.

Niveau 3 (standaard voor -Wstrict-aliasing): Zou heel weinig valse positieven moeten hebben en weinig
valse negatieven. Iets langzamer dan niveau 1 of 2 wanneer optimalisatie is ingeschakeld.
Zorgt voor het algemene woordspeling + dereferentiepatroon in de voorkant:
"*(int*)&some_float". Als optimalisatie is ingeschakeld, wordt het ook in de backend uitgevoerd, waar
het behandelt meerdere instructiegevallen met behulp van stroomgevoelige point-to-informatie.
Waarschuwt alleen wanneer de geconverteerde aanwijzer wordt verwijderd. Waarschuwt niet voor onvolledige
types.

-Wstrict-overloop
-Wstrict-overloop=n
Deze optie is alleen actief wanneer: -fstrict-overloop is actief. Het waarschuwt voor gevallen
waarbij de compiler optimaliseert op basis van de veronderstelling dat ondertekende overloop niet:
voorkomen. Merk op dat het niet waarschuwt voor alle gevallen waarin de code kan overlopen: het
waarschuwt alleen voor gevallen waarin de compiler enige optimalisatie implementeert. dus dit
waarschuwing hangt af van het optimalisatieniveau.

Een optimalisatie die ervan uitgaat dat ondertekende overloop niet optreedt, is volkomen veilig als:
de waarden van de betrokken variabelen zijn zodanig dat overloop in feite nooit
voorkomen. Daarom kan deze waarschuwing gemakkelijk een vals positief geven: een waarschuwing over code
dat is eigenlijk geen probleem. Om u te helpen focussen op belangrijke zaken, zijn er verschillende waarschuwingen:
niveaus zijn gedefinieerd. Er worden geen waarschuwingen gegeven voor het gebruik van ongedefinieerde ondertekende overloop
bij het schatten hoeveel iteraties een lus nodig heeft, in het bijzonder bij het bepalen van
of een lus überhaupt wordt uitgevoerd.

-Wstrict-overloop=1
Waarschuw voor gevallen die zowel twijfelachtig als gemakkelijk te vermijden zijn. Bijvoorbeeld met
-fstrict-overloop, vereenvoudigt de compiler "x + 1 > x" tot 1. Dit niveau van
-Wstrict-overloop is ingeschakeld door -Muur; hogere niveaus zijn niet, en moeten worden
uitdrukkelijk gevraagd.

-Wstrict-overloop=2
Waarschuw ook voor andere gevallen waarin een vergelijking wordt vereenvoudigd tot een constante. Voor
voorbeeld: "abs (x) >= 0". Dit kan alleen worden vereenvoudigd als: -fstrict-overloop in
effect, omdat "abs (INT_MIN)" overloopt naar "INT_MIN", wat kleiner is dan nul.
-Wstrict-overloop (zonder niveau) is hetzelfde als -Wstrict-overloop=2.

-Wstrict-overloop=3
Waarschuw ook voor andere gevallen waarin een vergelijking wordt vereenvoudigd. Bijvoorbeeld: "x + 1
> 1" wordt vereenvoudigd tot "x > 0".

-Wstrict-overloop=4
Waarschuw ook voor andere vereenvoudigingen die niet onder de bovenstaande gevallen vallen. Voor
voorbeeld: "(x * 10) / 5" is vereenvoudigd tot "x * 2".

-Wstrict-overloop=5
Waarschuw ook voor gevallen waarin de compiler de grootte van een constante reduceert
betrokken bij een vergelijking. Bijvoorbeeld: "x + 2 > y" wordt vereenvoudigd tot "x + 1 >= y".
Dit wordt alleen gerapporteerd op het hoogste waarschuwingsniveau omdat deze vereenvoudiging
geldt voor veel vergelijkingen, dus dit waarschuwingsniveau geeft een zeer groot aantal
valse positieven.

-Wsuggest-attribuut=[zuiver|const|geen terugkeer|formaat]
Waarschuw voor gevallen waarin het toevoegen van een kenmerk nuttig kan zijn. De attributen momenteel
ondersteund worden hieronder vermeld.

-Wsuggest-attribuut=puur
-Wsuggest-attribuut=const
-Wsuggest-attribuut=noreturn
Waarschuw voor functies die mogelijk in aanmerking komen voor attributen "pure", "const" of
"geen terugkeer". De compiler waarschuwt alleen voor functies die zichtbaar zijn in andere compilaties
eenheden of (in het geval van "pure" en "const") als het niet kan bewijzen dat de functie
normaal terugkeert. Een functie retourneert normaal als deze geen oneindige bevat
loop of keer abnormaal terug door te gooien, "afbreken" te roepen of te vangen. deze analyse
vereist optie -fipa-pure-const, die standaard is ingeschakeld op -O en hoger.
Hogere optimalisatieniveaus verbeteren de nauwkeurigheid van de analyse.

-Wsuggest-attribuut=formaat
-Wmissing-formaat-kenmerk
Waarschuw voor functiewijzers die mogelijk in aanmerking komen voor "format"-attributen.
Let op: dit zijn alleen mogelijke kandidaten, geen absolute. GCC vermoedt dat
functieaanwijzers met "format"-attributen die worden gebruikt bij de toewijzing,
initialisatie-, parameter-passing- of return-instructies moeten een overeenkomstige . hebben
"format" attribuut in het resulterende type. Dwz de linkerkant van de
toewijzing of initialisatie, het type parametervariabele of de return
type van de bevattende functie moet ook een attribuut "format" hebben
om de waarschuwing te vermijden.

GCC waarschuwt ook voor functiedefinities die mogelijk in aanmerking komen voor "format"
attributen. Nogmaals, dit zijn alleen mogelijke kandidaten. GCC vermoedt dat "formatteren"
attributen kunnen geschikt zijn voor elke functie die een functie aanroept zoals
"vprintf" of "vscanf", maar dit is misschien niet altijd het geval, en sommige functies
waarvoor "format"-kenmerken geschikt zijn, worden mogelijk niet gedetecteerd.

-Wsuggest-laatste-types
Waarschuw voor typen met virtuele methoden waarbij de codekwaliteit zou worden verbeterd als het type
zijn gedeclareerd met de C++11 "definitieve" specificatie, of, indien mogelijk, gedeclareerd in een
anonieme naamruimte. Hierdoor kan GCC de polymorfe agressiever devirtualiseren?
belt. Deze waarschuwing is effectiever bij optimalisatie van de linktijd, waarbij de
informatie over de klassenhiërarchiegrafiek is vollediger.

-Wsuggest-definitieve-methoden
Waarschuw voor virtuele methoden waarbij de codekwaliteit zou worden verbeterd als de methode zou zijn:
gedeclareerd met de C++11 "final" specificatie, of, indien mogelijk, het type is gedeclareerd in
een anonieme naamruimte of met de "laatste" specificatie. Deze waarschuwing is effectiever
met linktijdoptimalisatie, waar de informatie over de klassenhiërarchiegrafiek is
meer compleet. Het wordt aanbevolen om eerst suggesties van
-Wsuggest-laatste-types en vervolgens opnieuw opbouwen met nieuwe annotaties.

-Wsuggestie overschrijven
Waarschuw voor het overschrijven van virtuele functies die niet zijn gemarkeerd met het override-sleutelwoord.

-Warray-grenzen
-Warray-grenzen=n
Deze optie is alleen actief wanneer: -ftree-vrp is actief (standaard voor -O2 en hoger). Het
waarschuwt voor subscripts op arrays die altijd buiten de grenzen vallen. Deze waarschuwing is:
ingeschakeld door -Muur.

-Warray-grenzen = 1
Dit is het waarschuwingsniveau van -Warray-grenzen en is ingeschakeld door -Muur; hogere levels
zijn niet en moeten expliciet worden aangevraagd.

-Warray-grenzen = 2
Dit waarschuwingsniveau waarschuwt ook voor toegang buiten het bereik voor arrays aan het einde van
een struct en voor arrays die toegankelijk zijn via pointers. Dit waarschuwingsniveau kan een
groter aantal valse positieven en is standaard gedeactiveerd.

-Wbool-vergelijken
Waarschuwen voor booleaanse expressie vergeleken met een geheel getal dat verschilt van
"waar onwaar". De volgende vergelijking is bijvoorbeeld altijd onjuist:

intn = 5;
...
als ((n > 1) == 2) { ... }

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wno-weggegooide kwalificaties (alleen C en Objective-C)
Waarschuw niet als typekwalificaties op pointers worden weggegooid. Meestal is de
compiler waarschuwt als een "const char *" variabele wordt doorgegeven aan een functie waarvoor een "char
*" parameter. Deze optie kan worden gebruikt om een ​​dergelijke waarschuwing te onderdrukken.

-Wno-weggegooide-array-kwalificaties (alleen C en Objective-C)
Waarschuw niet als typekwalificaties op arrays die pointerdoelen zijn, worden
weggegooid. Meestal waarschuwt de compiler als een variabele "const int (*)[]" wordt doorgegeven aan
een functie waaraan een parameter "int (*)[]" moet doorgegeven worden. Deze optie kan worden gebruikt om te onderdrukken
zo'n waarschuwing.

-Wno-incompatibele-pointer-types (alleen C en Objective-C)
Waarschuw niet wanneer er een conversie is tussen aanwijzers met incompatibele typen.
Deze waarschuwing is voor gevallen die niet worden gedekt door: -Wno-wijzer-teken, die waarschuwt voor aanwijzer
argument passeren of opdracht met verschillende ondertekening.

-Wno-in-conversie (alleen C en Objective-C)
Waarschuw niet voor incompatibele conversies van integer naar pointer en pointer naar integer.
Deze waarschuwing gaat over impliciete conversies; voor expliciete conversies de waarschuwingen
-Wno-in-naar-pointer-cast en -Wno-aanwijzer-naar-int-cast mag gebruikt worden.

-Wno-div-door-nul
Waarschuw niet voor het delen van gehele getallen tijdens het compileren door nul. Drijvende-kommadeling door
nul wordt niet gewaarschuwd, omdat het een legitieme manier kan zijn om oneindigheden te verkrijgen en
NaN's.

-Wsysteem-headers
Print waarschuwingsberichten voor constructies gevonden in systeemkopbestanden. Waarschuwingen van
systeemheaders worden normaal gesproken onderdrukt, in de veronderstelling dat ze dat meestal niet doen
duiden op echte problemen en zou de uitvoer van de compiler alleen maar moeilijker leesbaar maken. Gebruik makend van
deze opdrachtregeloptie vertelt GCC om waarschuwingen uit systeemheaders te verzenden alsof ze
opgetreden in gebruikerscode. Houd er echter rekening mee dat het gebruik van -Muur in combinatie met deze optie
doet niet waarschuw voor onbekende pragma's in systeemheaders --- daarvoor, -Wunknown-pragma's
moet ook worden gebruikt.

-Wtrampolines
Waarschuw voor trampolines die worden gegenereerd voor verwijzingen naar geneste functies. Een trampoline is een
klein stukje gegevens of code dat tijdens runtime op de stapel wordt gemaakt wanneer het adres
van een geneste functie wordt genomen, en wordt gebruikt om de geneste functie indirect aan te roepen.
Voor sommige doelen bestaat het alleen uit gegevens en vereist het dus geen speciale behandeling.
Maar voor de meeste doelen bestaat het uit code en daarom moet de stapel worden gemaakt
uitvoerbaar zijn om het programma goed te laten werken.

-Wfloat-gelijk
Waarschuw als waarden met drijvende komma worden gebruikt in gelijkheidsvergelijkingen.

Het idee hierachter is dat het soms handig is (voor de programmeur) om
beschouwen drijvende-kommawaarden als benaderingen van oneindig nauwkeurige reële getallen.
Als je dit doet, moet je berekenen (door de code te analyseren, of in sommige
andere manier) de maximale of waarschijnlijke maximale fout die de berekening introduceert, en
sta het toe bij het uitvoeren van vergelijkingen (en bij het produceren van output, maar dat is een
ander probleem). In plaats van te testen op gelijkheid, moet u in het bijzonder controleren:
om te zien of de twee waarden bereiken hebben die elkaar overlappen; en dit wordt gedaan met de
relationele operatoren, dus vergelijkingen van gelijkheid zijn waarschijnlijk verkeerd.

-Wtraditioneel (alleen C en Objective-C)
Waarschuw voor bepaalde constructies die zich anders gedragen in traditioneel en ISO C. Ook
waarschuwen voor ISO C-constructies die geen traditioneel C-equivalent hebben en/of problematisch
constructies die vermeden moeten worden.

* Macroparameters die verschijnen in letterlijke tekenreeksen in de macrobody. In
traditionele C-macrovervanging vindt plaats binnen tekenreeksen, maar in ISO C
het doet niet.

* In traditionele C bestonden sommige preprocessor-richtlijnen niet. traditioneel
preprocessors beschouwen een regel alleen als een richtlijn als de # verscheen in kolom
1 aan de lijn. Daarom -Wtraditioneel waarschuwt voor richtlijnen die traditionele C
begrijpt maar negeert omdat de # verschijnt niet als het eerste teken op
de lijn. Het suggereert ook dat je richtlijnen zoals "#pragma" verbergt die niet worden begrepen door
traditionele C door ze te laten inspringen. Sommige traditionele implementaties niet
herkent "#elif", dus deze optie stelt voor om het helemaal te vermijden.

* Een functie-achtige macro die zonder argumenten verschijnt.

* De unaire plus-operator.

* De U geheel getal constant achtervoegsel, of de F or L drijvende-komma constante achtervoegsels.
(Traditionele C ondersteunt wel de L achtervoegsel op integer-constanten.) Let op, deze
achtervoegsels verschijnen in macro's die zijn gedefinieerd in de systeemkoppen van de meeste moderne systemen,
bijv. de _MIN/_MAX macro's in " ". Gebruik van deze macro's in gebruikerscode kan
leiden normaal gesproken tot valse waarschuwingen, maar de geïntegreerde preprocessor van GCC heeft:
voldoende context om waarschuwing in deze gevallen te vermijden.

* Een functie die in één blok extern is gedeclareerd en vervolgens wordt gebruikt na het einde van de
blok.

* Een "switch"-statement heeft een operand van het type "long".

* Een niet-"statische" functiedeclaratie volgt op een "statische". Deze constructie is niet
geaccepteerd door sommige traditionele C-compilers.

* Het ISO-type van een geheel getalconstante heeft een andere breedte of ondertekendheid dan zijn
traditionele soort. Deze waarschuwing wordt alleen gegeven als de basis van de constante tien is.
Dwz hexadecimale of octale waarden, die typisch bitpatronen vertegenwoordigen, zijn niet
waarschuwde voor.

* Gebruik van ISO-tekenreeksaaneenschakeling is gedetecteerd.

* Initialisatie van automatische aggregaten.

* Identifier conflicteert met labels. Traditionele C mist een aparte naamruimte voor
etiketten.

* Initialisatie van vakbonden. Als de initialisatie nul is, wordt de waarschuwing weggelaten.
Dit wordt gedaan in de veronderstelling dat de nul-initialisatie in de gebruikerscode verschijnt
afhankelijk van bijv. "__STDC__" om te voorkomen dat initialisatiewaarschuwingen ontbreken en is afhankelijk van:
standaard initialisatie op nul in het traditionele C-geval.

* Conversies door prototypes tussen vaste/drijvende-kommawaarden en vice versa. De
afwezigheid van deze prototypes bij het compileren met traditionele C veroorzaakt ernstige
problemen. Dit is een subset van de mogelijke conversiewaarschuwingen; voor de volledige set
. -Wtraditionele-conversie.

* Gebruik van functiedefinities in ISO C-stijl. Deze waarschuwing is met opzet: niet uitgegeven
voor prototype-declaraties of variadische functies omdat deze ISO C-functies
verschijnen in uw code wanneer u de traditionele C-compatibiliteitsmacro's van libiberty gebruikt,
"PARAMS" en "VPARAMS". Deze waarschuwing wordt ook overgeslagen voor geneste functies
omdat die functie al een GCC-extensie is en dus niet relevant voor
traditionele C-compatibiliteit.

-Wtraditionele-conversie (alleen C en Objective-C)
Waarschuwen als een prototype een typeconversie veroorzaakt die afwijkt van wat er zou gebeuren
tot hetzelfde argument in de afwezigheid van een prototype. Dit omvat conversies van
vast punt naar zwevend en vice versa, en conversies die de breedte wijzigen of
ondertekening van een argument met een vast punt, behalve wanneer dit hetzelfde is als de standaardpromotie.

-Wdeclaratie-na-statement (alleen C en Objective-C)
Waarschuwen wanneer een verklaring wordt gevonden na een verklaring in een blok. Deze constructie, bekend
van C++, werd geïntroduceerd met ISO C99 en is standaard toegestaan ​​in GCC. Het is niet
ondersteund door ISO C90.

-Wundef
Waarschuwen als een niet-gedefinieerde identifier wordt geëvalueerd in een "#if" -instructie.

-Wno-endif-labels
Waarschuw niet wanneer een "#else" of een "#endif" wordt gevolgd door tekst.

-Wschaduw
Waarschuw wanneer een lokale variabele of typedeclaratie een andere variabele in de schaduw stelt,
parameter, type, klasselid (in C++) of instantievariabele (in Objective-C) of
wanneer een ingebouwde functie in de schaduw staat. Merk op dat in C++ de compiler waarschuwt als a
lokale variabele schaduwt een expliciete typedef, maar niet als het een struct/class/enum schaduwt.

-Wno-schaduw-ivar (Alleen Objectief-C)
Waarschuw niet wanneer een lokale variabele een instantievariabele in een Objective-C . overschaduwt
methode.

-Wgroter-dan=len
Waarschuw wanneer een object groter is dan len bytes is gedefinieerd.

-Wframe-groter-dan=len
Waarschuwen als de grootte van een functieframe groter is dan len bytes. De berekening gedaan
om de grootte van het stapelframe te bepalen, is bij benadering en niet conservatief. De daadwerkelijke
vereisten kunnen iets groter zijn dan len ook als u geen waarschuwing krijgt. In
daarnaast elke ruimte die is toegewezen via "alloca", arrays met variabele lengte of gerelateerd
constructen wordt niet door de compiler meegenomen bij het bepalen van het al dan niet uitgeven van een
waarschuwing.

-Wno-vrij-nonheap-object
Waarschuw niet wanneer u probeert een object te bevrijden dat niet op de heap was toegewezen.

-Wstack-gebruik=len
Waarschuwen als het stapelgebruik van een functie groter kan zijn dan len bytes. de berekening
gedaan om te bepalen dat het stapelgebruik conservatief is. Elke ruimte toegewezen via "alloca",
arrays met variabele lengte of gerelateerde constructies wordt door de compiler opgenomen wanneer:
bepalen of een waarschuwing moet worden gegeven.

Het bericht is in overeenstemming met de output van -fstack-gebruik.

* Als het stapelgebruik volledig statisch is maar het opgegeven aantal overschrijdt, is dit:

waarschuwing: stackgebruik is 1120 bytes

* Als het stapelgebruik (gedeeltelijk) dynamisch maar begrensd is, is het:

waarschuwing: stackgebruik kan 1648 bytes zijn

* Als het stapelgebruik (gedeeltelijk) dynamisch en niet begrensd is, is het:

waarschuwing: stapelgebruik is mogelijk onbeperkt

-Wunsafe-loop-optimalisaties
Waarschuw als de lus niet kan worden geoptimaliseerd omdat de compiler niets kan aannemen op
de grenzen van de lusindices. Met -funsafe-loop-optimalisaties waarschuwen als de compiler
dergelijke aannames doet.

-Wno-pedant-ms-formaat (Alleen MinGW-doelen)
Bij gebruik in combinatie met -Wformaat en -pedant zonder GNU-extensies, dit
optie schakelt de waarschuwingen uit over niet-ISO "printf" / "scanf" formaatbreedtespecificaties
"I32", "I64" en "I" gebruikt op Windows-doelen, die afhankelijk zijn van de MS-runtime.

-Wpointer-arith
Waarschuw voor alles dat afhangt van de "grootte van" een functietype of van "void". GNU C
kent deze typen een grootte van 1 toe voor het gemak in berekeningen met "void *"
verwijzingen en verwijzingen naar functies. Waarschuw in C++ ook wanneer een rekenkundige bewerking
omvat "NULL". Deze waarschuwing wordt ook ingeschakeld door: -Wpedant.

-Wtype-limieten
Waarschuw als een vergelijking altijd waar of altijd onwaar is vanwege het beperkte bereik van de
gegevenstype, maar waarschuw niet voor constante expressies. Waarschuw bijvoorbeeld als een niet-ondertekend
variabele wordt vergeleken met nul met "<" of ">=". Deze waarschuwing wordt ook ingeschakeld door:
-Wextra.

-Wbad-functie-cast (alleen C en Objective-C)
Waarschuwen wanneer een functieaanroep wordt gecast naar een niet-overeenkomend type. Waarschuw bijvoorbeeld als een oproep
naar een functie die een geheel getal retourneert, wordt gecast naar een pointertype.

-Wc90-c99-compatibel (alleen C en Objective-C)
Waarschuw voor functies die niet aanwezig zijn in ISO C90, maar wel in ISO C99. Bijvoorbeeld,
waarschuwen voor het gebruik van arrays met variabele lengte, "long long" type, "bool" type, compound
letterlijke, aangewezen initializers, enzovoort. Deze optie is onafhankelijk van de
standaard modus. Waarschuwingen zijn uitgeschakeld in de uitdrukking die volgt op "__extension__".

-Wc99-c11-compatibel (alleen C en Objective-C)
Waarschuw voor functies die niet aanwezig zijn in ISO C99, maar wel in ISO C11. Bijvoorbeeld,
waarschuwen voor het gebruik van anonieme structuren en vakbonden, "_Atomic" type kwalificatie,
"_Thread_local" opslagklasse specificatie, "_Alignas" specificatie, "Alignof" operator,
"_Generic" trefwoord, enzovoort. Deze optie is onafhankelijk van de standaardmodus.
Waarschuwingen zijn uitgeschakeld in de uitdrukking die volgt op "__extension__".

-Wc++-compatibel (alleen C en Objective-C)
Waarschuw voor ISO C-constructies die buiten de gemeenschappelijke subset van ISO C en ISO vallen
C++, bijv. verzoek om impliciete conversie van "void *" naar een pointer naar niet-"void"
type.

-Wc++11-compatibel (alleen C++ en Objective-C++)
Waarschuw voor C++-constructies waarvan de betekenis verschilt tussen ISO C++ 1998 en ISO C++ 2011,
bijv. identifiers in ISO C++ 1998 die trefwoorden zijn in ISO C++ 2011. Deze waarschuwing
gaat aan -vernauwing en is ingeschakeld door -Muur.

-Wc++14-compatibel (alleen C++ en Objective-C++)
Waarschuw voor C++-constructies waarvan de betekenis verschilt tussen ISO C++ 2011 en ISO C++ 2014.
Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wcast-kwaliteit
Waarschuw wanneer een aanwijzer wordt gebruikt om een ​​typekwalificatie van het doeltype te verwijderen.
Waarschuw bijvoorbeeld als een "const char *" wordt gecast naar een gewone "char *".

Waarschuw ook bij het maken van een cast die op een onveilige manier een typekwalificatie introduceert. Voor
het casten van "char **" naar "const char **" is bijvoorbeeld onveilig, zoals in dit voorbeeld:

/* p is char ** waarde. */
const char **q = (const char **) p;
/* Toewijzing van alleen-lezen tekenreeks aan const char * is OK. */
*q = "tekenreeks";
/* Nu wijst de char**-aanwijzer naar alleen-lezen geheugen. */
**p = 'b';

-Wcast-uitlijnen
Waarschuw wanneer een aanwijzer zodanig wordt geplaatst dat de vereiste uitlijning van het doel is
toegenomen. Waarschuw bijvoorbeeld als een "char *" wordt gecast naar een "int *" op machines waar
gehele getallen zijn alleen toegankelijk bij grenzen van twee of vier bytes.

-Wwrite-tekenreeksen
Geef bij het compileren van C stringconstanten het type "const char[lengte]" dus dat kopiëren
het adres van een in een niet-"const" "char *" pointer produceert een waarschuwing. Deze
waarschuwingen helpen u bij het compileren code te vinden die kan proberen in een string te schrijven
constant, maar alleen als je heel voorzichtig bent geweest met het gebruik van "const" in declaraties
en prototypen. Anders is het gewoon vervelend. Dit is waarom we niet hebben gemaakt -Muur
deze waarschuwingen opvragen.

Waarschuw bij het compileren van C++ voor de verouderde conversie van letterlijke tekenreeksen naar "char
*". Deze waarschuwing is standaard ingeschakeld voor C++-programma's.

-Wingewikkeld
Waarschuw voor variabelen die kunnen worden gewijzigd door "longjmp" of "vfork". Deze waarschuwing is:
ook ingeschakeld door -Wextra.

-Wvoorwaardelijk ondersteund (alleen C++ en Objective-C++)
Waarschuw voor voorwaardelijk ondersteunde (C++11 [intro.defs]) constructies.

-Wconversie
Waarschuw voor impliciete conversies die een waarde kunnen wijzigen. Dit omvat conversies
tussen echt en geheel getal, zoals "abs (x)" wanneer "x" "dubbel" is; conversies tussen
ondertekend en niet ondertekend, zoals "unsigned ui = -1"; en conversies naar kleinere typen, zoals
"sqrtf (M_PI)". Waarschuw niet voor expliciete casts zoals "abs ((int) x)" en "ui =
(unsigned) -1", of als de waarde niet wordt gewijzigd door de conversie zoals in "abs (2.0)".
Waarschuwingen over conversies tussen getekende en niet-ondertekende gehele getallen kunnen worden uitgeschakeld door:
gebruik -Wno-teken-conversie.

Waarschuw voor C++ ook voor verwarrende overbelastingsresolutie voor door de gebruiker gedefinieerde conversies; en
conversies die nooit een type conversie-operator gebruiken: conversies naar "ongeldig", hetzelfde
type, een basisklasse of een verwijzing ernaar. Waarschuwingen over conversies tussen ondertekende
en niet-ondertekende gehele getallen zijn standaard uitgeschakeld in C++ tenzij -Wsign-conversie is
expliciet ingeschakeld.

-Wno-conversie-null (alleen C++ en Objective-C++)
Waarschuw niet voor conversies tussen "NULL" en non-pointer types. -Wconversie-null is
standaard ingeschakeld.

-Wzero-als-null-pointer-constante (alleen C++ en Objective-C++)
Waarschuwen wanneer een letterlijke '0' wordt gebruikt als nul-aanwijzerconstante. Dit kan handig zijn om
de conversie naar "nullptr" in C++11 vergemakkelijken.

-Wdate-tijd
Waarschuw wanneer macro's "__TIME__", "__DATE__" of "__TIMESTAMP__" worden aangetroffen terwijl ze
zou bitsgewijze identieke reproduceerbare compilaties kunnen voorkomen.

-Wdelete-onvolledig (alleen C++ en Objective-C++)
Waarschuw bij het verwijderen van een aanwijzer naar een onvolledig type, dat ongedefinieerd gedrag kan veroorzaken bij
looptijd. Deze waarschuwing is standaard ingeschakeld.

-Wuseless-gegoten (alleen C++ en Objective-C++)
Waarschuwen wanneer een expressie naar zijn eigen type wordt gecast.

-Weeg lichaam
Waarschuw als een lege hoofdtekst voorkomt in een "if", "else" of "do while"-statement. Deze waarschuwing
wordt ook ingeschakeld door -Wextra.

-Wenum-vergelijken
Waarschuw voor een vergelijking tussen waarden van verschillende opgesomde typen. In C++ enumeral
mismatches in voorwaardelijke expressies worden ook gediagnosticeerd en de waarschuwing wordt ingeschakeld door:
standaard. In C wordt deze waarschuwing geactiveerd door: -Muur.

-Wjump-missers-init (C, alleen Objective-C)
Waarschuwen als een "goto"-instructie of een "switch"-instructie naar voren springt over de
initialisatie van een variabele, of springt terug naar een label nadat de variabele is
begonnen. Dit waarschuwt alleen voor variabelen die worden geïnitialiseerd wanneer ze zijn
verklaard. Deze waarschuwing wordt alleen ondersteund voor C en Objective-C; in C++ dit soort
branch is in ieder geval een fout.

-Wjump-missers-init is inbegrepen in -Wc++-compatibel. Het kan worden uitgeschakeld met de
-Wno-jump-missers-init optie.

-Wsign-vergelijk
Waarschuw wanneer een vergelijking tussen ondertekende en niet-ondertekende waarden een onjuiste
resultaat wanneer de ondertekende waarde wordt geconverteerd naar niet-ondertekend. Deze waarschuwing is ook ingeschakeld
by -Wextra; om de andere waarschuwingen van te krijgen -Wextra zonder deze waarschuwing, gebruik -Wextra
-Wno-teken-vergelijk.

-Wsign-conversie
Waarschuw voor impliciete conversies die het teken van een geheel getal kunnen veranderen, zoals
een getekende integer-uitdrukking toewijzen aan een niet-ondertekende integer-variabele. een expliciete
cast dempt de waarschuwing. In C wordt deze optie ook ingeschakeld door: -Wconversie.

-Wfloat-conversie
Waarschuw voor impliciete conversies die de nauwkeurigheid van een echte waarde verminderen. Dit
omvat conversies van echt naar geheel getal, en van hogere precisie echt naar lager
precisie reële waarden. Deze optie wordt ook ingeschakeld door: -Wconversie.

-Wsized-deallocatie (alleen C++ en Objective-C++)
Waarschuw voor een definitie van een unsized deallocation-functie

void operator delete (void *) nobehalve;
void operator delete[] (void *) nobehalve;

zonder een definitie van de overeenkomstige deallocatiefunctie

void operator delete (void *, std::size_t) nobehalve;
void operator delete[] (void *, std::size_t) nobehalve;

of vice versa. Ingeschakeld door -Wextra met -fsized-deallocatie.

-Wsizeof-pointer-memtoegang
Waarschuw voor verdachte lengteparameters voor bepaalde ingebouwde string- en geheugenfuncties
als het argument "sizeof" gebruikt. Deze waarschuwing waarschuwt bijv. voor "memset (ptr, 0, sizeof
(ptr));" als "ptr" geen array is, maar een pointer, en een mogelijke oplossing suggereert, of
over "memcpy (&foo, ptr, sizeof (&foo));". Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wsizeof-array-argument
Waarschuwen wanneer de operator "sizeof" wordt toegepast op een parameter die is gedeclareerd als een array
in een functiedefinitie. Deze waarschuwing is standaard ingeschakeld voor C- en C++-programma's.

-Wmemset-getransponeerde-args
Waarschuw voor verdachte oproepen naar de ingebouwde functie "memset", als het tweede argument is
niet nul en het derde argument is nul. Dit waarschuwt bijv. @ over "memset (buf, sizeof
buf, 0)" waar hoogstwaarschijnlijk "memset (buf, 0, sizeof buf)" werd bedoeld.
diagnostics wordt alleen verzonden als het derde argument letterlijk nul is. Als het wat is
uitdrukking die naar nul is gevouwen, een cast van nul naar een bepaald type, enz., is veel minder
waarschijnlijk heeft de gebruiker de argumenten per ongeluk uitgewisseld en wordt er geen waarschuwing afgegeven.
Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wadres
Waarschuw voor verdacht gebruik van geheugenadressen. Deze omvatten het gebruik van het adres van a
functie in een voorwaardelijke uitdrukking, zoals "void func(void); if (func)", en
vergelijkingen met het geheugenadres van een letterlijke tekenreeks, zoals "if (x == "abc")".
Dergelijk gebruik duidt meestal op een programmeerfout: het adres van een functie altijd
evalueert naar waar, dus het gebruik ervan in een voorwaardelijke geeft meestal aan dat de programmeur
vergat de haakjes in een functieaanroep; en vergelijkingen met letterlijke tekenreeksen
resulteren in niet-gespecificeerd gedrag en zijn niet overdraagbaar in C, dus geven ze meestal aan:
dat de programmeur van plan was om "strcmp" te gebruiken. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wlogische-op
Waarschuw voor verdacht gebruik van logische operatoren in expressies. Dit omvat het gebruik van
logische operators in contexten waar een bitsgewijze operator waarschijnlijk wordt verwacht.

-Wlogische-niet-haakjes
Waarschuw voor logisch niet gebruikt in de operand aan de linkerkant van een vergelijking. Dit
optie waarschuwt niet als de RHS-operand van het booleaanse type is. Het doel is om
detecteer verdachte code zoals de volgende:

int a;
...
als (!a > 1) { ... }

Het is mogelijk om de waarschuwing te onderdrukken door de LHS tussen haakjes te plaatsen:

als ((!a) > 1) { ... }

Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Waggregate-retour
Waarschuw als er functies zijn gedefinieerd of aangeroepen die structuren of vakbonden retourneren. (In
talen waar u een array kunt retourneren, roept dit ook een waarschuwing op.)

-Geen-agressieve-loop-optimalisaties
Waarschuwen als in een lus met constant aantal iteraties de compiler undefined detecteert
gedrag in een verklaring tijdens een of meer van de iteraties.

-Wno-attributen
Waarschuw niet als een onverwachte "__attribute__" wordt gebruikt, zoals niet-herkende attributen,
functieattributen toegepast op variabelen, enz. Dit stopt geen fouten voor
onjuist gebruik van ondersteunde attributen.

-Wno-ingebouwde-macro-opnieuw gedefinieerd
Waarschuw niet als bepaalde ingebouwde macro's opnieuw worden gedefinieerd. Dit onderdrukt waarschuwingen voor:
herdefinitie van "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", en
"__BASE_FILE__".

-Wstrict-prototypes (alleen C en Objective-C)
Waarschuwen als een functie wordt gedeclareerd of gedefinieerd zonder de argumenttypes op te geven. (Een
ouderwetse functiedefinitie is toegestaan ​​zonder waarschuwing indien voorafgegaan door a
declaratie die de argumenttypes specificeert.)

-Wold-stijl-verklaring (alleen C en Objective-C)
Waarschuw voor verouderd gebruik, volgens de C-norm, in een aangifte. Voor
waarschuw bijvoorbeeld als opslagklasse-specificaties zoals "statisch" niet de eerste dingen zijn in a
verklaring. Deze waarschuwing wordt ook ingeschakeld door: -Wextra.

-Wold-stijl-definitie (alleen C en Objective-C)
Waarschuw als er een ouderwetse functiedefinitie wordt gebruikt. Er wordt een waarschuwing gegeven, ook al is er
een eerder prototype.

-Ontbrekend-parametertype (alleen C en Objective-C)
Een functieparameter wordt gedeclareerd zonder een typespecificatie in K&R-achtige functies:

leegte foo(bar) { }

Deze waarschuwing wordt ook ingeschakeld door: -Wextra.

-Wmissing-prototypes (alleen C en Objective-C)
Waarschuwen als een globale functie is gedefinieerd zonder een eerdere prototypedeclaratie. Dit
waarschuwing wordt gegeven, zelfs als de definitie zelf een prototype biedt. Gebruik deze optie
om globale functies te detecteren die geen overeenkomende prototypedeclaratie hebben in a
header-bestand. Deze optie is niet geldig voor C++ omdat alle functiedeclaraties
prototypes aanleveren en een niet-overeenkomende verklaring verklaart eerder een overbelasting dan
strijd met een eerdere verklaring. Gebruik maken van -Wmissing-verklaringen om vermiste op te sporen
declaraties in C++.

-Wmissing-verklaringen
Waarschuwen als een globale functie is gedefinieerd zonder voorafgaande declaratie. Doe dit zelfs als
de definitie zelf levert een prototype op. Gebruik deze optie om global te detecteren
functies die niet zijn gedeclareerd in header-bestanden. In C worden geen waarschuwingen gegeven voor:
functies met eerdere niet-prototype-declaraties; gebruik maken van -Wmissing-prototypes detecteren
ontbrekende prototypes. In C++ worden geen waarschuwingen gegeven voor functiesjablonen of voor
inline-functies of voor functies in anonieme naamruimten.

-Wmissing-veld-initializers
Waarschuw als er in de initialisatiefunctie van een structuur enkele velden ontbreken. Bijvoorbeeld het volgende:
code veroorzaakt een dergelijke waarschuwing, omdat "xh" impliciet nul is:

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

Deze optie waarschuwt niet voor aangewezen initializers, dus de volgende wijziging:
activeert geen waarschuwing:

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

In C++ waarschuwt deze optie ook niet voor de lege { } initializer, bijvoorbeeld:

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

Deze waarschuwing is opgenomen in: -Wextra. om andere te krijgen -Wextra waarschuwingen zonder deze,
. -Wextra -Wno-ontbrekende-veld-initializers.

-Wno-multichar
Waarschuw niet als een constante van meerdere tekens ('FOOF') is gebruikt. Meestal geven ze een
typfout in de code van de gebruiker, omdat deze door de implementatie gedefinieerde waarden hebben en dat niet zou mogen zijn
gebruikt in draagbare code.

-Genormaliseerd[=<geen|id|nfc|nfkc>]
In ISO C en ISO C++ zijn twee identifiers verschillend als ze verschillende reeksen zijn van
karakters. Soms echter wanneer tekens buiten de standaard ASCII-tekenset
worden gebruikt, kunt u twee verschillende tekenreeksen hebben die er hetzelfde uitzien. Vermijden
verwarring, bevat de ISO 10646-norm enkele: normalisatie reglement welke wanneer toegepast?
zorg ervoor dat twee reeksen die er hetzelfde uitzien, in dezelfde reeks worden omgezet. GCC
kan u waarschuwen als u identifiers gebruikt die niet zijn genormaliseerd; deze optie
regelt die waarschuwing.

Er zijn vier waarschuwingsniveaus die door GCC worden ondersteund. De standaard is -Wgenormaliseerd=nfc,
die waarschuwt voor elke identifier die niet in de ISO 10646 "C" genormaliseerde vorm staat,
NFC. NFC is de aanbevolen vorm voor de meeste toepassingen. Het is gelijk aan -Genormaliseerd.

Helaas zijn er enkele tekens toegestaan ​​in identifiers door ISO C en ISO C++
die, wanneer omgezet in NFC, niet zijn toegestaan ​​in identifiers. Dat wil zeggen, er is geen manier
om deze symbolen in draagbare ISO C of C++ te gebruiken en al uw identifiers in NFC te hebben.
-Wgenormaliseerd=id onderdrukt de waarschuwing voor deze tekens. Het is te hopen dat de toekomst
versies van de betrokken standaarden zullen dit corrigeren, daarom is deze optie dat niet
de standaard.

U kunt de waarschuwing voor alle tekens uitschakelen door te schrijven -Wnormalized=geen or
-Wno-genormaliseerd. U moet dit alleen doen als u een andere normalisatie gebruikt
schema (zoals "D"), omdat je anders gemakkelijk bugs kunt maken die letterlijk
onmogelijk te zien.

Sommige tekens in ISO 10646 hebben verschillende betekenissen, maar zien er in sommige lettertypen identiek uit
of weergavemethodologieën, vooral nadat de opmaak is toegepast. Bijvoorbeeld
"\u207F", "SUPERSCRIPT LATIJNSE KLEINE LETTER N", wordt weergegeven als een gewone "n" die
is in een superscript geplaatst. ISO 10646 definieert de NFKC normalisatieschema om
zet al deze ook om in een standaardformulier, en GCC waarschuwt als uw code niet in
NFKC als je gebruikt -Wgenormaliseerd=nfkc. Deze waarschuwing is vergelijkbaar met de waarschuwing over elke
identificatiecode die de letter O bevat omdat deze kan worden verward met het cijfer 0,
en is dus niet de standaard, maar kan nuttig zijn als een lokale coderingsconventie als de
programmeeromgeving kan niet worden vastgesteld om deze tekens duidelijk weer te geven.

-Wno-verouderd
Waarschuw niet voor het gebruik van verouderde functies.

-Wno-verouderde-declaraties
Waarschuw niet voor het gebruik van functies, variabelen en typen die zijn gemarkeerd als verouderd door
met het kenmerk "verouderd".

-Wno-overloop
Waarschuw niet voor overloop tijdens het compileren in constante expressies.

-Wno-odr
Waarschuw voor overtredingen van One Definition Rule tijdens linktime-optimalisatie. Vereist
-flto-odr-type-samenvoegen ingeschakeld te worden. Standaard ingeschakeld.

-Wopenmp-simd
Waarschuwen als het vectorizer-kostenmodel de OpenMP of de Cilk Plus simd-richtlijn overschrijft
ingesteld door gebruiker. De -fsimd-kostenmodel=onbeperkt optie kan worden gebruikt om de kosten te verlagen
model.

-Woverride-init (alleen C en Objective-C)
Waarschuwen als een geïnitialiseerd veld zonder bijwerkingen wordt overschreven bij gebruik van aangewezen
initialen.

Deze waarschuwing is opgenomen in: -Wextra. om andere te krijgen -Wextra waarschuwingen zonder deze,
. -Wextra -Wno-override-init.

-Wingepakt
Waarschuwen als een structuur het attribuut ingepakt krijgt, maar het attribuut ingepakt heeft geen
invloed op de indeling of grootte van de constructie. Dergelijke structuren kunnen verkeerd zijn uitgelijnd voor
weinig voordeel. In deze code is de variabele "fx" in "struct bar" bijvoorbeeld
verkeerd uitgelijnd, hoewel "struct bar" zelf niet het kenmerk ingepakt heeft:

struct foo {
int x;
teken a, b, c, d;
} __attribute __ ((verpakt));
structuurbalk {
teken z;
structuur foo f;
};

-Wpacked-bitfield-compatibel
De 4.1, 4.2 en 4.3 series van GCC negeren het "packed" attribuut op bit-fields van het type
"char". Dit is opgelost in GCC 4.4, maar de wijziging kan leiden tot verschillen in de
structuur lay-out. GCC informeert u wanneer de offset van een dergelijk veld is gewijzigd in GCC
4.4. Er is bijvoorbeeld geen 4-bits opvulling meer tussen veld "a" en "b" in deze
structuur:

structuur foo
{
teken a:4;
teken b:8;
} __attribuut__ ((verpakt));

Deze waarschuwing is standaard ingeschakeld. Gebruik maken van -Wno-verpakt-bitfield-compat om dit uit te schakelen
waarschuwing.

-Gevoerd
Waarschuwen als opvulling is opgenomen in een structuur, hetzij om een ​​element van de . uit te lijnen
structuur of om de hele structuur uit te lijnen. Soms als dit gebeurt is het mogelijk
om de velden van de structuur te herschikken om de opvulling te verminderen en zo de
structuur kleiner.

-Wredundant-verklaart
Waarschuw als iets meer dan eens in hetzelfde bereik wordt gedeclareerd, zelfs in gevallen waarin:
meervoudige aangifte is geldig en verandert niets.

-Wnested-externen (alleen C en Objective-C)
Waarschuwen als een "externe" declaratie wordt aangetroffen binnen een functie.

-Wno-geërfde-variadic-ctor
Onderdruk waarschuwingen over het gebruik van C++11 overnemende constructors als de basisklasse
geërfd van heeft een C variadische constructor; de waarschuwing is standaard ingeschakeld omdat de
ellips is niet erfelijk.

-Winlijn
Waarschuwen als een functie die als inline is gedeclareerd, niet inline kan worden. Zelfs met dit
optie, de compiler waarschuwt niet voor fouten in inline-functies die zijn gedeclareerd in
systeemkoppen.

De compiler gebruikt verschillende heuristieken om te bepalen of een
functie. De compiler houdt bijvoorbeeld rekening met de grootte van de functie die:
inline en de hoeveelheid inline die al is gedaan in de huidige functie.
Daarom kunnen schijnbaar onbeduidende veranderingen in het bronprogramma de
waarschuwingen geproduceerd door -Winlijn verschijnen of verdwijnen.

-Wno-ongeldige-offsetof (alleen C++ en Objective-C++)
Onderdruk waarschuwingen voor het toepassen van de "offsetof"-macro op een niet-POD-type. Volgens
de 2014 ISO C++-standaard, waarbij "offsetof" wordt toegepast op een niet-standaard lay-outtype is
ongedefinieerd. In bestaande C++-implementaties geeft "offsetof" echter meestal:
zinvolle resultaten. Deze vlag is voor gebruikers die weten dat ze aan het schrijven zijn
niet-overdraagbare code en die er bewust voor hebben gekozen om de waarschuwing erover te negeren.

De beperkingen op "offsetof" kunnen worden versoepeld in een toekomstige versie van de C++-standaard.

-Wno-in-naar-pointer-cast
Onderdruk waarschuwingen van casts naar pointertype van een geheel getal met een andere grootte. In
C++, casten naar een pointertype van kleiner formaat is een fout. Wint-naar-wijzer-cast is
standaard ingeschakeld.

-Wno-aanwijzer-naar-int-cast (alleen C en Objective-C)
Onderdruk waarschuwingen van casts van een aanwijzer naar een geheel getal van een andere grootte.

-Winvalid-pch
Waarschuwen als een voorgecompileerde koptekst wordt gevonden in het zoekpad, maar niet kan worden gebruikt.

-Lang-lang
Waarschuw als het type "lang lang" wordt gebruikt. Dit wordt mogelijk gemaakt door ofwel -Wpedant or
-Wtraditioneel in de modi ISO C90 en C++98. Om de waarschuwingsberichten te blokkeren, gebruik
-Wno-lang-lang.

-Wvariadic-macro's
Waarschuwen als variadische macro's worden gebruikt in ISO C90-modus, of als de GNU alternatieve syntaxis is
gebruikt in ISO C99-modus. Dit wordt mogelijk gemaakt door ofwel -Wpedant or -Wtraditioneel. naar
de waarschuwingsberichten blokkeren, gebruik -Wno-variadic-macro's.

-Wvarargs
Waarschuw bij twijfelachtig gebruik van de macro's die worden gebruikt om variabele argumenten te verwerken, zoals:
"va_start". Dit is standaard. Om de waarschuwingsberichten te blokkeren, gebruik -Wno-varargs.

-Wvector-operatie-prestaties
Waarschuw als vectorbewerking niet wordt geïmplementeerd via SIMD-mogelijkheden van de architectuur.
Vooral nuttig voor het afstemmen van prestaties. Vectorbewerking kan worden geïmplementeerd
"stuksgewijze", wat betekent dat de scalaire bewerking wordt uitgevoerd op elke vector
element; "parallel", wat betekent dat de vectorbewerking wordt uitgevoerd met
scalairen van een breder type, die normaal gesproken efficiënter zijn; en "als single"
scalair", wat betekent dat vector past in een scalair type.

-Wno-virtuele-move-toewijzen
Onderdruk waarschuwingen over erven van een virtuele basis met een niet-triviale C++11-beweging
opdracht operator. Dit is gevaarlijk, want als de virtuele basis bereikbaar is langs
meer dan één pad, wordt het meerdere keren verplaatst, wat kan betekenen dat beide objecten in
de verplaatste staat. Als de verplaatsingstoewijzingsoperator is geschreven om te voorkomen dat u van
een verplaatst-van-object is, kan deze waarschuwing worden uitgeschakeld.

-Wvla
Waarschuw als array met variabele lengte in de code wordt gebruikt. -Wno-vla voorkomt de -Wpedant
waarschuwing van de variabele lengte array.

-Wvluchtig-register-var
Waarschuwen als een registervariabele vluchtig wordt verklaard. De vluchtige modifier niet
alle optimalisaties blokkeren die lees- en/of schrijfbewerkingen om te registreren kunnen elimineren
variabelen. Deze waarschuwing is mogelijk gemaakt door: -Muur.

-Wdisabled-optimalisatie
Waarschuwen als een aangevraagde optimalisatiepas is uitgeschakeld. Deze waarschuwing is over het algemeen niet
aangeven dat er iets mis is met je code; het geeft alleen aan dat GCC's
optimizers kunnen de code niet effectief verwerken. Vaak is het probleem dat uw
code is te groot of te complex; GCC weigert programma's te optimaliseren wanneer de optimalisatie
zelf zal waarschijnlijk buitensporig veel tijd in beslag nemen.

-Wpointer-teken (alleen C en Objective-C)
Waarschuw voor het doorgeven van aanwijzerargumenten of toewijzingen met verschillende ondertekening. Dit
optie wordt alleen ondersteund voor C en Objective-C. Het wordt geïmpliceerd door -Muur en bij
-Wpedant, die kan worden uitgeschakeld met -Wno-wijzer-teken.

-Wstack-beschermer
Deze optie is alleen actief wanneer: -stack-beschermer is actief. Het waarschuwt voor functies
die niet zijn beschermd tegen het breken van de stapel.

-Woverlengte-snaren
Waarschuw voor stringconstanten die langer zijn dan de "minimale maximale" lengte
gespecificeerd in de C-norm. Moderne compilers staan ​​over het algemeen stringconstanten toe die:
zijn veel langer dan de minimumlimiet van de standaard, maar zeer draagbare programma's zouden moeten
vermijd het gebruik van langere snaren.

De limiet is van toepassing na string constante aaneenschakeling, en telt niet de trailing
NUL. In C90 was de limiet 509 tekens; in C99 werd het verhoogd tot 4095. C++98 wel
specificeer geen normatief minimum maximum, dus we diagnosticeren overlengte strings niet in
C ++.

Deze optie wordt geïmpliceerd door: -Wpedant, en kan worden uitgeschakeld met
-Wno-overlengte-strings.

-Wunsuffixed-float-constanten (alleen C en Objective-C)
Geef een waarschuwing voor elke zwevende constante die geen achtervoegsel heeft. Wanneer gebruikt
met -Wsysteem-headers het waarschuwt voor dergelijke constanten in systeemkopbestanden.
Dit kan handig zijn bij het voorbereiden van code om te gebruiken met het "FLOAT_CONST_DECIMAL64" pragma
van de decimale extensie met drijvende komma naar C99.

-Wno-aangewezen-init (alleen C en Objective-C)
Onderdruk waarschuwingen wanneer een positionele initialisatie wordt gebruikt om een ​​structuur te initialiseren die
is gemarkeerd met het kenmerk "designated_init".

Opties For Debugging Your Programma or GCC
GCC heeft verschillende speciale opties die worden gebruikt voor het debuggen van uw programma of GCC:

-g Produceer foutopsporingsinformatie in het oorspronkelijke formaat van het besturingssysteem (stabs, COFF,
XCOFF of DWARF 2). GDB kan met deze foutopsporingsinformatie werken.

Op de meeste systemen die het stabs-formaat gebruiken, -g maakt gebruik van extra foutopsporingsinformatie mogelijk
die alleen GDB kan gebruiken; deze extra informatie zorgt ervoor dat debuggen beter werkt in GDB, maar
zorgt er waarschijnlijk voor dat andere debuggers crashen of weigeren het programma te lezen. Als je wilt
controle om zeker te zijn of de extra informatie moet worden gegenereerd, gebruik -gstabs+, -gstabs,
-gxcoff+, -gxcoffof -gvms (zie hieronder).

Met GCC kunt u gebruik maken van -g Met -O. De snelkoppelingen die door geoptimaliseerde code zijn genomen, kunnen:
levert soms verrassende resultaten op: sommige variabelen die u hebt opgegeven, bestaan ​​mogelijk niet op
alle; flow of control kan zich even verplaatsen waar u het niet had verwacht; sommige uitspraken kunnen
niet worden uitgevoerd omdat ze constante resultaten berekenen of omdat hun waarden al op . zijn
hand; sommige instructies kunnen op verschillende plaatsen worden uitgevoerd omdat ze zijn verplaatst
van lussen.

Toch blijkt het mogelijk om geoptimaliseerde output te debuggen. Dit maakt het redelijk
om de optimizer te gebruiken voor programma's die mogelijk fouten bevatten.

De volgende opties zijn handig wanneer GCC wordt gegenereerd met de mogelijkheid voor meer
dan één debugging-indeling.

-gsplit-dwerg
Scheid zoveel mogelijk foutopsporingsinformatie in een apart uitvoerbestand
met de extensie .dwo. Met deze optie kan het bouwsysteem voorkomen dat bestanden worden gekoppeld
met debug-informatie. Om nuttig te zijn, vereist deze optie een debugger die in staat is om:
.dwo-bestanden lezen.

-ggdb
Produceer foutopsporingsinformatie voor gebruik door GDB. Dit betekent om de meest expressieve
formaat beschikbaar (DWARF 2, stabs of het oorspronkelijke formaat als geen van beide is
ondersteund), inclusief GDB-extensies indien mogelijk.

-gpubnamen
Genereer dwerg .debug_pubnames en .debug_pubtypes secties.

-ggnu-pubnamen
Genereer .debug_pubnames en .debug_pubtypes secties in een formaat dat geschikt is voor:
conversie naar een GDB-index. Deze optie is alleen nuttig met een linker die kan
produceer GDB-indexversie 7.

-gstabs
Produceer foutopsporingsinformatie in stabs-formaat (als dat wordt ondersteund), zonder GDB
uitbreidingen. Dit is het formaat dat door DBX op de meeste BSD-systemen wordt gebruikt. Op MIPS, Alpha en
System V Release 4-systemen deze optie produceert steekproeven debugging-uitvoer die niet
begrepen door DBX of SDB. Op System V Release 4-systemen vereist deze optie de GNU
Verzamelen.

-feliminate-ongebruikte-debug-symbolen
Produceer foutopsporingsinformatie in stabs-indeling (als dat wordt ondersteund), voor alleen symbolen
die daadwerkelijk worden gebruikt.

-femit-class-debug-altijd
In plaats van foutopsporingsinformatie voor een C++-klasse uit te zenden in slechts één objectbestand,
zend het uit in alle objectbestanden met behulp van de klasse. Deze optie mag alleen worden gebruikt met:
debuggers die niet in staat zijn om te gaan met de manier waarop GCC normaal foutopsporingsinformatie verzendt
voor klassen omdat het gebruik van deze optie de grootte van de foutopsporingsinformatie vergroot met
maar liefst een factor twee.

-fdebug-types-sectie
Bij gebruik van DWARF versie 4 of hoger, kunnen type DIEs in hun eigen plaats worden gezet
".debug_types" sectie in plaats van ze onderdeel te maken van de ".debug_info" sectie. Het
is efficiënter om ze in aparte comdat-secties te plaatsen, omdat de linker dan kan
dubbele exemplaren verwijderen. Maar nog niet alle DWARF-consumenten ondersteunen ".debug_types"-secties
en op sommige objecten produceert ".debug_types" grotere in plaats van kleinere foutopsporing
informatie.

-gstabs+
Produceer foutopsporingsinformatie in stabs-formaat (als dat wordt ondersteund), met behulp van GNU
extensies die alleen begrepen worden door de GNU debugger (GDB). Het gebruik van deze extensies is:
waarschijnlijk andere debuggers laten crashen of weigeren het programma te lezen.

-gcoff
Produceer foutopsporingsinformatie in COFF-formaat (als dat wordt ondersteund). Dit is de
formaat gebruikt door SDB op de meeste System V-systemen vóór System V Release 4.

-gxcoff
Produceer foutopsporingsinformatie in XCOFF-formaat (als dat wordt ondersteund). Dit is de
formaat gebruikt door de DBX debugger op IBM RS/6000-systemen.

-gxcoff+
Produceer foutopsporingsinformatie in XCOFF-formaat (als dat wordt ondersteund), met behulp van GNU
extensies die alleen begrepen worden door de GNU debugger (GDB). Het gebruik van deze extensies is:
waardoor andere debuggers waarschijnlijk crashen of weigeren het programma te lezen, en dit kan leiden tot:
andere assemblers dan de GNU-assembler (GAS) met een fout mislukken.

-gdwerg-versie
Produceer foutopsporingsinformatie in DWARF-indeling (als dat wordt ondersteund). De waarde van
versie kan 2, 3, 4 of 5 zijn; de standaardversie voor de meeste doelen is 4. DWARF
Versie 5 is slechts experimenteel.

Merk op dat met DWARF Versie 2, sommige poorten een aantal niet-conflicterende nodig hebben en altijd gebruiken
DWARF 3 verlengstukken in de afroltafels.

Versie 4 vereist mogelijk GDB 7.0 en -fvar-tracking-opdrachten voor maximaal voordeel.

-grecord-gcc-schakelaars
Deze schakeloptie zorgt ervoor dat de opdrachtregelopties die worden gebruikt om de compiler aan te roepen die kan:
invloed op het genereren van code die moet worden toegevoegd aan het kenmerk DW_AT_producer in DWARF
debug informatie. De opties zijn aaneengeschakeld met spaties die ze scheiden van
elkaar en van de compilerversie. Zie ook -frecord-gcc-schakelaars voor een ander
manier om compileropties in het objectbestand op te slaan. Dit is de standaardinstelling.

-gno-record-gcc-schakelaars
Niet toestaan ​​om opdrachtregelopties toe te voegen aan het DW_AT_producer-kenmerk in DWARF
informatie debuggen.

-gstrict-dwerg
Niet toestaan ​​dat extensies van een latere DWARF-standaardversie worden gebruikt dan geselecteerd met
-gdwerg-versie. Op de meeste doelen die niet-conflicterende DWARF-extensies van later gebruiken
standaardversies zijn toegestaan.

-gno-strikte-dwerg
Toestaan ​​dat extensies van een latere DWARF-standaardversie worden gebruikt dan geselecteerd met
-gdwerg-versie.

-gz[= type dan: ]
Produceer gecomprimeerde foutopsporingssecties in DWARF-indeling, als dat wordt ondersteund. Indien type dan: is
niet gegeven, het standaardtype hangt af van de mogelijkheden van de assembler en linker
gebruikt. type dan: kan een van zijn geen (comprimeer de foutopsporingssecties niet), zlib (gebruik zlib
compressie in ELF gABI-formaat), of zlib-gnu (gebruik zlib-compressie in traditionele GNU
formaat). Als de linker het schrijven van gecomprimeerde foutopsporingssecties niet ondersteunt, is de optie
wordt afgewezen. Anders, als de assembler ze niet ondersteunt, -gz is stil
genegeerd bij het maken van objectbestanden.

-gvms
Produceer foutopsporingsinformatie in Alpha/VMS-foutopsporingsformaat (als dat wordt ondersteund). Dit
is het formaat dat door DEBUG wordt gebruikt op Alpha/VMS-systemen.

-gniveau
-ggdbniveau
-gstabsniveau
-gcoffniveau
-gxcoffniveau
-gvmsniveau
Vraag foutopsporingsinformatie aan en gebruik ook niveau om aan te geven hoeveel informatie. De
standaardniveau is 2.

Niveau 0 produceert helemaal geen foutopsporingsinformatie. Dus, -g0 ontkent -g.

Niveau 1 levert minimale informatie op, genoeg voor het maken van backtraces in delen van de
programma dat u niet van plan bent te debuggen. Dit omvat beschrijvingen van functies en
externe variabelen en regelnummertabellen, maar geen informatie over lokale variabelen.

Niveau 3 bevat extra informatie, zoals alle macrodefinities die aanwezig zijn in de
programma. Sommige debuggers ondersteunen macro-uitbreiding wanneer u -g3.

-gdwerg-2 accepteert geen aaneengeschakeld debug-niveau, omdat GCC vroeger een
optie -gdwerg dat bedoeld was om foutopsporingsinformatie te genereren in versie 1 van de DWARF
formaat (wat heel anders is dan versie 2), en het zou te verwarrend zijn geweest.
Dat debug-formaat is al lang achterhaald, maar de optie kan nu niet worden gewijzigd. Gebruik in plaats daarvan
een extra -gniveau optie om het foutopsporingsniveau voor DWARF te wijzigen.

-goggle
Schakel het genereren van foutopsporingsinformatie uit, als deze optie wordt weggelaten, wordt deze gegenereerd, of schakel deze uit
anders op niveau 2. De positie van dit argument in de opdrachtregel doet niet
materie; het wordt van kracht nadat alle andere opties zijn verwerkt, en dit alleen
één keer, hoe vaak het ook wordt gegeven. Dit is voornamelijk bedoeld om te worden gebruikt met:
-fvergelijk-foutopsporing.

-fsanitize=adres
Schakel AddressSanitizer in, een snelle geheugenfoutdetector. Instructies voor geheugentoegang zijn:
geïnstrumenteerd om out-of-bounds en use-after-free bugs te detecteren. Zien
<https://github.com/google/sanitizers/wiki/AddressSanitizer> voor meer details. De
runtime-gedrag kan worden beïnvloed met behulp van de ASAN_OPTIONS omgevingsvariabele. Wanneer
ingesteld op "help=1", worden de beschikbare opties getoond bij het opstarten van het instrument
programma. Zien
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> voor een
lijst met ondersteunde opties.

-fsanitize=kernel-adres
Schakel AddressSanitizer voor Linux-kernel in. Zienhttps://github.com/google/kasan/wiki>
voor meer details.

-fsanitize=thread
Schakel ThreadSanitizer in, een snelle datarace-detector. Instructies voor geheugentoegang zijn:
geïnstrumenteerd om datarace-bugs te detecteren. Zien
<https://github.com/google/sanitizers/wiki#threadsanitizer> voor meer details. De loop-
tijdgedrag kan worden beïnvloed met behulp van de TSAN_OPTIONS omgevingsvariabele; zien
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> voor een lijst van
ondersteunde opties.

-fsanitize=lek
Schakel LeakSanitizer in, een geheugenlekdetector. Deze optie is alleen van belang voor het koppelen van
uitvoerbare bestanden en als geen van beide -fsanitize=adres noch -fsanitize=thread is gebruikt. In dat
in het geval dat het uitvoerbare bestand is gekoppeld aan een bibliotheek die "malloc" en andere overschrijft
toewijzende functies. Zien
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> voor meer
details. Het runtime-gedrag kan worden beïnvloed met behulp van de LSAN_OPTIONS milieu
variabel.

-fsanitize=niet gedefinieerd
Schakel UndefinedBehaviorSanitizer in, een snelle ongedefinieerde gedragsdetector. Verscheidene
berekeningen zijn geïnstrumenteerd om ongedefinieerd gedrag tijdens runtime te detecteren. Huidig
subopties zijn:

-fsanitize=verschuiving
Met deze optie kunt u controleren of het resultaat van een ploegendienst niet:
ongedefinieerd. Merk op dat wat precies als ongedefinieerd wordt beschouwd, enigszins verschilt
tussen C en C++, evenals tussen ISO C90 en C99, enz.

-fsanitize=geheel getal-delen-door-nul
Detecteer gehele deling door nul evenals "INT_MIN / -1" deling.

-fsanitize=onbereikbaar
Met deze optie verandert de compiler de "__builtin_unreachable" aanroep in een
Diagnostische bericht oproep in plaats daarvan. Bij het bereiken van de "__builtin_unreachable" oproep,
het gedrag is ongedefinieerd.

-fsanitize=vla-gebonden
Deze optie instrueert de compiler om te controleren of de grootte van een variabele lengte
reeks is positief.

-fsanitize=nul
Met deze optie kunt u de aanwijzer controleren. Vooral de applicatie gebouwd met
deze optie ingeschakeld zal een foutmelding geven wanneer het probeert te dereferentie a
NULL-aanwijzer, of als een referentie (mogelijk een rvalue-referentie) is gebonden aan een NULL
pointer, of als een methode wordt aangeroepen op een object dat wordt aangeduid door een NULL-pointer.

-fsanitize=retour
Met deze optie wordt het controleren van de retourverklaring ingeschakeld. Programma's gebouwd met deze optie
ingeschakeld geeft een foutmelding wanneer het einde van een niet-ongeldige functie is
bereikt zonder daadwerkelijk een waarde terug te geven. Deze optie werkt alleen in C++.

-fsanitize=ondertekend-geheel getal-overloop
Met deze optie schakelt u overloopcontrole voor ondertekende integers in. We controleren of het resultaat van
"+", "*", en zowel unaire als binaire "-" loopt niet over in de ondertekende
rekenkunde. Let op, er moet rekening worden gehouden met de promotieregels voor gehele getallen. Dat is,
het volgende is geen overloop:

ondertekend char a = SCHAR_MAX;
een ++;

-fsanitize=grenzen
Deze optie maakt instrumentatie van arraygrenzen mogelijk. Diverse buiten de grenzen
toegangen worden gedetecteerd. Flexibele array-leden, flexibele array-lid-achtige arrays,
en initializers van variabelen met statische opslag zijn niet geïnstrumenteerd.

-fsanitize=uitlijning
Met deze optie kunt u de uitlijning van aanwijzers controleren wanneer er geen verwijzing is,
of wanneer een verwijzing is gebonden aan een onvoldoende uitgelijnd doel, of wanneer een methode of
constructor wordt aangeroepen op onvoldoende uitgelijnd object.

-fsanitize=objectgrootte
Deze optie maakt instrumentatie van geheugenreferenties mogelijk met behulp van de
"__builtin_object_size" functie. Verschillende toegangen tot aanwijzers buiten de grenzen zijn:
gedetecteerd.

-fsanitize=float-delen-door-nul
Detecteer drijvende-kommadeling door nul. In tegenstelling tot andere vergelijkbare opties,
-fsanitize=float-delen-door-nul is niet ingeschakeld door -fsanitize=niet gedefinieerdaangezien
drijvende-kommadeling door nul kan een legitieme manier zijn om oneindigheden te verkrijgen
en NaN's.

-fsanitize=float-cast-overloop
Met deze optie wordt conversiecontrole van het drijvende-kommatype naar geheel getal ingeschakeld. Wij controleren
dat het resultaat van de conversie niet overloopt. In tegenstelling tot andere soortgelijke
opties -fsanitize=float-cast-overloop is niet ingeschakeld door -fsanitize=niet gedefinieerd.
Deze optie werkt niet goed als de uitzonderingen 'FE_INVALID' zijn ingeschakeld.

-fsanitize=niet-null-kenmerk
Deze optie maakt instrumentatie van oproepen mogelijk, waarbij wordt gecontroleerd of null-waarden dat niet zijn
doorgegeven aan argumenten die door de "niet-null"-functie zijn gemarkeerd als een niet-null-waarde
attribuut.

-fsanitize=retourneert-nonnull-attribuut
Deze optie maakt instrumentatie mogelijk van return-statements in functies gemarkeerd met
"returns_nonnull" functiekenmerk, om het retourneren van null-waarden van dergelijke te detecteren
functies.

-fsanitize=boos
Deze optie maakt instrumentatie van ladingen uit bool mogelijk. Als een andere waarde dan 0/1
is geladen, wordt een runtime-fout gegeven.

-fsanitize=opsomming
Deze optie maakt instrumentatie van belastingen van een enum-type mogelijk. Als een waarde
buiten het bereik van waarden voor het enum-type is geladen, is er een runtime-fout
uitgegeven.

-fsanitize=vptr
Deze optie maakt instrumentatie mogelijk van C++-lidfunctieaanroepen, lidtoegangen
en enkele conversies tussen verwijzingen naar basisklassen en afgeleide klassen, om de
object waarnaar wordt verwezen het juiste dynamische type heeft.

Terwijl -ftrapv zorgt ervoor dat vallen voor ondertekende overlopen worden uitgestoten, -fsanitize=niet gedefinieerd
geeft een diagnostisch bericht. Dit werkt momenteel alleen voor de C-talenfamilie.

-fno-sanitize=alles
Met deze optie worden alle eerder ingeschakelde ontsmettingsmiddelen uitgeschakeld. -fsanitize=alles is niet
toegestaan, omdat sommige ontsmettingsmiddelen niet samen kunnen worden gebruikt.

-fasan-schaduw-offset=aantal
Deze optie dwingt GCC om aangepaste schaduwoffset te gebruiken in AddressSanitizer-controles. Het is
handig om te experimenteren met verschillende schaduwgeheugenlay-outs in Kernel
AdresSanitizer.

-fsanitize-herstel[=kiest]
-fsanitize-herstellen= regelt de foutherstelmodus voor ontsmettingsmiddelen genoemd in komma-
gescheiden lijst van kiest. Als u deze optie inschakelt voor een ontsmettingsmiddelcomponent, wordt het:
probeer het programma voort te zetten alsof er geen fout is opgetreden. Dit betekent meerdere
runtime-fouten kunnen worden gerapporteerd in een enkele programma-uitvoering, en de afsluitcode van de
programma kan wijzen op succes, zelfs als er fouten zijn gemeld. De
-fno-sanitize-herstel= optie kan worden gebruikt om dit gedrag te wijzigen: alleen de eerste
gedetecteerde fout wordt gerapporteerd en het programma wordt vervolgens afgesloten met een afsluitcode die niet nul is.

Momenteel werkt deze functie alleen voor -fsanitize=niet gedefinieerd (en zijn subopties behalve
For -fsanitize=onbereikbaar en -fsanitize=retour), -fsanitize=float-cast-overloop,
-fsanitize=float-delen-door-nul en -fsanitize=kernel-adres. Voor deze ontsmettingsmiddelen
foutherstel is standaard ingeschakeld. -fsanitize-recover=alles en
-fno-sanitize-recover=alles wordt ook geaccepteerd, de eerste maakt herstel voor iedereen mogelijk
ontsmettingsmiddelen die dit ondersteunen, schakelt de laatste het herstel uit voor alle ontsmettingsmiddelen die
ondersteun het.

Syntaxis zonder expliciet kiest parameter is verouderd. Het is gelijk aan

-fsanitize-recover=undefined,float-cast-overflow,float-delen-door-nul

evenzo -fno-sanitize-herstel is gelijk aan

-fno-sanitize-recover=undefined,float-cast-overflow,float-delen-door-nul

-fsanitize-ungedefinieerde-trap-on-error
De -fsanitize-ungedefinieerde-trap-on-error optie instrueert de compiler om te rapporteren
ongedefinieerd gedrag met behulp van "__builtin_trap" in plaats van een "libubsan" bibliotheekroutine.
Het voordeel hiervan is dat de "libubsan"-bibliotheek niet nodig is en niet is gekoppeld
in, dus dit is zelfs bruikbaar in vrijstaande omgevingen.

-fcheck-pointer-grenzen
Schakel Pointer Bounds Checker-instrumentatie in. Elke geheugenreferentie is geïnstrumenteerd
met controles van de aanwijzer die wordt gebruikt voor geheugentoegang tegen de bijbehorende grenzen
wijzer.

Momenteel is er alleen een implementatie voor Intel MPX beschikbaar, dus x86 target en
-mmpx zijn vereist om deze functie in te schakelen. Op MPX gebaseerde instrumentatie vereist een
runtime-bibliotheek om MPX in hardware in te schakelen en grensoverschrijdingssignalen af ​​te handelen. Door
standaard wanneer -fcheck-pointer-grenzen en -mmpx opties worden gebruikt om een ​​programma te koppelen, de
GCC-stuurprogramma-links tegen de libmpx runtime-bibliotheek en libmpxwrappers bibliotheek. Het
geeft ook '-z bndplt' door aan een linker als deze deze optie ondersteunt (die is aangevinkt)
op libmpx-configuratie). Merk op dat oude versies van linker de optie kunnen negeren. Goud
linker ondersteunt de optie '-z bndplt' niet. Zonder '-z bndplt'-ondersteuning in linker all
oproepen naar dynamische bibliotheken verliezen de overschrijdingsgrenzen, waardoor het algehele beschermingsniveau wordt verlaagd. Zijn
ten zeerste aanbevolen om linker te gebruiken met '-z bndplt'-ondersteuning. In het geval dat een dergelijke linker niet is
beschikbaar, het wordt aanbevolen om altijd te gebruiken -statische-libmpxwrappers voor betere bescherming
niveau of gebruik -statisch om externe oproepen naar dynamische bibliotheken volledig te vermijden. MPX-
gebaseerde instrumentatie kan worden gebruikt voor debuggen en kan ook worden opgenomen in de productie
code om de programmabeveiliging te vergroten. Afhankelijk van het gebruik, heb je mogelijk verschillende
vereisten voor de runtime-bibliotheek. De huidige versie van de MPX runtime-bibliotheek
is meer gericht op gebruik als een foutopsporingstool. MPX runtime bibliotheekgebruik impliceert:
-lpdraad. Zie ook -statische-libmpx. Het gedrag van de runtime-bibliotheek kan worden beïnvloed
verschillende gebruiken CHKP_RT_* omgevingsvariabelen. Zien
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> voor meer
details.

Gegenereerde instrumentatie kan worden bestuurd door verschillende -fchkp-* opties en door de
"bnd_variable_size" structuurveldattributen en "bnd_legacy" en "bnd_instrument"
functie attributen. GCC biedt ook een aantal ingebouwde functies voor besturing:
de Pointer Bounds Checker.

-fchkp-controle-onvolledig-type
Genereer controles van aanwijzergrenzen voor variabelen met een onvolledig type. Ingeschakeld door
standaard.

-fchkp-smalle grenzen
Bepaalt de grenzen die worden gebruikt door Pointer Bounds Checker voor verwijzingen naar objectvelden. Indien
vernauwing is ingeschakeld, dan worden veldgrenzen gebruikt. Anders worden objectgrenzen gebruikt.
Zie ook -fchkp-smal-naar-binnenste-array en -fchkp-eerste-veld-heeft-eigen-grenzen.
Standaard ingeschakeld.

-fchkp-eerste-veld-heeft-eigen-grenzen
Dwingt Pointer Bounds Checker om vernauwde grenzen te gebruiken voor het adres van de eerste
veld in de structuur. Standaard heeft een aanwijzer naar het eerste veld dezelfde grenzen
als een verwijzing naar de hele structuur.

-fchkp-smal-naar-binnenste-array
Forceert Pointer Bounds Checker om grenzen van de binnenste arrays te gebruiken in het geval van genest
statische array-toegang. Standaard is deze optie uitgeschakeld en begrenzingen van de buitenste
array worden gebruikt.

-fchkp-optimaliseren
Schakelt Pointer Bounds Checker-optimalisaties in. Standaard ingeschakeld bij optimalisatie
niveaus -O, -O2, -O3.

-fchkp-gebruik-fast-string-functies
Maakt het gebruik van *_nobnd-versies van tekenreeksfuncties mogelijk (geen grenzen kopiëren) door Pointer
Grenzen checker. Standaard uitgeschakeld.

-fchkp-gebruik-nochk-string-functies
Maakt het gebruik van *_nochk-versies van tekenreeksfuncties mogelijk (geen grenzen controleren) door Pointer
Grenzen checker. Standaard uitgeschakeld.

-fchkp-gebruik-statische-grenzen
Sta Pointer Bounds Checker toe om statische grenzen te genereren die de statische grenzen vasthouden
variabelen. Standaard ingeschakeld.

-fchkp-gebruik-statische-const-grenzen
Gebruik statisch geïnitialiseerde grenzen voor constante grenzen in plaats van ze elk te genereren
tijd dat ze nodig zijn. Standaard ingeschakeld wanneer -fchkp-gebruik-statische-grenzen is ingeschakeld.

-fchkp-behandel-nul-dynamische-grootte-als-oneindig
Met deze optie kunnen objecten met een onvolledig type waarvan de dynamisch verkregen grootte nul is
worden in plaats daarvan behandeld als oneindig groot door Pointer Bounds Checker. Deze optie
kan handig zijn als een programma is gekoppeld aan een bibliotheek en voor sommigen ontbreekt informatie over de grootte
symbolen. Standaard uitgeschakeld.

-fchkp-controleren-lezen
Instrueert Pointer Bounds Checker om controles te genereren voor alle leestoegangen tot het geheugen.
Standaard ingeschakeld.

-fchkp-controle-schrijven
Instrueert Pointer Bounds Checker om controles te genereren voor alle schrijftoegangen tot het geheugen.
Standaard ingeschakeld.

-fchkp-winkelgrenzen
Instrueert Pointer Bounds Checker om bounds stores te genereren voor pointer-writes.
Standaard ingeschakeld.

-fchkp-instrument-oproepen
Instrueert Pointer Bounds Checker om pointergrenzen door te geven aan oproepen. Standaard ingeschakeld.

-fchkp-instrument-gemarkeerd-alleen
Instrueert Pointer Bounds Checker naar instrument alleen functies gemarkeerd met de
attribuut "bnd_instrument". Standaard uitgeschakeld.

-fchkp-gebruik-wrappers
Hiermee kan Pointer Bounds Checker oproepen naar ingebouwde functies vervangen door oproepen naar
wrapper functies. Wanneer -fchkp-gebruik-wrappers wordt gebruikt om een ​​programma te koppelen, de GCC-driver
automatisch linkt tegen libmpxwrappers. Zie ook -statische-libmpxwrappers. Ingeschakeld
standaard.

-fdump-finale-insns[=filet]
Dump de laatste interne representatie (RTL) naar filet. Als het optionele argument is
weggelaten (of als filet is "."), wordt de naam van het dumpbestand bepaald door toevoeging
".gkd" naar de naam van het compilatie-uitvoerbestand.

-fvergelijk-foutopsporing[=kiest]
Als er geen fout optreedt tijdens het compileren, voert u de compiler een tweede keer uit en voegt u kiest en
-fvergelijk-foutopsporing-seconde aan de argumenten doorgegeven aan de tweede compilatie. Dump de
definitieve interne weergave in beide compilaties, en druk een fout af als ze verschillen.

Als het gelijkteken wordt weggelaten, is de standaard -goggle is gebruikt.

De omgevingsvariabele GCC_COMPARE_DEBUG, indien gedefinieerd, niet leeg en niet nul,
maakt impliciet mogelijk -fvergelijk-foutopsporing. Indien GCC_COMPARE_DEBUG is gedefinieerd als een tekenreeks
beginnend met een streepje, dan wordt het gebruikt voor kiest, anders de standaard -goggle is
gebruikt.

-fvergelijk-debug=, met het gelijkteken maar zonder kiest, is gelijk aan
-fno-vergelijk-debug, die het dumpen van de uiteindelijke weergave en de
tweede compilatie, zelfs voorkomen GCC_COMPARE_DEBUG van kracht worden.

Om volledige dekking te verifiëren tijdens: -fvergelijk-foutopsporing testen, instellen GCC_COMPARE_DEBUG zeggen
-fcompare-debug-niet-overschreven, die GCC verwerpt als een ongeldige optie in elke feitelijke
compilatie (in plaats van voorbewerking, assemblage of koppeling). Om slechts een waarschuwing te krijgen,
het instellen van GCC_COMPARE_DEBUG naar -w%n-fvergelijk-foutopsporing niet overschreven zal ik doen.

-fvergelijk-foutopsporing-seconde
Deze optie wordt impliciet doorgegeven aan de compiler voor de tweede gevraagde compilatie
by -fvergelijk-foutopsporing, samen met opties om waarschuwingen uit te zetten en andere opties weg te laten
dat zou leiden tot neveneffect compiler-uitvoer naar bestanden of naar de standaarduitvoer.
Dumpbestanden en bewaarde tijdelijke bestanden worden hernoemd zodat ze de ".gk" bevatten
extra extensie tijdens de tweede compilatie, om te voorkomen dat deze worden overschreven
gegenereerd door de eerste.

Wanneer deze optie wordt doorgegeven aan het compilerstuurprogramma, zorgt dit ervoor dat de eerste compilatie naar
worden overgeslagen, wat het nuttig maakt voor weinig anders dan het debuggen van de eigenlijke compiler.

-feliminate-dwerg2-dups
Comprimeer DWARF 2-foutopsporingsinformatie door dubbele informatie over:
elk symbool. Deze optie heeft alleen zin bij het genereren van DWARF 2-foutopsporing
informatie met -gdwerg-2.

-femit-struct-debug-baseonly
Stuur debug-informatie voor struct-achtige typen alleen uit als de basisnaam van de
compilatiebronbestand komt overeen met de basisnaam van het bestand waarin de struct is gedefinieerd.

Deze optie verkleint de grootte van de foutopsporingsinformatie aanzienlijk, maar
aanzienlijk potentieel verlies in type-informatie voor de debugger. Zien
-femit-struct-debug-gereduceerd voor een minder agressieve optie. Zien
-femit-struct-debug-gedetailleerd voor meer gedetailleerde controle.

Deze optie werkt alleen met DWARF 2.

-femit-struct-debug-gereduceerd
Stuur debug-informatie voor struct-achtige typen alleen uit als de basisnaam van de
compilatiebronbestand komt overeen met de basisnaam van het bestand waarin het type is gedefinieerd,
tenzij de struc een sjabloon is of is gedefinieerd in een systeemkop.

Deze optie verkleint de grootte van de foutopsporingsinformatie aanzienlijk, met sommige
mogelijk verlies van type-informatie voor de debugger. Zien -femit-struct-debug-baseonly
voor een agressievere optie. Zien -femit-struct-debug-gedetailleerd voor meer gedetailleerde
controle.

Deze optie werkt alleen met DWARF 2.

-femit-struct-debug-gedetailleerd[=spec-lijst]
Geef de struct-achtige typen op waarvoor de compiler foutopsporingsinformatie genereert. De
de bedoeling is om dubbele struct-foutopsporingsinformatie tussen verschillende objectbestanden te verminderen
binnen hetzelfde programma.

Deze optie is een gedetailleerde versie van -femit-struct-debug-gereduceerd en
-femit-struct-debug-baseonly, die voor de meeste behoeften dient.

Een specificatie heeft de syntaxis[dir:|ind:][orde:|Genre:](elke|sys|baseren|geen)

Het optionele eerste woord beperkt de specificatie tot structs die direct worden gebruikt
(dir:) of indirect gebruikt (ind:). Een structuurtype wordt direct gebruikt wanneer het het type is
van een variabele, lid. Indirect gebruik ontstaat door verwijzingen naar structs. Dat is,
wanneer het gebruik van een onvolledige struct geldig is, is het gebruik indirect. Een voorbeeld is: struct
een direct; struct twee * indirect;.

Het optionele tweede woord beperkt de specificatie tot gewone structs (orde:) Of
generieke structuren (Genre:). Generieke structuren zijn een beetje ingewikkeld om uit te leggen. Voor C++,
dit zijn niet-expliciete specialisaties van sjabloonklassen of niet-sjabloonklassen
binnen het bovenstaande. Andere programmeertalen hebben generieke, maar
-femit-struct-debug-gedetailleerd voert ze nog niet uit.

Het derde woord specificeert de bronbestanden voor die structs waarvoor de compiler
foutopsporingsinformatie moeten uitzenden. De waarden geen en elke de normale betekenis hebben. De
waarde baseren betekent dat de basis van de naam van het bestand waarin de typedeclaratie
verschijnt moet overeenkomen met de basis van de naam van het hoofdcompilatiebestand. In praktijk,
dit betekent dat bij het compileren foo.c, foutopsporingsinformatie wordt gegenereerd voor typen
gedeclareerd in dat bestand en foo.h, maar geen andere header-bestanden. De waarde sys middel
die soorten bevredigend baseren of gedeclareerd in systeem- of compilerheaders.

Mogelijk moet u experimenteren om de beste instellingen voor uw toepassing te bepalen.

De standaard is -femit-struct-debug-detailed=alles.

Deze optie werkt alleen met DWARF 2.

-fno-samenvoegen-debug-strings
Geef de linker opdracht om geen strings samen te voegen in de foutopsporingsinformatie die zijn
identiek in verschillende objectbestanden. Samenvoegen wordt niet door alle assembleurs ondersteund of
linkers. Samenvoegen verkleint de grootte van de foutopsporingsinformatie in het uitvoerbestand op
de kosten van het verhogen van de verwerkingstijd van de link. Samenvoegen is standaard ingeschakeld.

-fdebug-prefix-map=oud=nieuwe
Bij het compileren van bestanden in de map oud, registreer foutopsporingsinformatie en beschrijft ze als
in nieuwe gebruiken.

-fno-dwerg2-cfi-asm
Zend DWARF 2 afwikkelinformatie uit als door de compiler gegenereerde ".eh_frame" sectie in plaats van te gebruiken
GAS ".cfi_*" richtlijnen.

-p Genereer extra code om profielinformatie te schrijven die geschikt is voor het analyseprogramma
prof. U moet deze optie gebruiken bij het compileren van de bronbestanden waarover u gegevens wilt,
en je moet het ook gebruiken bij het linken.

-blz Genereer extra code om profielinformatie te schrijven die geschikt is voor het analyseprogramma
gprof. U moet deze optie gebruiken bij het compileren van de bronbestanden waarover u gegevens wilt,
en je moet het ook gebruiken bij het linken.

-Q Zorgt ervoor dat de compiler elke functienaam afdrukt terwijl deze is gecompileerd, en enkele afdrukken
statistieken over elke pas wanneer deze is afgelopen.

-ftime-rapport
Zorgt ervoor dat de compiler enkele statistieken afdrukt over de tijd die elke passage verbruikt wanneer deze
afwerkingen.

-fmem-rapport
Zorgt ervoor dat de compiler enkele statistieken over permanente geheugentoewijzing afdrukt wanneer het
afwerkingen.

-fmem-rapport-wpa
Zorgt ervoor dat de compiler enkele statistieken afdrukt over permanente geheugentoewijzing voor de WPA
alleen fase.

-fpre-ipa-mem-rapport
-fpost-ipa-mem-rapport
Zorgt ervoor dat de compiler enkele statistieken afdrukt over permanente geheugentoewijzing voor of
na interprocedurele optimalisatie.

-fprofile-rapport
Laat de compiler enkele statistieken afdrukken over de consistentie van het (geschatte) profiel
en effect van individuele passen.

-fstack-gebruik
Maakt de compiler output stack gebruiksinformatie voor het programma, per functie
basis. De bestandsnaam voor de dump wordt gemaakt door toe te voegen .su aan de auxnaam. auxnaam is
gegenereerd op basis van de naam van het uitvoerbestand, indien expliciet gespecificeerd en het is geen
uitvoerbaar is, anders is het de basisnaam van het bronbestand. Een invoer bestaat uit
drie velden:

* De naam van de functie.

* Een aantal bytes.

* Een of meer kwalificaties: "statisch", "dynamisch", "begrensd".

De kwalificatie "statisch" betekent dat de functie de stapel statisch manipuleert: a
vast aantal bytes wordt toegewezen aan het frame bij functie-invoer en vrijgegeven op
functie uitgang; er worden verder geen stapelaanpassingen gemaakt in de functie. De seconde
veld is dit vaste aantal bytes.

De kwalificatie "dynamisch" betekent dat de functie de stapel dynamisch manipuleert: in
naast de hierboven beschreven statische toewijzing, worden stapelaanpassingen gemaakt in de
body van de functie, bijvoorbeeld om argumenten rond functieaanroepen te pushen/poppen. Als de
qualifier "bounded" is ook aanwezig, het bedrag van deze aanpassingen is begrensd op
compileertijd en het tweede veld is een bovengrens van de totale hoeveelheid gebruikte stapel
door de functie. Als het niet aanwezig is, is het bedrag van deze aanpassingen niet begrensd
tijdens het compileren en het tweede veld vertegenwoordigt alleen het begrensde deel.

-fprofile-bogen
Voeg code toe zodat het programma verloopt bogen zijn geïnstrumenteerd. Tijdens de uitvoering van het programma
registreert hoe vaak elke vertakking en oproep wordt uitgevoerd en hoe vaak het wordt genomen
of retourneert. Wanneer het gecompileerde programma wordt afgesloten, slaat het deze gegevens op in een bestand met de naam
auxnaam.gcda voor elk bronbestand. De gegevens kunnen worden gebruikt voor profielgerichte
optimalisaties (-fbranch-waarschijnlijkheden), of voor analyse van testdekking
(-fest-dekking). Elk objectbestand is auxnaam wordt gegenereerd uit de naam van de
uitvoerbestand, indien expliciet gespecificeerd en het is niet het laatste uitvoerbare bestand, anders is het
is de basisnaam van het bronbestand. In beide gevallen wordt elk achtervoegsel verwijderd (bijv
foo.gcda voor invoerbestand dir/foo.cof dir/foo.gcda voor uitvoerbestand gespecificeerd als -o
dir/foo.o).

--Dekking
Deze optie wordt gebruikt om code te compileren en te koppelen die is geïnstrumenteerd voor dekkingsanalyse. De
optie is een synoniem voor -fprofile-bogen -fest-dekking (bij het compileren) en -lgcov
(bij koppelen). Zie de documentatie voor die opties voor meer details.

* Compileer de bronbestanden met -fprofile-bogen plus optimalisatie en codegeneratie
opties. Gebruik voor analyse van testdekking de aanvullende -fest-dekking optie.
U hoeft niet elk bronbestand in een programma te profileren.

* Koppel uw objectbestanden met -lgcov or -fprofile-bogen (de laatste impliceert de
vroegere).

* Voer het programma uit op een representatieve werklast om het boogprofiel te genereren
informatie. Dit kan een willekeurig aantal keren worden herhaald. U kunt gelijktijdig draaien
instanties van uw programma, en op voorwaarde dat het bestandssysteem vergrendeling ondersteunt,
gegevensbestanden worden correct bijgewerkt. Ook "fork"-oproepen worden gedetecteerd en
correct afgehandeld (dubbeltellingen zullen niet gebeuren).

* Voor profielgerichte optimalisaties, compileer de bronbestanden opnieuw met dezelfde
optimalisatie en code generatie opties plus -fbranch-waarschijnlijkheden.

* Gebruik voor analyse van testdekking gcov om voor mensen leesbare informatie te produceren uit
de .gcnr en .gcda bestanden. Verwijs naar de gcov documentatie voor verder
informatie.

met -fprofile-bogen, voor elke functie van je programma maakt GCC een programmastroom aan
grafiek, vindt dan een opspannende boom voor de grafiek. Alleen bogen die niet op de
spanning tree moeten worden geïnstrumenteerd: de compiler voegt code toe om het aantal te tellen
keer dat deze bogen worden uitgevoerd. Wanneer een boog de enige uitgang of enige ingang is naar
een blok, de instrumentatiecode kan aan het blok worden toegevoegd; anders een nieuwe basis
blok moet worden gemaakt om de instrumentatiecode te bevatten.

-fest-dekking
Maak een notitiebestand dat de gcov code-coverage hulpprogramma kan gebruiken om programma te tonen
Dekking. Het notitiebestand van elk bronbestand heet auxnaam.gcno. Verwijs naar de
-fprofile-bogen optie hierboven voor een beschrijving van auxnaam en instructies over hoe u
testdekkingsgegevens genereren. Dekkingsgegevens komen beter overeen met de bronbestanden als
je optimaliseert niet.

-fdbg-cnt-lijst
Druk de naam en de bovengrens van de teller af voor alle foutopsporingstellers.

-fdbg-cnt=tegenwaardelijst
Stel de bovengrens van de interne foutopsporingsteller in. tegenwaardelijst is een door komma's gescheiden
lijst van naam:waarde paren die de bovengrens van elke foutopsporingsteller instellen naam naar
waarde. Alle foutopsporingstellers hebben de initiële bovengrens van "UINT_MAX"; dus "dbg_cnt"
geeft altijd true terug, tenzij de bovengrens door deze optie wordt ingesteld. Bijvoorbeeld met
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" geeft alleen true terug voor de eerste 10
aanroepen.

-weerbaar-soort-passeren
-fuitschakelen-soort-passeren=bereiklijst
Dit is een set opties die worden gebruikt om optimalisatie expliciet uit/in te schakelen
gaat voorbij. Deze opties zijn bedoeld voor het debuggen van GCC. Gebruikers van compilers moeten
gebruik in plaats daarvan reguliere opties voor het in-/uitschakelen van passen.

-fdisable-ipa-passeren
IPA-pas uitschakelen passeren. passeren is de pasnaam. Als dezelfde pas statisch is
meerdere keren in de compiler wordt aangeroepen, moet de pasnaam worden toegevoegd met a
volgnummer beginnend bij 1.

-fdisable-rtl-passeren
-fdisable-rtl-passeren=bereiklijst
RTL-pas uitschakelen passeren. passeren is de pasnaam. Als dezelfde pas statisch is
meerdere keren in de compiler wordt aangeroepen, moet de pasnaam worden toegevoegd met a
volgnummer beginnend bij 1. bereiklijst is een door komma's gescheiden lijst van
functiebereiken of assemblernamen. Elk bereik is een nummerpaar gescheiden door a
dikke darm. Het assortiment is inclusief in beide uiteinden. Als het bereik triviaal is, is het aantal
paar kan worden vereenvoudigd als een enkel nummer. Als de grafiekknooppunten van de functie
uid binnen een van de gespecificeerde bereiken valt, de passeren is daarvoor uitgeschakeld
functie. De uid wordt weergegeven in de functiekop van een dumpbestand, en de pass
namen kunnen worden gedumpt met behulp van optie -fdump-passen.

-fdisable-boom-passeren
-fdisable-boom-passeren=bereiklijst
Boompas uitschakelen passeren. Zien -fdisable-rtl voor de beschrijving van optie:
argumenten.

-fable-ipa-passeren
IPA-pas inschakelen passeren. passeren is de pasnaam. Als dezelfde pas statisch is
meerdere keren in de compiler wordt aangeroepen, moet de pasnaam worden toegevoegd met a
volgnummer beginnend bij 1.

-fable-rtl-passeren
-fable-rtl-passeren=bereiklijst
RTL-pas inschakelen passeren. Zien -fdisable-rtl voor de beschrijving van het optieargument en
voorbeelden.

-weerbare-boom-passeren
-weerbare-boom-passeren=bereiklijst
Boompas inschakelen passeren. Zien -fdisable-rtl voor de beschrijving van optieargumenten.

Hier zijn enkele voorbeelden die het gebruik van deze opties laten zien.

# schakel ccp1 uit voor alle functies
-fdisable-boom-ccp1
# schakel volledig uitrollen uit voor functie waarvan de cgraph node uid 1 . is
-fenable-tree-cunroll=1
# schakel gcse2 uit voor functies in de volgende bereiken [1,1],
# [300,400] en [400,1000]
# schakel gcse2 uit voor functies foo en foo2
-fdisable-rtl-gcse2=foo,foo2
# schakel vroege inlining uit
-fdisable-boom-einline
# ipa inlining uitschakelen
-fdisable-ipa-inline
# activeer boom volledig uitrollen
-fenable-boom-uitrollen

-dbrieven
-fdump-rtl-passeren
-fdump-rtl-passeren=bestandsnaam
Zegt om foutopsporingsdumps te maken tijdens compilatie op tijden gespecificeerd door brieven. Deze
wordt gebruikt voor het debuggen van de op RTL gebaseerde passen van de compiler. De bestandsnamen voor de meeste
van de stortplaatsen wordt gemaakt door een pasnummer en een woord toe te voegen aan de dumpnaamEn
bestanden worden gemaakt in de map van het uitvoerbestand. In het geval van =bestandsnaam keuze,
de dump wordt uitgevoerd in het gegeven bestand in plaats van de door een pass genummerde dumpbestanden. Opmerking
dat het pasnummer statisch wordt berekend terwijl passen in de pas worden geregistreerd
manager. De nummering is dus niet gerelateerd aan de dynamische volgorde van uitvoering van
gaat voorbij. In het bijzonder kan een pas die door een plug-in is geïnstalleerd een getal van meer dan 200 hebben
als het vrij vroeg wordt uitgevoerd. dumpnaam wordt gegenereerd uit de naam van het uitvoerbestand,
indien expliciet gespecificeerd en het is geen uitvoerbaar bestand, anders is het de basisnaam van
het bronbestand. Deze schakelaars kunnen verschillende effecten hebben wanneer: -E is gebruikt voor
voorbewerking.

Debug-dumps kunnen worden ingeschakeld met a -fdump-rtl schakelaar of zo -d optie brieven. Hier
zijn de mogelijke letters voor gebruik in passeren en brieven, en hun betekenis:

-fdump-rtl-uitlijningen
Dump nadat de uitlijning van de vertakkingen is berekend.

-fdump-rtl-asmcons
Dump na het repareren van rtl-statements die niet aan in/uit-beperkingen voldoen.

-fdump-rtl-auto_inc_dec
Dump na auto-inc-dec-detectie. Deze pas wordt alleen uitgevoerd op architecturen die:
auto inc of auto dec instructies hebben.

-fdump-rtl-barrières
Dump na het opruimen van de slagboom instructies.

-fdump-rtl-bbpart
Dump na het verdelen van warme en koude basisblokken.

-fdump-rtl-bbro
Dump na het opnieuw ordenen van blokken.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 en -fdump-rtl-btl2 dumpen inschakelen na het doel met twee vertakkingen
belasting optimalisatie passeert.

-fdump-rtl-bypass
Dump na sprong omzeilen en stroomoptimalisaties regelen.

-fdump-rtl-combineren
Dump na de RTL-instructiecombinatiepas.

-fdump-rtl-compgotos
Dump na het dupliceren van de berekende gotos.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2 en -fdump-rtl-ce3 storten inschakelen na de drie
als de conversie slaagt.

-fdump-rtl-cprop_hardreg
Dump na hard register kopie propagatie.

-fdump-rtl-csa
Dump na het combineren van stapelaanpassingen.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 en -fdump-rtl-cse2 dumping inschakelen na de twee gemeenschappelijke
subexpressie eliminatie passeert.

-fdump-rtl-dce
Dump nadat de op zichzelf staande eliminatie van de dode code is geslaagd.

-fdump-rtl-dbr
Dump na vertraagde filiaalplanning.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 en -fdump-rtl-dce2 schakel dumpen in na de twee dode winkel
eliminatie passeert.

-fdump-rtl-eh
Dump na afronding van EH-verwerkingscode.

-fdump-rtl-eh_bereiken
Dump na conversie van EH-behandelingsbereikregio's.

-fdump-rtl-uitbreiden
Dump na RTL generatie.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 en -fdump-rtl-fwprop2 inschakelen dumpen na de twee forward
voortplanting gaat.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 en -fdump-rtl-gcse2 dumping inschakelen na global common
subexpressie eliminatie.

-fdump-rtl-init-regs
Dump na de initialisatie van de registers.

-fdump-rtl-initialen
Dump na de berekening van de initiële waardensets.

-fdump-rtl-in_cfglayout
Dump na conversie naar cfglayout-modus.

-fdump-rtl-ira
Dump na herhaalde registertoewijzing.

-fdump-rtl-sprong
Dump na de tweede sprong optimalisatie.

-fdump-rtl-loop2
-fdump-rtl-loop2 maakt dumpen mogelijk nadat de optimalisatie van de rtl-lus is geslaagd.

-fdump-rtl-mach
Dump na het uitvoeren van de machineafhankelijke reorganisatiepas, als die pas is
bestaat.

-fdump-rtl-mode_sw
Dump na het verwijderen van redundante modusschakelaars.

-fdump-rtl-rnreg
Dump na hernummering register.

-fdump-rtl-outof_cfglayout
Dump na conversie vanuit cfglayout-modus.

-fdump-rtl-kijkgaatje2
Dump na het kijkgaatje.

-fdump-rtl-postreload
Dump na optimalisaties na herladen.

-fdump-rtl-pro_and_epiloog
Dump na het genereren van de functie prologen en epilogen.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 en -fdump-rtl-sched2 storten inschakelen na het basisblok
planningspassen.

-fdump-rtl-ree
Dump na teken/nul verlenging eliminatie.

-fdump-rtl-seqabstr
Dump na ontdekking van een gemeenschappelijke reeks.

-fdump-rtl-verkorten
Dump na het inkorten van takken.

-fdump-rtl-broer/zus
Dump na broer of zus oproep optimalisaties.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
Deze opties maken dumpen mogelijk na vijf instructieronden.

-fdump-rtl-sms
Dump na modulo planning. Deze pas wordt alleen uitgevoerd op bepaalde architecturen.

-fdump-rtl-stack
Dump na conversie van GCC's "platte registerbestand" registers naar de x87's
stapelachtige registers. Deze pas wordt alleen uitgevoerd op x86-varianten.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 en -fdump-rtl-subreg2 schakel dumpen in na de twee subreg
uitbreiding gaat.

-fdump-rtl-delen ongedaan maken
Dump nadat alle rtl is ongedaan gemaakt.

-fdump-rtl-vartrack
Dump na variabele tracking.

-fdump-rtl-vregs
Dump na het converteren van virtuele registers naar harde registers.

-fdump-rtl-web
Dump na splitsen van livebereik.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Deze dumps zijn gedefinieerd maar produceren altijd lege bestanden.

-in
-fdump-rtl-allemaal
Produceer alle hierboven genoemde stortplaatsen.

-dA Annoteer de uitvoer van de assembler met diverse foutopsporingsinformatie.

-dd Dump alle macrodefinities, aan het einde van de voorverwerking, naast normaal
uitgang.

-dH Produceer een kerndump wanneer er een fout optreedt.

-dp Annoteer de uitvoer van de assembler met een opmerking die aangeeft welk patroon en
alternatief wordt gebruikt. De lengte van elke instructie wordt ook afgedrukt.

-dP Dump de RTL in de assembler-uitvoer als een opmerking voor elke instructie. Ook
gaat aan -dp annotatie.

-dx Genereer gewoon RTL voor een functie in plaats van deze te compileren. Meestal gebruikt met
-fdump-rtl-uitbreiden.

-fdump-noaddr
Bij het debuggen van dumps, onderdrukt u de adresuitvoer. Dit maakt het haalbaarder om
gebruik diff bij het debuggen van dumps voor compiler-aanroepen met verschillende compiler-binaries
en/of verschillende tekst / bss / data / heap / stack / dso startlocaties.

-freport-bug
Verzamel en dump foutopsporingsinformatie in een tijdelijk bestand als ICE in de C/C++-compiler
gebeurde.

-fdump-ongenummerd
Bij het debuggen van dumps, onderdrukt u instructienummers en adresuitvoer. Dit
maakt het meer haalbaar om diff te gebruiken bij het debuggen van dumps voor compiler-aanroepen met
verschillende opties, in het bijzonder met en zonder -g.

-fdump-ongenummerde-links
Bij het debuggen van dumps (zie -d optie hierboven), onderdruk instructienummers voor de
links naar de vorige en volgende instructies in een reeks.

-fdump-vertaaleenheid (alleen C++)
-fdump-vertaaleenheid-opties (alleen C++)
Dump een weergave van de boomstructuur voor de gehele vertaaleenheid naar een bestand.
De bestandsnaam wordt gemaakt door toe te voegen .tu naar de naam van het bronbestand, en het bestand is
gemaakt in dezelfde map als het uitvoerbestand. Als de -opties formulier wordt gebruikt,
opties regelt de details van de dump zoals beschreven voor de -fdump-boom opties.

-fdump-klasse-hiërarchie (alleen C++)
-fdump-klasse-hiërarchie-opties (alleen C++)
Dump een weergave van de hiërarchie van elke klasse en de indeling van de virtuele functietabel naar a
het dossier. De bestandsnaam wordt gemaakt door toe te voegen .klasse naar de naam van het bronbestand, en het bestand
wordt gemaakt in dezelfde map als het uitvoerbestand. Als de -opties formulier wordt gebruikt,
opties regelt de details van de dump zoals beschreven voor de -fdump-boom opties.

-fdump-ipa-schakelaar
Beheers de dumping in verschillende stadia van de taalboom voor inter-procedurele analyse om een
het dossier. De bestandsnaam wordt gegenereerd door een switch-specifiek achtervoegsel toe te voegen aan de bron
bestandsnaam en het bestand wordt gemaakt in dezelfde map als het uitvoerbestand. De
volgende stortingen zijn mogelijk:

allen Schakelt alle inter-procedurele analysedumps in.

cgraaf
Dumpt informatie over call-graph optimalisatie, ongebruikte functie verwijderen, en
beslissingen nemen.

inline
Dump na functie inlining.

-fdump-passen
Dump de lijst met optimalisatiepassen die zijn in- en uitgeschakeld door de huidige
opdrachtregelopties.

-fdump-statistieken-optie
Schakel het dumpen van passtatistieken in een apart bestand in en controleer deze. De bestandsnaam is
gegenereerd door een achtervoegsel toe te voegen dat eindigt op .statistieken naar de naam van het bronbestand, en de
bestand wordt gemaakt in dezelfde map als het uitvoerbestand. Als de -optie vorm is
gebruikt, -statistieken zorgt ervoor dat tellers worden opgeteld over de hele compilatie-eenheid terwijl
-details dumpt elke gebeurtenis terwijl de passen ze genereren. De standaard zonder optie is
tellers optellen voor elke gecompileerde functie.

-fdump-boom-schakelaar
-fdump-boom-schakelaar-opties
-fdump-boom-schakelaar-opties=bestandsnaam
Beheers het dumpen in verschillende stadia van het verwerken van de tussenliggende taalboom om
een bestand. De bestandsnaam wordt gegenereerd door een switch-specifiek achtervoegsel toe te voegen aan de
bronbestandsnaam en het bestand wordt gemaakt in dezelfde map als het uitvoerbestand. In
sprake van =bestandsnaam optie, wordt de dump uitgevoerd in het gegeven bestand in plaats van de auto
benoemde dumpbestanden. Als de -opties formulier wordt gebruikt, opties is een lijst van - gescheiden
opties die de details van de dump beheren. Niet alle opties zijn van toepassing op iedereen
stortplaatsen; degenen die niet zinvol zijn worden genegeerd. De volgende opties zijn beschikbaar:

adres
Druk het adres van elk knooppunt af. Meestal is dit niet zinvol omdat het verandert
volgens de omgeving en het bronbestand. Het primaire gebruik is voor het vastbinden van een
dump-bestand met een foutopsporingsomgeving.

asmnaam
Als "DECL_ASSEMBLER_NAME" is ingesteld voor een bepaalde decl, gebruik die dan in de dump
in plaats van "DECL_NAME". Het primaire gebruik is gebruiksgemak achteruit werken van
verminkte namen in het montagebestand.

slank
Bij het dumpen van front-end intermediaire vertegenwoordigingen, belet het dumpen van leden van
een reikwijdte of lichaam van een functie alleen omdat die reikwijdte is bereikt. Enkel en alleen
dump dergelijke items wanneer ze direct bereikbaar zijn via een ander pad.

Bij het dumpen van mooi bedrukte bomen, verhindert deze optie het dumpen van de lijken van
controle structuren.

Wanneer u RTL dumpt, drukt u de RTL af in een dunne (verkorte) vorm in plaats van de standaard
LISP-achtige weergave.

rauw Print een ruwe weergave van de boom. Standaard worden bomen mooi afgedrukt in
een C-achtige weergave.

gegevens
Schakel meer gedetailleerde dumps in (niet gehonoreerd door elke dumpoptie). ook omvatten:
informatie uit de optimalisatiepassen.

stats
Schakel het dumpen van verschillende statistieken over de pas in (niet door elke dump gehonoreerd)
keuze).

blokken
Schakel het tonen van basisblokgrenzen in (uitgeschakeld in onbewerkte dumps).

diagram
Voor elk van de andere aangegeven dumpbestanden (-fdump-rtl-passeren), dump een
weergave van de regelstroomgrafiek geschikt om te bekijken met GraphViz om
bestand.passid.pass.dot. Elke functie in het bestand is mooi afgedrukt als een subgrafiek,
zodat GraphViz ze allemaal in één plot kan weergeven.

Deze optie werkt momenteel alleen voor RTL-dumps, en de RTL wordt altijd in gedumpt
slanke vorm.

vops
Schakel het weergeven van virtuele operanden voor elke instructie in.

linnen
Schakel het weergeven van regelnummers voor afschriften in.

uid Schakel het tonen van de unieke ID ("DECL_UID") voor elke variabele in.

breedsprakig
Schakel het weergeven van de boomdump voor elke instructie in.

eh Schakel het weergeven van het EH-regionummer in met elke verklaring.

scev
Schakel het weergeven van details van de analyse van de scalaire evolutie in.

geoptimaliseerde
Schakel het tonen van optimalisatie-informatie in (alleen beschikbaar in bepaalde passen).

gemiste
Weergeven van gemiste optimalisatie-informatie inschakelen (alleen beschikbaar in bepaalde passen).

nota
Schakel andere gedetailleerde optimalisatie-informatie in (alleen beschikbaar in bepaalde passen).

=bestandsnaam
In plaats van een automatisch genoemd dumpbestand, wordt het uitgevoerd in de opgegeven bestandsnaam. Het bestand
namen stdout en stderr worden speciaal behandeld en worden als al open beschouwd
standaard streams. Bijvoorbeeld,

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

uitgangen vectorizer dump in foo.dump, terwijl de PRE dump wordt uitgevoerd naar stderr.
Als er twee conflicterende dump-bestandsnamen worden gegeven voor dezelfde pas, dan is de laatste
optie overschrijft de eerdere.

allen Schakel alle opties in, behalve rauw, slank, breedsprakig en linnen.

optaal
Schakel alle optimalisatie-opties in, dwz geoptimaliseerde, gemiste en nota.

De volgende boomstortplaatsen zijn mogelijk:

origineel
Dump vóór elke op bomen gebaseerde optimalisatie, om bestand.origineel.

geoptimaliseerde
Dump na alle op bomen gebaseerde optimalisatie, om bestand.geoptimaliseerd.

gimple
Dump elke functie voor en na de gimplificatie naar een bestand. Het bestand
naam wordt gemaakt door toe te voegen .simpel naar de naam van het bronbestand.

cfg Dump de controlestroomgrafiek van elke functie naar een bestand. De bestandsnaam is gemaakt door
aanhangen .cfg naar de naam van het bronbestand.

ch Dump elke functie na het kopiëren van lusheaders. De bestandsnaam wordt gemaakt door toe te voegen
.ch naar de naam van het bronbestand.

ssa Dump SSA-gerelateerde informatie naar een bestand. De bestandsnaam wordt gemaakt door toe te voegen .sa
naar de naam van het bronbestand.

alias
Dump aliasinformatie voor elke functie. De bestandsnaam wordt gemaakt door toe te voegen
.alias naar de naam van het bronbestand.

ccp Dump elke functie na CCP. De bestandsnaam wordt gemaakt door toe te voegen .ccp aan de
naam van het bronbestand.

winkelccp
Dump elke functie na STORE-CCP. De bestandsnaam wordt gemaakt door toe te voegen .storeccp
naar de naam van het bronbestand.

pre Dump bomen na gedeeltelijke redundantie eliminatie. De bestandsnaam is gemaakt door
aanhangen .pre naar de naam van het bronbestand.

fre Dump bomen na volledige eliminatie van redundantie. De bestandsnaam wordt gemaakt door toe te voegen
.vrij naar de naam van het bronbestand.

kopieerprop
Dump bomen na vermeerdering van kopieën. De bestandsnaam wordt gemaakt door toe te voegen .copyprop
naar de naam van het bronbestand.

winkel_copyprop
Dump bomen na winkel kopie-propagatie. De bestandsnaam wordt gemaakt door toe te voegen
.store_copyprop naar de naam van het bronbestand.

dce Dump elke functie na eliminatie van dode code. De bestandsnaam is gemaakt door
aanhangen .dce naar de naam van het bronbestand.

SRA Dump elke functie na het uitvoeren van scalaire vervanging van aggregaten. Het bestand
naam wordt gemaakt door toe te voegen .sra naar de naam van het bronbestand.

wastafel
Dump elke functie na het uitvoeren van code-sinking. De bestandsnaam is gemaakt door
aanhangen .wasbak naar de naam van het bronbestand.

gift Dump elke functie na het toepassen van dominator-boomoptimalisaties. De bestandsnaam is
gemaakt door toe te voegen .dom naar de naam van het bronbestand.

zeggen Dump elke functie na het verwijderen van dode winkels. De bestandsnaam is gemaakt
door toe te voegen .dse naar de naam van het bronbestand.

phiopt
Dump elke functie na het optimaliseren van PHI-knooppunten in lineaire code. Het bestand
naam wordt gemaakt door toe te voegen .phiopt naar de naam van het bronbestand.

voorprop
Dump elke functie na het voorwaarts verspreiden van variabelen voor eenmalig gebruik. De bestandsnaam
wordt gemaakt door toe te voegen .voorprop naar de naam van het bronbestand.

kopiëren hernoemen
Dump elke functie na het toepassen van de optimalisatie voor het hernoemen van kopiëren. De bestandsnaam is
gemaakt door toe te voegen .copyhernoemen naar de naam van het bronbestand.

nr Dump elke functie na het toepassen van de benoemde retourwaarde-optimalisatie op generiek
bomen. De bestandsnaam wordt gemaakt door toe te voegen .nr naar de naam van het bronbestand.

vect
Dump elke functie na het toepassen van vectorisatie van lussen. De bestandsnaam is gemaakt
door toe te voegen .vector naar de naam van het bronbestand.

GFA Dump elke functie na het toepassen van vectorisatie van basisblokken. De bestandsnaam is
gemaakt door toe te voegen .slp naar de naam van het bronbestand.

vp Dump elke functie na Value Range Propagation (VRP). De bestandsnaam is gemaakt door
aanhangen .vrp naar de naam van het bronbestand.

allen Schakel alle beschikbare boomdumps in met de vlaggen in deze optie.

-fopt-info
-fopt-info-opties
-fopt-info-opties=bestandsnaam
Beheert optimalisatiedumps van verschillende optimalisatiepassages. Als de -opties vorm is
gebruikt, opties is een lijst van - gescheiden optie-trefwoorden om de dumpdetails te selecteren en
optimalisaties.

De opties kan in twee groepen worden verdeeld: opties die de breedsprakigheid van de
dump en opties die beschrijven welke optimalisaties moeten worden opgenomen. De opties van
beide groepen kunnen vrij worden gemengd omdat ze elkaar niet overlappen. Echter, in het geval van
eventuele conflicten, overschrijven de latere opties de eerdere opties op de opdrachtregel.

De volgende opties bepalen de breedsprakigheid van de dump:

geoptimaliseerde
Druk informatie af wanneer een optimalisatie met succes is toegepast. Het is aan een pass
om te bepalen welke informatie relevant is. De vectorizer passeert bijvoorbeeld print
de bronlocatie van lussen die met succes zijn gevectoriseerd.

gemiste
Print informatie over gemiste optimalisaties. Individuele passen bepalen welke
informatie om in de output op te nemen.

nota
Uitgebreide informatie afdrukken over optimalisaties, zoals bepaalde transformaties,
meer gedetailleerde berichten over beslissingen enz.

allen Gedetailleerde optimalisatie-informatie afdrukken. Dit bevat geoptimaliseerde, gemiste en
nota.

Een of meer van de volgende optietrefwoorden kunnen worden gebruikt om een ​​groep te beschrijven:
optimalisaties:

ipa Schakel dumps van alle interprocedurele optimalisaties in.

lus
Schakel dumps van alle lusoptimalisaties in.

inline
Schakel dumps van alle inlining-optimalisaties in.

vec Schakel dumps van alle vectorisatie-optimalisaties in.

optaal
Schakel dumps van alle optimalisaties in. Dit is een superset van de optimalisatiegroepen
hierboven genoemd.

If opties wordt weggelaten, is dit standaard geoptimaliseerd-optal, wat betekent om alle info te dumpen
over succesvolle optimalisaties van alle passen.

Indien de bestandsnaam is opgegeven, dan zijn de dumps van alle toepasselijke optimalisaties
aaneengeschakeld in de bestandsnaam. Anders wordt de dump uitgevoerd naar stderr. Hoewel
meervoudig -fopt-info opties worden geaccepteerd, slechts één daarvan kan een bestandsnaam. Indien
andere bestandsnamen worden gegeven, dan worden alle behalve de eerste dergelijke optie genegeerd.

Merk op dat de uitvoer bestandsnaam wordt overschreven in het geval van meerdere vertaaleenheden. Indien
een gecombineerde output van meerdere vertaaleenheden is gewenst, stderr zou gebruikt moeten worden
gebruiken.

In het volgende voorbeeld wordt de optimalisatie-info uitgevoerd naar: stderr:

gcc -O3 -fopt-info

Dit voorbeeld:

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

voert gemist optimalisatierapport uit van alle passen in alles gemist, en deze:

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

drukt informatie af over gemiste optimalisatiemogelijkheden van vectorisatiepassen
on stderr. Merk op dat -fopt-info-vec-gemist is gelijk aan -fopt-info-gemist-vec.

Als een ander voorbeeld,

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

geeft informatie over gemiste optimalisaties en geoptimaliseerde locaties van alle
de inlining gaat over in inline.txt.

Denk ten slotte aan:

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

Hier de twee uitvoerbestandsnamen vec.miss en lus.opt zijn in conflict aangezien slechts één
uitvoerbestand is toegestaan. In dit geval wordt alleen de eerste optie van kracht en de
volgende opties worden genegeerd. dus alleen vec.miss wordt geproduceerd die stortplaatsen bevat
van de vectorizer over gemiste kansen.

-random-seed=aantal
Deze optie biedt een seed die GCC gebruikt in plaats van willekeurige getallen bij het genereren
bepaalde symboolnamen die in elk gecompileerd bestand anders moeten zijn. Het is ook
gebruikt om unieke stempels te plaatsen in dekkingsgegevensbestanden en de objectbestanden die produceren
hen. U kunt de -willekeurig zaad optie om reproduceerbaar identieke objecten te produceren
bestanden.

De aantal moet voor elk bestand dat u compileert anders zijn.

-fsched-verbose=n
Op doelen die instructieplanning gebruiken, regelt deze optie de hoeveelheid
het debuggen van uitvoer drukt de planner af. Deze informatie is geschreven met een standaardfout,
tenzij -fdump-rtl-sched1 or -fdump-rtl-sched2 is opgegeven, in welk geval het wordt uitgevoerd
naar het gebruikelijke dumplijstbestand, .sched1 or .sched2 respectievelijk. echter voor n
groter dan negen, wordt de uitvoer altijd afgedrukt met de standaardfout.

Voor n groter dan nul, -fsched-uitgebreid geeft dezelfde informatie weer als:
-fdump-rtl-sched1 en -fdump-rtl-sched2. Voor n groter dan één, geeft het ook basis
blokwaarschijnlijkheden, gedetailleerde gereed-lijstinformatie en unit/insn-info. Voor n
groter dan twee, bevat het RTL op afbreekpunt, controlestroom en regio-informatie. En
For n meer dan vier, -fsched-uitgebreid bevat ook informatie over afhankelijkheid.

-opslaan-temps
-save-temps=cwd
Sla de gebruikelijke "tijdelijke" tussenbestanden permanent op; plaats ze in de stroom
directory en geef ze een naam op basis van het bronbestand. Dus, het compileren foo.c Met -c
-opslaan-temps produceert bestanden foo.i en foo.sevenals foo.o. Dit creëert een
voorbewerkt foo.i output-bestand, hoewel de compiler nu normaal gesproken een
geïntegreerde preprocessor.

Bij gebruik in combinatie met de -x opdrachtregeloptie, -opslaan-temps is verstandig
genoeg om te voorkomen dat een invoerbronbestand met dezelfde extensie als een
tussenbestand. Het corresponderende tussenbestand kan worden verkregen door hernoemen
het bronbestand voor gebruik -opslaan-temps.

Als u GCC parallel aanroept en verschillende bronbestanden compileert die een
gemeenschappelijke basisnaam in verschillende submappen of hetzelfde bronbestand gecompileerd voor
meerdere uitvoerbestemmingen, is het waarschijnlijk dat de verschillende parallelle compilers
interfereren met elkaar en overschrijven de tijdelijke bestanden. Bijvoorbeeld:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

kan resulteren in foo.i en foo.o gelijktijdig geschreven door beide compilers.

-save-temps=obj
Sla de gebruikelijke "tijdelijke" tussenbestanden permanent op. Als de -o optie wordt gebruikt,
de tijdelijke bestanden zijn gebaseerd op het objectbestand. Als de -o optie niet wordt gebruikt, de
-save-temps=obj schakelaar gedraagt ​​zich als -opslaan-temps.

Bijvoorbeeld:

gcc -save-temps=obj -c foo.c
gcc -save-temps=obj -c bar.c -o dir/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar

creëert foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s en
dir2/yfoobar.o.

-tijd[=filet]
Rapporteer de CPU-tijd die elk subproces in beslag neemt in de compilatievolgorde. voor C
bronbestanden, dit is de eigenlijke compiler en assembler (plus de linker als linken is
gedaan).

Zonder de specificatie van een uitvoerbestand ziet de uitvoer er als volgt uit:

# cc1 0.12 0.01
# als 0.00 0.01

Het eerste cijfer op elke regel is de "gebruikerstijd", dat wil zeggen de tijd die wordt besteed aan het uitvoeren van de
zelf programmeren. Het tweede getal is "systeemtijd", de tijd die wordt besteed aan het uitvoeren van bewerkingen
systeemroutines namens het programma. Beide cijfers zijn in seconden.

Met de specificatie van een uitvoerbestand wordt de uitvoer toegevoegd aan het genoemde bestand,
en het ziet er zo uit:

0.12 0.01 cc1
0.00 0.01 as

De "gebruikerstijd" en de "systeemtijd" worden voor de programmanaam geplaatst en de
opties die aan het programma zijn doorgegeven, worden weergegeven, zodat men later kan zien welk bestand het was
wordt samengesteld, en met welke opties.

-fvar-tracking
Voer een variabele trackingpas uit. Het berekent waar variabelen op elke positie worden opgeslagen
in codes. Er wordt dan betere foutopsporingsinformatie gegenereerd (als de foutopsporingsinformatie
formaat ondersteunt deze informatie).

Het is standaard ingeschakeld bij het compileren met optimalisatie (-Jij, -O, -O2, ...),
foutopsporingsinformatie (-g) en het debug-infoformaat ondersteunt dit.

-fvar-tracking-opdrachten
Annoteer toewijzingen aan gebruikersvariabelen in het begin van de compilatie en probeer deze over te dragen
de annotaties doorheen de compilatie helemaal tot het einde, in een poging
om debug-informatie te verbeteren en tegelijkertijd te optimaliseren. Gebruik van -gdwerg-4 wordt aanbevolen langs
mee.

Het kan worden ingeschakeld, zelfs als var-tracking is uitgeschakeld, in welk geval annotaties zijn
gemaakt en onderhouden, maar aan het einde weggegooid. Standaard is deze vlag ingeschakeld
met -fvar-tracking, behalve wanneer selectieve planning is ingeschakeld.

-fvar-tracking-toewijzingen-toggle
Toggle -fvar-tracking-opdrachtenop dezelfde manier als dat -goggle knevels -g.

-print-bestandsnaam=bibliotheek
Druk de volledige absolute naam van het bibliotheekbestand af bibliotheek dat zou worden gebruikt wanneer
koppelen --- en doe niets anders. Met deze optie compileert of linkt GCC niet
iets; het drukt alleen de bestandsnaam af.

-print-meerdere mappen
Druk de mapnaam af die overeenkomt met de multilib geselecteerd door andere schakelaars
aanwezig in de opdrachtregel. Deze map zou moeten bestaan ​​in GCC_EXEC_PREFIX.

-print-multi-lib
Druk de toewijzing af van multilib-directorynamen naar compiler-switches die ze inschakelen.
De directorynaam wordt van de schakelaars gescheiden door: ;, en elke schakelaar begint met een
@ in plaats van de -, zonder spaties tussen meerdere schakelaars. Dit hoort
shell-verwerking te vergemakkelijken.

-print-multi-os-map
Druk het pad af naar OS-bibliotheken voor de geselecteerde multilib, relatief aan sommige lib
submap. Als OS-bibliotheken aanwezig zijn in de lib submap en geen multilibs
worden gebruikt, is dit meestal gewoon ., als OS-bibliotheken aanwezig zijn in libachtervoegsel broer
mappen die dit afdrukt, bijv ../lib64, ../ lib or ../lib32, of als OS-bibliotheken zijn
aanwezig in lib/submap submappen die het afdrukt, bijv amd64, spacv9 or ev6.

-print-multiarch
Druk het pad af naar OS-bibliotheken voor de geselecteerde multiarch, relatief aan sommige lib
submap.

-print-prog-naam=programma
Like -print-bestandsnaam, maar zoekt naar een programma zoals cpp.

-print-libgcc-bestandsnaam
Hetzelfde als -print-bestandsnaam=libgcc.a.

Dit is handig wanneer u -nostlib or -nodefaultlibs maar je wilt wel linken met
libgcc.a. U kunt doen:

gcc -nostdlib ... `gcc -print-libgcc-bestandsnaam`

-print-zoekmap
Druk de naam af van de geconfigureerde installatiemap en een lijst met programma- en
bibliotheekmappen gcc zoekopdrachten --- en doe niets anders.

Dit is handig wanneer: gcc drukt de foutmelding af installatie probleem, kan niet exec
cpp0: Nee dergelijk filet or directory. Om dit op te lossen, moet je ofwel cpp0 en
andere compilercomponenten waar: gcc verwacht ze te vinden, of u kunt de
variabele omgeving GCC_EXEC_PREFIX naar de map waarin u ze hebt geïnstalleerd. niet doen
vergeet de trailing /.

-print-sysroot
Druk de doel-sysroot-map af die tijdens het compileren wordt gebruikt. Dit is de
doel-sysroot opgegeven tijdens het configureren of met behulp van de --sysroot keuze,
mogelijk met een extra achtervoegsel dat afhangt van de compilatie-opties. Als er geen doel is
sysroot is opgegeven, drukt de optie niets af.

-print-sysroot-headers-achtervoegsel
Druk het achtervoegsel af dat is toegevoegd aan de doel-sysroot bij het zoeken naar headers, of geef een
fout als de compiler niet is geconfigureerd met zo'n achtervoegsel --- en doe niets
anders.

- dumpmachine
Druk de doelmachine van de compiler af (bijvoorbeeld i686-pc-linux-gnu) --- en niet doen
nog iets anders.

-dumpversie
Druk de compilerversie af (bijvoorbeeld 3.0) --- en doe niets anders.

-stortspecificaties
Druk de ingebouwde specificaties van de compiler af --- en doe niets anders. (Dit wordt gebruikt wanneer
GCC zelf wordt gebouwd.)

-fno-elimineren-ongebruikte-debug-types
Normaal gesproken vermijdt GCC bij het produceren van DWARF 2-uitvoer het produceren van foutopsporingssymbooluitvoer voor:
typen die nergens worden gebruikt in het bronbestand dat wordt gecompileerd. Soms is het handig
om GCC foutopsporingsinformatie te laten verzenden voor alle typen die in een compilatie-eenheid zijn gedeclareerd,
ongeacht of ze daadwerkelijk in die compilatie-eenheid worden gebruikt, voor
bijvoorbeeld als u in de debugger een waarde wilt casten naar een type dat niet echt is
gebruikt in uw programma (maar is gedeclareerd). Vaker resulteert dit echter in een
aanzienlijke hoeveelheid verloren ruimte.

Opties ZIJN Controle Optimalisatie
Deze opties regelen verschillende soorten optimalisaties.

Zonder enige optimalisatieoptie is het doel van de compiler om de compilatiekosten te verlagen
en om debuggen de verwachte resultaten te laten opleveren. Verklaringen zijn onafhankelijk: als u
stop het programma met een breekpunt tussen instructies, u kunt dan een nieuwe waarde toewijzen aan
een willekeurige variabele of verander de programmateller in een andere instructie in de functie en get
precies de resultaten die u van de broncode verwacht.

Door optimalisatievlaggen aan te zetten, probeert de compiler de prestaties te verbeteren en/of
codegrootte ten koste van compilatietijd en mogelijk de mogelijkheid om de
programma.

De compiler voert optimalisatie uit op basis van de kennis die hij van het programma heeft.
Door meerdere bestanden tegelijk te compileren naar een enkele uitvoerbestandsmodus kan de compiler gebruiken
informatie verkregen uit alle bestanden bij het samenstellen van elk van hen.

Niet alle optimalisaties worden rechtstreeks beheerd door een vlag. Alleen optimalisaties met een
vlag worden in deze sectie vermeld.

De meeste optimalisaties zijn alleen ingeschakeld als een -O niveau wordt ingesteld op de opdrachtregel. Anders
ze zijn uitgeschakeld, zelfs als individuele optimalisatievlaggen zijn opgegeven.

Afhankelijk van het doel en hoe GCC is geconfigureerd, kan een iets andere set van
optimalisaties kunnen worden ingeschakeld bij elke -O niveau dan hier vermeld. U kunt een beroep doen op GCC
Met -Q --help=optimalisaties om de exacte set optimalisaties te vinden die zijn ingeschakeld op
elk niveau.

-O
-O1 Optimaliseren. Het optimaliseren van de compilatie kost iets meer tijd, en veel meer geheugen voor
een grote functie.

met -O, de compiler probeert de codegrootte en uitvoeringstijd te verkleinen, zonder te presteren
alle optimalisaties die veel compilatietijd vergen.

-O schakelt de volgende optimalisatievlaggen in:

-fauto-inc-dec -ftak-tel-reg -fcombine-stack-aanpassingen -fvergelijk-elim
-fcprop-registers -fdce -fdefer-pop -fvertraagde-tak -fdse -vooruit-propageren
-fguess-branch-waarschijnlijkheid -fif-conversie2 -fif-conversie
-finline-functies-eenmaal genoemd -fipa-pure-const -fipa-profiel -fipa-referentie
-fmerge-constanten -fmove-loop-invarianten -fkrimpfolie -fsplit-wide-types
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftree-ch -ftree-kopie-prop -ftree-kopieernaam
-ftree-dce -ftree-dominator-opteert -ftree-dse -ftree-forwprop - vrij van bomen -ftree-phiprop
-vtree-gootsteen -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -fun-at-a-time

-O gaat ook aan -fomit-frame-aanwijzer op machines waar dit niet interfereert
met debuggen.

-O2 Nog meer optimaliseren. GCC voert bijna alle ondersteunde optimalisaties uit die dat niet doen
een afweging van ruimtesnelheid met zich meebrengen. In vergelijking met -O, deze optie verhoogt beide
compilatietijd en de prestaties van de gegenereerde code.

-O2 schakelt alle optimalisatievlaggen in die zijn gespecificeerd door -O. Het zet ook het volgende aan:
optimalisatie vlaggen: -fthread-sprongen -falign-functies -falign-sprongen -falign-lussen
-falign-labels -fcaller-opslaat -fcrossspringen -fcse-volg-sprongen -fcse-blokken-overslaan
-fdelete-null-pointer-controles -fdevirtualiseren -fdevirtualiseren-speculatief
-fexpensive-optimalisaties -fgcse -fgcse-lm -hijs-aangrenzende-ladingen
-finline-kleine-functies -findirect-inlining -fipa-cp -fipa-cp-uitlijning -fipa-sra
-fipa-icf -fisoleren-foutieve-paden-dereferentie -fla-remat -foptimize-broer-zus-oproepen
-foptimize-strlen -fgedeeltelijke-inlining -fkijkgaatje2 -freeorder-blokken
-freeorder-blokken-en-partitie -freeorder-functies -frerun-cse-na-lus
-fsched-interblock -fsched-specificatie -fschema-insns -fschema-insns2 -fstrict-aliasing
-fstrict-overloop -ftree-ingebouwde-aanroep-dce -ftree-switch-conversie -ftree-staart-samenvoegen
-ftree-pre -ftree-vrp -fipa-ra

Let op de waarschuwing onder -fgcse over het aanroepen van -O2 op programma's die gebruikmaken van computergestuurde
ga naar S.

OPMERKING: In Ubuntu 8.10 en latere versies, -D_FORTIFY_SOURCE=2 is standaard ingesteld en is
geactiveerd wanneer -O is ingesteld op 2 of hoger. Dit maakt extra compileertijd en
runtime-controles voor verschillende libc-functies. Om uit te schakelen, specificeer een van beide
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 Nog meer optimaliseren. -O3 schakelt alle optimalisaties in die zijn gespecificeerd door -O2 en gaat ook aan
de -finline-functies, -funswitch-loops, -fvoorspellende-commoning, -fgcse-na-herladen,
-ftree-loop-vectoriseren, -ftree-loop-distribueer-patronen, -ftree-slp-vectoriseren,
-fvect-kostenmodel, -ftree-gedeeltelijke-pre en -fipa-cp-kloon opties.

-O0 Verminder de compilatietijd en zorg dat debugging de verwachte resultaten oplevert. Dit is de
standaard.

-Jij Optimaliseer voor grootte. -Jij maakt alles mogelijk -O2 optimalisaties die doorgaans niet toenemen
code grootte. Het voert ook verdere optimalisaties uit die zijn ontworpen om de codegrootte te verkleinen.

-Jij schakelt de volgende optimalisatievlaggen uit: -falign-functies -falign-sprongen
-falign-lussen -falign-labels -freeorder-blokken -freeorder-blokken-en-partitie
-fprefetch-loop-arrays

-Of snel
Negeer de naleving van strikte normen. -Of snel maakt alles mogelijk -O3 optimalisaties. Het ook
maakt optimalisaties mogelijk die niet geldig zijn voor alle programma's die aan de norm voldoen. Het
gaat aan -ffast-wiskunde en de Fortran-specifieke -fno-bescherm-ouders en -fstack-arrays.

-Og Optimaliseer de foutopsporingservaring. -Og maakt optimalisaties mogelijk die niet interfereren met
debuggen. Het zou het optimale optimalisatieniveau moeten zijn voor de standaard bewerkings-
compile-debug-cyclus, die een redelijk niveau van optimalisatie biedt met behoud van
snelle compilatie en een goede debugging-ervaring.

Als u meerdere gebruikt -O opties, met of zonder niveaunummers, de laatste optie is
degene die effectief is.

Opties van het formulier -fvlag specificeer machine-onafhankelijke vlaggen. De meeste vlaggen hebben beide
positieve en negatieve vormen; de negatieve vorm van -foei is -fno-foo. In de onderstaande tabel,
slechts één van de formulieren wordt vermeld --- degene die u gewoonlijk gebruikt. Je kunt de ander bedenken
vorm door ofwel te verwijderen Nee- of toevoegen.

De volgende opties regelen specifieke optimalisaties. Ze worden ofwel geactiveerd door: -O
opties of zijn gerelateerd aan degenen die dat wel zijn. U kunt de volgende vlaggen gebruiken in de rare
gevallen waarin "fine-tuning" van uit te voeren optimalisaties gewenst is.

-fno-uitstellen-pop
Pop altijd de argumenten voor elke functieaanroep zodra die functie terugkeert. Voor
machines die argumenten moeten popen na een functie-aanroep, laat de compiler normaal gesproken
argumenten stapelen zich op op de stapel voor verschillende functie-aanroepen en verschijnen ze allemaal op
een keer.

Uitgeschakeld op niveaus -O, -O2, -O3, -Jij.

-vooruit-propageren
Voer een voorwaartse vermeerdering door op RTL. De pas probeert twee instructies te combineren
en controleert of het resultaat vereenvoudigd kan worden. Als het afrollen van de lus actief is, twee passages
worden uitgevoerd en de tweede is gepland na het uitrollen van de lus.

Deze optie is standaard ingeschakeld op optimalisatieniveaus -O, -O2, -O3, -Jij.

-ffp-contract=stijl
-ffp-contract=uit schakelt samentrekking van drijvende-komma-expressies uit. -ffp-contract=snel
maakt samentrekking van drijvende-komma-expressies mogelijk, zoals het vormen van fused multi-add
bewerkingen als het doel native ondersteuning voor hen heeft. -ffp-contract=aan maakt
samentrekking van drijvende-komma-expressie indien toegestaan ​​door de taalstandaard. Dit is
momenteel niet geïmplementeerd en gelijk behandeld aan -ffp-contract=uit.

De standaard is -ffp-contract=snel.

-fomit-frame-aanwijzer
Bewaar de framepointer niet in een register voor functies die er geen nodig hebben. Dit
vermijdt de instructies om framepointers op te slaan, in te stellen en te herstellen; het maakt ook een
extra register beschikbaar in vele functies. It ook merken debugging onmogelijk on
sommige machines.

Op sommige machines, zoals de VAX, heeft deze vlag geen effect, omdat de standaard
aanroepvolgorde verwerkt automatisch de frame-aanwijzer en er wordt niets opgeslagen door
doen alsof het niet bestaat. De machinebeschrijvingsmacro "FRAME_POINTER_REQUIRED"
bepaalt of een doelcomputer deze vlag ondersteunt.

De standaardinstelling (wanneer niet wordt geoptimaliseerd voor grootte) voor 32-bits GNU/Linux x86 en 32-bits
Darwin x86 doelen is -fomit-frame-aanwijzer. U kunt GCC configureren met de
--enable-frame-aanwijzer configure optie om de standaard te wijzigen.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-foptimize-broer-zus-oproepen
Optimaliseer recursieve oproepen voor broers en zussen.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-foptimize-strlen
Optimaliseer verschillende standaard C-stringfuncties (bijv. "strlen", "strchr" of "strcpy") en
hun "_FORTIFY_SOURCE" tegenhangers in snellere alternatieven.

Ingeschakeld op niveaus -O2, -O3.

-fno-inline
Breid geen functies inline uit, behalve die gemarkeerd met de "always_inline"
attribuut. Dit is de standaardinstelling wanneer niet wordt geoptimaliseerd.

Enkele functies kunnen worden vrijgesteld van inlining door ze te markeren met de "noinline"
attribuut.

-finline-kleine-functies
Integreer functies in hun bellers wanneer hun lichaam kleiner is dan verwacht
functie-aanroepcode (zodat de totale omvang van het programma kleiner wordt). de compiler
bepaalt heuristisch welke functies eenvoudig genoeg zijn om de moeite waard te zijn om in te integreren
op deze manier. Deze inlining is van toepassing op alle functies, zelfs die niet inline gedeclareerd zijn.

Ingeschakeld op niveau -O2.

-findirect-inlining
Inline ook indirecte oproepen waarvan bekend is dat ze tijdens het compileren bekend zijn dankzij
vorige inlining. Deze optie heeft alleen effect als inlining zelf is ingeschakeld
Door de -finline-functies or -finline-kleine-functies opties.

Ingeschakeld op niveau -O2.

-finline-functies
Overweeg alle functies voor inlining, zelfs als ze niet inline zijn gedeclareerd. De
compiler beslist heuristisch welke functies het waard zijn om op deze manier te integreren.

Als alle oproepen naar een bepaalde functie zijn geïntegreerd en de functie is gedeclareerd
"statisch", dan wordt de functie normaal gesproken niet als zelfstandige assembler-code uitgevoerd.

Ingeschakeld op niveau -O3.

-finline-functies-eenmaal genoemd
Overweeg alle "statische" functies die eenmaal zijn aangeroepen om in hun beller te worden opgenomen, zelfs als:
ze zijn niet gemarkeerd als "inline". Als een oproep naar een bepaalde functie is geïntegreerd, dan
functie wordt niet op zichzelf als assembler-code uitgevoerd.

Ingeschakeld op niveaus -O1, -O2, -O3 en -Jij.

-angstig-inlining
Inline-functies gemarkeerd met "always_inline" en functies waarvan de body kleiner lijkt dan
de functie-aanroep overhead vroeg voordat u doet -fprofile-genereren instrumentatie en
echte inlining pass. Hierdoor wordt profilering aanzienlijk goedkoper en meestal
sneller inlinen op programma's met grote ketens van geneste wrapper-functies.

Standaard ingeschakeld.

-fipa-sra
Voer interprocedurele scalaire vervanging van aggregaten uit, verwijder ongebruikte parameters
en vervanging van parameters doorgegeven door referentie door parameters doorgegeven door waarde.

Ingeschakeld op niveaus -O2, -O3 en -Jij.

-finline-limiet=n
GCC beperkt standaard de grootte van functies die inline kunnen worden geplaatst. Deze vlag staat toe:
grove controle van deze limiet. n is de grootte van functies die kunnen worden inline
aantal pseudo-instructies.

Inlining wordt feitelijk bestuurd door een aantal parameters, die kunnen worden gespecificeerd
individueel met behulp van --param naam=waarde. De -finline-limiet=n optie stelt een aantal van
deze parameters als volgt:

max-inline-insns-single
is ingesteld op n/ 2.

max-inline-insns-auto
is ingesteld op n/ 2.

Zie hieronder voor een documentatie van de individuele parameters die inlining en
voor de standaardwaarden van deze parameters.

Opmerking: er is misschien geen waarde aan -finline-limiet dat resulteert in standaard gedrag.

Opmerking: pseudo-instructie vertegenwoordigt, in deze specifieke context, een abstract
meting van de grootte van de functie. Het vertegenwoordigt op geen enkele manier een telling van de vergadering
instructies en als zodanig kan de exacte betekenis ervan veranderen van de ene release naar de andere
andere.

-fno-keep-inline-dllexport
Dit is een meer verfijnde versie van -fkeep-inline-functies, die alleen van toepassing is op
functies die zijn gedeclareerd met het kenmerk "dllexport" of declspec

-fkeep-inline-functies
Zend in C "statische" functies uit die "inline" zijn gedeclareerd in het objectbestand, zelfs als:
de functie is in al zijn bellers opgenomen. Deze schakelaar heeft geen invloed op:
functies met behulp van de "externe inline" extensie in GNU C90. Zend in C++ alles en nog wat uit
inline-functies in het objectbestand.

-fhoud-statische-consts
Geef variabelen uit die zijn gedeclareerd als "statische const" wanneer optimalisatie niet is ingeschakeld, zelfs als de
naar variabelen wordt niet verwezen.

GCC schakelt deze optie standaard in. Als u de compiler wilt dwingen om te controleren of a
naar variabele wordt verwezen, ongeacht of optimalisatie is ingeschakeld of niet, gebruik
de -fno-keep-static-consts optie.

-fmerge-constanten
Poging om identieke constanten samen te voegen (tekenreeksconstanten en drijvende-kommaconstanten)
over compilatie-eenheden.

Deze optie is de standaard voor geoptimaliseerde compilatie als de assembler en linker
ondersteun het. Gebruik maken van -fno-samenvoegen-constanten om dit gedrag te remmen.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fmerge-alle-constanten
Poging om identieke constanten en identieke variabelen samen te voegen.

Deze optie houdt in: -fmerge-constanten. In aanvulling op -fmerge-constanten dit
beschouwt bijv. zelfs constant geïnitialiseerde arrays of geïnitialiseerde constante variabelen met
integrale of drijvende-kommatypes. Talen zoals C of C++ vereisen elke variabele,
het opnemen van meerdere instanties van dezelfde variabele in recursieve aanroepen, om verschillende
locaties, dus het gebruik van deze optie resulteert in afwijkend gedrag.

-fmodulo-sched
Voer de swing-modulo-planning uit vlak voor de eerste planningspas. Dit
pass kijkt naar de binnenste lussen en herschikt hun instructies door verschillende overlappende
iteraties.

-fmodulo-sched-toestaan-regmoves
Voer agressievere op sms gebaseerde modulo-planning uit met toegestane registerbewegingen. Door
door deze vlag in te stellen, worden bepaalde randen van anti-afhankelijkheden verwijderd, waardoor de
generatie van reg-moves op basis van de levensloopanalyse. Deze optie is effectief
alleen met -fmodulo-sched ingeschakeld.

-fno-filiaal-tel-reg
Gebruik geen "decrement and branch"-instructies op een telregister, maar in plaats daarvan:
genereer een reeks instructies die een register verlagen, vergelijk het met
nul, dan vertakt op basis van het resultaat. Deze optie is alleen zinvol op
architecturen die dergelijke instructies ondersteunen, waaronder x86, PowerPC, IA-64 en
S/390.

Standaard ingeschakeld op -O1 en hoger.

De standaard is -ftak-tel-reg.

-fno-functie-cse
Zet geen functieadressen in registers; maak elke instructie die a . aanroept
constante functie bevatten expliciet het adres van de functie.

Deze optie resulteert in minder efficiënte code, maar enkele vreemde hacks die de
assembler-uitvoer kan worden verward door de optimalisaties die worden uitgevoerd wanneer deze optie is
niet gebruikt.

De standaard is -ffunctie-cse

-fno-nul-geïnitialiseerd-in-bss
Als het doel een BSS-sectie ondersteunt, plaatst GCC standaard variabelen die:
geïnitialiseerd op nul in BSS. Dit kan ruimte besparen in de resulterende code.

Deze optie schakelt dit gedrag uit omdat sommige programma's expliciet afhankelijk zijn van variabelen
naar de gegevenssectie gaan --- bijv. zodat het resulterende uitvoerbare bestand de . kan vinden
begin van die sectie en/of maak op basis daarvan aannames.

De standaard is -fzero-geïnitialiseerd-in-bss.

-fthread-sprongen
Voer optimalisaties uit die controleren of een sprong vertakt naar een locatie waar een andere
vergelijking ondergebracht bij de eerste wordt gevonden. Zo ja, dan wordt de eerste tak doorgestuurd naar
ofwel de bestemming van het tweede filiaal of een punt dat er onmiddellijk op volgt,
afhankelijk van of bekend is dat de voorwaarde waar of onwaar is.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fsplit-wide-types
Bij gebruik van een type dat meerdere registers in beslag neemt, zoals "long long" op een 32-bit
systeem, de registers opsplitsen en onafhankelijk toewijzen. dit normaal
genereert betere code voor die typen, maar kan het debuggen moeilijker maken.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fcse-volg-sprongen
In Common Subexpression Elimination (CSE), scant u door springinstructies wanneer de
het doel van de sprong wordt door geen enkel ander pad bereikt. Bijvoorbeeld, wanneer CSE tegenkomt
een "if"-statement met een "else"-clausule, CSE volgt de sprong wanneer de voorwaarde
getest is vals.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fcse-blokken-overslaan
Dit is vergelijkbaar met -fcse-volg-sprongen, maar zorgt ervoor dat CSE sprongen volgt die
blokken voorwaardelijk overslaan. Wanneer CSE een eenvoudige "if"-instructie tegenkomt met nee
anders clausule, -fcse-blokken-overslaan zorgt ervoor dat CSE de sprong rond het lichaam van de
"indien".

Ingeschakeld op niveaus -O2, -O3, -Jij.

-frerun-cse-na-lus
Voer de eliminatie van algemene subexpressies opnieuw uit nadat lusoptimalisaties zijn uitgevoerd.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fgcse
Voer een globale gemeenschappelijke subexpressie eliminatie pass uit. Deze pas presteert ook
globale constante en kopievoortplanting.

Opmerking: Bij het compileren van een programma met behulp van computed gotos, een GCC-extensie, krijgt u mogelijk:
betere runtime-prestaties als u de globale eliminatie van gemeenschappelijke subexpressies uitschakelt
pas door toe te voegen -fno-gcse naar de opdrachtregel.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fgcse-lm
. -fgcse-lm is ingeschakeld, probeert globale gemeenschappelijke subexpressie te verwijderen
ladingen die alleen door winkels in zichzelf worden gedood. Hierdoor kan een lus met a
volgorde laden/opslaan die moet worden gewijzigd in een belasting buiten de lus en een kopie/opslaan binnen
de lus.

Standaard ingeschakeld wanneer -fgcse is ingeschakeld.

-fgcse-sm
. -fgcse-sm is ingeschakeld, wordt een winkelbewegingspas uitgevoerd na global common
subexpressie eliminatie. Deze pas probeert winkels uit lussen te halen. Wanneer gebruikt
in combinatie met -fgcse-lm, loops die een laad-/opslagvolgorde bevatten, kunnen worden gewijzigd
naar een belasting voor de lus en een opslag na de lus.

Op geen enkel optimalisatieniveau ingeschakeld.

-fgcse-las
. -fgcse-las is ingeschakeld, de globale gemeenschappelijke subexpressie eliminatie pass
elimineert overtollige belastingen die na opslag op dezelfde geheugenlocatie komen (beide
gedeeltelijke en volledige ontslagen).

Op geen enkel optimalisatieniveau ingeschakeld.

-fgcse-na-herladen
. -fgcse-na-herladen is ingeschakeld, wordt een redundante belastingverwijderingspas uitgevoerd
na herladen. Het doel van deze pas is om overtollig morsen op te ruimen.

-fagressieve-loop-optimalisaties
Deze optie vertelt de loop-optimizer om taalbeperkingen te gebruiken om grenzen af ​​te leiden voor:
het aantal iteraties van een lus. Dit veronderstelt dat luscode niet aanroept
ongedefinieerd gedrag door bijvoorbeeld overflows met ondertekende integers of out-of-bounds te veroorzaken
array-toegangen. De grenzen voor het aantal iteraties van een lus worden gebruikt om te begeleiden
lus afrollen en afpellen en lus exit test optimalisaties. Deze optie is ingeschakeld
standaard.

-funsafe-loop-optimalisaties
Deze optie vertelt de lus-optimizer om aan te nemen dat lusindices niet overlopen, en
dat lussen met een niet-triviale uitgangsvoorwaarde niet oneindig zijn. Dit maakt een bredere
reeks lusoptimalisaties, zelfs als de lusoptimalisatie zelf niet kan bewijzen dat deze
aannames kloppen. Als je gebruikt -Wunsafe-loop-optimalisaties, waarschuwt de compiler u
als het dit soort lus vindt.

-fcrossspringen
Voer een cross-jumping transformatie uit. Deze transformatie verenigt equivalente code en
slaat de codegrootte op. De resulterende code kan al dan niet beter presteren dan zonder cross-
springen.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fauto-inc-dec
Combineer verhogingen of verlagingen van adressen met geheugentoegangen. Deze pas is
worden altijd overgeslagen op architecturen die geen instructies hebben om dit te ondersteunen.
Standaard ingeschakeld op -O en hoger op architecturen die dit ondersteunen.

-fdce
Voer dead code-eliminatie (DCE) uit op RTL. Standaard ingeschakeld op -O en hoger.

-fdse
Voer dead store eliminatie (DSE) uit op RTL. Standaard ingeschakeld op -O en hoger.

-fif-conversie
Poging om voorwaardelijke sprongen om te zetten in vertakkingsloze equivalenten. Dit bevat
gebruik van voorwaardelijke zetten, min, max, set flags en abs-instructies, en enkele trucs
te doen met standaard rekenkunde. Het gebruik van voorwaardelijke uitvoering op chips waar het is
beschikbaar wordt gecontroleerd door: -fif-conversie2.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fif-conversie2
Gebruik voorwaardelijke uitvoering (indien beschikbaar) om voorwaardelijke sprongen om te zetten in
brancheloze equivalenten.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fdeclone-ctor-dtor
De C++ ABI vereist meerdere toegangspunten voor constructors en destructors: één voor a
basissubobject, één voor een compleet object en één voor een virtuele destructor die aanroept
operator daarna verwijderen. Voor een hiërarchie met virtuele bases, de base en complete
varianten zijn klonen, wat twee kopieën van de functie betekent. Met deze optie wordt de
basis- en complete varianten zijn veranderd in thunks die een gemeenschappelijke implementatie noemen.

Ingeschakeld door -Jij.

-fdelete-null-pointer-controles
Neem aan dat programma's de verwijzing naar null-pointers niet veilig kunnen verwijderen en dat er geen code of gegevens zijn
element zit daar. Dit maakt eenvoudige constante vouwoptimalisaties helemaal mogelijk
optimalisatie niveaus. Bovendien gebruiken andere optimalisatiepassen in GCC deze vlag om:
controle van globale datastroomanalyses die nutteloze controles op nullpointers elimineren;
deze gaan ervan uit dat als een aanwijzer wordt gecontroleerd nadat deze al is verwijderd, deze
Kan niet nul zijn.

Merk echter op dat in sommige omgevingen deze veronderstelling niet waar is. Gebruik maken van
-fno-verwijder-null-pointer-controles om deze optimalisatie uit te schakelen voor programma's die afhankelijk zijn van
op dat gedrag.

Sommige doelen, vooral ingebedde doelen, schakelen deze optie op alle niveaus uit. Anders
het is ingeschakeld op alle niveaus: -O0, -O1, -O2, -O3, -Jij. Passen die de informatie gebruiken
worden onafhankelijk ingeschakeld op verschillende optimalisatieniveaus.

-fdevirtualiseren
Poging om oproepen naar virtuele functies om te zetten in directe oproepen. Dit is beide gedaan
binnen een procedure en interprocedureel als onderdeel van indirecte inlining
(-findirect-inlining) en interprocedurele constante voortplanting (-fipa-cp). Ingeschakeld bij
niveaus -O2, -O3, -Jij.

-fdevirtualiseren-speculatief
Poging om oproepen naar virtuele functies om te zetten in speculatieve directe oproepen. Gebaseerd op
de analyse van de typeoverervingsgrafiek, bepaal voor een gegeven aanroep de verzameling van
waarschijnlijke doelen. Als de set klein is, bij voorkeur maat 1, verander de oproep in a
voorwaardelijke keuze tussen directe en indirecte oproepen. De speculatieve oproepen maken:
meer optimalisaties, zoals inlining. Wanneer ze nutteloos lijken na verder
optimalisatie, worden ze terug omgezet in de oorspronkelijke vorm.

-fdevirtualiseer-op-ltrans
Stream extra informatie die nodig is voor agressieve devirtualisatie bij het uitvoeren van de link-
tijdoptimalisatie in lokale transformatiemodus. Deze optie maakt meer mogelijk
devirtualisatie, maar vergroot de omvang van gestreamde gegevens aanzienlijk. Voor deze
reden dat het standaard is uitgeschakeld.

-fexpensive-optimalisaties
Voer een aantal kleine optimalisaties uit die relatief duur zijn.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-vrij
Poging om overbodige extensie-instructies te verwijderen. Dit is vooral handig voor
de x86-64-architectuur, die impliciet nul-uitbreidt in 64-bits registers na
schrijven naar hun lagere 32-bits helft.

Ingeschakeld voor Alpha, AArch64 en x86 op niveaus -O2, -O3, -Jij.

-fno-levenslange-dse
In C++ wordt de waarde van een object alleen beïnvloed door veranderingen binnen zijn levensduur: wanneer
de constructor begint, het object heeft een onbepaalde waarde en eventuele wijzigingen tijdens
de levensduur van het object zijn dood wanneer het object wordt vernietigd. Normaal gesproken dode winkel
eliminatie zal hiervan profiteren; als uw code afhankelijk is van de waarde van de
objectopslag blijft bestaan ​​na de levensduur van het object, kunt u deze vlag gebruiken om:
schakel deze optimalisatie uit.

-flive-range-krimp
Poging om de registerdruk te verlagen door krimping van het live-bereik van het register. Dit is
handig voor snelle processors met kleine of middelgrote registersets.

-fira-algoritme=algoritme
Gebruik het opgegeven kleuralgoritme voor de geïntegreerde registertoewijzer. De
algoritme argument kan zijn prioriteit, die de prioriteitskleuring van Chow specificeert, of CB,
die de Chaitin-Briggs-kleuring specificeert. Chaitin-Briggs-kleuring is niet geïmplementeerd
voor alle architecturen, maar voor die doelen die het wel ondersteunen, is dit de standaard
omdat het betere code genereert.

-fira-regio=regio
Gebruik opgegeven regio's voor de geïntegreerde registertoewijzer. De regio argument
moet een van de volgende zijn:

allen Gebruik alle lussen als registertoewijzingsregio's. Dit kan de beste resultaten geven voor:
machines met een kleine en/of onregelmatige registerset.

gemengd
Gebruik alle lussen behalve lussen met een kleine registerdruk als de regio's. Dit
waarde geeft meestal de beste resultaten in de meeste gevallen en voor de meeste architecturen, en
is standaard ingeschakeld bij het compileren met optimalisatie voor snelheid (-O, -O2, ...).

een Gebruik alle functies als één regio. Dit resulteert meestal in de kleinste code
grootte, en is standaard ingeschakeld voor -Jij or -O0.

-fira-hijs-druk
Gebruik IRA om registerdruk te evalueren in de code hijspas voor beslissingen om te hijsen
uitdrukkingen. Deze optie resulteert meestal in kleinere code, maar het kan de
compiler naar beneden.

Deze optie is ingeschakeld op niveau -Jij voor alle doelen.

-fira-loop-druk
Gebruik IRA om registerdruk in lussen te evalueren voor beslissingen om lusinvarianten te verplaatsen.
Deze optie resulteert meestal in het genereren van snellere en kleinere code op machines met:
grote registerbestanden (>= 32 registers), maar het kan de compiler vertragen.

Deze optie is ingeschakeld op niveau -O3 voor sommige doelen.

-fno-ira-share-save-slots
Schakel het delen van stack-slots uit die worden gebruikt voor het opslaan van door oproepen gebruikte harde registers die doorleven
een telefoontje. Elk hard register krijgt een aparte stapelsleuf, en als resultaat functiestapel
kozijnen zijn groter.

-fno-ira-share-spill-slots
Schakel het delen van stapelsleuven die zijn toegewezen voor pseudo-registers uit. Elk pseudo-register
die geen hard register krijgt, krijgt een aparte stack-sleuf, en als resultaat functie
stapelframes zijn groter.

-fira-verbose=n
Beheer de breedsprakigheid van het dumpbestand voor de geïntegreerde registertoewijzer. De
standaardwaarde is 5. Als de waarde n groter of gelijk is aan 10, wordt de dumpoutput verzonden
naar stderr met hetzelfde formaat als n min 10.

-fla-remat
Schakel CFG-gevoelige rematerialisatie in LRA in. In plaats van waarden van gemorst te laden
pseudos, probeert LRA waarden opnieuw te materialiseren (herberekenen) als dit winstgevend is.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fvertraagde-tak
Indien ondersteund voor de doelcomputer, probeer de instructies om te misbruiken opnieuw te ordenen
instructieslots beschikbaar na vertraagde vertakkingsinstructies.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fschema-insns
Indien ondersteund voor de doelcomputer, probeer de instructies opnieuw te ordenen om te elimineren
uitvoering loopt vast omdat de vereiste gegevens niet beschikbaar zijn. Dit helpt machines die:
langzame drijvende-komma- of geheugenlaadinstructies hebben door andere instructies toe te staan:
worden afgegeven totdat het resultaat van de load- of floating-pointinstructie vereist is.

Ingeschakeld op niveaus -O2, -O3.

-fschema-insns2
Soortgelijke -fschema-insns, maar vraagt ​​om een ​​extra instructieplanning
nadat de registertoewijzing is gedaan. Dit is vooral handig op machines met een
relatief klein aantal registers en waar instructies voor het laden van het geheugen meer dan
één cyclus.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fno-sched-interblock
Plan geen instructies over basisblokken heen. Dit is normaal gesproken standaard ingeschakeld
bij het plannen vóór registertoewijzing, dat wil zeggen met -fschema-insns of -O2 or
hoger.

-fno-sched-specificatie
Sta geen speculatieve beweging van niet-laden instructies toe. Dit wordt normaal gesproken ingeschakeld door:
standaard bij planning vóór registertoewijzing, dwz met -fschema-insns of
-O2 of hoger.

-fsched-druk
Schakel registerdrukgevoelige insn-planning in vóór registertoewijzing. Dit
heeft alleen zin bij het plannen voordat registertoewijzing is ingeschakeld, dat wil zeggen met
-fschema-insns of -O2 of hoger. Het gebruik van deze optie kan de gegenereerde
code en verklein de grootte door te voorkomen dat de registerdruk boven het nummer stijgt
van beschikbare harde registers en daaropvolgende verspillingen bij de toewijzing van registers.

-fsched-specificatie-laden
Laat speculatieve beweging van sommige laadinstructies toe. Dit heeft alleen zin als
planning vóór registertoewijzing, dat wil zeggen met -fschema-insns of -O2 of hoger.

-fsched-spec-load-gevaarlijk
Laat speculatieve beweging van meer laadinstructies toe. Dit heeft alleen zin als
planning vóór registertoewijzing, dat wil zeggen met -fschema-insns of -O2 of hoger.

-fsched-vastgelopen-insns
-fsched-vastgelopen-insns=n
Definieer hoeveel insns (indien aanwezig) voortijdig uit de wachtrij van vastgelopen kunnen worden verplaatst
insns in de gereed-lijst tijdens de tweede planningspas. -fno-sched-vastgelopen-insns
betekent dat er geen insns voortijdig worden verplaatst, -fsched-vastgelopen-insns=0 betekent dat er geen is
limiet op hoeveel insns in de wachtrij voortijdig kunnen worden verplaatst. -fsched-vastgelopen-insns
zonder een waarde is gelijk aan -fsched-vastgelopen-insns=1.

-fsched-vastgelopen-insns-dep
-fsched-vastgelopen-insns-dep=n
Definieer hoeveel insn-groepen (cycli) worden onderzocht op afhankelijkheid van een vastgelopen insn
dat is een kandidaat voor voortijdige verwijdering uit de wachtrij van vastgelopen insns. Dit heeft
alleen effect tijdens de tweede planningspas, en alleen als -fsched-vastgelopen-insns is
gebruikt. -fno-sched-vastgelopen-insns-dep is gelijk aan -fsched-vastgelopen-insns-dep=0.
-fsched-vastgelopen-insns-dep zonder een waarde is gelijk aan
-fsched-vastgelopen-insns-dep=1.

-fsched2-gebruik-superblokken
Gebruik superblokplanning bij het plannen na registertoewijzing. Dit maakt het mogelijk
beweging over basisblokgrenzen, wat resulteert in snellere schema's. Deze optie is
experimenteel, aangezien niet alle machinebeschrijvingen die door GCC worden gebruikt de CPU nauwkeurig genoeg modelleren
om onbetrouwbare resultaten van het algoritme te voorkomen.

Dit heeft alleen zin bij het plannen na registertoewijzing, dus met
-fschema-insns2 of -O2 of hoger.

-fsched-groep-heuristiek
Schakel de groepsheuristiek in de planner in. Deze heuristiek is gunstig voor de instructie
die bij een planningsgroep hoort. Dit is standaard ingeschakeld wanneer plannen is
ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2 of hoger.

-fsched-kritiek-pad-heuristiek
Schakel de kritieke-padheuristiek in de planner in. Deze heuristiek begunstigt
instructies op het kritieke pad. Dit is standaard ingeschakeld wanneer plannen is
ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2 of hoger.

-fsched-spec-insn-heuristiek
Schakel de speculatieve instructieheuristiek in de planner in. Deze heuristiek begunstigt
speculatieve instructies met een grotere afhankelijkheidszwakte. Dit is standaard ingeschakeld
wanneer plannen is ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2
of hoger.

-fsched-rank-heuristiek
Schakel de rangheuristiek in de planner in. Deze heuristiek is gunstig voor de instructie
behorend tot een basisblok met grotere omvang of frequentie. Dit is standaard ingeschakeld
wanneer plannen is ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2
of hoger.

-fsched-laatste-insn-heuristiek
Schakel de heuristiek van de laatste instructie in de planner in. Deze heuristiek is gunstig voor de
instructie die minder afhankelijk is van de laatst ingeplande instructie. Dit is ingeschakeld
standaard wanneer planning is ingeschakeld, dwz met -fschema-insns or -fschema-insns2
of -O2 of hoger.

-fsched-dep-count-heuristiek
Schakel de heuristiek van het aantal afhankelijkheden in de planner in. Deze heuristiek is gunstig voor de
instructie die meer instructies heeft, afhankelijk van. Dit is standaard ingeschakeld
wanneer plannen is ingeschakeld, dwz met -fschema-insns or -fschema-insns2 of -O2
of hoger.

-nieuwe planning-modulo-geplande-lussen
Modulo-planning wordt uitgevoerd vóór traditionele planning. Als een lus modulo is
gepland, kunnen latere planningspassen het schema wijzigen. Gebruik deze optie om
dat gedrag te beheersen.

-fselectieve planning
Plan instructies met behulp van selectief planningsalgoritme. Selectieve planning wordt uitgevoerd
in plaats van de eerste plannerpas.

-fselectieve planning2
Plan instructies met behulp van selectief planningsalgoritme. Selectieve planning wordt uitgevoerd
in plaats van de tweede plannerpas.

-fsel-sched-pijpleidingen
Schakel software-pipelining van binnenste lussen in tijdens selectieve planning. Dit
optie heeft geen effect tenzij een van -fselectieve planning or -fselectieve planning2
is ingeschakeld.

-fsel-sched-pipelining-buitenste lussen
Bij het pijplijnen van lussen tijdens selectieve planning, ook voor het pijplijnen van buitenste lussen. Dit
optie heeft geen effect tenzij -fsel-sched-pijpleidingen is ingeschakeld.

-fsemantische-interpositie
Sommige objectformaten, zoals ELF, laten het tussenvoegen van symbolen door de dynamische linker toe.
Dit betekent dat voor symbolen die zijn geëxporteerd vanuit de DSO, de compiler niet kan presteren
interprocedurele propagatie, inlining en andere optimalisaties in afwachting dat de
functie of variabele in kwestie kan veranderen. Hoewel deze functie handig is,
om bijvoorbeeld geheugentoewijzingsfuncties te herschrijven door een debugging-implementatie, is het:
duur in termen van codekwaliteit. Met -fno-semantische-interpositie de compiler
gaat ervan uit dat als interpositie plaatsvindt voor functies, de overschrijffunctie zal hebben:
precies dezelfde semantiek (en bijwerkingen). Evenzo als interpositie plaatsvindt
voor variabelen zal de constructor van de variabele hetzelfde zijn. De vlag heeft geen
effect voor functies die expliciet inline zijn gedeclareerd (waar dit nooit is toegestaan)
interpositie om de semantiek te veranderen) en voor expliciet zwak verklaarde symbolen.

-fkrimpfolie
Zend functie-prologen alleen uit vóór delen van de functie die het nodig hebben, in plaats van bij
de bovenkant van de functie. Deze vlag is standaard ingeschakeld op -O en hoger.

-fcaller-opslaat
Toekenning van waarden inschakelen voor registers die zijn belazerd door functieaanroepen, door
het uitzenden van extra instructies om de registers rond dergelijke oproepen op te slaan en te herstellen. Zo een
toewijzing wordt alleen gedaan als het lijkt te resulteren in betere code.

Deze optie is altijd standaard ingeschakeld op bepaalde machines, meestal die met:
geen oproep-bewaarde registers om in plaats daarvan te gebruiken.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fcombine-stack-aanpassingen
Volgt stapelaanpassingen (pusht en plop) en stapelt geheugenreferenties en probeert dan
manieren te vinden om ze te combineren.

Standaard ingeschakeld op -O1 en hoger.

-fipa-ra
Gebruik caller save registers voor toewijzing als die registers niet worden gebruikt door een gebelde
functie. In dat geval is het niet nodig om ze rondom oproepen op te slaan en te herstellen.
Dit is alleen mogelijk als aangeroepen functies deel uitmaken van dezelfde compilatie-eenheid als de huidige
functie en ze worden ervoor gecompileerd.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fconserve-stack
Probeer het stackgebruik te minimaliseren. De compiler probeert zelfs minder stapelruimte te gebruiken
als dat het programma langzamer maakt. Deze optie houdt in dat de groot gestapeld frame
parameter op 100 en de large-stack-frame-groei parameter naar 400.

-ftree-redenoc
Voer herassociatie uit op bomen. Deze vlag is standaard ingeschakeld op -O en hoger.

-ftree-pre
Voer gedeeltelijke redundantieverwijdering (PRE) uit op bomen. Deze vlag is ingeschakeld door
standaard op -O2 en -O3.

-ftree-gedeeltelijke-pre
Maak gedeeltelijke redundantie-eliminatie (PRE) agressiever. Deze vlag is ingeschakeld door
standaard op -O3.

-ftree-forwprop
Voer voorwaartse voortplanting uit op bomen. Deze vlag is standaard ingeschakeld op -O en
hoger.

- vrij van bomen
Voer volledige redundantie-eliminatie (FRE) uit op bomen. Het verschil tussen FRE en
PRE is dat FRE alleen uitdrukkingen beschouwt die zijn berekend op alle paden die leiden naar
de overbodige berekening. Deze analyse is sneller dan PRE, hoewel het minder blootlegt
ontslagen. Deze vlag is standaard ingeschakeld op -O en hoger.

-ftree-phiprop
Voer het hijsen van lasten uit vanaf voorwaardelijke wijzers op bomen. Deze pas is mogelijk gemaakt door:
standaard op -O en hoger.

-hijs-aangrenzende-ladingen
Speculatief hijsen lasten van beide takken van een als-dan-anders als de lasten afkomstig zijn van
aangrenzende locaties in dezelfde structuur en de doelarchitectuur heeft een voorwaardelijke
instructie verplaatsen. Deze vlag is standaard ingeschakeld op -O2 en hoger.

-ftree-kopie-prop
Kopieervoortplanting op bomen uitvoeren. Deze pas elimineert onnodige kopieerhandelingen.
Deze vlag is standaard ingeschakeld op -O en hoger.

-fipa-pure-const
Ontdek welke functies puur of constant zijn. Standaard ingeschakeld op -O en hoger.

-fipa-referentie
Ontdek welke statische variabelen niet aan de compilatie-eenheid ontsnappen. Ingeschakeld door
standaard op -O en hoger.

-fipa-pta
Voer interprocedurele pointeranalyse en interprocedurele modificatie uit en
referentie analyse. Deze optie kan leiden tot overmatig geheugen en tijdens het compileren
grote verzameleenheden. Het is op geen enkel optimalisatieniveau standaard ingeschakeld.

-fipa-profiel
Voer interprocedurele profielvoortplanting uit. De functies worden alleen vanuit de koude aangeroepen
functies zijn gemarkeerd als koud. Ook functies die eenmalig worden uitgevoerd (zoals "koud",
"noreturn", statische constructors of destructors) worden geïdentificeerd. Koude functies en
lusloze delen van functies die een keer worden uitgevoerd, worden vervolgens geoptimaliseerd voor grootte. Ingeschakeld door
standaard op -O en hoger.

-fipa-cp
Voer interprocedurele constante voortplanting uit. Deze optimalisatie analyseert het programma
om te bepalen wanneer waarden die aan functies worden doorgegeven constanten zijn en vervolgens optimaliseren
overeenkomstig. Deze optimalisatie kan de prestaties aanzienlijk verhogen als de
toepassing heeft constanten doorgegeven aan functies. Deze vlag is standaard ingeschakeld op
-O2, -Jij en -O3.

-fipa-cp-kloon
Voer functieklonen uit om interprocedurele constante voortplanting sterker te maken. Wanneer
ingeschakeld, interprocedurele constante voortplanting voert functieklonen uit wanneer:
extern zichtbare functie kan worden aangeroepen met constante argumenten. Omdat dit
optimalisatie kan meerdere kopieën van functies maken, het kan aanzienlijk toenemen
codegrootte (zie --param ippc-eenheidsgroei=waarde). Deze vlag is standaard ingeschakeld op
-O3.

-fipa-cp-uitlijning
Indien ingeschakeld, verspreidt deze optimalisatie de uitlijning van functieparameters om te ondersteunen
betere vectorisatie en tekenreeksbewerkingen.

Deze vlag is standaard ingeschakeld op -O2 en -Jij. Het vereist dat -fipa-cp is ingeschakeld.

-fipa-icf
Voer Identieke Code Folding uit voor functies en alleen-lezen variabelen. De
optimalisatie vermindert de codegrootte en kan afwikkelstapels verstoren door een functie te vervangen
door een equivalent met een andere naam. De optimalisatie werkt effectiever met:
linktijdoptimalisatie ingeschakeld.

Desalniettemin is het gedrag vergelijkbaar met Gold Linker ICF-optimalisatie, GCC ICF werkt aan
verschillende niveaus en dus zijn de optimalisaties niet hetzelfde - er zijn equivalenten die:
worden alleen gevonden door GCC en equivalenten alleen gevonden door Goud.

Deze vlag is standaard ingeschakeld op -O2 en -Jij.

-fisoleren-foutieve-paden-dereferentie
Detecteer paden die foutief of ongedefinieerd gedrag veroorzaken door de verwijzing naar een null
wijzer. Isoleer die paden van de hoofdbesturingsstroom en draai de verklaring om met
foutief of ongedefinieerd gedrag in een val te lokken. Deze vlag is standaard ingeschakeld op -O2
en hoger.

-fisolaat-foutieve-paden-attribuut
Paden detecteren die foutief of ongedefinieerd gedrag veroorzaken doordat er een null-waarde wordt gebruikt
op een manier die verboden is door een "returns_nonnull" of "nonnull" attribuut. Isoleer die paden
uit de hoofdbesturingsstroom en draai de verklaring met foutief of ongedefinieerd gedrag
in een val. Dit is momenteel niet ingeschakeld, maar kan worden ingeschakeld door: -O2 te verwijzen in de toekomst.

-vtree-gootsteen
Voer voorwaartse opslagbeweging uit op bomen. Deze vlag is standaard ingeschakeld op -O en
hoger.

-ftree-bit-ccp
Voer schaarse voorwaardelijke bitconstante propagatie uit op bomen en propageer de aanwijzer
informatie over uitlijning. Deze pas werkt alleen op lokale scalaire variabelen en is
standaard ingeschakeld op -O en hoger. Het vereist dat -ftree-ccp is ingeschakeld.

-ftree-ccp
Voer schaarse voorwaardelijke constante voortplanting (CCP) uit op bomen. Alleen deze pas
werkt op lokale scalaire variabelen en is standaard ingeschakeld op -O en hoger.

-fssa-phiopt
Voer patroonovereenkomst uit op SSA PHI-knooppunten om voorwaardelijke code te optimaliseren. Deze pas is
standaard ingeschakeld op -O en hoger.

-ftree-switch-conversie
Voer conversie uit van eenvoudige initialisaties in een omschakeling naar initialisaties van a
scalaire reeks. Deze vlag is standaard ingeschakeld op -O2 en hoger.

-ftree-staart-samenvoegen
Zoek naar identieke codereeksen. Wanneer gevonden, vervangt u de ene door een sprong naar de andere.
Deze optimalisatie staat bekend als staartsamenvoeging of kruisspringen. Deze vlag is ingeschakeld door
standaard op -O2 en hoger. De compilatietijd in deze pas kan worden beperkt met:
max-tail-merge-vergelijkingen parameter en max-tail-merge-iteraties parameter.

-ftree-dce
Voer dode code-eliminatie (DCE) uit op bomen. Deze vlag is standaard ingeschakeld op -O
en hoger.

-ftree-ingebouwde-aanroep-dce
Voer voorwaardelijke eliminatie van dode codes (DCE) uit voor oproepen naar ingebouwde functies die:
kunnen "errno" instellen, maar zijn verder vrij van bijwerkingen. Deze vlag is standaard ingeschakeld
at -O2 en hoger als -Jij staat ook niet vermeld.

-ftree-dominator-opteert
Voer een verscheidenheid aan eenvoudige scalaire opschoningen uit (constante/kopie-propagatie, redundantie
eliminatie, bereikvermeerdering en expressievereenvoudiging) op basis van een dominator
boom oversteken. Hiermee wordt ook jumpthreading uitgevoerd (om sprongen tot sprongen te verminderen). Dit
vlag is standaard ingeschakeld op -O en hoger.

-ftree-dse
Voer dead store-eliminatie (DSE) uit op bomen. Een dode winkel is een winkel in een herinnering
locatie die later wordt overschreven door een andere winkel zonder tussenliggende belastingen. In
in dit geval kan de eerdere winkel worden verwijderd. Deze vlag is standaard ingeschakeld op -O en
hoger.

-ftree-ch
Voer luskopkopieën uit op bomen. Dit is gunstig omdat het toeneemt
effectiviteit van optimalisaties van codebewegingen. Het scheelt ook een sprong. Deze vlag is
standaard ingeschakeld op -O en hoger. Het is niet ingeschakeld voor -Jij, aangezien het meestal
vergroot de codegrootte.

-ftree-loop-optimaliseren
Voer lusoptimalisaties uit op bomen. Deze vlag is standaard ingeschakeld op -O en
hoger.

-ftree-loop-lineair
Voer lusuitwisselingstransformaties uit op boom. Hetzelfde als -floop-uitwisseling. Gebruiken
deze codetransformatie, GCC moet worden geconfigureerd met --met-isl om de
Grafiet loop transformatie infrastructuur.

-floop-uitwisseling
Voer lusuitwisselingstransformaties uit op lussen. Twee geneste lussen verwisselen
schakelt de binnenste en buitenste lussen. Bijvoorbeeld, gegeven een lus als:

DO J = 1, M
DO ik = 1, N
A(J, ik) = A(J, ik) * C
EINDDO
EINDDO

lusuitwisseling transformeert de lus alsof deze is geschreven:

DO ik = 1, N
DO J = 1, M
A(J, ik) = A(J, ik) * C
EINDDO
EINDDO

wat handig kan zijn als "N" groter is dan de caches, omdat in Fortran de
elementen van een array worden aaneengesloten per kolom in het geheugen opgeslagen, en het origineel
lus herhaalt rijen, waardoor bij elke toegang mogelijk een cache wordt gemist. Dit
optimalisatie is van toepassing op alle talen die door GCC worden ondersteund en is niet beperkt tot:
Fortran. Om deze codetransformatie te gebruiken, moet GCC worden geconfigureerd met: --met-isl naar
de Graphite loop-transformatie-infrastructuur mogelijk maken.

-floop-strip-mijn
Voer lus strip mining-transformaties uit op lussen. Strip mining splitst een lus in
twee geneste lussen. De buitenste lus heeft stappen gelijk aan de stripmaat en de binnenste lus
lus heeft stappen van de originele lus in een strook. De striplengte kan worden gewijzigd!
met de lus-blok-tegelgrootte parameter. Bijvoorbeeld, gegeven een lus als:

DO ik = 1, N
A(I) = A(I) + C
EINDDO

loop strip mining transformeert de lus alsof deze is geschreven:

DO II = 1, N, 51
DO ik = II, min (II + 50, N)
A(I) = A(I) + C
EINDDO
EINDDO

Deze optimalisatie is van toepassing op alle talen die door GCC worden ondersteund en is niet beperkt tot:
Fortran. Om deze codetransformatie te gebruiken, moet GCC worden geconfigureerd met: --met-isl naar
de Graphite loop-transformatie-infrastructuur mogelijk maken.

-floop-blok
Voer lusblokkeringstransformaties uit op lussen. Blokkeerstrip mijnt elke lus in de
loop nest zodat de geheugentoegangen van de elementlussen in caches passen. De
striplengte kan worden gewijzigd met de lus-blok-tegelgrootte parameter. Bijvoorbeeld,
gegeven een lus zoals:

DO ik = 1, N
DO J = 1, M
A(J, ik) = B(I) + C(J)
EINDDO
EINDDO

lusblokkering transformeert de lus alsof deze is geschreven:

DO II = 1, N, 51
DOEN JJ = 1, M, 51
DO ik = II, min (II + 50, N)
DO J = JJ, min (JJ + 50, M)
A(J, ik) = B(I) + C(J)
EINDDO
EINDDO
EINDDO
EINDDO

wat handig kan zijn als "M" groter is dan de caches, omdat de binnenste lus
itereert over een kleinere hoeveelheid gegevens die in de caches kunnen worden bewaard. Dit
optimalisatie is van toepassing op alle talen die door GCC worden ondersteund en is niet beperkt tot:
Fortran. Om deze codetransformatie te gebruiken, moet GCC worden geconfigureerd met: --met-isl naar
de Graphite loop-transformatie-infrastructuur mogelijk maken.

-fgrafiet-identiteit
Schakel de identiteitstransformatie voor grafiet in. Voor elke SCoP genereren we de
polyedrische representatie en transformeer deze terug naar gimple. Gebruik makend van -fgrafiet-identiteit
we kunnen de kosten of baten van de GIMPLE -> GRAPHITE -> GIMPLE transformatie bekijken.
Enkele minimale optimalisaties worden ook uitgevoerd door de codegenerator ISL, zoals index
splitsen en eliminatie van dode code in lussen.

-floop-nest-optimaliseren
Schakel de op ISL gebaseerde loop-nest-optimizer in. Dit is een generieke lus-nest-optimizer gebaseerd
op de Pluto-optimalisatiealgoritmen. Het berekent een lusstructuur die is geoptimaliseerd voor:
data-lokaliteit en parallellisme. Deze optie is experimenteel.

-floop-uitrollen-en-jam
Schakel uitrollen en vastlopen in voor de op ISL gebaseerde loop-nest-optimizer. De afrolfactor kan zijn:
gewijzigd met de lus-uitrollen-jam-grootte parameter. De uitgerolde dimensie (counting
van de meest binnenste) kan worden gewijzigd met de loop-unroll-jam-diepte parameter.
.

-floop-paralleliseer-alles
Gebruik de Graphite-gegevensafhankelijkheidsanalyse om lussen te identificeren die kunnen worden geparalleliseerd.
Parallelliseer alle lussen die kunnen worden geanalyseerd om geen door lussen gedragen afhankelijkheden te bevatten
zonder te controleren of het winstgevend is om de lussen te parallelliseren.

-fcheck-data-deps
Vergelijk de resultaten van verschillende data-afhankelijkheidsanalysatoren. Deze optie wordt gebruikt voor:
debuggen van de gegevensafhankelijkheidsanalysatoren.

-ftree-lus-als-omzetten
Poging om voorwaardelijke sprongen in de binnenste lussen te transformeren naar takloos
equivalenten. De bedoeling is om de controlestroom uit de binnenste lussen te verwijderen om
om het vermogen van de vectorisatiepas om deze lussen te verwerken te verbeteren. Dit is
standaard ingeschakeld als vectorisatie is ingeschakeld.

-ftree-loop-if-convert-winkels
Probeer ook if-convert voorwaardelijke sprongen die geheugenschrijven bevatten. Dit
transformatie kan onveilig zijn voor programma's met meerdere threads omdat het voorwaardelijk transformeert
geheugen schrijft in onvoorwaardelijk geheugen schrijft. Bijvoorbeeld,

voor (i = 0; ik < N; i++)
als (cond)
A[i] = uitdr;

wordt getransformeerd naar

voor (i = 0; ik < N; i++)
A[i] = voorwaarde ? expr : A[i];

mogelijk dataraces produceren.

-ftree-loop-distributie
Voer lusdistributie uit. Deze vlag kan de cacheprestaties op grote luslichamen verbeteren
en laat verdere lusoptimalisaties, zoals parallellisatie of vectorisatie, toe
plaats. Bijvoorbeeld de lus

DO ik = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
EINDDO

wordt getransformeerd naar

DO ik = 1, N
A(I) = B(I) + C
EINDDO
DO ik = 1, N
D(I) = E(I) * F
EINDDO

-ftree-loop-distribueer-patronen
Voer lusdistributie uit van patronen die kunnen worden gegenereerd door middel van aanroepen naar a
bibliotheek. Deze vlag is standaard ingeschakeld op -O3.

Deze pas verdeelt de initialisatielussen en genereert een aanroep naar memset nul.
Bijvoorbeeld de lus

DO ik = 1, N
EEN(I) = 0
B(I) = A(I) + Ik
EINDDO

wordt getransformeerd naar

DO ik = 1, N
EEN(I) = 0
EINDDO
DO ik = 1, N
B(I) = A(I) + Ik
EINDDO

en de initialisatielus wordt omgezet in een oproep naar memset nul.

-ftree-lus-im
Voer lusinvariante beweging uit op bomen. Deze pas verplaatst alleen invarianten die moeilijk zijn
afhandelen op RTL-niveau (functieaanroepen, bewerkingen die uitbreiden naar niet-triviale reeksen)
van ins). Met -funswitch-loops het verplaatst ook operanden van voorwaarden die
invariant uit de lus, zodat we gewoon triviale invariantheidsanalyse kunnen gebruiken in
lus uitschakelen. De pas bevat ook winkelbewegingen.

-ftree-loop-ivcanon
Maak een canonieke teller voor het aantal iteraties in lussen waarvoor het bepalen van
aantal iteraties vereist een gecompliceerde analyse. Latere optimalisaties kunnen dan
eenvoudig het aantal bepalen. Nuttig vooral in verband met uitrollen.

-vijfpunten
Optimalisaties van inductievariabelen uitvoeren (sterktevermindering, inductievariabele)
samenvoeging en inductievariabele eliminatie) op bomen.

-ftree-parallelize-loops=n
Parallelliseer lussen, dwz splits hun iteratieruimte om in n threads te lopen. Dit is
alleen mogelijk voor lussen waarvan de iteraties onafhankelijk zijn en willekeurig kunnen zijn
herbesteld. De optimalisatie is alleen winstgevend op machines met meerdere processors, voor loops
die CPU-intensief zijn, in plaats van beperkt door bijvoorbeeld geheugenbandbreedte. Deze optie
impliceert -pdraad, en wordt dus alleen ondersteund op doelen die ondersteuning hebben voor
-pdraad.

-ftree-pta
Voer functie-lokale punten-naar-analyse uit op bomen. Deze vlag is standaard ingeschakeld
at -O en hoger.

-ftree-sra
Voer scalaire vervanging van aggregaten uit. Deze pas vervangt structuurreferenties
met scalairen om te voorkomen dat structuren te vroeg in het geheugen worden vastgelegd. Deze vlag is
standaard ingeschakeld op -O en hoger.

-ftree-kopieernaam
Kopieer hernoemen op bomen. Deze pas probeert de tijdelijke compiler te hernoemen naar:
andere variabelen op kopieerlocaties, wat meestal resulteert in variabelenamen die meer
sterk lijken op de oorspronkelijke variabelen. Deze vlag is standaard ingeschakeld op -O en
hoger.

-ftree-coalesce-inline-vars
Vertel de copyrename pass (zie -ftree-kopieernaam) om te proberen kleine gebruikers-
gedefinieerde variabelen ook, maar alleen als ze inline zijn vanuit andere functies. Het is een
meer beperkte vorm van -ftree-coalescentie-vars. Dit kan de foutopsporingsinformatie van dergelijke schaden
inline-variabelen, maar het houdt variabelen van de inline-in-functie apart van elkaar
andere, zodat de kans groter is dat ze de verwachte waarden in een foutopsporing bevatten
sessie.

-ftree-coalescentie-vars
Vertel de copyrename pass (zie -ftree-kopieernaam) om te proberen kleine gebruikers-
ook gedefinieerde variabelen, in plaats van alleen tijdelijke compiler. Dit kan ernstig beperken
de mogelijkheid om een ​​geoptimaliseerd programma te debuggen dat is gecompileerd met -fno-var-tracking-toewijzingen.
In de ontkende vorm voorkomt deze vlag dat SSA samensmelt met gebruikersvariabelen, waaronder:
ingelijnde. Deze optie is standaard ingeschakeld.

-ftree-ter
Voer tijdelijke vervanging van expressies uit tijdens de SSA->normale fase. Enkel
use/single def tijdelijken worden op hun gebruikslocatie vervangen door hun bepalende
uitdrukking. Dit resulteert in niet-GIMPLE-code, maar geeft de uitbreidingen veel meer
complexe bomen om aan te werken wat resulteert in een betere RTL-generatie. Dit wordt mogelijk gemaakt door
standaard op -O en hoger.

-ftree-slsr
Voer krachtvermindering in rechte lijnen uit op bomen. Dit herkent verwante
uitdrukkingen met vermenigvuldigingen en vervangt deze door goedkopere berekeningen
wanneer mogelijk. Dit is standaard ingeschakeld op -O en hoger.

-ftree-vectoriseren
Voer vectorisatie uit op bomen. Deze vlag maakt: -ftree-loop-vectoriseren en
-ftree-slp-vectoriseren indien niet expliciet vermeld.

-ftree-loop-vectoriseren
Voer lusvectorisatie uit op bomen. Deze vlag is standaard ingeschakeld op -O3 en wanneer
-ftree-vectoriseren is ingeschakeld.

-ftree-slp-vectoriseren
Voer basisblokvectorisatie uit op bomen. Deze vlag is standaard ingeschakeld op -O3 en
wanneer -ftree-vectoriseren is ingeschakeld.

-fvect-kostenmodel=model
Wijzig het kostenmodel dat wordt gebruikt voor vectorisatie. De model argument zou een van moeten zijn
onbeperkt, dynamisch or goedkoop. Met de onbeperkt model het gevectoriseerde codepad is
verondersteld winstgevend te zijn, terwijl met de dynamisch model een runtime check bewaakt de
gevectoriseerd codepad om het alleen in te schakelen voor iteratietellingen die waarschijnlijk zullen worden uitgevoerd
sneller dan bij het uitvoeren van de oorspronkelijke scalaire lus. De goedkoop model schakelt uit
vectorisatie van lussen waar dit onbetaalbaar zou zijn, bijvoorbeeld vanwege:
vereiste runtime-controles voor gegevensafhankelijkheid of uitlijning, maar is verder gelijk aan de
dynamisch model. Het standaardkostenmodel is afhankelijk van andere optimalisatievlaggen en is
beide dynamisch or goedkoop.

-fsimd-kostenmodel=model
Wijzig het kostenmodel dat wordt gebruikt voor vectorisatie van lussen gemarkeerd met de OpenMP of Cilk
Plus simd-richtlijn. De model argument zou een van moeten zijn onbeperkt, dynamisch, goedkoop.
Alle waarden van model hebben dezelfde betekenis als beschreven in -fvect-kostenmodel en bij
standaard een kostenmodel gedefinieerd met -fvect-kostenmodel is gebruikt.

-ftree-vrp
Voer waardebereikvoortplanting uit op bomen. Dit is vergelijkbaar met de constante voortplanting
pass, maar in plaats van waarden worden waardenbereiken gepropageerd. Hierdoor kan de
optimalisatieprogramma's om onnodige bereikcontroles zoals matrixgebonden controles en null-aanwijzer te verwijderen
cheques. Dit is standaard ingeschakeld op -O2 en hoger. Null pointer check eliminatie
wordt alleen gedaan als -fdelete-null-pointer-controles is ingeschakeld.

-fsplit-ivs-in-uitroller
Maakt expressie mogelijk van waarden van inductievariabelen in latere iteraties van de
uitgerolde lus met behulp van de waarde in de eerste iteratie. Dit doorbreekt een lange afhankelijkheid
ketens, waardoor de efficiëntie van de planningspassen wordt verbeterd.

Een combinatie van -fweb en CSE is vaak voldoende om hetzelfde effect te verkrijgen.
Dat is echter niet betrouwbaar in gevallen waarin het luslichaam ingewikkelder is dan een
enkel basisblok. Het werkt ook helemaal niet op sommige architecturen vanwege:
beperkingen in de CSE-pas.

Deze optimalisatie is standaard ingeschakeld.

-fvariabele-uitbreiding-in-afroller
Met deze optie maakt de compiler meerdere kopieën van sommige lokale variabelen wanneer:
het uitrollen van een lus, wat kan resulteren in superieure code.

-fgedeeltelijke-inlining
Inline delen van functies. Deze optie heeft alleen effect als inlinen zelf is
ingeschakeld door de -finline-functies or -finline-kleine-functies opties.

Ingeschakeld op niveau -O2.

-fvoorspellende-commoning
Predictive commoning-optimalisatie uitvoeren, dat wil zeggen, berekeningen opnieuw gebruiken (vooral
geheugen wordt geladen en opgeslagen) uitgevoerd in eerdere iteraties van lussen.

Deze optie is ingeschakeld op niveau -O3.

-fprefetch-loop-arrays
Indien ondersteund door de doelmachine, genereer instructies om geheugen vooraf op te halen om
de prestaties verbeteren van lussen die toegang hebben tot grote arrays.

Deze optie kan betere of slechtere code genereren; resultaten zijn sterk afhankelijk van de
structuur van lussen in de broncode.

Uitgeschakeld op niveau -Jij.

-fno-kijkgaatje
-fno-kijkgaatje2
Schakel eventuele machinespecifieke kijkgaatjesoptimalisaties uit. Het verschil tussen
-fno-kijkgaatje en -fno-kijkgaatje2 zit in hoe ze worden geïmplementeerd in de compiler; sommige
doelen gebruiken de ene, sommige gebruiken de andere, een paar gebruiken beide.

-fkijkgaatje is standaard ingeschakeld. -fkijkgaatje2 ingeschakeld op niveaus -O2, -O3, -Jij.

-fno-raad-tak-waarschijnlijkheid
Raad de vertakkingskansen niet met behulp van heuristieken.

GCC gebruikt heuristieken om vertakkingskansen te raden als ze niet worden geleverd door
profileringsfeedback (-fprofile-bogen). Deze heuristieken zijn gebaseerd op de controlestroom
grafiek. Als sommige vertakkingskansen zijn gespecificeerd door "__builtin_expect", dan is de
heuristieken worden gebruikt om vertakkingskansen te raden voor de rest van de controlestroom
grafiek, rekening houdend met de "__builtin_expect" info. De interacties tussen de
heuristieken en "__builtin_expect" kunnen complex zijn, en in sommige gevallen kan het nuttig zijn
om de heuristieken uit te schakelen zodat de effecten van "__builtin_expect" gemakkelijker te
begrijpen.

De standaard is -fguess-branch-waarschijnlijkheid op niveaus -O, -O2, -O3, -Jij.

-freeorder-blokken
Herschik de basisblokken in de gecompileerde functie om het aantal genomen te verminderen
branches en verbeter de codelocatie.

Ingeschakeld op niveaus -O2, -O3.

-freeorder-blokken-en-partitie
Naast het opnieuw ordenen van basisblokken in de gecompileerde functie, om
aantal genomen takken, verdeelt warme en koude basisblokken in aparte secties
van de assembly- en .o-bestanden, om de prestaties van de paging- en cachelocatie te verbeteren.

Deze optimalisatie wordt automatisch uitgeschakeld in het geval van exception handling,
voor linkonce-secties, voor functies met een door de gebruiker gedefinieerd sectie-attribuut en op elke
architectuur die geen benoemde secties ondersteunt.

Ingeschakeld voor x86 op niveaus -O2, -O3.

-freeorder-functies
Herschik functies in het objectbestand om de codelocatie te verbeteren. Dit is
geïmplementeerd met behulp van speciale subsecties ".text.hot" voor de meest uitgevoerde
functies en ".text.unlikely" voor onwaarschijnlijk uitgevoerde functies. Nabestellen wordt gedaan door
de linker, dus het bestandsformaat van het object moet benoemde secties ondersteunen en de linker moet plaatsen
ze op een redelijke manier.

Er moet ook profielfeedback beschikbaar zijn om deze optie effectief te maken. Zien
-fprofile-bogen voor meer info.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-fstrict-aliasing
Laat de compiler de strengste aliasingregels aannemen die van toepassing zijn op de taal
wordt samengesteld. Voor C (en C++) activeert dit optimalisaties op basis van het type
uitdrukkingen. In het bijzonder wordt aangenomen dat een object van een bepaald type nooit op de
hetzelfde adres als een object van een ander type, tenzij de typen bijna hetzelfde zijn.
Een "unsigned int" kan bijvoorbeeld een "int" zijn, maar geen "void*" of een "double". EEN
karaktertype kan een alias zijn van elk ander type.

Besteed speciale aandacht aan code zoals deze:

vakbond a_union {
int i;
dubbele d;
};

intf() {
vakbond a_union t;
td = 3.0;
keer terug;
}

De praktijk van het lezen van een ander vakbondslid dan het meest recentelijk
geschreven naar (de zogenaamde "type-woordspeling") is gebruikelijk. Zelfs met -fstrict-aliasing, typ-
woordspelingen zijn toegestaan, op voorwaarde dat het geheugen toegankelijk is via het type union. Dus de
bovenstaande code werkt zoals verwacht. Deze code is echter mogelijk niet:

intf() {
vakbond a_union t;
int* ip;
td = 3.0;
ip = &t.i;
retour *ip;
}

Evenzo toegang door het adres te nemen, de resulterende aanwijzer te casten en
dereferentie van het resultaat heeft ongedefinieerd gedrag, zelfs als de cast een unie-type gebruikt,
bijvoorbeeld:

intf() {
dubbele d = 3.0;
return ((union a_union *) &d)->i;
}

De -fstrict-aliasing optie is ingeschakeld op niveaus -O2, -O3, -Jij.

-fstrict-overloop
Laat de compiler strikte regels voor ondertekende overloop aannemen, afhankelijk van de taal
wordt samengesteld. Voor C (en C++) betekent dit dat overlopen bij rekenen met
ondertekende nummers is ongedefinieerd, wat betekent dat de compiler mag aannemen dat dit niet het geval is
gebeuren. Dit maakt verschillende optimalisaties mogelijk. De compiler neemt bijvoorbeeld aan dat:
een uitdrukking zoals "i + 10 > i" is altijd waar voor ondertekende "i". Deze veronderstelling is
alleen geldig als ondertekende overloop niet gedefinieerd is, omdat de uitdrukking onwaar is als "i + 10"
overloopt bij het gebruik van tweeëncomplement rekenkunde. Wanneer deze optie van kracht is, is er geen
proberen te bepalen of een bewerking op overlopen van ondertekende nummers moet worden geschreven
voorzichtig om niet echt overflow te betrekken.

Met deze optie kan de compiler ook een strikte pointer-semantiek aannemen: gegeven a
aanwijzer naar een object, als het toevoegen van een verschuiving aan die aanwijzer geen aanwijzer oplevert
voor hetzelfde object is de toevoeging niet gedefinieerd. Hierdoor kan de compiler concluderen:
dat "p + u > p" altijd waar is voor een aanwijzer "p" en een geheel getal "u" ​​zonder teken. Dit
aanname is alleen geldig omdat de omhulling van de aanwijzer niet is gedefinieerd, zoals de uitdrukking is
false als "p + u" overloopt met behulp van twee-complement rekenkunde.

Zie ook de -fwrapv optie. Gebruik makend van -fwrapv betekent dat integer ondertekend overloop is
volledig gedefinieerd: het wikkelt. Wanneer -fwrapv wordt gebruikt, is er geen verschil tussen:
-fstrict-overloop en -fno-strikte-overloop voor gehele getallen. Met -fwrapv bepaalde types
van overloop zijn toegestaan. Als de compiler bijvoorbeeld een overflow krijgt tijdens het doen van
rekenkunde op constanten, de overgelopen waarde kan nog steeds worden gebruikt met -fwrapv, Maar niet
anders.

De -fstrict-overloop optie is ingeschakeld op niveaus -O2, -O3, -Jij.

-falign-functies
-falign-functies=n
Lijn het begin van functies uit met de volgende macht van twee groter dan n, overslaan naar n
bytes. Bijvoorbeeld, -falign-functies=32 lijnt functies uit met de volgende 32-byte
grens, maar -falign-functies=24 wordt alleen uitgelijnd op de volgende grens van 32 bytes als dit
kan worden gedaan door 23 bytes of minder over te slaan.

-fno-align-functies en -falign-functies=1 zijn equivalent en betekenen dat functies
zijn niet uitgelijnd.

Sommige assemblers ondersteunen deze vlag alleen wanneer: n is een macht van twee; in dat geval is het
afgerond.

If n niet is opgegeven of nul is, gebruikt u een machineafhankelijke standaardwaarde.

Ingeschakeld op niveaus -O2, -O3.

-falign-labels
-falign-labels=n
Lijn alle vertakkingsdoelen uit met een macht-van-twee grens, tot n bytes zoals
-falign-functies. Deze optie kan de code gemakkelijk langzamer maken, omdat deze moet worden ingevoegd
dummy-bewerkingen voor wanneer het vertakkingsdoel wordt bereikt in de gebruikelijke stroom van de code.

-fno-align-labels en -falign-labels=1 gelijkwaardig zijn en betekenen dat labels dat niet zijn
uitgelijnd.

If -falign-lussen or -falign-sprongen van toepassing zijn en groter zijn dan deze waarde, dan
hun waarden worden in plaats daarvan gebruikt.

If n is niet gespecificeerd of is nul, gebruik een machineafhankelijke standaardwaarde die zeer waarschijnlijk is
te 1, wat betekent dat er geen uitlijning is.

Ingeschakeld op niveaus -O2, -O3.

-falign-lussen
-falign-loops=n
Lijn lussen uit met een macht-van-twee grens, door tot n bytes zoals -falign-functies.
Als de lussen vele malen worden uitgevoerd, compenseert dit elke uitvoering van de dummy
operaties.

-fno-align-loops en -falign-loops=1 zijn equivalent en betekenen dat lussen dat niet zijn
uitgelijnd.

If n niet is opgegeven of nul is, gebruikt u een machineafhankelijke standaardwaarde.

Ingeschakeld op niveaus -O2, -O3.

-falign-sprongen
-falign-sprongen=n
Lijn vertakkingsdoelen uit met een macht-van-twee grens, voor vertakkingsdoelen waarbij de doelen
kan alleen worden bereikt door te springen, over te slaan naar n bytes zoals -falign-functies. in
in dit geval hoeven er geen dummy-bewerkingen te worden uitgevoerd.

-fno-align-sprongen en -falign-sprongen=1 zijn equivalent en betekenen dat lussen dat niet zijn
uitgelijnd.

If n niet is opgegeven of nul is, gebruikt u een machineafhankelijke standaardwaarde.

Ingeschakeld op niveaus -O2, -O3.

-fun-at-a-time
Deze optie is om compatibiliteitsredenen gelaten. -fun-at-a-time heeft geen effect, terwijl
-fno-eenheid-per-tijd impliceert -fno-toplevel-herordenen en -fno-sectie-ankers.

Standaard ingeschakeld.

-fno-toplevel-herordenen
De volgorde van functies, variabelen en "asm"-instructies op het hoogste niveau niet opnieuw rangschikken. Voer ze in
dezelfde volgorde waarin ze in het invoerbestand verschijnen. Wanneer deze optie wordt gebruikt,
niet-verwezen statische variabelen worden niet verwijderd. Deze optie is bedoeld ter ondersteuning van:
bestaande code die afhankelijk is van een bepaalde bestelling. Voor nieuwe code is het beter om te gebruiken
attributen waar mogelijk.

Ingeschakeld op niveau -O0. Wanneer expliciet uitgeschakeld, betekent dit ook: -fno-sectie-ankers,
die anders is ingeschakeld op -O0 op sommige doelen.

-fweb
Maakt webs zoals gewoonlijk gebruikt voor registertoewijzingsdoeleinden en wijst elk web toe
individueel pseudoregister. Hierdoor kan de registertoewijzingspas werken op
pseudos direct, maar versterkt ook verschillende andere optimalisatiepassen, zoals CSE,
loop optimizer en triviale dode code remover. Het kan echter debuggen
onmogelijk, aangezien variabelen niet langer in een "thuisregister" blijven.

Standaard ingeschakeld met -funroll-loops.

-f hele-programma
Neem aan dat de huidige compilatie-eenheid het hele programma vertegenwoordigt dat wordt gecompileerd.
Alle publieke functies en variabelen met uitzondering van "main" en die samengevoegd door
attribuut "extern_zichtbaar" worden statische functies en zijn in feite geoptimaliseerd
agressiever door interprocedurele optimizers.

Deze optie mag niet worden gebruikt in combinatie met: -flto. In plaats daarvan vertrouwen op een linker
plug-in zou veiligere en nauwkeurigere informatie moeten bieden.

-flto[=n]
Deze optie voert de standaard link-time optimizer uit. Wanneer het wordt aangeroepen met de broncode,
genereert GIMPLE (een van GCC's interne representaties) en schrijft het naar speciale ELF
secties in het objectbestand. Wanneer de objectbestanden aan elkaar zijn gekoppeld, worden alle
functielichamen worden uit deze ELF-secties gelezen en geïnstantieerd alsof ze waren
onderdeel van dezelfde vertaaleenheid.

Om de link-time optimizer te gebruiken, -flto en optimalisatie-opties moeten worden gespecificeerd op
compileertijd en tijdens de laatste link. Bijvoorbeeld:

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

De eerste twee aanroepen van GCC slaan een bytecode-representatie van GIMPLE op in special
ELF-secties binnen foo.o en bar.o. De laatste aanroep leest de GIMPLE bytecode
oppompen van foo.o en bar.o, voegt de twee bestanden samen tot één interne afbeelding en compileert
het resultaat zoals gewoonlijk. Sinds beide foo.o en bar.o zijn samengevoegd tot één afbeelding, dit
zorgt ervoor dat alle interprocedurele analyses en optimalisaties in GCC over de hele
twee bestanden alsof ze één zijn. Dit betekent bijvoorbeeld dat de inliner is
in staat om functies te inline bar.o in functies in foo.o en vice versa.

Een andere (eenvoudigere) manier om linktime-optimalisatie mogelijk te maken is:

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

Het bovenstaande genereert bytecode voor: foo.c en bar.c, voegt ze samen tot een enkele
GIMPLE-weergave en optimaliseert ze zoals gewoonlijk om te produceren mijnprog.

Het enige belangrijke om in gedachten te houden is dat u, om linktijd-optimalisaties in te schakelen,
moet het GCC-stuurprogramma gebruiken om de link-stap uit te voeren. GCC voert dan automatisch uit
link-time optimalisatie als een van de betrokken objecten is gecompileerd met de -flto
opdrachtregeloptie. Over het algemeen moet u de te gebruiken optimalisatie-opties specificeren
voor linktime-optimalisatie, hoewel GCC slim probeert te zijn in het raden van een optimalisatie
niveau te gebruiken uit de opties die tijdens het compileren worden gebruikt als u er geen opgeeft bij link-
tijd. U kunt de automatische beslissing om koppelingstijdoptimalisatie uit te voeren altijd overschrijven op
link-tijd door voorbij te gaan -fno-lto naar het linkcommando.

Om de optimalisatie van het hele programma effectief te maken, is het noodzakelijk om bepaalde
aannames van het programma. De compiler moet weten welke functies en variabelen kunnen zijn
toegankelijk door bibliotheken en runtime buiten de voor koppelingstijd geoptimaliseerde eenheid. Wanneer
ondersteund door de linker, de linker plug-in (zie -fuse-linker-plug-in) gaat
informatie aan de compiler over gebruikte en extern zichtbare symbolen. Wanneer de
linker plug-in is niet beschikbaar, -f hele-programma moet worden gebruikt om de compiler toe te staan
om deze aannames te maken, wat leidt tot agressievere optimalisatiebeslissingen.

. -fuse-linker-plug-in is dan niet ingeschakeld, wanneer een bestand wordt gecompileerd met -flto
gegenereerd objectbestand is groter dan een gewoon objectbestand omdat het GIMPLE . bevat
bytecodes en de gebruikelijke eindcode (zie -ffat-lto-objecten. Dit betekent dat object
bestanden met LTO-informatie kunnen worden gekoppeld als normale objectbestanden; indien -fno-lto is geslaagd
op de linker worden geen interprocedurele optimalisaties toegepast. Merk op dat wanneer
-fno-fat-lto-objecten is ingeschakeld, is de compileerfase sneller, maar u kunt geen a . uitvoeren
reguliere, niet-LTO-link erop.

Bovendien zijn de optimalisatievlaggen die worden gebruikt om individuele bestanden te compileren niet:
noodzakelijkerwijs gerelateerd aan die gebruikt op link time. Bijvoorbeeld,

gcc -c -O0 -ffat-lto-objecten -flto foo.c
gcc -c -O0 -ffat-lto-objecten -flto bar.c
gcc -o mijnprog -O3 foo.o bar.o

Dit produceert individuele objectbestanden met niet-geoptimaliseerde assemblercode, maar de
resulterende binaire mijnprog is geoptimaliseerd op -O3. Als in plaats daarvan het laatste binaire bestand is
gegenereerd met -fno-ltodan mijnprog is niet geoptimaliseerd.

Bij het produceren van het laatste binaire bestand past GCC alleen linktijd-optimalisaties toe
bestanden die bytecode bevatten. Daarom kunt u objectbestanden mixen en matchen en
bibliotheken met GIMPLE bytecodes en uiteindelijke objectcode. GCC selecteert automatisch
welke bestanden moeten worden geoptimaliseerd in de LTO-modus en welke bestanden moeten worden gekoppeld zonder verdere
processing.

Er zijn enkele codegeneratievlaggen bewaard door GCC bij het genereren van bytecodes, zoals:
ze moeten worden gebruikt tijdens de laatste koppelingsfase. Over het algemeen opties gespecificeerd op
link-time overschrijven die gespecificeerd tijdens het compileren.

Als u geen optie voor optimalisatieniveau opgeeft -O op link-time dan berekent GCC
één gebaseerd op de optimalisatieniveaus die worden gebruikt bij het samenstellen van de objectbestanden. De
hoogste optimalisatieniveau wint hier.

Momenteel zijn de volgende opties en hun instellingen overgenomen uit het eerste objectbestand:
die het expliciet specificeerde: -fPIC, -fpic, -fpie, -fgewone, -uitzonderingen,
-fnon-call-uitzonderingen, -fgnu-tm en alle -m doel vlaggen.

Bepaalde ABI-wijzigingsvlaggen moeten overeenkomen in alle compilatie-eenheden en proberen
om dit op link-time te overschrijven met een conflicterende waarde wordt genegeerd. Dit bevat
opties zoals -freg-struct-return en -fpcc-struct-return.

Andere opties zoals -ffp-contract, -fno-strikte-overloop, -fwrapv, -fno-trapv or
-fno-strikte-aliasing worden doorgegeven aan de koppelingsfase en conservatief samengevoegd
voor conflicterende vertaaleenheden. specifiek: -fno-strikte-overloop, -fwrapv en
-fno-trapv voorrang hebben en bijvoorbeeld -ffp-contract=uit heeft voorrang op
-ffp-contract=snel. U kunt ze op linke-time overschrijven.

Het wordt aanbevolen dat u alle bestanden die deelnemen aan dezelfde link compileert met:
dezelfde opties en specificeer die opties ook op het moment van koppelen.

Als LTO objecten tegenkomt met een C-koppeling die is gedeclareerd met incompatibele typen in afzonderlijke
aan elkaar te koppelen vertaaleenheden (ongedefinieerd gedrag volgens ISO C99
6.2.7), kan een niet-fatale diagnose worden gesteld. Het gedrag is nog steeds niet gedefinieerd tijdens het uitvoeren
tijd. Soortgelijke diagnoses kunnen worden gesteld voor andere talen.

Een ander kenmerk van LTO is dat het mogelijk is om interprocedurele optimalisaties toe te passen
op bestanden geschreven in verschillende talen:

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

Merk op dat de laatste link wordt gedaan met g ++ om de C++ runtime-bibliotheken te krijgen en
-lgfortran is toegevoegd om de Fortran runtime-bibliotheken te krijgen. In het algemeen, bij het mengen:
talen in de LTO-modus, moet u dezelfde opties voor koppelingsopdrachten gebruiken als bij het mixen
talen in een reguliere (niet-LTO) compilatie.

Als objectbestanden met GIMPLE-bytecode zijn opgeslagen in een bibliotheekarchief, zeg dan:
libfoo.a, is het mogelijk om ze uit te pakken en te gebruiken in een LTO-link als je een
linker met ondersteuning voor plug-ins. Gebruik . om statische bibliotheken te maken die geschikt zijn voor LTO gcc-ar
en gcc-ranlib in plaats van ar en ranlib; om de symbolen van objectbestanden te tonen met
GIMPLE-bytecode, gebruik gcc-nm. Die commando's vereisen dat: ar, ranlib en nm zijn
gecompileerd met ondersteuning voor plug-ins. Gebruik tijdens de link de vlag -fuse-linker-plug-in naar
ervoor zorgen dat de bibliotheek deelneemt aan het LTO-optimalisatieproces:

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

Met de linker plug-in ingeschakeld, extraheert de linker de benodigde GIMPLE-bestanden uit:
libfoo.a en geeft ze door aan de lopende GCC om ze onderdeel te maken van de geaggregeerde
GIMPLE-afbeelding moet worden geoptimaliseerd.

Als u geen linker gebruikt met ondersteuning voor plug-ins en/of de linker niet inschakelt
plug-in, dan de objecten erin libfoo.a worden geëxtraheerd en gelinkt zoals gewoonlijk, maar ze
niet deelnemen aan het LTO-optimalisatieproces. Om een ​​statische bibliotheek te maken
geschikt voor zowel LTO-optimalisatie als gebruikelijke koppeling, compileer de objectbestanden met
-flto -ffat-lto-objecten.

Link-time optimalisaties vereisen niet de aanwezigheid van het hele programma om te werken.
Als het programma geen symbolen nodig heeft om te worden geëxporteerd, is het mogelijk om te combineren
-flto en -f hele-programma zodat de interprocedurele optimizers meer kunnen gebruiken
agressieve veronderstellingen die kunnen leiden tot verbeterde optimalisatiemogelijkheden. Gebruik van
-f hele-programma is niet nodig als de linker-plug-in actief is (zie -fuse-linker-plug-in).

De huidige implementatie van LTO doet geen poging om bytecode te genereren die:
draagbaar tussen verschillende soorten hosts. De bytecode-bestanden zijn voorzien van een versie en daar
is een strikte versiecontrole, dus bytecode-bestanden die in één versie van GCC zijn gegenereerd, doen dat niet
werken met een oudere of nieuwere versie van GCC.

Optimalisatie van koppelingstijd werkt niet goed bij het genereren van foutopsporingsinformatie.
De combinatie van -flto Met -g is momenteel experimenteel en zal naar verwachting onverwacht produceren
resultaten.

Als u de optionele n, de optimalisatie en het genereren van codes tijdens de koppeling
wordt parallel uitgevoerd met behulp van n parallelle taken door gebruik te maken van een geïnstalleerd maken programma.
De omgevingsvariabele MAAK kan worden gebruikt om het gebruikte programma te overschrijven. De standaard
waarde voor n is 1.

U kunt ook specificeren -flto=jobserver om de jobserver-modus van GNU make te gebruiken om te bepalen:
het aantal parallelle banen. Dit is handig wanneer de Makefile die GCC aanroept al is
parallel uitvoeren. Je moet een toevoegen + naar het commandorecept in de parent
Makefile om dit te laten werken. Deze optie werkt waarschijnlijk alleen als MAAK is GNU maken.

-flto-partitie=alg
Geef het partitioneringsalgoritme op dat wordt gebruikt door de linktime-optimizer. De waarde is
beide 1to1 om een ​​partitionering te specificeren die de originele bronbestanden spiegelt of evenwichtige
om het verdelen in stukken van gelijke grootte te specificeren (indien mogelijk) of max creëren
nieuwe partitie voor elk symbool waar mogelijk. Specificeren geen als een algoritme
schakelt partitioneren en streamen volledig uit. De standaardwaarde is evenwichtige. Terwijl
1to1 kan worden gebruikt als een tijdelijke oplossing voor verschillende problemen met het bestellen van codes, de max
partitionering is alleen bedoeld voor interne tests. De waarde een specificeert dat
er moet precies één partitie worden gebruikt terwijl de waarde geen omzeilt partitionering en
voert de link-time optimalisatie stap direct vanuit de WPA-fase uit.

-flto-odr-type-samenvoegen
Schakel streaming van verminkte typen namen van C++-typen en hun unificatie in op
linktijd. Dit vergroot de grootte van LTO-objectbestanden, maar schakelt diagnostiek over One in
Definitie Regelovertredingen.

-flto-compressieniveau=n
Deze optie specificeert het compressieniveau dat wordt gebruikt voor geschreven tussenliggende taal
naar LTO-objectbestanden, en is alleen zinvol in combinatie met LTO-modus (-flto).
Geldige waarden zijn 0 (geen compressie) tot 9 (maximale compressie). Waarden buiten dit
bereik worden vastgeklemd op 0 of 9. Als de optie niet wordt gegeven, wordt een standaard gebalanceerde
compressie-instelling wordt gebruikt.

-flto-rapport
Drukt een rapport af met interne details over de werking van de link-time optimizer. De
inhoud van dit rapport varieert van versie tot versie. Het is bedoeld om nuttig te zijn voor GCC
ontwikkelaars bij het verwerken van objectbestanden in LTO-modus (via -flto).

Standaard uitgeschakeld.

-flto-rapport-wpa
Like -flto-rapport, maar print alleen voor de WPA-fase van Link Time Optimization.

-fuse-linker-plug-in
Maakt het gebruik van een linker plug-in mogelijk tijdens link-time optimalisatie. Deze optie is afhankelijk van
op plug-in-ondersteuning in de linker, die beschikbaar is in goud of in GNU ld 2.21 of
nieuwer.

Deze optie maakt het extraheren van objectbestanden met GIMPLE bytecode uit de bibliotheek mogelijk
archieven. Dit verbetert de kwaliteit van de optimalisatie door meer code bloot te stellen aan de link-
tijd optimalisatie. Deze informatie specificeert welke symbolen extern toegankelijk zijn
(door niet-LTO-object of tijdens dynamisch koppelen). Resulterende kwaliteitsverbeteringen van de code op
binaire bestanden (en gedeelde bibliotheken die verborgen zichtbaarheid gebruiken) zijn vergelijkbaar met
-f hele-programma. Zien -flto voor een beschrijving van het effect van deze vlag en hoe u
gebruik het.

Deze optie is standaard ingeschakeld wanneer LTO-ondersteuning in GCC is ingeschakeld en GCC was
geconfigureerd voor gebruik met een linker die plug-ins ondersteunt (GNU ld 2.21 of nieuwer of goud).

-ffat-lto-objecten
Fat LTO-objecten zijn objectbestanden die zowel de tussentaal als de
voorwerp code. Dit maakt ze bruikbaar voor zowel LTO-koppeling als normale koppeling. Dit
optie is alleen effectief bij compileren met -flto en wordt genegeerd tijdens het koppelen.

-fno-fat-lto-objecten verbetert de compilatietijd ten opzichte van gewone LTO, maar vereist de
complete toolchain om op de hoogte te zijn van LTO. Het vereist een linker met ondersteuning voor linker-plug-ins
voor basisfunctionaliteit. Aanvullend, nm, ar en ranlib moet linker ondersteunen
plug-ins om een ​​complete bouwomgeving mogelijk te maken (in staat om statische
bibliotheken enz.). GCC biedt de gcc-ar, gcc-nm, gcc-ranlib wikkels om de . te passeren
juiste opties voor deze tools. Met niet-vette LTO moeten makefiles worden aangepast om te gebruiken
Hen.

De standaard is -fno-fat-lto-objecten op doelen met ondersteuning voor linker plug-ins.

-fvergelijk-elim
Na de splitsing van de registertoewijzing en de splitsing van de toewijzingsinstructie na het register, identificeert u:
rekenkundige instructies die processorvlaggen berekenen, vergelijkbaar met een vergelijkingsbewerking
op basis van die rekenkunde. Elimineer indien mogelijk de expliciete vergelijkingsbewerking.

Deze pas is alleen van toepassing op bepaalde doelen die niet expliciet de . kunnen vertegenwoordigen
vergelijkingsbewerking voordat de registertoewijzing is voltooid.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fcprop-registers
Voer na de splitsing van de registertoewijzing en de splitsing van de toewijzingsinstructie na het register uit:
een kopie-propagatie-pas om te proberen de planningsafhankelijkheden te verminderen en af ​​en toe
verwijder de kopie.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-fprofiel-correctie
Profielen die zijn verzameld met behulp van een geïnstrumenteerd binair bestand voor programma's met meerdere threads kunnen zijn:
inconsistent vanwege gemiste tellerupdates. Als deze optie is opgegeven, gebruikt GCC
heuristieken om dergelijke inconsistenties te corrigeren of glad te strijken. Standaard zendt GCC een
foutmelding wanneer een inconsistent profiel wordt gedetecteerd.

-fprofiel-dir=pad
Stel de directory in om te zoeken naar de profielgegevensbestanden in to pad. Deze optie
heeft alleen invloed op de profielgegevens die zijn gegenereerd door -fprofile-genereren, -fest-dekking,
-fprofile-bogen en gebruikt door -fprofile-gebruik en -fbranch-waarschijnlijkheden en het is gerelateerd
opties. Zowel absolute als relatieve paden kunnen worden gebruikt. GCC gebruikt standaard de
huidige map als pad, dus het profielgegevensbestand verschijnt in dezelfde map als
het objectbestand.

-fprofile-genereren
-fprofile-genereren=pad
Schakel opties in die gewoonlijk worden gebruikt voor instrumentatietoepassingen om een ​​nuttig profiel te produceren
voor latere hercompilatie met op profielfeedback gebaseerde optimalisatie. Je moet gebruiken
-fprofile-genereren zowel bij het compileren als bij het koppelen van uw programma.

De volgende opties zijn ingeschakeld: -fprofile-bogen, -fprofile-waarden, -fvpt.

If pad is opgegeven, kijkt GCC naar de pad om de profielfeedbackgegevensbestanden te vinden.
Bekijk -fprofile-dir.

-fprofile-gebruik
-fprofile-gebruik=pad
Schakel op feedback gerichte optimalisaties van profielen in, en de volgende optimalisaties die:
zijn over het algemeen alleen winstgevend als er profielfeedback beschikbaar is: -fbranch-waarschijnlijkheden,
-fvpt, -funroll-loops, -fpel-loops, -ftracer, -ftree-vectoriseren en ftree-lus-
distribueer-patronen.

GCC geeft standaard een foutmelding als de feedbackprofielen niet overeenkomen met de
broncode. Deze fout kan worden omgezet in een waarschuwing met behulp van -Wdekking-mismatch.
Merk op dat dit kan resulteren in slecht geoptimaliseerde code.

If pad is opgegeven, kijkt GCC naar de pad om de profielfeedbackgegevensbestanden te vinden.
Bekijk -fprofile-dir.

-fauto-profiel
-fauto-profiel=pad
Schakel op steekproeven gebaseerde feedbackgerichte optimalisaties en de volgende optimalisaties in:
die over het algemeen alleen winstgevend zijn met beschikbare profielfeedback:
-fbranch-waarschijnlijkheden, -fvpt, -funroll-loops, -fpel-loops, -ftracer,
-ftree-vectoriseren, -finline-functies, -fipa-cp, -fipa-cp-kloon,
-fvoorspellende-commoning, -funswitch-loops, -fgcse-na-herladen en
-ftree-loop-distribueer-patronen.

pad is de naam van een bestand met AutoFDO-profielinformatie. Indien weggelaten, is het
standaard fbdata.afdo in de huidige map.

Om een ​​AutoFDO-profielgegevensbestand te maken, moet u uw programma uitvoeren met de perf
hulpprogramma op een ondersteund GNU/Linux-doelsysteem. Voor meer informatie, zie
<https://perf.wiki.kernel.org/>.

bv

perf record -e br_inst_retired:near_taken -b -o perf.data \
-- jouw_programma

Gebruik dan de create_gcov tool om de onbewerkte profielgegevens te converteren naar een formaat dat
gebruikt door GCC. Je moet hier ook het niet-gestripte binaire bestand voor je programma aanleveren
hulpmiddel. Zienhttps://github.com/google/autofdo>.

bv

create_gcov --binary=uw_programma.unstripped --profile=perf.data \
--gcov=profiel.afdo

De volgende opties bepalen het gedrag van de compiler met betrekking tot rekenkunde met drijvende komma.
Deze opties balanceren tussen snelheid en correctheid. Alles moet specifiek zijn ingeschakeld.

-float-winkel
Sla geen drijvende-kommavariabelen op in registers en blokkeer andere opties die:
kan veranderen of een drijvende-kommawaarde uit een register of geheugen wordt gehaald.

Deze optie voorkomt ongewenste overprecisie op machines zoals de 68000 waarbij
de zwevende registers (van de 68881) houden meer precisie dan een "dubbel" wordt verondersteld
hebben. Hetzelfde geldt voor de x86-architectuur. Voor de meeste programma's is de overmatige precisie
doet alleen maar goed, maar een paar programma's vertrouwen op de precieze definitie van IEEE-floating
punt. Gebruik maken van -float-winkel voor dergelijke programma's, nadat u ze hebt gewijzigd om ze allemaal op te slaan
relevante tussentijdse berekeningen in variabelen.

-fexcess-precisie=stijl
Deze optie biedt verdere controle over overmatige precisie op machines waar zwevende
puntregisters hebben meer precisie dan de IEEE "float" en "double" types en de
processor ondersteunt geen bewerkingen die naar die typen afronden. Standaard,
-fexcess-precisie = snel is van kracht; dit betekent dat operaties worden uitgevoerd in
de precisie van de registers en dat het onvoorspelbaar is bij het afronden naar de typen
gespecificeerd in de broncode plaatsvindt. Bij het compileren van C, als
-fexcess-precisie=standaard is gespecificeerd, volgt overmatige precisie de regels
gespecificeerd in ISO C99; in het bijzonder zorgen zowel casts als toewijzingen ervoor dat waarden
afgerond op hun semantische typen (terwijl -float-winkel heeft alleen invloed op opdrachten).
Deze optie is standaard ingeschakeld voor C als een strikte conformiteitsoptie zoals:
-standaard=c99 is gebruikt.

-fexcess-precisie=standaard is niet geïmplementeerd voor andere talen dan C, en heeft geen
effect als -funsafe-math-optimalisaties or -ffast-wiskunde is gespecificeerd. Op de x86 is het
heeft ook geen effect als -mfpmath=sse or -mfpmath=sse+387 is gespecificeerd; in de vorige
In het laatste geval is de IEEE-semantiek van toepassing zonder overmatige precisie, en in het laatste geval is afronding
onvoorspelbaar.

-ffast-wiskunde
Stelt de opties in -fno-wiskunde-errno, -funsafe-math-optimalisaties, -alleen eindige-wiskunde,
-fno-afronding-wiskunde, -fno-signalering-nans en -fcx-beperkt bereik.

Deze optie zorgt ervoor dat de preprocessor-macro "__FAST_MATH__" wordt gedefinieerd.

Deze optie is door niemand ingeschakeld -O optie bovendien -Of snel omdat het kan resulteren in
onjuiste uitvoer voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies. Het kan echter snellere code opleveren voor:
programma's die de garanties van deze specificaties niet vereisen.

-fno-wiskunde-errno
Stel geen "errno" in na het aanroepen van wiskundige functies die worden uitgevoerd met een enkele
instructie, bijvoorbeeld "sqrt". Een programma dat vertrouwt op IEEE-uitzonderingen voor wiskundige fouten
afhandeling wil deze vlag misschien gebruiken voor snelheid met behoud van IEEE-rekenkunde
compatibiliteit.

Deze optie is door niemand ingeschakeld -O optie omdat dit kan resulteren in onjuiste uitvoer
voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies. Het kan echter snellere code opleveren voor:
programma's die de garanties van deze specificaties niet vereisen.

De standaard is -fmath-fout.

Op Darwin-systemen stelt de wiskundebibliotheek nooit "errno" in. Er is dus geen reden
voor de compiler om de mogelijkheid te overwegen dat het zou kunnen, en -fno-wiskunde-errno is de
standaard.

-funsafe-math-optimalisaties
Sta optimalisaties toe voor drijvende-kommaberekeningen die (a) aannemen dat argumenten en
resultaten zijn geldig en (b) kunnen in strijd zijn met de IEEE- of ANSI-normen. Bij gebruik op link-time,
het kan bibliotheken of opstartbestanden bevatten die het standaard FPU-stuurwoord wijzigen of
andere vergelijkbare optimalisaties.

Deze optie is door niemand ingeschakeld -O optie omdat dit kan resulteren in onjuiste uitvoer
voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies. Het kan echter snellere code opleveren voor:
programma's die de garanties van deze specificaties niet vereisen. Schakelt in
-fno-ondertekende nullen, -fno-trapping-wiskunde, -Fassociatieve-wiskunde en -freciprocal-wiskunde.

De standaard is -fno-onveilige-wiskunde-optimalisaties.

-Fassociatieve-wiskunde
Sta opnieuw koppelen van operanden toe in reeksen drijvende-kommabewerkingen. Dit
schendt de ISO C- en C++-taalstandaard door mogelijk het berekeningsresultaat te wijzigen.
OPMERKING: opnieuw bestellen kan het teken van nul veranderen en NaN's negeren en of . remmen
maak onderloop of overloop (en kan dus niet worden gebruikt voor code die afhankelijk is van afronding)
gedrag zoals "(x + 2**52) - 2**52". Kan ook drijvende-kommavergelijkingen opnieuw ordenen en
mag dus niet worden gebruikt wanneer geordende vergelijkingen vereist zijn. Deze optie vereist dat:
zowel -fno-ondertekende nullen en -fno-trapping-wiskunde van kracht zijn. Bovendien maakt het niet
veel zin met -grond-wiskunde. Voor Fortran wordt de optie automatisch ingeschakeld wanneer:
zowel -fno-ondertekende nullen en -fno-trapping-wiskunde zijn van kracht.

De standaard is -fno-associatieve-wiskunde.

-freciprocal-wiskunde
Sta toe dat het omgekeerde van een waarde wordt gebruikt in plaats van te delen door de waarde als dit
optimalisaties mogelijk maakt. "x / y" kan bijvoorbeeld worden vervangen door "x * (1/y)", wat is
nuttig als "(1/y)" onderhevig is aan eliminatie van algemene subexpressies. Merk op dat dit
verliest precisie en verhoogt het aantal flops dat op de waarde werkt.

De standaard is -fno-wederkerige-wiskunde.

-alleen eindige-wiskunde
Sta optimalisaties toe voor drijvende-kommaberekeningen die aannemen dat argumenten en
resultaten zijn geen NaNs of +-Infs.

Deze optie is door niemand ingeschakeld -O optie omdat dit kan resulteren in onjuiste uitvoer
voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies. Het kan echter snellere code opleveren voor:
programma's die de garanties van deze specificaties niet vereisen.

De standaard is -fno-eindige-wiskunde-alleen.

-fno-ondertekende nullen
Sta optimalisaties toe voor drijvende-kommaberekeningen die de ondertekendheid van nul negeren.
IEEE-rekenkunde specificeert het gedrag van verschillende +0.0 en -0.0 waarden, die dan
verbiedt vereenvoudiging van uitdrukkingen zoals x+0.0 of 0.0*x (zelfs met
-alleen eindige-wiskunde). Deze optie houdt in dat het teken van een nulresultaat niet is
significant.

De standaard is -fsigned-nullen.

-fno-trapping-wiskunde
Compileer code in de veronderstelling dat bewerkingen met drijvende komma niet zichtbaar voor de gebruiker kunnen genereren
vallen. Deze vallen omvatten deling door nul, overloop, onderstroom, onnauwkeurig resultaat en
ongeldige operatie. Deze optie vereist dat: -fno-signalering-nans van kracht zijn.
Door deze optie in te stellen kan snellere code mogelijk zijn als men vertrouwt op "non-stop" IEEE-rekenkunde,
bijvoorbeeld.

Deze optie mag door niemand worden ingeschakeld -O optie omdat dit kan resulteren in:
onjuiste uitvoer voor programma's die afhankelijk zijn van een exacte implementatie van IEEE of ISO
regels/specificaties voor wiskundige functies.

De standaard is -ftrapping-wiskunde.

-grond-wiskunde
Schakel transformaties en optimalisaties uit die standaard afronding met drijvende komma aannemen
gedrag. Dit is afgerond op nul voor alle conversies van drijvende komma naar geheel getal, en
afronden naar dichtstbijzijnde voor alle andere rekenkundige afknottingen. Deze optie zou moeten zijn:
gespecificeerd voor programma's die de FP-afrondingsmodus dynamisch wijzigen, of die
uitgevoerd met een niet-standaard afrondingsmodus. Deze optie schakelt het constant vouwen van . uit
drijvende-komma-expressies tijdens het compileren (die kunnen worden beïnvloed door de afrondingsmodus)
en rekenkundige transformaties die onveilig zijn in de aanwezigheid van tekenafhankelijke
afrondingsmodi.

De standaard is -fno-afronding-wiskunde.

Deze optie is experimenteel en kan momenteel niet garanderen dat alle GCC worden uitgeschakeld
optimalisaties die worden beïnvloed door de afrondingsmodus. Toekomstige versies van GCC kunnen bieden:
fijnere controle van deze instelling met behulp van C99's "FENV_ACCESS" pragma. Deze opdrachtregel
optie wordt gebruikt om de standaardstatus voor "FENV_ACCESS" op te geven.

-fsignalering-nans
Compileer code ervan uitgaande dat IEEE-signalering NaN's voor de gebruiker zichtbare vallen kunnen genereren tijdens:
drijvende-kommabewerkingen. Als u deze optie instelt, worden optimalisaties uitgeschakeld die kunnen veranderen
het aantal uitzonderingen dat zichtbaar is bij signalerende NaN's. Deze optie houdt in:
-ftrapping-wiskunde.

Deze optie zorgt ervoor dat de preprocessor-macro "__SUPPORT_SNAN__" wordt gedefinieerd.

De standaard is -fno-signalering-nans.

Deze optie is experimenteel en kan momenteel niet garanderen dat alle GCC worden uitgeschakeld
optimalisaties die het signaalgedrag van NaN beïnvloeden.

-fsingle-precisie-constante
Behandel drijvende-kommaconstanten als enkele precisie in plaats van impliciet te converteren
ze tot dubbele precisie constanten.

-fcx-beperkt bereik
Indien ingeschakeld, geeft deze optie aan dat een stap voor het verkleinen van het bereik niet nodig is wanneer:
complexe deling uitvoeren. Ook wordt niet gecontroleerd of het resultaat van a
complexe vermenigvuldiging of deling is "NaN + I*NaN", met een poging om de . te redden
situatie in dat geval. De standaard is -fno-cx-beperkt bereik, maar is ingeschakeld door
-ffast-wiskunde.

Deze optie regelt de standaardinstelling van het ISO C99 "CX_LIMITED_RANGE" pragma.
Desalniettemin geldt de optie voor alle talen.

-fcx-fortran-regels
Complexe vermenigvuldiging en deling volgen de Fortran-regels. Bereikreductie wordt gedaan als
onderdeel van complexe deling, maar er wordt niet gecontroleerd of het resultaat van een complex
vermenigvuldigen of delen is "NaN + I*NaN", met een poging om de situatie te redden
in dat geval.

De standaard is -fno-cx-fortran-regels.

De volgende opties regelen optimalisaties die de prestaties kunnen verbeteren, maar dat niet zijn:
ingeschakeld door een -O opties. Deze sectie bevat experimentele opties die kunnen leiden tot:
gebroken code.

-fbranch-waarschijnlijkheden
Na het uitvoeren van een programma dat is gecompileerd met -fprofile-bogen, je kunt het een tweede keer compileren
gebruik -fbranch-waarschijnlijkheden, om optimalisaties te verbeteren op basis van het aantal keren
elke tak werd genomen. Wanneer een programma gecompileerd met -fprofile-bogen uitgangen, het bespaart
booguitvoering telt tot een bestand met de naam bronnaam.gcda voor elk bronbestand. De
informatie in dit gegevensbestand is erg afhankelijk van de structuur van het gegenereerde
code, dus u moet voor beide dezelfde broncode en dezelfde optimalisatie-opties gebruiken
compilaties.

met -fbranch-waarschijnlijkheden, GCC zet een REG_BR_PROB noteer op elk JUMP_INSN en
CALL_INSN. Deze kunnen worden gebruikt om de optimalisatie te verbeteren. Momenteel worden ze alleen gebruikt
op één plek: in reorg.c, in plaats van te raden naar welk pad een vertakking het meest waarschijnlijk is
nemen, de REG_BR_PROB waarden worden gebruikt om precies te bepalen welk pad het meest wordt genomen
vaak.

-fprofile-waarden
Indien gecombineerd met -fprofile-bogen, het voegt code toe zodat sommige gegevens over waarden van
uitdrukkingen in het programma worden verzameld.

met -fbranch-waarschijnlijkheden, het leest de gegevens terug die zijn verzameld uit profileringswaarden van
uitdrukkingen voor gebruik in optimalisaties.

Ingeschakeld met -fprofile-genereren en -fprofile-gebruik.

-fprofile-reorder-functies
Functieherschikking op basis van profielinstrumentatie verzamelt de eerste keer van uitvoering
van een functie en ordent deze functies in oplopende volgorde.

Ingeschakeld met -fprofile-gebruik.

-fvpt
Indien gecombineerd met -fprofile-bogen, deze optie instrueert de compiler om code toe te voegen aan
informatie verzamelen over waarden van uitdrukkingen.

met -fbranch-waarschijnlijkheden, het leest de verzamelde gegevens terug en voert daadwerkelijk de
op basis daarvan optimalisaties. Momenteel omvatten de optimalisaties specialisatie van
delingsbewerkingen met behulp van de kennis over de waarde van de noemer.

-frename-registers
Poging om valse afhankelijkheden in geplande code te vermijden door gebruik te maken van registers left
voorbij na registertoewijzing. Deze optimalisatie komt vooral ten goede aan processors met veel
van registers. Afhankelijk van het debug-informatieformaat dat door het doel is aangenomen,
het kan echter debuggen onmogelijk maken, omdat variabelen niet langer in een "thuis"
register".

Standaard ingeschakeld met -funroll-loops en -fpel-loops.

-fschema-fusie
Voert een doelafhankelijke pass over de instructiestroom uit om instructies te plannen
van hetzelfde type samen omdat de doelmachine ze efficiënter kan uitvoeren als ze
naast elkaar liggen in de instructiestroom.

Ingeschakeld op niveaus -O2, -O3, -Jij.

-ftracer
Voer staartduplicatie uit om de superblokgrootte te vergroten. Deze transformatie vereenvoudigt
de controlestroom van de functie waardoor andere optimalisaties hun werk beter kunnen doen.

Ingeschakeld met -fprofile-gebruik.

-funroll-loops
Ontrol loops waarvan het aantal iteraties kan worden bepaald tijdens het compileren of daarna
toegang tot de lus. -funroll-loops impliceert -frerun-cse-na-lus, -fweb en
-frename-registers. Het zet ook volledige luspeeling aan (dwz volledige verwijdering van
loops met een klein constant aantal iteraties). Deze optie maakt de code groter, en
kan het wel of niet sneller laten lopen.

Ingeschakeld met -fprofile-gebruik.

-funroll-alle-loops
Rol alle lussen uit, zelfs als hun aantal iteraties onzeker is wanneer de lus is
ingevoerde. Hierdoor werken programma's meestal langzamer. -funroll-alle-loops impliceert de
dezelfde opties als -funroll-loops.

-fpel-loops
Peels lussen waarvoor voldoende informatie is dat ze niet veel rollen (van
profielfeedback). Het zet ook volledige luspeeling aan (dwz volledige verwijdering van
loops met een klein constant aantal iteraties).

Ingeschakeld met -fprofile-gebruik.

-fmove-loop-invarianten
Schakelt de loop-invariante bewegingsdoorgang in de RTL-loopoptimalisatie in. Ingeschakeld op niveau
-O1

-funswitch-loops
Verplaats takken met lusinvariante condities uit de lus, met duplicaten van de
lus op beide takken (aangepast volgens resultaat van de voorwaarde).

-ffunctie-secties
-fdata-secties
Plaats elke functie of gegevensitem in zijn eigen sectie in het uitvoerbestand als het doel
ondersteunt willekeurige secties. De naam van de functie of de naam van het gegevensitem
bepaalt de naam van de sectie in het uitvoerbestand.

Gebruik deze opties op systemen waar de linker optimalisaties kan uitvoeren om te verbeteren
referentieplaats in de instructieruimte. De meeste systemen die het ELF-object gebruiken
formaat en SPARC-processors met Solaris 2 hebben linkers met dergelijke optimalisaties.
AIX kan deze optimalisaties in de toekomst hebben.

Gebruik deze opties alleen als er aanzienlijke voordelen zijn. Wanneer je
specificeer deze opties, de assembler en linker maken groter object en uitvoerbaar
bestanden en zijn ook langzamer. U kunt niet gebruiken gprof op alle systemen als u dit opgeeft
optie, en u kunt problemen krijgen met debuggen als u zowel deze optie als . specificeert
-g.

-fbranch-target-load-optimize
Voer optimalisatie van de belasting van het vertakkingsdoelregister uit vóór het threaden van proloog / epiloog.
Het gebruik van doelregisters kan doorgaans alleen tijdens het herladen worden blootgesteld, dus hijsen
laadt uit lussen en het doen van inter-blokplanning heeft een afzonderlijke optimalisatie nodig
voorbij lopen.

-fbranch-target-load-optimize2
Voer optimalisatie van de belasting van het vertakkingsdoelregister uit na proloog / epiloog threading.

-fbtr-bb-exclusief
Bij het uitvoeren van optimalisatie van de belasting van het vertakkingsdoelregister, mag u vertakkingsdoel niet opnieuw gebruiken
registreert binnen elk basisblok.

-stack-beschermer
Zend extra code uit om te controleren op bufferoverflows, zoals stacksmash-aanvallen. Dit
wordt gedaan door een bewakingsvariabele toe te voegen aan functies met kwetsbare objecten. Dit
bevat functies die "alloca" aanroepen en functies met buffers groter dan 8 bytes.
De bewakers worden geïnitialiseerd wanneer een functie wordt ingevoerd en vervolgens gecontroleerd wanneer de
functie verlaat. Als een bewakingscontrole mislukt, wordt een foutmelding afgedrukt en het programma
uitgangen.

-fstack-protector-all
Like -stack-beschermer behalve dat alle functies zijn beveiligd.

-fstack-beschermer-sterk
Like -stack-beschermer maar bevat extra te beschermen functies --- die
die lokale arraydefinities hebben, of verwijzingen hebben naar lokale frameadressen.

-fstack-protector-expliciet
Like -stack-beschermer maar beschermt alleen die functies die de
kenmerk "stack_protect"

-fstdarg-opt
Optimaliseer de proloog van variadische argumentfuncties met betrekking tot het gebruik ervan
argumenten.

OPMERKING: In Ubuntu 14.10 en latere versies, -fstack-beschermer-sterk is ingeschakeld door
standaard voor C, C++, ObjC, ObjC++, indien geen van -fno-stack-beschermer, -nostlib, ook niet
-vrijstaand zijn gevonden.

-fsectie-ankers
Probeer het aantal symbolische adresberekeningen te verminderen door een gedeeld "anker" te gebruiken
symbolen om objecten in de buurt aan te pakken. Deze transformatie kan helpen om het aantal te verminderen
van GOT-items en GOT-toegangen op sommige doelen.

Bijvoorbeeld de implementatie van de volgende functie "foo":

statisch int a, b, c;
int foo (void) { retourneer a + b + c; }

berekent meestal de adressen van alle drie de variabelen, maar als je het compileert met
-fsectie-ankers, benadert het de variabelen in plaats daarvan vanuit een gemeenschappelijk ankerpunt. De
effect is vergelijkbaar met de volgende pseudocode (die geen geldige C is):

int foo (ongeldig)
{
registreer int *xr = &x;
retourneer xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Niet alle doelen ondersteunen deze optie.

--param naam=waarde
Op sommige plaatsen gebruikt GCC verschillende constanten om de hoeveelheid optimalisatie te regelen die
is klaar. GCC heeft bijvoorbeeld geen inline-functies die meer dan een bepaald
aantal instructies. U kunt sommige van deze constanten op de opdrachtregel controleren
met de --param optie.

De namen van specifieke parameters en de betekenis van de waarden zijn gekoppeld aan de
interne onderdelen van de compiler, en kunnen in de toekomst zonder voorafgaande kennisgeving worden gewijzigd
releases.

In elk geval is de waarde is een geheel getal. De toegestane keuzes voor naam zijn:

voorspelbare-tak-uitkomst
Wanneer wordt voorspeld dat vertakking wordt genomen met een waarschijnlijkheid die lager is dan deze drempel
(in procenten), dan wordt het als goed voorspelbaar beschouwd. De standaardwaarde is 10.

max-kruissprong-randen
Het maximale aantal inkomende randen waarmee rekening moet worden gehouden voor cross-jumping. het algoritme
door -fcrossspringen is O (N ^ 2) in het aantal randen dat in elk blok binnenkomt.
Toenemende waarden betekenen agressievere optimalisatie, waardoor de compilatietijd wordt verkort
verhogen met waarschijnlijk een kleine verbetering in uitvoerbare grootte.

min-crossjump-insns
Het minimum aantal instructies dat moet worden gekoppeld aan het einde van twee blokken
voordat er op hen wordt gesprongen. Deze waarde wordt genegeerd in het geval
waar alle instructies in het blok waarvandaan wordt gecrosst, overeenkomen. De
standaardwaarde is 5.

max-grow-copy-bb-insns
De maximale codegrootte-uitbreidingsfactor bij het kopiëren van basisblokken in plaats van
springen. De uitbreiding is relatief ten opzichte van een springinstructie. De standaardwaarde is
8.

max-goto-duplicatie-insns
Het maximum aantal instructies om te dupliceren naar een blok dat springt naar a
berekende goto. Om O(N^2)-gedrag in een aantal passages te vermijden, zijn GCC-factoren
goto's vroeg in het compilatieproces berekend en de factoren zo laat als
mogelijk. Alleen berekende sprongen aan het einde van een basisblok met niet meer dan max.
goto-duplicatie-insns zijn niet meegenomen. De standaardwaarde is 8.

max-delay-slot-insn-zoeken
Het maximale aantal instructies waarmee rekening moet worden gehouden bij het zoeken naar een instructie om
een vertragingsslot vullen. Als er meer dan dit willekeurige aantal instructies zijn:
gezocht, de tijdwinst door het vullen van de vertragingstijd is minimaal, dus stop
zoeken. Toenemende waarden betekenen meer agressieve optimalisatie, waardoor de
de compilatietijd neemt toe met waarschijnlijk een kleine verbetering in de uitvoeringstijd.

max-delay-slot-live-zoeken
Bij het proberen om vertragingsslots te vullen, het maximale aantal instructies om te overwegen
bij het zoeken naar een blok met geldige live-registerinformatie. Dit verhogen
willekeurig gekozen waarde betekent meer agressieve optimalisatie, waardoor de
compilatie tijd. Deze parameter moet worden verwijderd wanneer de vertragingsslotcode is
herschreven om de control-flow-grafiek te behouden.

max-gcse-geheugen
De geschatte maximale hoeveelheid geheugen die kan worden toegewezen om te presteren
de globale gemeenschappelijke subexpressie eliminatie optimalisatie. Als meer geheugen dan
gespecificeerd is vereist, wordt de optimalisatie niet gedaan.

max-gcse-invoegverhouding
Als de verhouding tussen invoegingen van expressies en verwijderingen groter is dan deze waarde voor
elke uitdrukking, dan voegt RTL PRE de uitdrukking in of verwijdert deze en verlaat dus
gedeeltelijk redundante berekeningen in de instructiestroom. De standaardwaarde is
20.

max-in behandeling-lijst-lengte
Het maximale aantal in behandeling zijnde afhankelijkheden is mogelijk voor het leegmaken van de
huidige staat en opnieuw beginnen. Grote functies met weinig vertakkingen of oproepen kunnen:
maak buitensporig grote lijsten die onnodig geheugen en bronnen verbruiken.

max-modulo-backtrack-pogingen
Het maximale aantal backtrack-pogingen dat de planner moet doen wanneer modulo
een lus plannen. Grotere waarden kunnen de compilatietijd exponentieel verlengen.

max-inline-insns-single
Verschillende parameters regelen de tree-inliner die in GCC wordt gebruikt. Dit nummer bepaalt de
maximum aantal instructies (geteld in de interne representatie van GCC) in a
enkele functie die de boominliner in overweging neemt voor inlining. Dit heeft alleen invloed op
functies die inline zijn gedeclareerd en methoden geïmplementeerd in een klassendeclaratie (C++).
De standaardwaarde is 400.

max-inline-insns-auto
Wanneer u gebruik maken van -finline-functies (inbegrepen -O3), veel functies die
anders niet in aanmerking komen voor inlining door de compiler worden onderzocht. Tot
die functies, een andere (meer beperkende) limiet in vergelijking met functies
gedeclareerd inline kan worden toegepast. De standaardwaarde is 40.

inline-min-versnelling
Wanneer geschatte prestatieverbetering van beller + callee runtime dit overschrijdt
drempel (in procent), de functie kan worden inline gezet, ongeacht de limiet aan
--param max-inline-insns-single en --param max-inline-insns-auto.

grote-functie-insns
De limiet die echt grote functies specificeert. Voor functies groter dan deze limiet
na inlining wordt inlining beperkt door: --param grote-functie-groei. Deze
parameter is vooral nuttig om extreme compilatietijd veroorzaakt door niet-
lineaire algoritmen die door de back-end worden gebruikt. De standaardwaarde is 2700.

grote-functie-groei
Specificeert maximale groei van grote functies veroorzaakt door inlining in procenten. De
standaardwaarde is 100, wat de groei van grote functies beperkt tot 2.0 keer het origineel
grootte.

grote-eenheid-insns
De limiet die een grote vertaaleenheid opgeeft. Groei veroorzaakt door inlining van eenheden
groter dan deze limiet wordt beperkt door --param inline-unit-groei. Voor kleine eenheden
dit is misschien te strak. Beschouw bijvoorbeeld een eenheid bestaande uit functie A
dat is inline en B die A maar drie keer aanroept. Als B klein is ten opzichte van A,
de groei van de eenheid is 300% en toch is zo'n inlining heel verstandig. Voor zeer grote
eenheden bestaande uit kleine inlineable functies, maar de totale eenheidsgroei
limiet is nodig om exponentiële explosie van codegrootte te voorkomen. Dus voor kleinere
eenheden, wordt de maat vergroot tot --param grote-eenheid-insns voor het aanbrengen --param
inline-unit-groei. De standaardwaarde is 10000.

inline-unit-groei
Specificeert maximale algehele groei van de compilatie-eenheid veroorzaakt door inlining. De
de standaardwaarde is 20, wat de groei van de eenheden beperkt tot 1.2 keer de oorspronkelijke grootte. Koud
functies (ofwel gemarkeerd als koud via een attribuut of door profielfeedback) zijn niet
verrekend in de eenheidsgrootte.

ipcp-eenheidsgroei
Specificeert maximale totale groei van de compilatie-eenheid veroorzaakt door interprocedurele
constante voortplanting. De standaardwaarde is 10, wat de groei van eenheden beperkt tot 1.1
keer de oorspronkelijke grootte.

groot gestapeld frame
De limiet voor het specificeren van grote stapelframes. Terwijl het inlinen het algoritme probeert
om niet te veel over deze grens te groeien. De standaardwaarde is 256 bytes.

large-stack-frame-groei
Specificeert maximale groei van grote stapelframes veroorzaakt door inlining in procenten.
De standaardwaarde is 1000, wat de groei van grote stapelframes beperkt tot 11 keer de
originele grootte.

max-inline-insns-recursief
max-inline-insns-recursieve-auto
Specificeert het maximum aantal instructies voor een out-of-line kopie van een zelf-
recursieve inline-functie kan uitgroeien tot door recursieve inlining uit te voeren.

--param max-inline-insns-recursief is van toepassing op functies die inline zijn gedeclareerd. Voor
functies niet inline gedeclareerd, recursieve inlining gebeurt alleen wanneer
-finline-functies (inbegrepen -O3) is ingeschakeld; --param max-inline-insns-
recursief-auto in plaats daarvan van toepassing. De standaardwaarde is 450.

max-inline-recursieve-diepte
max-inline-recursieve-diepte-auto
Specificeert de maximale recursiediepte die wordt gebruikt voor recursieve inlining.

--param max-inline-recursieve-diepte is van toepassing op functies die inline zijn gedeclareerd. Voor
functies niet inline gedeclareerd, recursieve inlining gebeurt alleen wanneer
-finline-functies (inbegrepen -O3) is ingeschakeld; --param max-inline-recursieve-
diepte-auto in plaats daarvan van toepassing. De standaardwaarde is 8.

min-inline-recursieve-waarschijnlijkheid
Recursieve inlining is alleen winstgevend voor functies met diepe recursie in
gemiddeld en kan pijn doen voor functie met weinig recursiediepte door de
prolooggrootte of complexiteit van functielichaam naar andere optimizers.

Wanneer profielfeedback beschikbaar is (zie -fprofile-genereren) de werkelijke recursie
diepte kan worden geraden op basis van de kans dat de functie terugkeert via een bepaalde aanroep
uitdrukking. Deze parameter beperkt inlining alleen tot expressies waarvan
waarschijnlijkheid overschrijdt de gegeven drempel (in procenten). De standaardwaarde is 10.

vroege-inlining-insns
Specificeer de groei die de vroege inliner kan maken. In feite verhoogt het de hoeveelheid
van inlining voor code met een grote abstractiestraf. De standaardwaarde is 14.

max-early-inliner-iteraties
Limiet van iteraties van de vroege inliner. Dit beperkt in principe het aantal
geneste indirecte oproepen die de vroege inliner kan oplossen. Diepere kettingen zijn nog steeds
behandeld door late inlining.

comdat-delen-waarschijnlijkheid
Waarschijnlijkheid (in procenten) dat C++ inline-functie met comdatzichtbaarheid is
gedeeld over meerdere compilatie-eenheden. De standaardwaarde is 20.

profiel-func-interne-id
Een parameter om te bepalen of de functie interne id in de profieldatabase moet worden gebruikt
opzoeken. Als de waarde 0 is, gebruikt de compiler een id die is gebaseerd op functie
assembler-naam en bestandsnaam, waardoor oude profielgegevens toleranter zijn voor de bron
wijzigingen zoals functieherschikking enz. De standaardwaarde is 0.

min-vect-loop-gebonden
Het minimum aantal iteraties waaronder lussen niet worden gevectoriseerd wanneer
-ftree-vectoriseren is gebruikt. Het aantal iteraties na vectorisatie moet
groter zijn dan de waarde gespecificeerd door deze optie om vectorisatie toe te staan. De
standaardwaarde is 0.

gcse-kosten-afstand-ratio
Schaalfactor bij berekening van maximale afstand waarmee een uitdrukking kan worden verplaatst
GCSE-optimalisaties. Dit wordt momenteel alleen ondersteund in de code hijspas.
Hoe groter de verhouding, hoe agressiever code hijsen is met simple
uitdrukkingen, dat wil zeggen, de uitdrukkingen die minder hebben gekost dan gcse-onbeperkt-
kosten. Door 0 op te geven, wordt het hijsen van eenvoudige uitdrukkingen uitgeschakeld. De standaardwaarde is
10.

gcse-onbeperkte-kosten
Kosten, ruwweg gemeten als de kosten van een enkele typische machine-instructie, op
welke GCSE-optimalisaties de afstand die een uitdrukking kan afleggen niet beperken.
Dit wordt momenteel alleen ondersteund in de code hijspas. Hoe lager de kosten,
hoe agressiever code hijsen is. Door 0 op te geven, kunnen alle uitdrukkingen
onbeperkte afstanden reizen. De standaardwaarde is 3.

max-hijsdiepte
De diepte van het zoeken in de dominatorboom naar uitdrukkingen om te hijsen. Dit wordt gebruikt
om kwadratisch gedrag in hijsalgoritme te voorkomen. De waarde van 0 beperkt niet
bij het zoeken, maar kan de compilatie van enorme functies vertragen. De standaardwaarde:
is 30.

max-tail-merge-vergelijkingen
Het maximale aantal vergelijkbare bb's om een ​​bb mee te vergelijken. Dit wordt gebruikt om te voorkomen dat
kwadratisch gedrag bij het samenvoegen van boomstaarten. De standaardwaarde is 10.

max-tail-merge-iteraties
Het maximale aantal iteraties van de pass over de functie. Dit wordt gebruikt om
beperk de compilatietijd bij het samenvoegen van boomstaarten. De standaardwaarde is 2.

max-uitgerolde-insns
Het maximale aantal instructies dat een lus mag worden uitgerold. Als een lus
wordt uitgerold, bepaalt deze parameter ook hoe vaak de luscode is
uitgerold.

max-gemiddelde-uitgerolde-insns
Het maximale aantal instructies, beïnvloed door de waarschijnlijkheid van hun uitvoering, dat:
een lus moet mogelijk worden uitgerold. Als een lus wordt uitgerold, is deze parameter ook
bepaalt hoe vaak de luscode wordt uitgerold.

max-uitroltijden
Het maximale aantal uitrollen van een enkele lus.

max-peeling-insns
Het maximale aantal instructies dat een lus mogelijk moet worden gepeld. Als een lus
wordt gepeld, bepaalt deze parameter ook hoe vaak de luscode wordt gepeld.

max-peeltijden
Het maximale aantal schillen van een enkele lus.

max-peel-takken
Het maximale aantal takken op het hete pad door de gepelde reeks.

max-volledig-gepelde-insns
Het maximale aantal insns van een volledig gepelde lus.

max-volledig-afpeltijden
Het maximale aantal iteraties van een lus dat geschikt is voor volledige peeling.

max-volledig-peel-loop-nestdiepte
De maximale diepte van een lussennest geschikt voor volledige peeling.

max-unswitch-insns
Het maximale aantal insns van een ongeschakelde lus.

max-unswitch-niveau
Het maximale aantal ongeschakelde takken in een enkele lus.

niet duur
De minimale kosten van een dure uitdrukking in de lusinvariante beweging.

iv-overweeg-alle-kandidaten-gebonden
Gebonden aan aantal kandidaten voor inductievariabelen, waaronder alle kandidaten
worden overwogen voor elk gebruik in optimalisaties van inductievariabelen. Als er zijn
meer kandidaten dan dit, worden alleen de meest relevante geacht te vermijden
kwadratische tijdscomplexiteit.

iv-max-beschouwd-gebruik
De optimalisaties van de inductievariabele geven lussen op die meer inductie bevatten
variabel gebruik.

iv-altijd-snoeien-cand-set-gebonden
Als het aantal kandidaten in de set kleiner is dan deze waarde, probeer dan altijd:
verwijder onnodige iv's uit de set bij het toevoegen van een nieuwe.

scev-max-expr-grootte
Gebonden aan de grootte van uitdrukkingen die worden gebruikt in de scalaire evolutie-analysator. Groot
uitdrukkingen vertragen de analysator.

scev-max-expr-complexiteit
Gebonden aan de complexiteit van de uitdrukkingen in de scalaire evolutie-analysator.
Complexe uitdrukkingen vertragen de analysator.

omega-max-vars
Het maximale aantal variabelen in een Omega-beperkingssysteem. De standaardwaarde:
is 128.

omega-max-geqs
Het maximale aantal ongelijkheden in een Omega-beperkingssysteem. De standaard
waarde is 256.

omega-max-vergelijkingen
Het maximale aantal gelijkheden in een Omega-beperkingssysteem. De standaardwaarde:
is 128.

omega-max-wildcards
Het maximale aantal wildcardvariabelen dat de Omega-oplosser kan invoegen.
De standaardwaarde is 18.

omega-hash-tafelformaat
De grootte van de hashtabel in de Omega-oplosser. De standaardwaarde is 550.

omega-max-sleutels
Het maximale aantal sleutels dat door de Omega-oplosser wordt gebruikt. De standaardwaarde is 500.

omega-elimineren-overtollige-beperkingen
Gebruik, indien ingesteld op 1, dure methoden om alle overbodige beperkingen te elimineren. De
standaardwaarde is 0.

vect-max-versie-voor-uitlijning-controles
Het maximale aantal runtime-controles dat kan worden uitgevoerd bij het uitvoeren van een lus
versiebeheer voor uitlijning in de vectorizer.

vect-max-versie-voor-alias-controles
Het maximale aantal runtime-controles dat kan worden uitgevoerd bij het uitvoeren van een lus
versiebeheer voor alias in de vectorizer.

vect-max-peeling-voor-uitlijning
Het maximale aantal lusschillen om de toegangsuitlijning voor vectorizer te verbeteren. Waarde
-1 betekent 'geen limiet'.

max-iteraties-naar-track
Het maximale aantal iteraties van een lus het brute-force-algoritme voor analyse
van het aantal iteraties van de lus probeert te evalueren.

hot-bb-count-ws-permille
Een basisaantal blokprofielen wordt als hot beschouwd als het bijdraagt ​​aan het gegeven
promillage (dwz 0...1000) van de gehele geprofileerde uitvoering.

hot-bb-frequentie-fractie
Selecteer een fractie van de ingangsblokfrequentie van uitvoeringen van basisblok in
functie gegeven basisblok moet als hot worden beschouwd.

max-voorspelde-iteraties
Het maximale aantal lusiteraties dat we statisch voorspellen. Dit is handig bij
gevallen waarin een functie een enkele lus bevat met een bekende gebonden en een andere lus
met onbekende band. Het bekende aantal iteraties wordt correct voorspeld, terwijl
het onbekende aantal iteraties gemiddeld tot ongeveer 10. Dit betekent dat de lus
zonder grenzen lijkt kunstmatig koud ten opzichte van de andere.

ingebouwde-verwachting-waarschijnlijkheid
Bepaal de kans dat de uitdrukking de opgegeven waarde heeft. Dit
parameter neemt een percentage (dwz 0 ... 100) als invoer. De standaard waarschijnlijkheid
van 90 wordt empirisch verkregen.

uitlijnen-drempel
Selecteer een fractie van de maximale uitvoeringsfrequentie van een basisblok in a
functie om het basisblok uit te lijnen.

align-loop-iteraties
Een lus die naar verwachting ten minste het geselecteerde aantal iteraties zal herhalen, wordt uitgelijnd.

tracer-dynamische-dekking
tracer-dynamische-dekking-feedback
Deze waarde wordt gebruikt om de vorming van superblokken te beperken zodra het gegeven percentage van
uitgevoerde instructies is gedekt. Dit beperkt onnodige uitbreiding van de codegrootte.

De tracer-dynamische-dekking-feedback parameter wordt alleen gebruikt als profielfeedback
is beschikbaar. De echte profielen (in tegenstelling tot statisch geschatte) zijn:
veel minder gebalanceerd waardoor de drempel een grotere waarde kan hebben.

tracer-max-code-groei
Stop staartduplicatie zodra de codegroei een bepaald percentage heeft bereikt. Dit is een
nogal kunstmatige limiet, aangezien de meeste duplicaten later in cross worden geëlimineerd
springen, dus het kan op veel hogere waarden worden ingesteld dan de gewenste codegroei.

tracer-min-tak-verhouding
Stop de omgekeerde groei wanneer de omgekeerde kans op de beste voorsprong kleiner is dan dit
drempel (in procenten).

tracer-min-tak-verhouding
tracer-min-tak-ratio-feedback
Stop voorwaartse groei als de beste kans lager is dan deze drempel.

gelijk aan tracer-dynamische-dekking twee waarden zijn aanwezig, één voor compilatie
voor profielfeedback en één voor compilatie zonder. De waarde voor compilatie
met profielfeedback moet conservatiever (hoger) zijn om te maken
tracer effectief.

max-cse-padlengte
Het maximale aantal basisblokken op het pad dat CSE in overweging neemt. De standaardwaarde is 10.

max-cse-insns
Het maximale aantal instructies dat CSE vóór het doorspoelen verwerkt. De standaard is
1000.

ggc-min-uitbreiden
GCC gebruikt een garbage collector om zijn eigen geheugentoewijzing te beheren. Deze parameter
specificeert het minimumpercentage waarmee de afvalberg moet zijn
toegestaan ​​om uit te breiden tussen collecties. Door dit af te stemmen kan de compilatiesnelheid worden verbeterd;
het heeft geen effect op het genereren van code.

De standaardwaarde is 30% + 70% * (RAM/1GB) met een bovengrens van 100% wanneer RAM >= 1GB.
Als "getrlimit" beschikbaar is, is het begrip "RAM" de kleinste van de werkelijke RAM en
"RLIMIT_DATA" of "RLIMIT_AS". Als GCC niet in staat is om RAM op een bepaald punt te berekenen
platform, wordt de ondergrens van 30% gebruikt. Deze parameter instellen en ggc-min-
hoop grootte tot nul zorgt ervoor dat bij elke gelegenheid een volledige incasso plaatsvindt. Dit is
extreem traag, maar kan handig zijn voor debuggen.

ggc-min-heapsize
Minimale grootte van de hoop van de vuilnisophaler voordat het de moeite begint te nemen om te verzamelen
afval. De eerste verzameling vindt plaats nadat de heap is uitgebreid met ggc-min-uitbreiden%
Verder ggc-min-heapsize. Nogmaals, het afstemmen hiervan kan de compilatiesnelheid verbeteren, en
heeft geen effect op het genereren van code.

De standaardwaarde is de kleinste van RAM/8, RLIMIT_RSS, of een limiet die probeert te verzekeren
dat RLIMIT_DATA of RLIMIT_AS niet worden overschreden, maar met een ondergrens van 4096
(vier megabytes) en een bovengrens van 131072 (128 megabytes). Als GCC niet in staat is:
om RAM op een bepaald platform te berekenen, wordt de ondergrens gebruikt. Dit instellen
parameter very large schakelt het verzamelen van afval effectief uit. Dit instellen
parameter en ggc-min-uitbreiden tot nul zorgt ervoor dat een volledige verzameling plaatsvindt bij elke
kans.

max-reload-zoek-insns
Het maximale aantal herladen van instructies moet achteruit kijken voor equivalent
register. Toenemende waarden betekenen agressievere optimalisatie, waardoor de
de compilatietijd neemt toe met waarschijnlijk iets betere prestaties. De standaard
waarde is 100.

max-cselib-geheugenlocaties
Het maximale aantal geheugenlocaties waar cselib rekening mee moet houden.
Toenemende waarden betekenen agressievere optimalisatie, waardoor de compilatietijd wordt verkort
verhogen met waarschijnlijk iets betere prestaties. De standaardwaarde is 500.

opnieuw ordenen-blokken-dupliceren
opnieuw ordenen-blokken-dupliceren-feedback
Gebruikt door de basisblokherschikkingspas om te beslissen of onvoorwaardelijk wordt gebruikt
branch of dupliceer de code op zijn bestemming. Code wordt gedupliceerd wanneer zijn
geschatte grootte is kleiner dan deze waarde vermenigvuldigd met de geschatte grootte van
onvoorwaardelijke sprong in de hotspots van het programma.

De opnieuw ordenen-blok-duplicate-feedback parameter wordt alleen gebruikt als profielfeedback
is beschikbaar. Het kan worden ingesteld op hogere waarden dan opnieuw ordenen-blok-dupliceren sinds
informatie over de hotspots is nauwkeuriger.

max-sched-ready-insns
Het maximale aantal instructies dat klaar is om te worden uitgegeven, moet de planner
op elk willekeurig moment tijdens de eerste planningspas overwegen. Waarden verhogen
betekent meer grondige zoekopdrachten, waardoor de compilatietijd toeneemt met waarschijnlijk
weinig voordeel. De standaardwaarde is 100.

max-sched-regio-blokken
Het maximum aantal blokken in een regio dat in aanmerking komt voor interblok
het roosteren. De standaardwaarde is 10.

max-pipeline-regio-blokken
Het maximale aantal blokken in een regio dat in aanmerking komt voor pijplijnen in de
selectieve planner. De standaardwaarde is 15.

max-sched-regio-insns
Het maximale aantal insns in een regio dat in aanmerking komt voor interblock
het roosteren. De standaardwaarde is 100.

max-pipeline-regio-insns
Het maximale aantal insns in een regio dat in aanmerking komt voor pipelining in de
selectieve planner. De standaardwaarde is 200.

min-spec-prob
De minimale kans (in procenten) om een ​​bronblok voor interblok te bereiken
speculatieve planning. De standaardwaarde is 40.

max-sched-exten-regio's-iters
Het maximum aantal iteraties via CFG om regio's uit te breiden. Een waarde van 0 (de
standaard) schakelt regio-extensies uit.

max-sched-insn-conflict-vertraging
De maximale conflictvertraging voor een insn om in aanmerking te komen voor speculatieve beweging.
De standaardwaarde is 3.

schema-specificatie-prob-cutoff
De minimale kans op speculatie succes (in procenten), zodat speculatieve
insns zijn gepland. De standaardwaarde is 40.

sched-spec-state-edge-prob-cutoff
De minimale kans die een rand moet hebben voor de planner om zijn status op te slaan
tegenover het. De standaardwaarde is 10.

sched-mem-true-dep-kosten
Minimale afstand (in CPU-cycli) tussen opslaan en laden gericht op hetzelfde geheugen
locaties. De standaardwaarde is 1.

selsched-max-vooruitblik
De maximale grootte van het vooruitblikvenster van selectieve planning. Het is een diepte
van zoeken naar beschikbare instructies. De standaardwaarde is 50.

selsched-max-sched-tijden
Het maximum aantal keren dat een instructie is ingepland tijdens selectieve
het roosteren. Dit is de limiet van het aantal iteraties waarmee de
instructie kan worden gepijplijnd. De standaardwaarde is 2.

selsched-max-insns-om te hernoemen
Het maximale aantal beste instructies in de kant-en-klare lijst die in aanmerking komen voor
hernoemen in de selectieve planner. De standaardwaarde is 2.

sms-min-sc
De minimale waarde van het aantal fasen die de swing modulo-planner genereert. De
standaardwaarde is 2.

max-laatste-waarde-rtl
De maximale grootte gemeten als het aantal RTL's dat kan worden vastgelegd in een uitdrukking
in combinator voor een pseudoregister als laatst bekende waarde van dat register. De
standaard is 10000.

max-combineer-insns
Het maximale aantal instructies dat de RTL-combiner probeert te combineren. De standaard
waarde is 2 at -Og en 4 anders.

integer-share-limiet
Kleine integer-constanten kunnen een gedeelde datastructuur gebruiken, waardoor de compiler
geheugengebruik en het verhogen van de snelheid. Dit stelt de maximale waarde van een gedeelde
geheel getal constante. De standaardwaarde is 256.

ssp-buffergrootte
De minimale grootte van buffers (dwz arrays) die bescherming tegen het breken van de stack krijgen
wanneer -fstack-bescherming is gebruikt.

Deze standaard vóór Ubuntu 10.10 was "8". Momenteel is het "4", om de . te vergroten
aantal functies beschermd door de stapelbeschermer.

min-grootte-voor-stapel-delen
De minimale grootte van variabelen die deelnemen aan het delen van stack-slots als dat niet het geval is
optimaliseren. De standaardwaarde is 32.

max-jump-thread-duplicatie-stmts
Maximaal aantal instructies toegestaan ​​in een blok dat moet worden gedupliceerd wanneer:
sprongen inrijgen.

max-velden-voor-veldgevoelig
Maximum aantal velden in een structuur die op een veldgevoelige manier wordt behandeld tijdens:
wijzer analyse. De standaardwaarde is nul voor -O0 en -O1en 100 voor -Jij, -O2 en
-O3.

prefetch-latentie
Schatting van het gemiddelde aantal instructies dat wordt uitgevoerd vóór prefetch
afwerkingen. De vooraf opgehaalde afstand is evenredig met deze constante.
Het verhogen van dit aantal kan er ook toe leiden dat minder streams vooraf worden opgehaald (zie
simultaan-prefetches).

simultaan-prefetches
Maximum aantal prefetchingen dat tegelijkertijd kan worden uitgevoerd.

l1-cache-regelgrootte
De grootte van de cacheregel in L1-cache, in bytes.

l1-cache-grootte
De grootte van L1-cache, in kilobytes.

l2-cache-grootte
De grootte van L2-cache, in kilobytes.

min-insn-naar-prefetch-ratio
De minimale verhouding tussen het aantal instructies en het aantal prefetches
om prefetching in een lus in te schakelen.

prefetch-min-insn-naar-mem-ratio
De minimale verhouding tussen het aantal instructies en het aantal geheugen
referenties om prefetching in een lus mogelijk te maken.

gebruik-canonieke-types
Of de compiler het systeem van het "canonieke" type moet gebruiken. Standaard is dit
moet altijd 1 zijn, wat een efficiënter intern mechanisme gebruikt om te vergelijken
typen in C++ en Objective-C++. Als er echter bugs in het canonieke systeem zijn:
compilatiefouten veroorzaakt, stelt u deze waarde in op 0 om canonieke typen uit te schakelen.

switch-conversie-max-branch-ratio
Switch-initialisatieconversie weigert arrays te maken die groter zijn dan
switch-conversie-max-branch-ratio maal het aantal takken in de switch.

max-gedeeltelijke-antieke-lengte
Maximale lengte van de gedeeltelijke antic set berekend tijdens de gedeeltelijke boom
redundantie eliminatie optimalisatie (-ftree-pre) bij het optimaliseren op -O3 en hoger.
Voor sommige soorten broncode de verbeterde gedeeltelijke eliminatie van redundantie
optimalisatie kan weglopen en al het beschikbare geheugen op de host in beslag nemen
machine. Deze parameter stelt een limiet in voor de lengte van de sets die worden berekend,
wat het wegloopgedrag voorkomt. Een waarde van 0 instellen voor deze parameter
staat een onbeperkte instellengte toe.

sccvn-max-scc-grootte
Maximale grootte van een sterk verbonden component (SCC) tijdens SCCVN-verwerking. Indien
deze limiet is bereikt, SCCVN-verwerking voor de hele functie is niet voltooid en
optimalisaties afhankelijk hiervan zijn uitgeschakeld. De standaard maximale SCC-grootte is
10000.

sccvn-max-alias-query's-per-toegang
Maximum aantal alias-oracle-query's dat we uitvoeren bij het zoeken naar redundanties
voor ladingen en winkels. Als deze limiet wordt bereikt, wordt het zoeken afgebroken en wordt het laden of
winkel wordt niet als overbodig beschouwd. Het aantal zoekopdrachten is algoritmisch
beperkt tot het aantal winkels op alle paden van de belasting tot de functie-invoer.
Het standaard maximum aantal query's is 1000.

ira-max-loops-aantal
IRA gebruikt standaard regionale registertoewijzing. Als een functie meer bevat
loops dan het aantal dat door deze parameter wordt gegeven, alleen ten hoogste het gegeven aantal
de meest uitgevoerde lussen vormen regio's voor de toewijzing van regionale registers.
De standaardwaarde van de parameter is 100.

ira-max-conflicttabelgrootte
Hoewel IRA een geavanceerd algoritme gebruikt om de conflicttabel te comprimeren,
table kan nog steeds buitensporige hoeveelheden geheugen nodig hebben voor enorme functies. Als de
conflicttabel voor een functie kan groter zijn dan de grootte in MB die hierdoor wordt gegeven
parameter, gebruikt de registertoewijzer in plaats daarvan een snellere, eenvoudigere en lagere
kwaliteitsalgoritme waarvoor geen pseudo-registerconflicttabel hoeft te worden gebouwd.
De standaardwaarde van de parameter is 2000.

ira-loop-gereserveerde-regs
IRA kan worden gebruikt om nauwkeurigere registerdruk in lussen voor beslissingen te evalueren
om lusinvarianten te verplaatsen (zie -O3). Het aantal beschikbare registers gereserveerd voor
sommige andere doeleinden worden gegeven door deze parameter. De standaardwaarde van de
parameter is 2, wat het minimale aantal registers is dat nodig is voor typische
instructies. Deze waarde is de beste gevonden uit talrijke experimenten.

lra-overerving-eb-waarschijnlijkheid-cutoff
LRA probeert in volgende insns opnieuw geladen waarden in registers te hergebruiken. Dit
optimalisatie wordt overerving genoemd. EBB wordt hiervoor als regio gebruikt
optimalisatie. De parameter definieert een minimale doorvalkans in
percentage gebruikt om BB toe te voegen aan erfenis EBB in LRA. De standaardwaarde van de
parameter is 40. De waarde is gekozen uit talloze runs van SPEC2000 op x86-64.

lus-invariant-max-bbs-in-lus
Lusinvariante beweging kan erg duur zijn, zowel in compilatietijd als in
hoeveelheid benodigde compile-time geheugen, met zeer grote lussen. Loops met meer
basisblokken dan deze parameter hebben geen lusinvariante bewegingsoptimalisatie
op hen uitgevoerd. De standaardwaarde van de parameter is 1000 for -O1 en 10000
For -O2 en hoger.

loop-max-datarefs-voor-datadeps
Het bouwen van data-afhankelijkheden is duur voor zeer grote lussen. Deze parameter
beperkt het aantal gegevensverwijzingen in lussen die in aanmerking komen voor gegevens
afhankelijkheid analyse. Deze grote lussen worden niet afgehandeld door de optimalisaties die gebruikmaken van
afhankelijkheden van lusgegevens. De standaardwaarde is 1000.

max-vartrack-grootte
Stelt een maximum aantal hash-tabelsleuven in om te gebruiken tijdens variabele trackinggegevensstroom
analyse van elke functie. Als deze limiet wordt overschreden met variabele tracking op
toewijzingen ingeschakeld, wordt de analyse voor die functie zonder deze opnieuw geprobeerd, na
alle debug-insns uit de functie verwijderen. Als de limiet wordt overschreden, zelfs zonder
debug insns, var-trackinganalyse is volledig uitgeschakeld voor de functie.
Als u de parameter op nul zet, is deze onbeperkt.

max-vartrack-expr-diepte
Stelt een maximum aantal recursieniveaus in bij pogingen om namen van variabelen toe te wijzen of
tijdelijke fouten debuggen om expressies te waarderen. Dit ruilt compilatietijd in voor meer
volledige debug-informatie. Als dit te laag is ingesteld, waarde-expressies die zijn
beschikbaar en kan worden weergegeven in debug-informatie kan uiteindelijk niet worden gebruikt;
als je dit hoger instelt, kan de compiler complexere foutopsporing vinden
expressies, maar de compileertijd en het geheugengebruik kunnen toenemen. De standaardwaarde is 12.

min-nondebug-insn-uid
Gebruik uids die beginnen bij deze parameter voor non-debug insns. Het bereik onder de
parameter is exclusief gereserveerd voor debug-insns gemaakt door
-fvar-tracking-opdrachten, maar debug-insns kunnen (niet-overlappende) uids hierboven krijgen
het als het gereserveerde bereik is uitgeput.

ipa-sra-ptr-groeifactor
IPA-SRA vervangt een aanwijzer naar een aggregaat alleen met een of meer nieuwe parameters
wanneer hun cumulatieve grootte kleiner of gelijk is aan ipa-sra-ptr-groeifactor keer de
grootte van de oorspronkelijke aanwijzerparameter.

sra-max-scalarisatie-grootte-Ospeed
sra-max-scalarisatie-grootte-Osize
De twee Scalar Reduction of Aggregates-passen (SRA en IPA-SRA) zijn bedoeld om te vervangen:
scalaire delen van aggregaten met gebruik van onafhankelijke scalaire variabelen. Deze
parameters bepalen de maximale grootte, in opslageenheden, van aggregaat dat is
overwogen voor vervanging bij het compileren voor snelheid (sra-max-scalarisatie-grootte-
Snelheid) of maat (sra-max-scalarisatie-grootte-Osize) respectievelijk.

tm-max-aggregaat-grootte
Bij het maken van kopieën van thread-local variabelen in een transactie, is deze parameter
specificeert de grootte in bytes waarna variabelen worden opgeslagen met de logging
functies in tegenstelling tot het opslaan/herstellen van codereeksparen. Alleen deze optie
is van toepassing bij gebruik van -fgnu-tm.

grafiet-max-nb-scop-params
Om exponentiële effecten in de Graphite-lustransformaties te voorkomen, moet het aantal
parameters in een Static Control Part (SCoP) is begrensd. De standaardwaarde is 10
parameters. Een variabele waarvan de waarde onbekend is tijdens het compileren en gedefinieerd is
buiten een SCoP is een parameter van de SCoP.

grafiet-max-bbs-per-functie
Om exponentiële effecten bij de detectie van SCoP's te voorkomen, moet de grootte van de functies
geanalyseerd door Graphite is begrensd. De standaardwaarde is 100 basisblokken.

lus-blok-tegelgrootte
Loop blocking of strip mining transformaties, ingeschakeld met -floop-blok or
-floop-strip-mijn, verwijder elke lus in het lusnest met een bepaald aantal
iteraties. De striplengte kan worden gewijzigd met de lus-blok-tegelgrootte
parameter. De standaardwaarde is 51 iteraties.

lus-uitrollen-jam-grootte
Specificeer de afrolfactor voor de -floop-uitrollen-en-jam optie. De standaardwaarde:
is 4.

loop-unroll-jam-diepte
Specificeer de afmeting die moet worden uitgerold (gerekend vanaf de meest binnenste lus) voor de
-floop-uitrollen-en-jam. De standaardwaarde is 2.

ipa-cp-waardelijstgrootte
IPA-CP probeert alle mogelijke waarden en typen te volgen die zijn doorgegeven aan de functie's
parameter om ze te verspreiden en devirtualisatie uit te voeren. ipa-cp-waarde-
lijstgrootte is het maximale aantal waarden en typen dat het per één formeel opslaat
parameter van een functie.

ipa-cp-eval-drempel
IPA-CP berekent zijn eigen score van heuristieken voor winstgevendheid van klonen en presteert
die kloonmogelijkheden met scores die hoger zijn dan ipa-cp-eval-drempel.

ipa-cp-recursie-penalty
Percentage boete dat de recursieve functies ontvangen wanneer ze worden geëvalueerd
voor klonen.

ipa-cp-single-call-straf
Percentage boetefuncties die een enkele aanroep naar een andere functie bevatten, zullen:
ontvangen wanneer ze worden beoordeeld op klonen.

ipa-max-agg-items
IPA-CP is ook in staat om een ​​aantal scalaire waarden die in een
aggregaat. ipa-max-agg-items regelt het maximale aantal van dergelijke waarden per één
parameter.

ipa-cp-loop-hint-bonus
Wanneer IPA-CP bepaalt dat een kloonkandidaat het aantal
iteraties van een bekende lus, het voegt een bonus toe van ipa-cp-loop-hint-bonus aan de
winstgevendheidsscore van de kandidaat.

ipa-cp-array-index-hint-bonus
Wanneer IPA-CP bepaalt dat een kloonkandidaat de index van een array zou maken
toegang bekend, het voegt een bonus toe van ipa-cp-array-index-hint-bonus aan de
winstgevendheidsscore van de kandidaat.

ipa-max-aa-stappen
Tijdens de analyse van functie-instanties maakt IPA-CP gebruik van aliasanalyse om:
trackwaarden waarnaar wordt verwezen door functieparameters. Om niet te veel tijd te besteden
het analyseren van enorme functies, het geeft het op en beschouwt al het geheugen dat daarna wordt beklad
onderzoeken ipa-max-aa-stappen uitspraken die het geheugen wijzigen.

lto-partities
Geef het gewenste aantal partities op dat tijdens de WHOPR-compilatie wordt geproduceerd. De
het aantal partities moet groter zijn dan het aantal CPU's dat voor compilatie wordt gebruikt. De
standaardwaarde is 32.

lto-minpartitie
Grootte van minimale partitie voor WHOPR (in geschatte instructies). Dit voorkomt
kosten van het opsplitsen van zeer kleine programma's in te veel partities.

cxx-max-naamruimten-voor-diagnostische-help
Het maximum aantal naamruimten dat moet worden geraadpleegd voor suggesties bij het opzoeken van C++-namen
mislukt voor een identificatie. De standaardwaarde is 1000.

zinken-frequentie-drempel
De maximale relatieve uitvoeringsfrequentie (in procenten) van het doelblok
ten opzichte van het originele blok van een statement om het zinken van een statement van a . mogelijk te maken
uitspraak. Grotere aantallen resulteren in agressiever zinken. De
standaardwaarde is 75. Er wordt een kleine positieve correctie toegepast voor uitspraken met
geheugenoperanden, want die zijn nog winstgevender, dus zinken.

max-winkels-tot-gootsteen
Het maximale aantal voorwaardelijke winkelsparen dat kan worden verzonken. Stel in op 0 als
ofwel vectorisatie (-ftree-vectoriseren) of als-conversie (-ftree-lus-als-omzetten)
is gehandicapt. De standaardwaarde is 2.

sta-store-data-races toe
Sta optimizers toe om nieuwe dataraces in winkels te introduceren. Stel in op 1 om toe te staan,
anders naar 0. Deze optie is standaard ingeschakeld op optimalisatieniveau -Of snel.

hoofdletterwaarden-drempel
Het kleinste aantal verschillende waarden waarvoor je het beste een springtabel kunt gebruiken
in plaats van een boom met voorwaardelijke takken. Als de waarde 0 is, gebruik dan de standaard voor
de machine. De standaardwaarde is 0.

boom-reasoc-breedte
Stel het maximum aantal instructies in dat parallel wordt uitgevoerd in de opnieuw gekoppelde boom.
Deze parameter overschrijft doelafhankelijke heuristieken die standaard worden gebruikt als niet
nul waarde.

schema-druk-algoritme
Kies tussen de twee beschikbare implementaties van -fsched-druk. Algoritme 1
is de oorspronkelijke implementatie en is de kans groter dat instructies worden voorkomen:
wordt nabesteld. Algoritme 2 is ontworpen als een compromis tussen de
relatief conservatieve benadering van algoritme 1 en de nogal agressieve
aanpak van de standaardplanner. Het is meer afhankelijk van het hebben van een
regelmatig registerbestand en nauwkeurige registerdrukklassen. Zien haifa-sched.c
in de GCC-bronnen voor meer details.

De standaardkeuze is afhankelijk van het doel.

max-slsr-cand-scan
Stel het maximale aantal bestaande kandidaten in dat in overweging wordt genomen bij het zoeken naar een
basis voor een nieuwe kandidaat voor lineaire sterktevermindering.

asan-globalen
Schakel bufferoverloopdetectie in voor globale objecten. Dit soort bescherming is:
standaard ingeschakeld als u gebruikmaakt van -fsanitize=adres optie. Globaal uitschakelen
objecten bescherming gebruik: --param asan-globals=0.

asan-stapel
Schakel bufferoverloopdetectie in voor stapelobjecten. Dit soort bescherming is:
standaard ingeschakeld bij gebruik-fsanitize=adres. Stapelbeveiliging uitschakelen:
--param asan-stapel=0 optie.

asan-instrument-leest
Schakel bufferoverloopdetectie in voor geheugenlezingen. Dit soort bescherming is:
standaard ingeschakeld bij gebruik -fsanitize=adres. Geheugenuitlezingen uitschakelen
bescherming gebruik --param asan-instrument-leest = 0.

asan-instrument-schrijft
Schakel bufferoverloopdetectie in voor geheugenschrijfacties. Dit soort bescherming is:
standaard ingeschakeld bij gebruik -fsanitize=adres. Geheugenschrijven uitschakelen
bescherming gebruik --param asan-instrument-schrijft=0 optie.

asan-memintrin
Schakel detectie in voor ingebouwde functies. Dit soort bescherming wordt mogelijk gemaakt door:
standaard bij gebruik -fsanitize=adres. Beveiliging van ingebouwde functies uitschakelen:
. --param asan-memintrin=0.

asan-gebruik-na-retour
Detectie van gebruik-na-retour inschakelen. Dit soort bescherming wordt mogelijk gemaakt door:
standaard bij gebruik -fsanitize=adres optie. Gebruik-na-retour uitschakelen
detectie gebruik --param asan-gebruik-na-retour=0.

asan-instrumentatie-met-oproepdrempel
Als het aantal geheugentoegangen in de functie die wordt geïnstrumenteerd groter is dan of gelijk is aan
dit nummer, gebruik dan terugbellen in plaats van inline controles. Bijvoorbeeld om inline code uit te schakelen
. --param asan-instrumentatie-met-call-threshold=0.

chkp-max-ctor-grootte
Statische constructors gegenereerd door Pointer Bounds Checker kunnen erg groot worden en
de compileertijd aanzienlijk verhogen op optimalisatieniveau -O1 en hoger. Dit
parameter is een maximum aantal instructies in een enkele gegenereerde constructor.
De standaardwaarde is 5000.

max-fsm-thread-pad-insns
Maximaal aantal instructies om te kopiëren bij het dupliceren van blokken in een eindige toestand
automaat jump thread pad. De standaardwaarde is 100.

max-fsm-draadlengte
Maximaal aantal basisblokken op een eindige-toestandsautomaat jump thread pad. De
standaard is 10.

max-fsm-thread-paden
Maximaal aantal nieuwe jumpthread-paden dat moet worden gemaakt voor een eindige-toestandsautomaat.
De standaardwaarde is 50.

Opties Controlling de preprocessor
Deze opties besturen de C-preprocessor, die op elk C-bronbestand wordt uitgevoerd voordat de werkelijke
compilatie.

Als u gebruik maken van de -E optie, wordt er niets gedaan, behalve voorbewerking. Sommige van deze opties
alleen zinvol samen met -E omdat ze ervoor zorgen dat de preprocessor-uitvoer
ongeschikt voor daadwerkelijke compilatie.

-Wp,optie
Je kunt gebruiken -Wp,optie om de compiler-driver te omzeilen en door te geven optie rechtstreeks door
naar de preprocessor. Indien optie bevat komma's, het is opgesplitst in meerdere opties op
de komma's. Veel opties worden echter gewijzigd, vertaald of geïnterpreteerd door de
compiler-stuurprogramma voordat het wordt doorgegeven aan de preprocessor, en -Wp met geweld omzeilt
deze fase. De directe interface van de preprocessor is niet gedocumenteerd en onderhevig aan:
veranderen, dus waar mogelijk moet u het gebruik van . vermijden -Wp en laat de chauffeur de
opties in plaats daarvan.

-Xpreprocessor optie
Passeren optie als een optie voor de preprocessor. Hiermee kunt u systeem-
specifieke preprocessor-opties die GCC niet herkent.

Als u een optie wilt doorgeven waarvoor een argument nodig is, moet u gebruiken -Xpreprocessor
twee keer, een keer voor de optie en een keer voor het argument.

-geen-geïntegreerde-cpp
Voer de voorverwerking uit als een afzonderlijke pas vóór de compilatie. GCC presteert standaard
preprocessing als een geïntegreerd onderdeel van invoertokenisatie en parsing. Als deze optie
wordt geleverd, de juiste taal frontend (cc1, cc1plusof cc1obj voor C, C++,
en Objective-C, respectievelijk) wordt in plaats daarvan twee keer aangeroepen, één keer alleen voor voorverwerking
en eenmaal voor de daadwerkelijke compilatie van de voorbewerkte invoer. Deze optie kan handig zijn
in combinatie met de -B or -wikkel opties om een ​​alternatieve preprocessor op te geven of
extra verwerking van de programmabron uitvoeren tussen normale voorverwerking en
compilatie.

-D naam
Vooraf definiëren naam als macro, met definitie 1.

-D naam=definitie
De inhoud van definitie worden tokenized en verwerkt alsof ze verschenen tijdens
vertaalfase drie in a #define richtlijn. In het bijzonder zal de definitie zijn:
afgekapt door ingesloten newline-tekens.

Als je de preprocessor aanroept vanuit een shell of shell-achtig programma, heb je misschien nodig:
om de quote-syntaxis van de shell te gebruiken om tekens te beschermen, zoals spaties met een
betekenis in de shell-syntaxis.

Als u een functie-achtige macro op de opdrachtregel wilt definiëren, schrijft u het argument ervan
lijst met omringende haakjes vóór het gelijkteken (indien aanwezig). Haakjes zijn
zinvol voor de meeste shells, dus u moet de optie citeren. Met sh en csh,
-NS'naam(argumenten...)=definitie' werkt.

-D en -U opties worden verwerkt in de volgorde waarin ze op de opdrachtregel worden gegeven. Alle
-imacro's filet en omvatten filet opties worden toch verwerkt -D en -U opties.

-U naam
Annuleer een eerdere definitie van naam, ingebouwd of voorzien van een -D optie.

-ondef
Definieer geen systeemspecifieke of GCC-specifieke macro's. De standaard voorgedefinieerde
macro's blijven gedefinieerd.

-I dir
Voeg de map toe dir naar de lijst met directory's waarin gezocht moet worden naar header-bestanden.
Directory's genoemd door -I worden doorzocht voordat het standaardsysteem mappen bevat.
Als de map dir is een standaard systeem inclusief directory, de optie wordt genegeerd om
ervoor zorgen dat de standaard zoekvolgorde voor systeemmappen en de speciale behandeling
van systeemheaders worden niet verslagen. Indien dir begint met "=", dan wordt "="
vervangen door het sysroot-voorvoegsel; zien --sysroot en -isysroot.

-o filet
Schrijf uitvoer naar filet. Dit is hetzelfde als specificeren filet als de tweede niet-optie
argument voor cpp. gcc een andere interpretatie heeft van een tweede non-optie argument,
dus je moet gebruiken -o om het uitvoerbestand op te geven.

-Muur
Schakelt alle optionele waarschuwingen in die wenselijk zijn voor normale code. op dit moment dit
is -Wcommentaar, -Schrijven, -Wmultichar en een waarschuwing over integer-promotie die a . veroorzaakt
verandering van teken in "#if"-expressies. Merk op dat veel van de waarschuwingen van de preprocessor
zijn standaard ingeschakeld en hebben geen opties om ze te bedienen.

-Wcommentaar
-Wopmerkingen
Waarschuwen wanneer een commentaar-startreeks /* verschijnt in a /* commentaar, of wanneer een
backslash-newline verschijnt in a // opmerking. (Beide vormen hebben hetzelfde effect.)

-Schrijven
De meeste trigraphs in opmerkingen hebben geen invloed op de betekenis van het programma. Echter, een
trigraaf die een ontsnapte nieuwe regel zou vormen (??/ aan het einde van een regel) kan, door
wijzigen waar de opmerking begint of eindigt. Daarom, alleen trigraphs die zouden vormen
escaped newlines produceren waarschuwingen in een opmerking.

Deze optie wordt geïmpliceerd door: -Muur. Indien -Muur is niet gegeven, deze optie is nog steeds ingeschakeld
tenzij trigraphs zijn ingeschakeld. Om trigraph-conversie te krijgen zonder waarschuwingen, maar get
de andere -Muur waarschuwingen, gebruik -trigrafieën -Muur -Wno-trigrafieën.

-Wtraditioneel
Waarschuw voor bepaalde constructies die zich anders gedragen in traditioneel en ISO C. Ook
waarschuwen voor ISO C-constructies die geen traditioneel C-equivalent hebben, en problematisch
constructies die vermeden moeten worden.

-Wundef
Waarschuwen wanneer een identifier die geen macro is, wordt aangetroffen in een #als richtlijn,
buiten gedefinieerd. Dergelijke identifiers worden vervangen door nul.

-Wunused-macro's
Waarschuw voor macro's die in het hoofdbestand zijn gedefinieerd en die niet worden gebruikt. Een macro is gebruikt als het is
minstens één keer uitgebreid of getest op bestaan. De preprocessor waarschuwt ook als:
de macro is niet gebruikt op het moment dat deze opnieuw is gedefinieerd of niet is gedefinieerd.

Ingebouwde macro's, macro's gedefinieerd op de opdrachtregel en macro's gedefinieerd in include
bestanden worden niet gewaarschuwd.

Opmerking: Als een macro daadwerkelijk wordt gebruikt, maar alleen wordt gebruikt in overgeslagen voorwaardelijke blokken, dan
CPP rapporteert het als ongebruikt. Om de waarschuwing in een dergelijk geval te vermijden, zou u kunnen verbeteren
de reikwijdte van de definitie van de macro door deze bijvoorbeeld te verplaatsen naar de eerste overgeslagen
blok. Als alternatief kunt u een dummy-gebruik geven met zoiets als:

#if gedefinieerd the_macro_causing_the_warning
#stop als

-Wendif-labels
Waarschuw wanneer een #anders of #stop als worden gevolgd door tekst. Dit gebeurt meestal in
code van het formulier

#als FOO
...
#anders FOO
...
#endif FOO

De tweede en derde "FOO" zouden in opmerkingen moeten staan, maar staan ​​vaak niet in oudere programma's.
Deze waarschuwing is standaard ingeschakeld.

-fout
Maak van alle waarschuwingen harde fouten. Broncode die waarschuwingen activeert, is:
verworpen.

-Wsysteem-headers
Geef waarschuwingen voor code in systeemheaders. Deze zijn normaal gesproken nutteloos bij het vinden van
bugs in je eigen code, daarom onderdrukt. Als u verantwoordelijk bent voor het systeem:
bibliotheek, wil je ze misschien zien.

-w Onderdruk alle waarschuwingen, inclusief de waarschuwingen die GNU CPP standaard afgeeft.

-pedant
Voer alle verplichte diagnoses uit die in de C-norm worden vermeld. Sommigen van hen zijn overgebleven
standaard uitgeschakeld, omdat ze vaak worden geactiveerd op onschadelijke code.

-pedant-fouten
Geef alle verplichte diagnostiek uit en maak van alle verplichte diagnostiek fouten.
Dit omvat verplichte diagnostiek die GCC uitgeeft zonder -pedant maar behandelt als
waarschuwingen.

-M In plaats van het resultaat van de voorbewerking uit te voeren, voert u een regel uit die geschikt is voor: maken
waarin de afhankelijkheden van het hoofdbronbestand worden beschreven. De preprocessor voert één uit:
maken regel met de naam van het objectbestand voor dat bronbestand, een dubbele punt en de namen
van alle opgenomen bestanden, ook die afkomstig van omvatten or -imacro's opdracht-
lijn opties.

Tenzij expliciet aangegeven (met -MT or -MQ), de bestandsnaam van het object bestaat uit de
naam van het bronbestand met een achtervoegsel vervangen door een achtervoegsel van het objectbestand en met willekeurig
leidende directory-onderdelen verwijderd. Als er veel opgenomen bestanden zijn, is de regel:
splitsen in meerdere regels met behulp van \-nieuwe lijn. De regel heeft geen commando's.

Deze optie onderdrukt de foutopsporingsuitvoer van de preprocessor niet, zoals: -dM​ Vermijden
het mengen van dergelijke debug-uitvoer met de afhankelijkheidsregels die u expliciet moet specificeren
afhankelijkheidsuitvoerbestand met -MF, of gebruik een omgevingsvariabele zoals
DEPENDENCIES_OUTPUT. Debug-uitvoer wordt nog steeds naar de reguliere uitvoerstroom verzonden als
Normaal.

Voorbijgaand -M aan de bestuurder impliceert: -Een onderdrukt waarschuwingen met een impliciete -w.

-MM Like -M maar vermeld geen header-bestanden die te vinden zijn in systeemheader-directory's,
noch header-bestanden die direct of indirect uit een dergelijke header zijn opgenomen.

Dit houdt in dat de keuze voor punthaken of dubbele aanhalingstekens in een #include
richtlijn bepaalt op zichzelf niet of die kop zal verschijnen in -MM
afhankelijkheidsoutput. Dit is een kleine wijziging in de semantiek van GCC-versies 3.0 en
eerder.

-MF filet
Bij gebruik bij -M or -MM, specificeert een bestand waarnaar de afhankelijkheden moeten worden geschreven. Als Nee -MF
switch wordt gegeven, de preprocessor stuurt de regels naar dezelfde plaats die hij zou hebben verzonden
voorbewerkte uitvoer.

Bij gebruik met de driveropties -MD or -MMD, -MF overschrijft de standaardafhankelijkheid
uitvoer bestand.

-MG In combinatie met een optie zoals -M het aanvragen van afhankelijkheidsgeneratie, -MG gaat uit van
ontbrekende header-bestanden zijn gegenereerde bestanden en voegt ze toe aan de afhankelijkheidslijst zonder
een fout opwerpen. De bestandsnaam van de afhankelijkheid wordt rechtstreeks overgenomen van de "#include"
richtlijn zonder een pad vooraf te gaan. -MG onderdrukt ook voorbewerkte uitvoer, als a
ontbrekende header-bestand maakt dit nutteloos.

Deze functie wordt gebruikt bij het automatisch bijwerken van makefiles.

- MP Deze optie instrueert CPP om een ​​nep doel toe te voegen voor elke andere afhankelijkheid dan de
main-bestand, waardoor elk van niets afhankelijk is. Deze dummy-regels omzeilen fouten
maken geeft als u headerbestanden verwijdert zonder de . bij te werken Makefile overeenkomen.

Dit is een typische uitvoer:

test.o: test.c test.h

test.h:

-MT doel
Wijzig het doel van de regel die wordt uitgezonden door het genereren van afhankelijkheid. Standaard duurt CPP
de naam van het hoofdinvoerbestand, verwijdert alle directorycomponenten en elk bestandsachtervoegsel
zoals .c, en voegt het gebruikelijke objectachtervoegsel van het platform toe. Het resultaat is het doel.

An -MT optie zal het doel zo instellen dat het exact de tekenreeks is die u opgeeft. Als je wilt
meerdere doelen, kunt u ze als een enkel argument specificeren om -MT, of gebruik meerdere
-MT opties.

Bijvoorbeeld -MT '$(objpfx)foo.o' zou kunnen geven

$(objpfx)foo.o: foo.c

-MQ doel
Hetzelfde als -MT, maar het citeert alle tekens die speciaal zijn om te maken.
-MQ '$(objpfx)foo.o' geeft

$$(objpfx)foo.o: foo.c

Het standaarddoel wordt automatisch aangehaald, alsof het werd gegeven met -MQ.

-MD -MD is gelijk aan -M -MF filet, behalve dat -E wordt niet gesuggereerd. De bestuurder
bepaalt filet op basis van of een -o optie wordt gegeven. Als dat zo is, gebruikt de bestuurder zijn
argument maar met een achtervoegsel van .d, anders krijgt het de naam van het invoerbestand,
verwijdert alle directorycomponenten en suffix, en past a . toe .d achtervoegsel.

If -MD wordt gebruikt in combinatie met -E, ieder -o schakelaar wordt begrepen om de . te specificeren
afhankelijkheidsuitvoerbestand, maar indien gebruikt zonder -EElke -o wordt verstaan ​​om te specificeren a
doelobjectbestand.

Sinds -E wordt niet geïmpliceerd, -MD kan worden gebruikt om een ​​afhankelijkheidsuitvoerbestand te genereren als a
neveneffect van het compilatieproces.

-MMD
Like -MD behalve dat alleen gebruikersheaderbestanden worden vermeld, geen systeemheaderbestanden.

-fpch-deps
Bij gebruik van voorgecompileerde headers, zal deze vlag ervoor zorgen dat de afhankelijkheid-output vlaggen:
vermeld ook de bestanden van de afhankelijkheden van de vooraf gecompileerde header. Alleen indien niet gespecificeerd
de voorgecompileerde koptekst zou worden weergegeven en niet de bestanden die zijn gebruikt om deze te maken
omdat die bestanden niet worden geraadpleegd wanneer een voorgecompileerde header wordt gebruikt.

-fpch-voorverwerking
Deze optie maakt het gebruik van een voorgecompileerde header mogelijk samen met: -E. Het voegt een speciale
"#pragma", "#pragma GCC pch_preprocess"bestandsnaam"" in de uitvoer om de plaats te markeren
waar de vooraf gecompileerde header werd gevonden, en zijn bestandsnaam. Wanneer -fvoorbewerkt in
gebruikt, herkent GCC deze "#pragma" en laadt de PCH.

Deze optie is standaard uitgeschakeld, omdat de resulterende voorbewerkte uitvoer alleen is
echt geschikt als input voor GCC. Het wordt ingeschakeld door -opslaan-temps.

Je moet deze "#pragma" niet in je eigen code schrijven, maar het is veilig om de
bestandsnaam als het PCH-bestand op een andere locatie beschikbaar is. De bestandsnaam kan zijn:
absoluut of het kan relatief zijn ten opzichte van de huidige directory van GCC.

-x c
-x C ++
-x doelstelling C
-x assembler-met-cpp
Geef de brontaal op: C, C++, Objective-C of assembly. Dit heeft niets te maken
met normconformiteit of uitbreidingen; het selecteert alleen welke basissyntaxis moet
verwachten. Als u geen van deze opties geeft, zal cpp de taal afleiden uit de
extensie van het bronbestand: .c, . Cc, .mof .S. Enkele andere veelvoorkomende extensies voor
C++ en assembly worden ook erkend. Als cpp de extensie niet herkent,
zal het bestand behandelen als C; dit is de meest algemene modus.

Opmerking: Eerdere versies van cpp geaccepteerd a -lang optie die zowel de
taal en het conformiteitsniveau van de normen. Deze optie is verwijderd, omdat:
het is in strijd met de -l optie.

-standaard=standaard
-ansi
Specificeer de norm waaraan de code moet voldoen. Momenteel weet CPP over C
en C++-normen; anderen kunnen in de toekomst worden toegevoegd.

standaard kan een van zijn:

"c90"
"c89"
"iso9899:1990"
De ISO C-norm uit 1990. c90 is de gebruikelijke afkorting voor deze versie van
de standaard.

De -ansi optie is gelijk aan -standaard=c90.

"iso9899:199409"
De 1990 C-norm, zoals gewijzigd in 1994.

"iso9899:1999"
"c99"
"iso9899: 199x"
"c9x"
De herziene ISO C-norm, gepubliceerd in december 1999. Vóór publicatie, dit:
stond bekend als C9X.

"iso9899:2011"
"c11"
"c1x"
De herziene ISO C-norm, gepubliceerd in december 2011. Vóór publicatie, dit:
stond bekend als C1X.

"gnu90"
"gnu89"
De 1990 C-standaard plus GNU-extensies. Dit is de standaardinstelling.

"gnu99"
"gnu9x"
De 1999 C-standaard plus GNU-extensies.

"gnu11"
"gnu1x"
De 2011 C-standaard plus GNU-extensies.

"c++98"
De ISO C++-norm uit 1998 plus amendementen.

"gnu++98"
Hetzelfde als -standaard=c++98 plus GNU-extensies. Dit is de standaard voor C++-code.

-IK- Splits het include-pad. Alle mappen gespecificeerd met -I opties voor -IK- zijn
alleen gezocht naar headers gevraagd met "#include"het dossier""; er wordt niet naar gezocht
"#erbij betrekkenbestand>". Als er extra mappen zijn opgegeven met -I opties na de
-IK-, die mappen worden allemaal doorzocht #include richtlijnen.

Daarnaast, -IK- blokkeert het gebruik van de directory van de huidige bestandsdirectory als
de eerste zoekdirectory voor "#include"het dossier"". Deze optie is afgeschaft.

-nostdinc
Zoek niet in de standaard systeemdirectory's naar headerbestanden. Alleen de mappen
je hebt opgegeven met -I opties (en de map van het huidige bestand, als
geschikt) worden doorzocht.

-nostdinc++
Zoek niet naar header-bestanden in de C++-specifieke standaarddirectories, maar doe toch
zoek in de andere standaardmappen. (Deze optie wordt gebruikt bij het bouwen van de C++
bibliotheek.)

omvatten filet
Proces filet alsof "#include "file"" verscheen als de eerste regel van de primaire bron
het dossier. Echter, de eerste directory waarnaar wordt gezocht filet werkt de preprocessor?
directory verkrijgen in plaats daarvan of de map met het hoofdbronbestand. Indien niet gevonden
daar wordt naar gezocht in de rest van de "#include "...""-zoekketen als
Normaal.

Als er meerdere omvatten opties worden gegeven, worden de bestanden opgenomen in de volgorde waarin ze
verschijnen op de opdrachtregel.

-imacro's filet
Precies zoals omvatten, behalve dat alle uitvoer geproduceerd door scannen filet wordt gegooid
weg. Macro's die het definieert, blijven gedefinieerd. Hiermee kunt u alle macro's verkrijgen
uit een header zonder ook de aangiften ervan te verwerken.

Alle bestanden gespecificeerd door -imacro's worden verwerkt voordat alle bestanden gespecificeerd door omvatten.

-idirna dir
Zoeken dir voor header-bestanden, maar doe het na alle mappen gespecificeerd met -I en
standaard systeemdirectory's zijn uitgeput. dir wordt behandeld als een systeem omvatten:
map. Indien dir begint met "=", dan wordt "=" vervangen door de sysroot
voorvoegsel; zien --sysroot en -isysroot.

-ipvoorvoegsel voorvoegsel
Specificeren voorvoegsel als voorvoegsel voor volgende -imetvoorvoegsel opties. Als het voorvoegsel
een map vertegenwoordigt, moet u de laatste . opnemen /.

-imetvoorvoegsel dir
-imetvoorvoegselvoor dir
toevoegen dir naar het voorvoegsel dat eerder is opgegeven met -ipvoorvoegsel, en voeg de resulterende . toe
directory naar het include-zoekpad. -imetvoorvoegselvoor zet het op dezelfde plaats -I
zou; -imetvoorvoegsel zet het waar -idirna zou doen.

-isysroot dir
Deze optie is als de --sysroot optie, maar is alleen van toepassing op header-bestanden (behalve voor
Darwin-doelen, waar het van toepassing is op zowel header-bestanden als bibliotheken). Zie de
--sysroot optie voor meer informatie.

-imultilib dir
Te gebruiken dir als een submap van de map die doelspecifieke C++-headers bevat.

-isysteem dir
Zoeken dir voor header-bestanden, na alle mappen gespecificeerd door -I maar voor de
standaard systeemmappen. Markeer het als een systeemmap, zodat het hetzelfde wordt
speciale behandeling zoals wordt toegepast op de standaard systeemdirectory's. Indien dir begint
met "=", dan wordt "=" vervangen door het voorvoegsel sysroot; zien --sysroot en
-isysroot.

-ikquote dir
Zoeken dir alleen voor header-bestanden die zijn aangevraagd met "#include"het dossier""; zij zijn niet
gezocht naar "#includebestand>", voor alle mappen gespecificeerd door -I en voor de
standaard systeemmappen. Indien dir begint met "=", daarna wordt "=" vervangen door
het sysroot-voorvoegsel; zien --sysroot en -isysroot.

-frichtlijnen-alleen
Hanteer richtlijnen bij voorverwerking, maar breid geen macro's uit.

Het gedrag van de optie hangt af van de -E en -fvoorbewerkt opties.

met -E, is de voorbewerking beperkt tot het afhandelen van richtlijnen zoals "#define",
"#ifdef" en "#error". Andere preprocessor-bewerkingen, zoals macro-uitbreiding en
trigraaf conversie worden niet uitgevoerd. tevens de -dd optie is impliciet
ingeschakeld.

met -fvoorbewerkt, voordefinitie van de opdrachtregel en de meeste ingebouwde macro's is
gehandicapt. Macro's zoals "__LINE__", die contextafhankelijk zijn, worden afgehandeld
normaal gesproken. Dit maakt compilatie mogelijk van bestanden die eerder zijn voorbewerkt met "-E
-fdirectives-only".

Met beide -E en -fvoorbewerkt, de regels voor -fvoorbewerkt voorrang krijgen. Dit
maakt volledige voorverwerking mogelijk van bestanden die eerder zijn voorbewerkt met "-E
-fdirectives-only".

-fdollars-in-ID's
ACCEPTEREN $ in identificatiegegevens.

-fextended-identifiers
Accepteer universele tekennamen in ID's. Deze optie is standaard ingeschakeld
voor C99 (en latere C-standaardversies) en C++.

-fno-canonieke-systeem-headers
Verkort bij de voorverwerking de systeemkoppaden niet met canonicalisering.

-fvoorbewerkt
Geef aan de preprocessor aan dat het invoerbestand al is voorbewerkt. Dit
onderdrukt zaken als macro-uitbreiding, trigraph-conversie, ontsnapte nieuwe regelsplitsing,
en verwerking van de meeste richtlijnen. De preprocessor herkent en verwijdert nog steeds
opmerkingen, zodat u een bestand kunt doorgeven dat is voorbewerkt met -C naar de compiler zonder
problemen. In deze modus is de geïntegreerde preprocessor niet meer dan een tokenizer
voor de front-ends.

-fvoorbewerkt is impliciet als het invoerbestand een van de extensies heeft .i, .ii or .mi.
Dit zijn de extensies die GCC gebruikt voor voorverwerkte bestanden die zijn gemaakt door -opslaan-temps.

-ftabstop=Breedte
Stel de afstand tussen tabstops in. Dit helpt de preprocessor om de juiste kolom te rapporteren
nummers in waarschuwingen of fouten, zelfs als er tabbladen op de regel verschijnen. Als de waarde kleiner is
dan 1 of groter dan 100, wordt de optie genegeerd. De standaardwaarde is 8.

-fdebug-cpp
Deze optie is alleen nuttig voor het opsporen van fouten in GCC. Bij gebruik met -E, dumpt debuggen
informatie over locatiekaarten. Elk token in de uitvoer wordt voorafgegaan door de dump van
de kaart waartoe de locatie behoort. De dump van de kaart met de locatie van een token
zou zijn:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"lok": }

Bij gebruik zonder -E, heeft deze optie geen effect.

-ftrack-macro-uitbreiding[=niveau]
Volg locaties van tokens in macro-uitbreidingen. Hierdoor kan de compiler uitzenden
diagnose over de huidige macro-uitbreidingsstack wanneer een compilatiefout optreedt in
een macro-uitbreiding. Het gebruik van deze optie zorgt ervoor dat de preprocessor en de compiler verbruiken
meer geheugen. De niveau parameter kan worden gebruikt om het precisieniveau van het token te kiezen
locatietracking waardoor het geheugengebruik indien nodig wordt verminderd. Waarde 0 of
niveau deactiveert deze optie net alsof nee -ftrack-macro-uitbreiding was aanwezig op
de opdrachtregel. Waarde 1 volgt tokens-locaties in een gedegradeerde modus omwille van
minimale geheugenoverhead. In deze modus zijn alle tokens die het gevolg zijn van de uitbreiding van een
argument van een functie-achtige macro hebben dezelfde locatie. Waarde 2 volgt tokens
locaties volledig. Deze waarde heeft de meeste geheugenhonger. Wanneer deze optie wordt gegeven
geen argument, de standaard parameterwaarde is 2.

Merk op dat "-ftrack-macro-expansion=2" standaard is geactiveerd.

-fexec-tekenset=karakterset
Stel de uitvoeringstekenset in, die wordt gebruikt voor tekenreeks- en tekenconstanten. De standaard
is UTF-8. karakterset kan elke codering zijn die wordt ondersteund door de "iconv" -bibliotheek van het systeem
routine.

-fwide-exec-charset=karakterset
Stel de tekenset voor brede uitvoering in, die wordt gebruikt voor brede tekenreeksen en tekenconstanten.
De standaardwaarde is UTF-32 of UTF-16, afhankelijk van wat overeenkomt met de breedte van "wchar_t". Als
Met -fexec-tekenset, karakterset kan elke codering zijn die wordt ondersteund door de "iconv" van het systeem
bibliotheekroutine; u zult echter problemen krijgen met coderingen die niet passen
precies in "wchar_t".

-finput-tekenset=karakterset
Stel de invoertekenset in, die wordt gebruikt voor vertaling van de tekenset van de invoer
bestand naar de brontekenset die door GCC wordt gebruikt. Als de landinstelling niet specificeert, of GCC
kan deze informatie niet uit de landinstelling halen, de standaardwaarde is UTF-8. Dit kan zijn
overschreven door de landinstelling of deze opdrachtregeloptie. Momenteel is de opdracht-
regeloptie heeft voorrang als er een conflict is. karakterset kan elke codering zijn
ondersteund door de "iconv" bibliotheekroutine van het systeem.

-fworking-map
Activeer het genereren van lijnmarkeringen in de preprocessor-uitvoer waardoor de compiler
ken de huidige werkdirectory op het moment van voorverwerking. Wanneer deze optie is
ingeschakeld, zal de preprocessor, na de eerste lijnmarkering, een tweede lijnmarkering uitzenden
met de huidige werkdirectory gevolgd door twee schuine strepen. GCC zal dit gebruiken
directory, wanneer het aanwezig is in de voorverwerkte invoer, zoals de directory uitgezonden als
de huidige werkdirectory in sommige informatieformaten voor foutopsporing. Deze optie is
impliciet ingeschakeld als foutopsporingsinformatie is ingeschakeld, maar dit kan worden voorkomen met
de ontkende vorm -fno-werkmap. Indien de -P vlag is aanwezig in de opdracht
line, heeft deze optie geen effect, aangezien er geen "#line" instructies worden uitgezonden.

-fno-show-kolom
Druk geen kolomnummers af in diagnostiek. Dit kan nodig zijn als diagnostiek
wordt gescand door een programma dat de kolomnummers niet begrijpt, zoals:
dejagnu.

-A predikaat=beantwoorden
Maak een bewering met het predikaat predikaat en antwoord beantwoorden. Dit formulier is
voorkeur boven de oudere vorm -A predikaat(beantwoorden), die nog steeds wordt ondersteund, omdat het
gebruikt geen speciale shell-tekens.

-A -predikaat=beantwoorden
Annuleer een bewering met het predikaat predikaat en antwoord beantwoorden.

-dCHARS
KOSTEN is een reeks van een of meer van de volgende tekens, en mag niet zijn
voorafgegaan door een spatie. Andere karakters worden geïnterpreteerd door de eigenlijke compiler, of
gereserveerd voor toekomstige versies van GCC, en worden dus stilzwijgend genegeerd. Als u opgeeft:
karakters wiens gedrag conflicteert, het resultaat is ongedefinieerd.

M Genereer in plaats van de normale uitvoer een lijst met: #define richtlijnen voor alle
macro's gedefinieerd tijdens de uitvoering van de preprocessor, inclusief voorgedefinieerde
macro's. Dit geeft u een manier om erachter te komen wat vooraf is gedefinieerd in uw versie van
de preprocessor. Ervan uitgaande dat je geen bestand hebt foo.h, het bevel

raak foo.h aan; cpp -dM foo.h

toont alle vooraf gedefinieerde macro's.

Als u gebruik maken van -dM zonder de -E keuze, -dM wordt geïnterpreteerd als een synoniem voor
-fdump-rtl-mach.

D Like M behalve in twee opzichten: het doet niet de vooraf gedefinieerde macro's opnemen, en het
uitgangen zowel de #define richtlijnen en het resultaat van de voorbewerking. beide soorten
van uitvoer ga naar het standaard uitvoerbestand.

N Like D, maar zend alleen de macronamen uit, niet hun uitbreidingen.

I uitgang #include richtlijnen naast het resultaat van de voorbewerking.

U Like D behalve dat alleen macro's die zijn uitgevouwen of waarvan de definitie is getest
in preprocessor-richtlijnen worden uitgevoerd; de uitvoer wordt vertraagd tot het gebruik of
test van de macro; en #undef richtlijnen worden ook uitgevoerd voor geteste macro's, maar
destijds ongedefinieerd.

-P Verhinder het genereren van lijnmarkeringen in de uitvoer van de preprocessor. Dit zou kunnen zijn
handig bij het uitvoeren van de preprocessor op iets dat geen C-code is, en zal worden verzonden
naar een programma dat kan worden verward door de lijnmarkeringen.

-C Gooi opmerkingen niet weg. Alle opmerkingen worden doorgegeven aan het uitvoerbestand, behalve:
voor opmerkingen in verwerkte richtlijnen, die samen met de richtlijn worden verwijderd.

U moet voorbereid zijn op bijwerkingen bij gebruik -C; het zorgt ervoor dat de preprocessor
behandel opmerkingen als op zichzelf staande tokens. Opmerkingen die bijvoorbeeld verschijnen op de
begin van wat een richtlijn zou zijn, heeft tot gevolg dat die regel verandert in een
gewone bronregel, aangezien het eerste token op de regel niet langer een is #.

-CC Gooi geen opmerkingen weg, ook niet tijdens macro-uitbreiding. Dit is zoals -C, behalve
dat opmerkingen in macro's ook worden doorgegeven aan het uitvoerbestand waar
de macro wordt uitgevouwen.

Naast de bijwerkingen van de -C optie, de -CC optie veroorzaakt alle C++-stijl
opmerkingen in een macro die moeten worden geconverteerd naar opmerkingen in C-stijl. Dit is om later te voorkomen
gebruik van die macro om onbedoeld commentaar te geven op de rest van de bronregel.

De -CC optie wordt over het algemeen gebruikt om lint-opmerkingen te ondersteunen.

-traditionele-cpp
Probeer het gedrag van ouderwetse C-preprocessors te imiteren, in tegenstelling tot ISO C
voorverwerkers.

-trigrafieën
Trigraph-reeksen verwerken. Dit zijn reeksen van drie tekens, die allemaal beginnen met
??, die door ISO C zijn gedefinieerd om te staan ​​voor enkele tekens. Bijvoorbeeld, ??/ staat
For \, dus '??/N' is een karakterconstante voor een nieuwe regel. GCC negeert standaard
trigraphs, maar in standaardconforme modi converteert het ze. Zie de -soa en -ansi
opties.

De negen trigraphs en hun vervangingen zijn

Trigraaf: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Vervanging: [ ] { } # \ ^ | ~

-opnieuw toewijzen
Schakel speciale code in om bestandssystemen te omzeilen die alleen zeer korte bestanden toestaan
namen, zoals MS-DOS.

--help
--doel-hulp
Druk tekst af die alle opdrachtregelopties beschrijft in plaats van iets voor te verwerken.

-v Uitgebreide modus. Druk het versienummer van GNU CPP af aan het begin van de uitvoering, en
rapporteer de definitieve vorm van het include-pad.

-H Druk de naam af van elk gebruikt headerbestand, naast andere normale activiteiten. Elk
naam is ingesprongen om aan te geven hoe diep in de #include stapel is het. Voorgecompileerde kop
bestanden worden ook afgedrukt, zelfs als ze ongeldig blijken te zijn; een ongeldige voorgecompileerde
header-bestand wordt afgedrukt met ...X en een geldige met ...! .

-versie
--versie
Print het versienummer van GNU CPP uit. Ga met één streepje door met voorbewerken zoals normaal.
Met twee streepjes, verlaat onmiddellijk.

Voorbijgaand Opties naar de Assembler
U kunt opties doorgeven aan de assembler.

-Wah,optie
Passeren optie als optie voor de monteur. Indien optie bevat komma's, het is gesplitst
in meerdere opties bij de komma's.

-Xmonteur optie
Passeren optie als optie voor de monteur. Hiermee kunt u systeemspecifiek aanleveren
assembler-opties die GCC niet herkent.

Als u een optie wilt doorgeven waarvoor een argument nodig is, moet u gebruiken -Xmonteur tweemaal,
een keer voor de optie en een keer voor het argument.

Opties For Koppelen
Deze opties komen in het spel wanneer de compiler objectbestanden koppelt aan een uitvoerbaar bestand
uitvoer bestand. Ze zijn zinloos als de compiler geen linkstap uitvoert.

object-bestandsnaam
Een bestandsnaam die niet eindigt op een speciaal herkend achtervoegsel wordt beschouwd als een naam
objectbestand of bibliotheek. (Objectbestanden worden onderscheiden van bibliotheken door de linker
volgens de bestandsinhoud.) Als het koppelen is gedaan, worden deze objectbestanden gebruikt als:
invoer naar de linker.

-c
-S
-E Als een van deze opties wordt gebruikt, wordt de linker niet uitgevoerd en worden objectbestandsnamen
mogen niet als argument worden gebruikt.

-zekering-ld=bfd
Gebruik de bfd linker in plaats van de standaard linker.

-fuse-ld=goud
Gebruik de goud linker in plaats van de standaard linker.

-lbibliotheek
-l bibliotheek
Zoek in de bibliotheek met de naam bibliotheek bij het koppelen. (Het tweede alternatief met de
bibliotheek als afzonderlijk argument is alleen voor POSIX-compliance en wordt niet aanbevolen.)

Het maakt verschil waar in het commando je deze optie schrijft; de linker zoekt
en verwerkt bibliotheken en objectbestanden in de volgorde waarin ze zijn opgegeven. Dus, foo.o
-lz bar.o doorzoekt bibliotheek z na bestand foo.o maar voorheen bar.o. Indien bar.o verwijst naar
functies in z, kunnen die functies mogelijk niet worden geladen.

De linker doorzoekt een standaardlijst met mappen voor de bibliotheek, wat eigenlijk is:
een bestand met de naam bibliotheek.a. De linker gebruikt dit bestand dan alsof het gespecificeerd was
precies op naam.

De doorzochte mappen bevatten verschillende standaard systeemmappen plus alle mappen die u
specificeren met -L.

Normaal gesproken zijn de bestanden die op deze manier worden gevonden bibliotheekbestanden --- archiefbestanden waarvan de leden zijn
object bestanden. De linker verwerkt een archiefbestand door er doorheen te scannen op leden
die symbolen definiëren waarnaar tot nu toe is verwezen maar die niet zijn gedefinieerd. Maar als de
bestand dat wordt gevonden een gewoon objectbestand is, is het op de gebruikelijke manier gekoppeld. De
enige verschil tussen het gebruik van een -l optie en het specificeren van een bestandsnaam is dat -l
omringt bibliotheek Met lib en .a en doorzoekt verschillende mappen.

-lobjc
Je hebt dit speciale geval van de -l optie om een ​​Objective-C of . te koppelen
Objective-C++ programma.

-nostartbestanden
Gebruik bij het koppelen niet de standaard opstartbestanden van het systeem. Het standaard systeem
bibliotheken worden normaal gebruikt, tenzij -nostlib or -nodefaultlibs is gebruikt.

-nodefaultlibs
Gebruik bij het koppelen niet de standaard systeembibliotheken. Alleen de bibliotheken die u opgeeft
worden doorgegeven aan de linker, en opties die de koppeling van de systeembibliotheken specificeren, zoals
as -statisch-libgcc or -gedeelde-libgcc, worden genegeerd. De standaard opstartbestanden worden gebruikt
normaal, tenzij -nostartbestanden is gebruikt.

De compiler kan oproepen genereren naar "memcmp", "memset", "memcpy" en "memmove". Deze
vermeldingen worden meestal opgelost door vermeldingen in libc. Deze toegangspunten moeten zijn:
geleverd via een ander mechanisme wanneer deze optie is opgegeven.

-nostlib
Gebruik bij het koppelen niet de standaard opstartbestanden of bibliotheken van het systeem. Geen opstart
bestanden en alleen de bibliotheken die u opgeeft, worden doorgegeven aan de linker, en opties
koppeling van de systeembibliotheken specificeren, zoals: -statisch-libgcc or -gedeelde-libgcc,
worden genegeerd.

De compiler kan oproepen genereren naar "memcmp", "memset", "memcpy" en "memmove". Deze
vermeldingen worden meestal opgelost door vermeldingen in libc. Deze toegangspunten moeten zijn:
geleverd via een ander mechanisme wanneer deze optie is opgegeven.

Een van de standaardbibliotheken omzeild door -nostlib en -nodefaultlibs is libgcc.a, een
bibliotheek van interne subroutines die GCC gebruikt om tekortkomingen van bepaalde
machines, of speciale behoeften voor sommige talen.

In de meeste gevallen heb je nodig: libgcc.a zelfs als u andere standaardbibliotheken wilt vermijden.
Met andere woorden, wanneer u specificeert -nostlib or -nodefaultlibs normaal gesproken zou je
specificeren -lgcc ook. Dit zorgt ervoor dat u geen onopgeloste verwijzingen heeft naar:
interne GCC-bibliotheeksubroutines. (Een voorbeeld van zo'n interne subroutine is
"__main", gebruikt om ervoor te zorgen dat C++-constructors worden aangeroepen.)

-taart
Produceer een positie-onafhankelijk uitvoerbaar bestand op doelen die dit ondersteunen. Voor voorspelbaar
resultaten, moet u ook dezelfde set opties opgeven die worden gebruikt voor compilatie (-fpie,
-fPIE, of modelsubopties) wanneer u deze linkeroptie opgeeft.

-geen-taart
Maak geen positie-onafhankelijk uitvoerbaar bestand.

-rdynamisch
Geef de vlag door -export-dynamisch naar de ELF-linker, op doelen die dit ondersteunen. Dit
instrueert de linker om alle symbolen, niet alleen gebruikte, toe te voegen aan het dynamische symbool
tafel. Deze optie is nodig voor sommige toepassingen van "dlopen" of om het verkrijgen van
backtraces vanuit een programma.

-s Verwijder alle symbooltabel en verplaatsingsinformatie uit het uitvoerbare bestand.

-statisch
Op systemen die dynamische koppeling ondersteunen, voorkomt dit koppeling met de gedeelde
bibliotheken. Op andere systemen heeft deze optie geen effect.

-gedeeld
Produceer een gedeeld object dat vervolgens kan worden gekoppeld aan andere objecten om een
uitvoerbaar. Niet alle systemen ondersteunen deze optie. Voor voorspelbare resultaten moet u:
specificeer ook dezelfde set opties die worden gebruikt voor compilatie (-fpic, -fPIC, of model
subopties) wanneer u deze linkeroptie opgeeft.[1]

-gedeelde-libgcc
-statisch-libgcc
Op systemen die: libgcc als een gedeelde bibliotheek dwingen deze opties het gebruik van
respectievelijk de gedeelde of statische versie. Indien geen gedeelde versie van libgcc was
gebouwd toen de compiler werd geconfigureerd, hebben deze opties geen effect.

Er zijn verschillende situaties waarin een toepassing de gedeelde libgcc
in plaats van de statische versie. De meest voorkomende hiervan is wanneer de toepassing
uitzonderingen wil gooien en vangen in verschillende gedeelde bibliotheken. In dat geval,
elk van de bibliotheken en de toepassing zelf zouden de gedeelde libgcc.

Daarom worden de G++- en GCJ-stuurprogramma's automatisch toegevoegd -gedeelde-libgcc wanneer je bouwt
een gedeelde bibliotheek of een uitvoerbaar hoofdbestand, omdat C++- en Java-programma's doorgaans gebruik maken van
uitzonderingen, dus dit is het juiste om te doen.

Als u in plaats daarvan het GCC-stuurprogramma gebruikt om gedeelde bibliotheken te maken, kan het zijn dat ze
zijn niet altijd gekoppeld aan de gedeelde libgcc. Als GCC vindt, in zijn configuratie
keer dat je een niet-GNU-linker hebt of een GNU-linker die de optie niet ondersteunt
--eh-frame-hdr, het koppelt de gedeelde versie van libgcc in gedeelde bibliotheken door
standaard. Anders profiteert het van de linker en optimaliseert het de koppeling
met de gedeelde versie van libgcc, koppelen met de statische versie van libgcc door
standaard. Hierdoor kunnen uitzonderingen zich verspreiden via dergelijke gedeelde bibliotheken, zonder
verplaatsingskosten maken bij het laden van de bibliotheek.

Als een bibliotheek of hoofduitvoerbaar bestand echter uitzonderingen moet genereren of opvangen, moet u
moet het koppelen met behulp van het G++- of GCJ-stuurprogramma, afhankelijk van de talen die worden gebruikt in de
programma, of gebruik de optie -gedeelde-libgcc, zodat het is gekoppeld aan de gedeelde
libgcc.

-statisch-libasan
Wanneer de -fsanitize=adres optie wordt gebruikt om een ​​programma te koppelen, de GCC-driver
automatisch linkt tegen libasaan. Indien libasaan is beschikbaar als een gedeelde bibliotheek, en
de -statisch optie niet wordt gebruikt, dan linkt dit naar de gedeelde versie van libasaan.
De -statisch-libasan optie stuurt de GCC-driver om te linken libasaan statisch, zonder
noodzakelijkerwijs andere bibliotheken statisch te koppelen.

-statische-libtsan
Wanneer de -fsanitize=thread optie wordt gebruikt om een ​​programma te koppelen, de GCC-driver
automatisch linkt tegen libertsan. Indien libertsan is beschikbaar als een gedeelde bibliotheek, en
de -statisch optie niet wordt gebruikt, dan linkt dit naar de gedeelde versie van libertsan.
De -statische-libtsan optie stuurt de GCC-driver om te linken libertsan statisch, zonder
noodzakelijkerwijs andere bibliotheken statisch te koppelen.

-statisch-liblsan
Wanneer de -fsanitize=lek optie wordt gebruikt om een ​​programma te koppelen, de GCC-driver
automatisch linkt tegen vrij. Indien vrij is beschikbaar als een gedeelde bibliotheek, en
de -statisch optie niet wordt gebruikt, dan linkt dit naar de gedeelde versie van vrij.
De -statisch-liblsan optie stuurt de GCC-driver om te linken vrij statisch, zonder
noodzakelijkerwijs andere bibliotheken statisch te koppelen.

-statisch-libubsan
Wanneer de -fsanitize=niet gedefinieerd optie wordt gebruikt om een ​​programma te koppelen, de GCC-driver
automatisch linkt tegen libusan. Indien libusan is beschikbaar als een gedeelde bibliotheek,
en -statisch optie niet wordt gebruikt, dan linkt dit naar de gedeelde versie van
libusan. De -statisch-libubsan optie stuurt de GCC-driver om te linken libusan
statisch, zonder noodzakelijkerwijs andere bibliotheken statisch te koppelen.

-statische-libmpx
Wanneer de -fcheck-aanwijzer bounds en -mmpx opties worden gebruikt om een ​​programma te koppelen, de GCC
stuurprogramma koppelt automatisch tegen libmpx. Indien libmpx is beschikbaar als een gedeelde
bibliotheek, en de -statisch optie niet wordt gebruikt, dan linkt dit tegen de gedeelde
versie libmpx. De -statische-libmpx optie stuurt de GCC-driver om te linken libmpx
statisch, zonder noodzakelijkerwijs andere bibliotheken statisch te koppelen.

-statische-libmpxwrappers
Wanneer de -fcheck-aanwijzer bounds en -mmpx opties worden gebruikt om een ​​programma te koppelen zonder
ook met behulp van -fno-chkp-wrappers gebruiken, het GCC-stuurprogramma koppelt automatisch tegen
libmpxwrappers. Indien libmpxwrappers is beschikbaar als een gedeelde bibliotheek, en de -statisch
optie niet wordt gebruikt, dan linkt dit naar de gedeelde versie van libmpxwrappers. De
-statische-libmpxwrappers optie stuurt de GCC-driver om te linken libmpxwrappers
statisch, zonder noodzakelijkerwijs andere bibliotheken statisch te koppelen.

-statische-libstdc++
Wanneer de g ++ programma wordt gebruikt om een ​​C++-programma te koppelen, het linkt normaal gesproken automatisch
tegen libstdc++. Indien libstdc++ is beschikbaar als een gedeelde bibliotheek, en de -statisch
optie niet wordt gebruikt, dan linkt dit naar de gedeelde versie van libstdc++. Dat is
normaal prima. Soms is het echter handig om de versie van libstdc++
gebruikt door het programma zonder helemaal naar een volledig statische link te gaan. De
-statische-libstdc++ optie stuurt de g ++ stuurprogramma om te linken libstdc++ statisch, zonder
noodzakelijkerwijs andere bibliotheken statisch te koppelen.

-symbolisch
Bind verwijzingen naar globale symbolen bij het bouwen van een gedeeld object. Waarschuw voor eventuele
onopgeloste verwijzingen (tenzij overschreven door de optie van de linkeditor) -Xlinker -z
-Xlinker defs). Slechts enkele systemen ondersteunen deze optie.

-T script
Te gebruiken script als het linkerscript. Deze optie wordt ondersteund door de meeste systemen die gebruikmaken van de
GNU-linker. Op sommige doelen, zoals bare-board doelen zonder besturingssysteem,
de -T optie kan nodig zijn bij het koppelen om verwijzingen naar ongedefinieerde symbolen te voorkomen.

-Xlinker optie
Passeren optie als een optie voor de linker. Hiermee kunt u systeemspecifiek aanleveren
linker-opties die GCC niet herkent.

Als u een optie wilt doorgeven waarvoor een apart argument nodig is, moet u gebruiken -Xlinker
twee keer, een keer voor de optie en een keer voor het argument. Om bijvoorbeeld te slagen -beweren
definities, je moet schrijven -Xlinker -beweren -Xlinker definities. Het werkt niet
schrijven -Xlinker "-beweren definities", omdat dit de hele string doorgeeft als a
enkel argument, wat niet is wat de linker verwacht.

Bij gebruik van de GNU-linker is het meestal handiger om argumenten door te geven aan linker
opties met behulp van de optie=waarde syntaxis dan als afzonderlijke argumenten. Bijvoorbeeld, jij
kan specificeren -Xlinker -Map=uitvoer.map dan -Xlinker -Kaart -Xlinker uitvoer.map.
Andere linkers ondersteunen deze syntaxis mogelijk niet voor opdrachtregelopties.

-Wl,optie
Passeren optie als een optie voor de linker. Indien optie bevat komma's, het is opgesplitst in
meerdere opties bij de komma's. U kunt deze syntaxis gebruiken om een ​​argument door te geven aan de
keuze. Bijvoorbeeld, -Wl, -Map,output.map passes -Kaart uitvoer.map naar de koppelaar. Wanneer
met behulp van de GNU-linker kun je hetzelfde effect krijgen met: -Wl,-Map=uitvoer.kaart.

OPMERKING: In Ubuntu 8.10 en latere versies, voor LDFLAGS, is de optie: -Wl,-z,relro is gebruikt.
Gebruik . om uit te schakelen -Wl,-z,norelro.

-u symbool
Doe alsof het symbool symbool is ongedefinieerd, om het koppelen van bibliotheekmodules te forceren om te definiëren
het. Je kunt gebruiken -u meerdere keren met verschillende symbolen om het laden van . te forceren
extra bibliotheekmodules.

-z trefwoord
-z wordt direct doorgegeven aan de linker samen met het trefwoord trefwoord. Zie de sectie
in de documentatie van uw linker voor toegestane waarden en hun betekenis.

Opties For Directory Zoeken
Deze opties specificeren mappen om te zoeken naar header-bestanden, naar bibliotheken en naar onderdelen
van de compiler:

-Idir
Voeg de map toe dir naar de kop van de lijst met mappen waarnaar moet worden gezocht header
bestanden. Dit kan worden gebruikt om een ​​systeemkoptekstbestand te overschrijven, ter vervanging van uw eigen bestand
versie, aangezien deze mappen worden doorzocht vóór het systeemkopbestand
mappen. Gebruik deze optie echter niet om mappen toe te voegen die:
door de leverancier geleverde systeemkopbestanden (gebruik -isysteem daarom). Als u er meer dan één gebruikt
-I optie, de mappen worden in de volgorde van links naar rechts gescand; het standaard systeem
mappen komen erna.

Als een standaardsysteem een ​​directory bevat, of een directory gespecificeerd met -isysteemIs
ook gespecificeerd met -I -I optie wordt genegeerd. De directory wordt nog steeds doorzocht, maar
als een systeemdirectory op zijn normale positie in het systeem omvatten keten. Dit is om
ervoor te zorgen dat de procedure van GCC om de headers van het buggy-systeem te repareren en de bestelling voor de
"include_next"-richtlijnen worden niet per ongeluk gewijzigd. Als je echt moet veranderen
de zoekvolgorde voor systeemmappen, gebruik de -nostdinc en / of -isysteem opties.

-iplugindir=dir
Stel de map in om te zoeken naar plug-ins die worden doorgegeven -fplugin=naam in plaats van
-fplugin=pad/naam.zo. Deze optie is niet bedoeld om door de gebruiker te worden gebruikt, maar alleen
voorbij de chauffeur.

-ikquotedir
Voeg de map toe dir naar de kop van de lijst met mappen waarnaar moet worden gezocht header
bestanden alleen voor het geval van "#include "het dossier""; er wordt niet gezocht naar "#include
<bestand>", anders net als -I.

-Ldir
Directory toevoegen dir naar de lijst met te zoeken mappen -l.

-Bvoorvoegsel
Deze optie geeft aan waar de uitvoerbare bestanden, bibliotheken, include-bestanden en
gegevensbestanden van de compiler zelf.

Het compilerstuurprogramma voert een of meer van de subprogramma's uit cpp, cc1, as en ld.
Het probeert voorvoegsel als een prefix voor elk programma dat het probeert uit te voeren, zowel met als zonder
machine/versie/.

Voor elk subprogramma dat moet worden uitgevoerd, probeert het compilerstuurprogramma eerst de -B voorvoegsel, indien aanwezig.
Als die naam niet wordt gevonden, of als -B is niet gespecificeerd, de bestuurder probeert twee standaard
voorvoegsels, /usr/lib/gcc/ en /usr/local/lib/gcc/. Als geen van beide resulteert in een
bestandsnaam die wordt gevonden, wordt gezocht naar de ongewijzigde programmanaam met behulp van de
mappen gespecificeerd in uw PATH variabele omgeving.

De compiler controleert of het pad dat door -B verwijst naar een directory, en als
nodig is, voegt het een directoryscheidingsteken toe aan het einde van het pad.

-B voorvoegsels die effectief directorynamen specificeren, zijn ook van toepassing op bibliotheken in de
linker, omdat de compiler deze opties vertaalt naar: -L opties voor de linker.
Ze zijn ook van toepassing op het opnemen van bestanden in de preprocessor, omdat de compiler vertaalt
deze opties in -isysteem opties voor de preprocessor. In dit geval is de compiler
voegt omvatten naar het voorvoegsel.

Het runtime-ondersteuningsbestand libgcc.a kan ook worden gezocht met behulp van de -B voorvoegsel, als
nodig zijn. Als het daar niet wordt gevonden, worden de twee standaardvoorvoegsels hierboven geprobeerd, en dat
is alles. Het bestand wordt weggelaten uit de link als het niet op die manier wordt gevonden.

Een andere manier om een ​​voorvoegsel op te geven dat veel lijkt op de -B voorvoegsel is om de omgeving te gebruiken
variabele GCC_EXEC_PREFIX.

Als een speciale kludge, als het pad voorzien door -B is [dir/]podiumN/, Waar N is een nummer
in het bereik van 0 tot 9, dan wordt het vervangen door [dir/]inclusief. Dit is om te helpen bij het opstarten
de compiler vastbinden.

-specificaties=filet
Proces filet nadat de compiler de standaard heeft ingelezen bril bestand, om te overschrijven
de standaardinstellingen die de gcc driverprogramma gebruikt bij het bepalen welke schakelaars moeten worden doorgegeven
naar cc1, cc1plus, as, ld, enz. Meer dan één -specificaties=filet kan worden opgegeven op de
opdrachtregel, en ze worden in volgorde van links naar rechts verwerkt.

--sysroot=dir
Te gebruiken dir als de logische hoofdmap voor headers en bibliotheken. Als bijvoorbeeld de
compiler zoekt normaal gesproken naar headers in / Usr / include en bibliotheken in / Usr / libHet
in plaats daarvan zoekt dir/usr/include en dir/usr/lib.

Als u zowel deze optie als de -isysroot optie, dan de --sysroot optie
geldt voor bibliotheken, maar de -isysroot optie is van toepassing op header-bestanden.

De GNU-linker (vanaf versie 2.16) heeft hiervoor de nodige ondersteuning
optie. Als uw linker deze optie niet ondersteunt, is het headerbestandsaspect van
--sysroot werkt nog steeds, maar het bibliotheekaspect niet.

--no-sysroot-achtervoegsel
Voor sommige doelen wordt een achtervoegsel toegevoegd aan de hoofdmap die is opgegeven met --sysroot,
afhankelijk van de andere gebruikte opties, zodat headers bijvoorbeeld kunnen worden gevonden in
dir/achtervoegsel/usr/include in plaats van dir/usr/include. Deze optie schakelt de toevoeging uit
van een dergelijk achtervoegsel.

-IK- Deze optie is afgeschaft. Gebruik alstublieft -ikquote inplaats van -I mappen voor
de -IK- en verwijder het -IK- optie. Alle mappen die u opgeeft met -I opties voor
de -IK- optie worden alleen gezocht voor het geval van "#include "het dossier""; zij zijn niet
gezocht naar "#includebestand>".

Als er extra mappen zijn opgegeven met -I opties na de -IK- optie, deze
directory's worden doorzocht op alle "#include"-richtlijnen. (Gewoonlijk allen -I
mappen worden op deze manier gebruikt.)

Bovendien, de -IK- optie verbiedt het gebruik van de huidige map (waar de
huidige invoerbestand vandaan kwam) als de eerste zoekdirectory voor "#include"het dossier"".
Er is geen manier om dit effect van -IK-. Met -IK. u kunt zoeken specificeren
de map die actueel is wanneer de compiler wordt aangeroepen. Dat is niet precies de
hetzelfde als wat de preprocessor standaard doet, maar het is vaak bevredigend.

-IK- belet het gebruik van de standaard systeemdirectory's voor headerbestanden niet.
Aldus -IK- en -nostdinc zijn onafhankelijk.

opgeven doelwit Machine en Compiler Versie
De gebruikelijke manier om GCC uit te voeren is door het uitvoerbare bestand genaamd gccof machine-gcc wanneer kruis-
compileren, of machine-gcc-versie om een ​​andere versie uit te voeren dan degene die is geïnstalleerd
laatste.

Hardware Modellen en Configuraties
Elk type doelmachine kan zijn eigen speciale opties hebben, te beginnen met -m, kiezen
tussen verschillende hardwaremodellen of configuraties --- bijvoorbeeld 68010 vs 68020, zwevend
coprocessor of geen. Een enkele geïnstalleerde versie van de compiler kan voor elk model compileren
of configuratie, volgens de gespecificeerde opties.

Sommige configuraties van de compiler ondersteunen ook extra speciale opties, meestal voor:
compatibiliteit met andere compilers op hetzelfde platform.

Arch64 Opties

Deze opties zijn gedefinieerd voor AArch64-implementaties:

-mabi=naam
Genereer code voor het opgegeven datamodel. Toegestane waarden zijn ilp32 voor SysV-
zoals een gegevensmodel waarbij int, long int en pointer 32-bits zijn, en lp64 voor SysV-achtige
datamodel waarbij int 32-bit is, maar lange int en pointer 64-bit zijn.

De standaard is afhankelijk van de specifieke doelconfiguratie. Merk op dat de LP64 en
ILP32 ABI's zijn niet link-compatibel; je moet je hele programma compileren met dezelfde
ABI en koppeling met een compatibele set bibliotheken.

-mbig-endian
Genereer big-endian-code. Dit is de standaard wanneer GCC is geconfigureerd voor een
aarch64_be-*-* doelwit.

-mgeneral-regs-only
Genereer code die alleen de algemene registers gebruikt.

-mlittle-endian
Genereer little-endian-code. Dit is de standaard wanneer GCC is geconfigureerd voor een
aarch64-*-* maar niet een aarch64_be-*-* doelwit.

-mcmodel=klein
Genereer code voor het kleine codemodel. Het programma en de statisch gedefinieerde symbolen
moeten binnen 1 GB van elkaar liggen. Pointers zijn 64 bits. Programma's kunnen statisch zijn
of dynamisch gekoppeld. Dit model is niet volledig geïmplementeerd en wordt meestal behandeld als:
Klein.

-mcmodel=klein
Genereer code voor het kleine codemodel. Het programma en zijn statisch gedefinieerde
symbolen moeten zich binnen 4 GB van elkaar bevinden. Pointers zijn 64 bits. Programma's kunnen
statisch of dynamisch gekoppeld. Dit is het standaard codemodel.

-mcmodel=groot
Genereer code voor het grote codemodel. Dit maakt geen aannames over adressen en
maten van secties. Pointers zijn 64 bits. Programma's kunnen alleen statisch worden gekoppeld.

-mstrict-uitlijnen
Ga er niet vanuit dat niet-uitgelijnde geheugenverwijzingen door het systeem worden verwerkt.

-momit-blad-frame-aanwijzer
-mno-weglaten-blad-frame-aanwijzer
Laat de frame-aanwijzer weg of bewaar deze in bladfuncties. Het eerste gedrag is de
standaard.

-mtls-dialect=besch
Gebruik TLS-descriptors als het thread-local opslagmechanisme voor dynamische toegang tot TLS
variabelen. Dit is de standaardinstelling.

-mtls-dialect=traditioneel
Gebruik traditionele TLS als het thread-local opslagmechanisme voor dynamische toegang tot TLS
variabelen.

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Schakel de tijdelijke oplossing voor het ARM Cortex-A53-erratumnummer 835769 in of uit. Dit:
omvat het invoegen van een NOP-instructie tussen geheugeninstructies en 64-bits integer
instructies voor meervoudig accumuleren.

-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
Schakel de tijdelijke oplossing voor het ARM Cortex-A53-erratumnummer 843419 in of uit. Dit:
erratum-oplossing wordt gemaakt tijdens de koppeling en dit geeft alleen de bijbehorende vlag door
naar de koppelaar.

-maart=naam
Specificeer de naam van de doelarchitectuur, eventueel achtervoegsel met een of meer
functie modifiers. Deze optie heeft de vorm -maart=boog{+[geen]kenmerken}*, waar de
enige toegestane waarde voor boog is armv8-a. De toegestane waarden voor kenmerken zijn
gedocumenteerd in de subsectie hieronder.

Waar conflicterende feature modifiers zijn gespecificeerd, wordt de meest rechtse feature gebruikt.

GCC gebruikt deze naam om te bepalen wat voor soort instructies het kan uitzenden bij het genereren
montagecode.

Waar -maart is opgegeven zonder een van -mtune or -mcpu ook gespecificeerd, de
code is afgestemd om goed te presteren in een reeks doelprocessors die de
doel architectuur.

-mtune=naam
Geef de naam op van de doelprocessor waarop GCC de prestaties moet afstemmen:
de code. Toegestane waarden voor deze optie zijn: algemeen, cortex-a53, cortex-a57,
cortex-a72, exynos-m1, onweersbui, xgene1.

Bovendien kan deze optie specificeren dat GCC de prestaties van de code moet afstemmen
voor een big.LITTLE systeem. Toegestane waarden voor deze optie zijn:
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

waar geen van? -mtune=, -mcpu= or -maart= zijn opgegeven, is de code afgestemd om te presteren
goed over een reeks doelprocessors.

Deze optie kan niet worden voorzien van een achtervoegsel door feature-modifiers.

-mcpu=naam
Specificeer de naam van de doelprocessor, eventueel aangevuld met een of meer functies
modificatoren. Deze optie heeft de vorm -mcpu=cpu{+[geen]kenmerken}*, waar de toegestane
waarden voor cpu zijn dezelfde als die beschikbaar zijn voor -mtune.

De toegestane waarden voor kenmerken zijn gedocumenteerd in de subsectie hieronder.

Waar conflicterende feature modifiers zijn gespecificeerd, wordt de meest rechtse feature gebruikt.

GCC gebruikt deze naam om te bepalen wat voor soort instructies het kan uitzenden bij het genereren
montagecode (alsof door) -maart) en om de doelprocessor te bepalen waarvoor
afstemmen op uitvoering (alsof door -mtune). Waar deze optie wordt gebruikt in combinatie met:
-maart or -mtune, die opties hebben voorrang op het betreffende deel hiervan
optie.

-maart en -mcpu Functiemodificaties

Functiemodifiers gebruikt met -maart en -mcpu kan een van de volgende zijn:

crc CRC-extensie inschakelen.

crypto
Schakel de Crypto-extensie in. Dit houdt in dat Advanced SIMD is ingeschakeld.

fp Instructies met drijvende komma inschakelen.

simd
Geavanceerde SIMD-instructies inschakelen. Dit houdt in dat drijvende-komma-instructies zijn
ingeschakeld. Dit is de standaard voor alle huidige mogelijke waarden voor opties -maart en
-mcpu=.

Adapteva Driekoningen Opties

Deze -m opties zijn gedefinieerd voor Adapteva Epiphany:

-mhalf-reg-bestand
Wijs geen enkel register toe in het bereik "r32"..."r63". Waardoor code kan draaien
hardwarevarianten die deze registers niet hebben.

-mprefer-short-insn-regs
Wijs bij voorkeur registers toe die het genereren van korte instructies mogelijk maken. Dit kan
resulteren in een groter aantal instructies, dus dit kan in het algemeen verminderen of toenemen
code grootte.

-mbranch-kosten=num
Stel de kosten van filialen in op ongeveer num "eenvoudige" instructies. Deze kosten zijn slechts een
heuristiek en levert niet gegarandeerd consistente resultaten op voor alle releases.

-mcverplaatsen
Schakel het genereren van voorwaardelijke zetten in.

-mnops=num
Uitzenden num NOP's voor elke andere gegenereerde instructie.

-mno-zacht-cmpsf
Voor single-precision floating-point vergelijkingen, zend een "fsub" instructie uit en test
de vlaggen. Dit is sneller dan een softwarevergelijking, maar kan onjuiste resultaten opleveren
in aanwezigheid van NaN's, of wanneer twee verschillende kleine getallen worden vergeleken, zodat:
hun verschil wordt berekend als nul. De standaard is -msoft-cmpsf, Die gebruikt
langzamere, maar IEEE-compatibele, softwarevergelijkingen.

-mstack-offset=num
Stel de offset in tussen de bovenkant van de stapel en de stapelaanwijzer. Bijv. een waarde van 8
betekent dat de acht bytes in het bereik "sp+0...sp+7" kunnen worden gebruikt door bladfuncties
zonder stapeltoewijzing. Andere waarden dan 8 or 16 zijn niet getest en het is onwaarschijnlijk dat
werk. Merk ook op dat deze optie de ABI verandert; een programma samenstellen met a
een andere stack-offset dan waarmee de bibliotheken zijn gecompileerd, is over het algemeen niet:
werk. Deze optie kan handig zijn als u wilt evalueren of een andere stapel-offset
zou je betere code geven, maar om daadwerkelijk een andere stack-offset te gebruiken om te bouwen
werkende programma's, wordt aanbevolen om de toolchain te configureren met de juiste
--met-stack-offset=num optie.

-mno-ronde-dichtstbijzijnde
Laat de planner aannemen dat de afrondingsmodus is ingesteld op afkappen. De
standaard is -mround-dichtstbijzijnde.

-mlong-oproepen
Als niet anders gespecificeerd door een attribuut, neem aan dat alle aanroepen mogelijk buiten de vallen
offset bereik van de "b" / "bl" instructies, en laad daarom het functie-adres
in een register voordat u een (anderszins directe) oproep uitvoert. Dit is de standaardinstelling.

-mkorte-oproepen
Indien niet anders gespecificeerd door een attribuut, neem aan dat alle directe oproepen binnen het bereik vallen
van de "b" / "bl" instructies, dus gebruik deze instructies voor directe oproepen. De
standaard is -mlong-oproepen.

-mklein16
Neem aan dat adressen kunnen worden geladen als 16-bits waarden zonder teken. Dit geldt niet voor
functie adressen waarvoor -mlong-oproepen semantiek is van kracht.

-mfp-modus=mode
Stel de heersende modus van de drijvende-kommaeenheid in. Dit bepaalt de drijvende-
puntmodus die wordt verstrekt en verwacht bij functieaanroep en terugkeertijd. Maken
deze modus komt overeen met de modus die u voornamelijk nodig hebt bij het starten van de functie, kan uw
programma's kleiner en sneller door onnodige modusschakelaars te vermijden.

mode kan worden ingesteld op een van de volgende waarden:

bezoeker
Elke modus bij het invoeren van een functie is geldig en wordt behouden of hersteld wanneer de functie
retourneert en wanneer het andere functies aanroept. Deze modus is handig voor het compileren
bibliotheken of andere compilatie-eenheden die u misschien in verschillende
programma's met verschillende heersende FPU-modi, en het gemak van het kunnen:
gebruik een enkel objectbestand weegt zwaarder dan de grootte en snelheid overhead voor elke extra modus
schakelen die nodig zou kunnen zijn, vergeleken met wat nodig zou zijn met een meer
specifieke keuze van de heersende FPU-modus.

afkappen
Dit is de modus die wordt gebruikt voor berekeningen met drijvende komma met afkappen (dwz rond
richting nul) afrondingsmodus. Dat omvat conversie van drijvende komma naar
geheel getal.

rond-dichtstbijzijnde
Dit is de modus die wordt gebruikt voor berekeningen met drijvende komma met afronding naar dichtstbijzijnde of
zelfs afrondingsmodus.

int Dit is de modus die wordt gebruikt om integer-berekeningen uit te voeren in de FPU, bijv. integer
vermenigvuldigen, of integer vermenigvuldigen-en-accumuleren.

De standaard is -mfp-mode=beller

-mnosplit-lohi
-mno-postinc
-mno-postmodify
Tweaks voor het genereren van codes die respectievelijk het splitsen van 32-bits belastingen uitschakelen,
generatie van post-increment adressen, en generatie van post-modify adressen. De
standaardinstellingen zijn msplit-lohi, -mpost-inc en -mpost-wijzigen.

-mnovect-dubbel
Wijzig de gewenste SIMD-modus in SI-modus. De standaard is -mvect-dubbel, Die gebruikt
DImode als voorkeur SIMD-modus.

-max-vect-align=num
De maximale uitlijning voor SIMD-vectormodustypen. num kan 4 of 8 zijn. De standaard is
8. Merk op dat dit een ABI-wijziging is, ook al zijn veel bibliotheekfunctie-interfaces:
onaangetast als ze geen SIMD-vectormodi gebruiken op plaatsen die van invloed zijn op de grootte en/of
afstemming van relevante typen.

-msplit-vecmove-vroeg
Splits vectorbewegingen in enkele woordbewegingen voordat ze opnieuw worden geladen. In theorie kan dit geven
betere registerallocatie, maar tot dusver lijkt het omgekeerde het geval te zijn.

-m1reg-reg
Specificeer een register om de constante -1 vast te houden, waardoor het laden klein negatief wordt
constanten en bepaalde bitmaskers sneller. Toegestane waarden voor reg zijn r43 en r63,
die het gebruik van dat register als een vast register specificeren, en geen, wat betekent dat geen
Hiervoor wordt gebruik gemaakt van register. De standaard is -m1reg-geen.

ARC Opties

De volgende opties bepalen de architectuurvariant waarvoor code wordt gecompileerd:

-mbarrel-shifter
Genereer instructies ondersteund door barrel shifter. Dit is de standaard tenzij
-mcpu=ARC601 van kracht is.

-mcpu=cpu
Stel architectuurtype, registergebruik en instructieplanningsparameters in voor: cpu.
Er zijn ook snelkoppelingsalias-opties beschikbaar voor achterwaartse compatibiliteit en
gemak. Ondersteunde waarden voor cpu zijn

ARC600
Compileren voor ARC600. aliassen: -mA6, -mARC600.

ARC601
Compileren voor ARC601. Alias: -mARC601.

ARC700
Compileren voor ARC700. aliassen: -mA7, -mARC700. Dit is de standaard indien geconfigureerd
Met --met-cpu=arc700.

-mdpfp
-mdpfp-compact
FPX: Genereer Double Precision FPX-instructies, afgestemd op de compacte implementatie.

-mdpfp-snel
FPX: Genereer Double Precision FPX-instructies, afgestemd op snelle implementatie.

-mno-dpfp-lrsr
Schakel LR- en SR-instructies uit voor het gebruik van FPX-extensie-aux-registers.

-me
Genereer uitgebreide rekenkundige instructies. Momenteel alleen "divaw", "adds", "subs",
en "sat16" worden ondersteund. Dit is altijd ingeschakeld voor -mcpu=ARC700.

-mno-mpy
Genereer geen mpy-instructies voor ARC700.

-mmul32x16
Genereer 32x16 bit vermenigvuldig- en mac-instructies.

-mmul64
Genereer mul64- en mulu64-instructies. Alleen geldig voor -mcpu=ARC600.

-normaal
Genereer norminstructie. Dit is de standaard als -mcpu=ARC700 van kracht is.

-mspfp
-mspfp-compact
FPX: Genereer Single Precision FPX-instructies, afgestemd op de compacte implementatie.

-mspfp-snel
FPX: Genereer Single Precision FPX-instructies, afgestemd op snelle implementatie.

-msimd
Maak het genereren van ARC SIMD-instructies mogelijk via doelspecifieke ingebouwde functies. Alleen geldig
For -mcpu=ARC700.

-msoft-zweven
Deze optie genegeerd; het wordt alleen verstrekt voor compatibiliteitsdoeleinden. Software
drijvende-kommacode wordt standaard uitgezonden en deze standaard kan worden overschreven door FPX
opties; mspfp, mspfp-compactof mspfp-snel voor enkele precisie, en mdpfp, mdpfp-
compactof mdpfp-snel voor dubbele precisie.

-mswap
Wisselinstructies genereren.

De volgende opties worden doorgegeven aan de assembler, en definiëren ook preprocessor
macro symbolen.

-mdsp-pakket
Doorgegeven aan de assembler om de DSP Pack A-extensies in te schakelen. Stelt ook de
preprocessor-symbool "__Xdsp_packa".

-mdvbf
Doorgegeven aan de monteur om de dubbele viterbi-vlinderverlenging mogelijk te maken. Ook
stelt het preprocessor-symbool "__Xdvbf" in.

-mlok
Doorgegeven aan de assembler om de extensie Locked Load/Store Conditional in te schakelen.
Stelt ook het preprocessor-symbool "__Xlock" in.

-mmac-d16
Doorgegeven aan de monteur. Stelt ook het preprocessor-symbool "__Xxmac_d16" in.

-mmac-24
Doorgegeven aan de monteur. Stelt ook het preprocessor-symbool "__Xxmac_24" in.

-mrtsc
Doorgegeven aan de assembler om de 64-bit Time-Stamp Counter-extensie in te schakelen
instructie. Stelt ook het preprocessor-symbool "__Xrtsc" in.

-mswap
Doorgegeven aan de assembler om de instructie voor het bestellen van swap-byte-uitbreidingen in te schakelen.
Stelt ook het preprocessor-symbool "__Xswape" in.

-mtelefonie
Doorgegeven aan de assembler om dubbele en enkele operand-instructies in te schakelen voor:
telefonie. Stelt ook het preprocessor-symbool "__Xtelephony" in.

-mxy
Doorgegeven aan de assembler om de XY Memory-extensie in te schakelen. Stelt ook de
preprocessor-symbool "__Xxy".

De volgende opties bepalen hoe de assembly-code wordt geannoteerd:

-mismaat
Annoteer de instructies van de assembler met geschatte adressen.

-mannoteren-uitlijnen
Leg uit welke afstemmingsoverwegingen leiden tot de beslissing om een ​​instructie te maken
kort of lang.

De volgende opties worden doorgegeven aan de linker:

-marclinux
Doorgegeven aan de linker, om het gebruik van de "arclinux"-emulatie te specificeren. Deze optie
is standaard ingeschakeld in tool chains die zijn gebouwd voor "arc-linux-uclibc" en
"arceb-linux-uclibc" doelen wanneer profilering niet wordt gevraagd.

-marclinux_prof
Doorgegeven aan de linker, om het gebruik van de "arclinux_prof"-emulatie te specificeren. Dit
optie is standaard ingeschakeld in tool chains gebouwd voor "arc-linux-uclibc" en
"arceb-linux-uclibc" doelen wanneer profilering wordt gevraagd.

De volgende opties bepalen de semantiek van gegenereerde code:

-mepiloog-cfi
Schakel het genereren van oproepframe-informatie voor epilogen in.

-mno-epiloog-cfi
Schakel het genereren van oproepframe-informatie voor epilogen uit.

-mlong-oproepen
Genereer call insns als register indirecte oproepen, en bied zo toegang tot de volledige
32-bits adresbereik.

-mmedium-oproepen
Gebruik niet minder dan 25 bit adresbereik voor oproepen, dit is de beschikbare offset
voor een onvoorwaardelijke branch-and-link instructie. Voorwaardelijke uitvoering van functie
oproepen worden onderdrukt om gebruik van het 25-bits bereik mogelijk te maken in plaats van het 21-bits bereik
met voorwaardelijke branch-and-link. Dit is de standaardinstelling voor gereedschapskettingen die zijn gebouwd voor:
"arc-linux-uclibc" en "arceb-linux-uclibc" doelen.

-mno-sdata
Genereer geen sdata-referenties. Dit is de standaardinstelling voor gereedschapskettingen die zijn gebouwd voor:
"arc-linux-uclibc" en "arceb-linux-uclibc" doelen.

-mucb-mcount
Instrument met mcount-oproepen zoals gebruikt in UCB-code. Dat wil zeggen, tellen in de callee,
niet de beller. Standaard telt ARC-instrumentatie mee in de beller.

-mvluchtige-cache
Gebruik normaal opgeslagen geheugentoegangen voor vluchtige verwijzingen. Dit is de standaardinstelling.

-mno-vluchtige-cache
Schakel cache-bypass in voor vluchtige verwijzingen.

De volgende opties stemmen het genereren van codes af:

-kwaadaardige oproep
Voer afstemmingsoptimalisaties uit voor oproepinstructies.

-mauto-wijzig-reg
Schakel het gebruik van pre/post wijzigen met registerverplaatsing in.

-mbbit-kijkgaatje
Schakel bbit kijkgaatje2 in.

-mno-brcc
Deze optie schakelt een doelspecifieke pass in . uit arc_reorg om "BRcc" te genereren
instructies. Het heeft geen effect op de "BRcc" generatie aangedreven door de combiner pass.

-mcase-vector-pcrel
Gebruik pc-relatieve schakelkasttabellen - dit maakt het inkorten van de kasttafel mogelijk. Dit is de
standaard voor -Jij.

-mcompacte-casesi
Schakel compact casesi-patroon in. Dit is de standaard voor -Jij.

-mno-cond-exec
Schakel ARCompact-specifieke pas uit om voorwaardelijke uitvoeringsinstructies te genereren. Ten gevolge
om de planning van slots en interacties tussen operandnummers, letterlijke maten,
instructielengtes, en de ondersteuning voor voorwaardelijke uitvoering, de doelonafhankelijke
pass om voorwaardelijke uitvoering te genereren ontbreekt vaak, dus de ARC-poort heeft
speciale pas rond die probeert om meer voorwaardelijke uitvoering te genereren
kansen na toewijzing van registers, inkorting van filialen en planning van vertraagde slots
zijn gedaan. Deze pas verbetert over het algemeen, maar niet altijd, de prestaties en code
grootte, ten koste van extra compilatietijd, daarom is er een optie om te switchen
het uit. Als je een probleem hebt met oproepinstructies die hun toegestane offset overschrijden
bereik omdat ze geconditioneerd zijn, zou u moeten overwegen om -mmedium-oproepen
gebruiken.

-mearly-cbranchsi
Schakel pre-reload gebruik van het cbranchsi-patroon in.

-mexpand-adddi
Vouw "adddi3" en "subdi3" bij het genereren van rtl uit in "add.f", "adc" enz.

-Mindexed-loads
Schakel het gebruik van geïndexeerde belastingen in. Dit kan problematisch zijn omdat sommige optimizers dan
gaan ervan uit dat geïndexeerde winkels bestaan, wat niet het geval is.

-mlra
Lokale registertoewijzing inschakelen. Dit is nog experimenteel voor ARC, dus standaard
de compiler gebruikt standaard herladen (bijv -mno-lra).

-mlra-prioriteit-geen
Geef geen prioriteit aan voor doelregisters.

-mlra-prioriteit-compact
Geef doelregisterprioriteit aan voor r0..r3 / r12..r15.

-mlra-prioriteit-niet-compact
Verlaag de prioriteit van de doelregistreerder voor r0..r3 / r12..r15.

-mno-millicode
Bij het optimaliseren voor grootte (met behulp van -Jij), prologen en epilogen die moeten redden of
herstellen van een groot aantal registers worden vaak ingekort door gebruik te maken van een oproep naar een special
functie in libgcc; dit wordt een genoemd millicode telefoongesprek. Zoals deze oproepen kunnen opleveren
prestatieproblemen en/of koppelingsproblemen veroorzaken bij het koppelen op een niet-standaard manier,
deze optie is bedoeld om het genereren van millicode-oproepen uit te schakelen.

-mmixed-code
Tweak registertoewijzing om 16-bits instructiegeneratie te helpen. Dit heeft over het algemeen
het effect van het verkleinen van de gemiddelde instructiegrootte terwijl de instructie toeneemt
tellen.

-mq-klasse
Schakel 'q' instructie-alternatieven in. Dit is de standaard voor -Jij.

-mRcq
Schakel Rcq-beperkingsafhandeling in - de meeste generatie van korte code hangt hiervan af. Dit is
de standaard.

-mRcw
Schakel Rcw-beperkingsafhandeling in - ccfsm condexec hangt hier meestal van af. Dit is de
standaard.

-msize-niveau=niveau
Optimalisatie van de grootte met betrekking tot instructielengtes en uitlijning. De
erkende waarden voor niveau zijn:

0 Geen optimalisatie van de grootte. Dit niveau is verouderd en wordt behandeld als 1.

1 Korte instructies worden opportunistisch gebruikt.

2 Bovendien worden de uitlijning van lussen en van code na barrières opgeheven.

3 Bovendien vervalt de optionele gegevensuitlijning en is de optie Os is ingeschakeld.

Dit is standaard 3 wanneer -Jij van kracht is. Anders is het gedrag wanneer dit niet het geval is
set is gelijk aan niveau 1.

-mtune=cpu
Instructieplanningsparameters instellen voor: cpu, het negeren van alle geïmpliceerde door -mcpu=.

Ondersteunde waarden voor cpu zijn

ARC600
Stem af op ARC600 cpu.

ARC601
Stem af op ARC601 cpu.

ARC700
Stem af op ARC700 cpu met standaard vermenigvuldigingsblok.

ARC700-xmac
Stem af op ARC700 cpu met XMAC-blok.

ARC725D
Stem af op ARC725D-cpu.

ARC750D
Stem af op ARC750D-cpu.

-mmultkosten=num
Aan te nemen kosten voor een vermenigvuldigingsinstructie, met 4 gelijk zijn aan een normale instructie.

-munalign-prob-drempel=waarschijnlijkheid
Stel waarschijnlijkheidsdrempel in voor het uitlijnen van takken. Bij het afstemmen op ARC700 en
optimaliseren voor snelheid, takken zonder gevuld vertragingsslot worden bij voorkeur uitgezonden
niet uitgelijnd en lang, tenzij profilering aangeeft dat de kans dat de vertakking
worden genomen is hieronder: waarschijnlijkheid. De standaardwaarde is (REG_BR_PROB_BASE/2), oftewel 5000.

De volgende opties blijven behouden voor achterwaartse compatibiliteit, maar zijn nu verouderd
en zal in een toekomstige release worden verwijderd:

-margonaut
Verouderde FPX.

-mbig-endian
-EB Compileer code voor big endian-doelen. Het gebruik van deze opties is nu afgeschaft. Gebruikers
die big-endian-code willen, moeten de doelen "arceb-elf32" en "arceb-linux-uclibc" gebruiken
bij het bouwen van de gereedschapsketen, waarvoor big-endian de standaard is.

-mlittle-endian
-DE Compileer code voor kleine endian doelen. Het gebruik van deze opties is nu afgeschaft.
Gebruikers die little-endian-code willen, moeten de "arc-elf32" en "arc-linux-uclibc" gebruiken
doelen bij het bouwen van de gereedschapsketen, waarvoor little-endian de standaard is.

-mbarrel_shifter
Vervangen door -mbarrel-shifter.

-mdpfp_compact
Vervangen door -mdpfp-compact.

-mdpfp_snel
Vervangen door -mdpfp-snel.

-mdsp_pakket
Vervangen door -mdsp-pakket.

-mEA
Vervangen door -me.

-mmac_24
Vervangen door -mmac-24.

-mmac_d16
Vervangen door -mmac-d16.

-mspfp_compact
Vervangen door -mspfp-compact.

-mspfp_snel
Vervangen door -mspfp-snel.

-mtune=cpu
Values arc600, arc601, arc700 en arc700-xmac For cpu worden vervangen door ARC600, ARC601,
ARC700 en ARC700-xmac respectievelijk

-multikosten=num
Vervangen door -mmultkosten.

ARM Opties

Deze -m opties zijn gedefinieerd voor de ARM-poort:

-mabi=naam
Genereer code voor de opgegeven ABI. Toegestane waarden zijn: apcs-gnu, bij stuks, aapc's,
aapcs-linux en iwmmxt.

-maps-frame
Genereer een stapelframe dat voldoet aan de ARM Procedure Call Standard voor iedereen
functies, ook als dit niet strikt noodzakelijk is voor een correcte uitvoering van de code.
opgeven -fomit-frame-aanwijzer met deze optie zorgt ervoor dat de stapelframes niet worden
gegenereerd voor bladfuncties. De standaard is -mno-apcs-frame. Deze optie is
verouderd.

-kaarten
Dit is een synoniem voor -maps-frame en wordt afgeraden.

-mthumb-interactie
Genereer code die het bellen tussen de ARM- en Thumb-instructiesets ondersteunt.
Zonder deze optie kunnen de twee instructiesets op pre-v5-architecturen niet worden
betrouwbaar gebruikt binnen één programma. De standaard is -mno-duim-interwork, sinds een beetje
grotere code wordt gegenereerd wanneer: -mthumb-interactie is gespecificeerd. In AAPCS-configuraties
deze optie is zinloos.

-mno-sched-proloog
Voorkom het opnieuw ordenen van instructies in de functie-proloog, of het samenvoegen van
die instructie met de instructies in de body van de functie. Dit betekent dat alle
functies beginnen met een herkenbare set instructies (of eigenlijk een keuze)
uit een kleine set van verschillende functie-prologen), en deze informatie kan worden gebruikt om
zoek het begin van functies in een uitvoerbaar stuk code. De standaard is
-msched-proloog.

-mfloat-abi=naam
Specificeert welke ABI met drijvende komma moet worden gebruikt. Toegestane waarden zijn: zacht, zachtfp en
hard.

opgeven zacht zorgt ervoor dat GCC uitvoer genereert met bibliotheekaanroepen voor zwevende-
punt operaties. zachtfp maakt het genereren van code mogelijk met behulp van hardware floating-point
instructies, maar gebruikt nog steeds de soft-float-aanroepconventies. hard toestaat
het genereren van drijvende-komma-instructies en maakt gebruik van FPU-specifieke aanroepconventies.

De standaard is afhankelijk van de specifieke doelconfiguratie. Merk op dat de hard-float
en soft-float ABI's zijn niet link-compatibel; je moet je hele programma compileren met
dezelfde ABI en link met een compatibele set bibliotheken.

-mlittle-endian
Genereer code voor een processor die in de little-endian-modus draait. Dit is de standaard voor
alle standaardconfiguraties.

-mbig-endian
Genereer code voor een processor die in big-endian-modus draait; de standaard is om te compileren
code voor een little-endian processor.

-maart=naam
Dit specificeert de naam van de doel-ARM-architectuur. GCC gebruikt deze naam om
bepalen wat voor soort instructies het kan uitzenden bij het genereren van assemblagecode. Dit
optie kan worden gebruikt in combinatie met of in plaats van de -mcpu= optie. toegestaan
namen zijn: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, armv7ve, armv8-a, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.

-maart=armv7ve is de armv7-a-architectuur met virtualisatie-uitbreidingen.

-maart=armv8-a+crc maakt het genereren van code voor de ARMv8-A-architectuur mogelijk samen met:
de optionele CRC32-extensies.

-maart=inheems zorgt ervoor dat de compiler de architectuur van de build automatisch detecteert
computer. Op dit moment wordt deze functie alleen ondersteund op GNU/Linux, en niet allemaal
architecturen worden herkend. Als de automatische detectie niet is gelukt, heeft de optie geen
effect.

-mtune=naam
Deze optie specificeert de naam van de doel-ARM-processor waarop GCC moet afstemmen
de prestaties van de code. Voor sommige ARM-implementaties kunnen betere prestaties zijn:
verkregen door deze optie te gebruiken. Toegestane namen zijn: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, arm710t, arm720t, arm740t, sterke arm, sterke arm110, sterke arm1100,
sterke arm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi, arm1020t, arm1026ej-s,
arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, cortex-a5, cortex-a7, cortex-a8, cortex-a9,
cortex-a12, cortex-a15, cortex-a53, cortex-a57, cortex-a72, cortex-r4, cortex-r4f,
cortex-r5, cortex-r7, cortex-m7, cortex-m4, cortex-m3, cortex-m1, cortex-m0,
cortex-m0plus, cortex-m1.klein-vermenigvuldigen, cortex-m0.klein-vermenigvuldigen,
cortex-m0plus.klein-vermenigvuldigen, exynos-m1, wonder-pj4, xschaal, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgene1.

Bovendien kan deze optie specificeren dat GCC de prestaties van de code moet afstemmen
voor een big.LITTLE systeem. Toegestane namen zijn: cortex-a15.cortex-a7,
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

-mtune=generiek-boog specificeert dat GCC de prestaties moet afstemmen op een mix van:
processors binnen architectuur boog. Het doel is om code te genereren die goed draait op de
huidige meest populaire processors, balancerend tussen optimalisaties die sommigen ten goede komen
CPU's in het bereik, en het vermijden van prestatievalkuilen van andere CPU's. De effecten van
deze optie kan in toekomstige GCC-versies veranderen naarmate CPU-modellen komen en gaan.

-mtune=native zorgt ervoor dat de compiler de CPU van de buildcomputer automatisch detecteert. Bij
aanwezig is, wordt deze functie alleen ondersteund op GNU/Linux, en niet alle architecturen worden
erkend. Als de automatische detectie niet is gelukt, heeft de optie geen effect.

-mcpu=naam
Dit specificeert de naam van de doel-ARM-processor. GCC gebruikt deze naam om de . af te leiden
naam van de doel-ARM-architectuur (alsof gespecificeerd door -maart) en de ARM-processor
type waarop moet worden afgestemd voor uitvoering (alsof gespecificeerd door -mtune). Waar deze optie
wordt gebruikt in combinatie met -maart or -mtune, hebben die opties voorrang op de
geschikt onderdeel van deze optie.

Toegestane namen voor deze optie zijn dezelfde als die voor -mtune.

-mcpu=generiek-boog is ook toegestaan, en is gelijk aan -maart=boog
-mtune=generiek-boog. Zien -mtune voor meer informatie.

-mcpu=natief zorgt ervoor dat de compiler de CPU van de buildcomputer automatisch detecteert. Bij
aanwezig is, wordt deze functie alleen ondersteund op GNU/Linux, en niet alle architecturen worden
erkend. Als de automatische detectie niet is gelukt, heeft de optie geen effect.

-mfpu=naam
Dit specificeert op welke drijvende-komma-hardware (of hardware-emulatie) beschikbaar is
het doelwit. Toegestane namen zijn: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, neon-, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, neon-FP-armv8 en crypto-neon-fp-armv8.

If -msoft-zweven is opgegeven, specificeert dit het formaat van drijvende-kommawaarden.

Als de geselecteerde drijvende-komma-hardware de NEON-extensie bevat (bijv -mfpu=neon-),
merk op dat drijvende-kommabewerkingen niet worden gegenereerd door de automatische vectorisatiepas van GCC
tenzij -funsafe-math-optimalisaties staat ook vermeld. Dit komt omdat NEON-hardware
implementeert de IEEE 754-standaard voor rekenkunde met drijvende komma niet volledig (in
bepaalde denormale waarden worden behandeld als nul), dus het gebruik van NEON-instructies kan:
leiden tot een verlies van precisie.

-mfp16-formaat=naam
Geef het formaat op van het type "__fp16" met halve precisie met drijvende komma. toegestaan
namen zijn geen, ieee en alternatief; de standaard is geen, in welk geval de "__fp16"
soort is niet gedefinieerd.

-mstructuur-grootte-grens=n
De maten van alle structuren en vakbonden worden afgerond op een veelvoud van het aantal
bits ingesteld door deze optie. Toegestane waarden zijn 8, 32 en 64. De standaardwaarde
varieert voor verschillende gereedschapsketens. Voor de COFF-gerichte toolchain is de standaardwaarde:
8. Een waarde van 64 is alleen toegestaan ​​als de onderliggende ABI dit ondersteunt.

Het specificeren van een groter aantal kan een snellere, efficiëntere code opleveren, maar kan ook:
vergroot de omvang van het programma. Verschillende waarden zijn mogelijk onverenigbaar.
Code die met één waarde is gecompileerd, kan niet per se verwachten dat deze met code of bibliotheken werkt
samengesteld met een andere waarde, als ze informatie uitwisselen via structuren of vakbonden.

-mabort-op-noreturn
Genereer een aanroep naar de functie "afbreken" aan het einde van een "noreturn"-functie. Het is
uitgevoerd als de functie probeert terug te keren.

-mlong-oproepen
-mno-lange gesprekken
Vertelt de compiler om functieaanroepen uit te voeren door eerst het adres van de te laden
functie in een register en voert vervolgens een subroutine-aanroep uit op dit register. Dit
schakelaar is nodig als de doelfunctie buiten de adressering van 64 megabyte ligt
bereik van de op offset gebaseerde versie van subroutine-oproepinstructie.

Zelfs als deze schakelaar is ingeschakeld, worden niet alle functieoproepen omgezet in lange oproepen.
De heuristiek is dat statische functies, functies met de "short_call"
attribuut, functies die binnen het bereik van een "#pragma no_long_calls"-richtlijn vallen,
en functies waarvan de definities al zijn gecompileerd binnen de huidige
compilatie-eenheid worden niet omgezet in lange gesprekken. De uitzonderingen op deze regel zijn dat:
zwakke functiedefinities, functies met het attribuut "long_call" of de "sectie"
attribuut en functies die binnen het bereik van een "#pragma long_calls"-richtlijn vallen
worden altijd omgezet in lange gesprekken.

Deze functie is standaard niet ingeschakeld. Specificeren -mno-lange gesprekken herstelt de
standaardgedrag, evenals het plaatsen van de functieaanroepen binnen het bereik van een "#pragma
long_calls_off" richtlijn. Merk op dat deze schakelaars geen effect hebben op hoe de compiler
genereert code voor het afhandelen van functieaanroepen via functiewijzers.

-msingle-pic-basis
Behandel het register dat wordt gebruikt voor PIC-adressering als alleen-lezen, in plaats van het te laden in de
proloog voor elke functie. Het runtime-systeem is verantwoordelijk voor het initialiseren hiervan
registreer met een geschikte waarde voordat de uitvoering begint.

-mpic-register=reg
Specificeer het register dat moet worden gebruikt voor PIC-adressering. Voor standaard PIC-basisbehuizing, de
standaard is elk geschikt register bepaald door de compiler. Voor enkele PIC-basisbehuizing,
de standaard is R9 als het doel op EABI is gebaseerd of stapelcontrole is ingeschakeld, anders
standaard is R10.

-mpic-data-is-tekst-relatief
Neem aan dat elk gegevenssegment bij het laden relatief is ten opzichte van het tekstsegment. Daarom,
het staat het adresseren van gegevens toe met behulp van pc-relatieve bewerkingen. Deze optie is standaard ingeschakeld
voor andere doelen dan VxWorks RTP.

-mpoke-functie-naam
Schrijf de naam van elke functie in de tekstsectie, direct voorafgaand aan de functie
proloog. De gegenereerde code is vergelijkbaar met deze:

t0
.ascii "arm_poke_function_name", 0
.uitlijnen
t1
.woord 0xff000000 + (t1 - t0)
arm_poke_function_name
beweeg ip, sp
stmfd sp!, {fp, ip, lr, pc}
subfp, ip, #4

Bij het uitvoeren van een stack-backtrace kan de code de waarde van "pc" inspecteren die is opgeslagen op "fp +
0". Als de traceerfunctie dan kijkt naar locatie "pc - 12" en de bovenste 8 bits zijn
set, dan weten we dat er een functienaam direct hieraan voorafgaat
locatie en heeft de lengte "((pc[-3]) & 0xff000000)".

-duim
-marme
Kies tussen het genereren van code die wordt uitgevoerd in ARM- en Thumb-statussen. De standaard voor
de meeste configuraties zijn om code te genereren die wordt uitgevoerd in de ARM-status, maar de standaard
kan worden gewijzigd door GCC te configureren met de --met-modus=staat optie configureren.

-mtpcs-frame
Genereer een stapelframe dat voldoet aan de Thumb Procedure Call Standard voor:
alle niet-bladfuncties. (Een bladfunctie is er een die geen andere aanroept)
functies.) De standaardinstelling is -mno-tpcs-frame.

-mtpcs-blad-frame
Genereer een stapelframe dat voldoet aan de Thumb Procedure Call Standard voor:
alle bladfuncties. (Een bladfunctie is er een die geen andere functies aanroept.)
De standaard is -mno-apcs-blad-frame.

-mcallee-super-interworking
Geeft alle extern zichtbare functies in het bestand dat wordt gecompileerd een ARM-instructie
set header die overschakelt naar de Thumb-modus voordat de rest van de functie wordt uitgevoerd.
Hierdoor kunnen deze functies worden aangeroepen vanuit niet-interworking code. Deze optie is
niet geldig in AAPCS-configuraties omdat interworking standaard is ingeschakeld.

-mcaller-super-interworking
Hiermee kunnen oproepen via functieaanwijzers (inclusief virtuele functies) correct worden uitgevoerd
ongeacht of de doelcode is gecompileerd voor interworking of niet.
Er is een kleine overhead in de kosten van het uitvoeren van een functieaanwijzer als deze optie
is ingeschakeld. Deze optie is niet geldig in AAPCS-configuraties omdat interworking is
standaard ingeschakeld.

-mtp=naam
Geef het toegangsmodel op voor de lokale opslagaanwijzer van de thread. De geldige modellen zijn:
zacht, die oproepen genereert naar "__aeabi_read_tp", cp15, die de draad ophaalt
pointer rechtstreeks van "cp15" (ondersteund in de arm6k-architectuur), en auto, welke
gebruikt de best beschikbare methode voor de geselecteerde processor. De standaardinstelling is
auto.

-mtls-dialect=tongval
Geef het dialect op dat moet worden gebruikt voor toegang tot de lokale opslag van threads. Twee tongvals zijn
ondersteund---gnoe en gnu2. De gnoe dialect selecteert het originele GNU-schema voor
ondersteuning van lokale en wereldwijde dynamische TLS-modellen. De gnu2 dialect selecteert de GNU
descriptorschema, dat betere prestaties biedt voor gedeelde bibliotheken. de GNU
descriptorschema is compatibel met het oorspronkelijke schema, maar vereist wel nieuwe
assembler, linker en bibliotheekondersteuning. Initiële en lokale exec TLS-modellen zijn:
onaangetast door deze optie en gebruik altijd het oorspronkelijke schema.

-mword-verhuizingen
Genereer alleen absolute verplaatsingen op woordgrote waarden (dwz R_ARM_ABS32). Dit is
standaard ingeschakeld op doelen (uClinux, SymbianOS) waar de runtime loader oplegt
deze beperking, en wanneer? -fpic or -fPIC is gespecificeerd.

-mfix-cortex-m3-ldrd
Sommige Cortex-M3-kernen kunnen gegevenscorruptie veroorzaken wanneer "ldrd"-instructies met:
overlappende bestemmings- en basisregisters worden gebruikt. Deze optie vermijdt het genereren
deze instructies. Deze optie is standaard ingeschakeld wanneer: -mcpu=cortex-m3 is
gespecificeerd.

-munaligned-toegang
-mno-niet-uitgelijnde toegang
Schakelt het lezen en schrijven van 16- en 32-bits waarden van adressen in (of uit)
die niet 16- of 32-bits zijn uitgelijnd. Standaard is niet-uitgelijnde toegang voor iedereen uitgeschakeld
pre-ARMv6 en alle ARMv6-M-architecturen, en ingeschakeld voor alle andere architecturen. Indien
niet-uitgelijnde toegang is niet ingeschakeld, dan worden woorden in verpakte gegevensstructuren geopend a
byte tegelijk.

Het ARM-kenmerk "Tag_CPU_unaligned_access" is in het gegenereerde objectbestand ingesteld op:
waar of onwaar, afhankelijk van de instelling van deze optie. Indien niet-uitgelijnde toegang
is ingeschakeld, wordt ook het preprocessor-symbool "__ARM_FEATURE_UNALIGNED" gedefinieerd.

-mneon-voor-64bits
Maakt het gebruik van Neon mogelijk om scalaire 64-bits bewerkingen af ​​te handelen. Dit is standaard uitgeschakeld
omdat de kosten voor het verplaatsen van gegevens van kernregisters naar Neon hoog zijn.

-mslow-flash-gegevens
Neem aan dat het laden van gegevens uit Flash langzamer is dan het ophalen van instructies. daarom letterlijk
belasting wordt geminimaliseerd voor betere prestaties. Deze optie wordt alleen ondersteund wanneer:
compileren voor ARMv7 M-profiel en standaard uitgeschakeld.

-masm-syntaxis-verenigd
Neem aan dat inline assembler uniforme asm-syntaxis gebruikt. De standaard is momenteel uitgeschakeld
wat een verdeelde syntaxis inhoudt. Momenteel is deze optie alleen beschikbaar voor Thumb1 en
heeft geen effect op de ARM-status en Thumb2. Dit kan echter veranderen in toekomstige releases van
GCC. Verdeelde syntaxis moet als verouderd worden beschouwd.

-mbeperk-het
Beperkt het genereren van IT-blokken om te voldoen aan de regels van ARMv8. IT-blokken kunnen
bevatten slechts één enkele 16-bits instructie uit een selecte set instructies. Dit
optie is standaard ingeschakeld voor ARMv8 Thumb-modus.

-mprint-tune-info
Print CPU-afstemmingsinformatie als commentaar in het assembler-bestand. Dit is een gebruikte optie
alleen voor regressietesten van de compiler en niet bedoeld voor normaal gebruik in
code compileren. Deze optie is standaard uitgeschakeld.

AVR Opties

Deze opties zijn gedefinieerd voor AVR-implementaties:

-mmcu=MCU
Specificeer Atmel AVR-instructiesetarchitecturen (ISA) of MCU-type.

De standaard voor deze optie is@tie{}avr2.

GCC ondersteunt de volgende AVR-apparaten en ISA's:

"avr2"
"Klassieke" apparaten met maximaal 8@tie{}KiB programmageheugen. MCU@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
"Klassieke" apparaten met maximaal 8@tie{}KiB programmageheugen en met de "MOVW"
instructie. MCU@tie{}= "ata5272", "ata6616c", "attiny13", "attiny13a",
"attiny2313", "attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261",
"attiny261a", "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny441",
"attiny45", "attiny461", "attiny461a", "attiny48", "attiny828", "attiny84",
"attiny84a", "attiny841", "attiny85", "attiny861", "attiny861a", "attiny87",
"attiny88", "at86rf401".

"avr3"
"Klassieke" apparaten met 16@tie{}KiB tot 64@tie{}KiB aan programmageheugen.
MCU@tie{}= "at43usb355", "at76c711".

"avr31"
"Klassieke" apparaten met 128@tie{}KiB aan programmageheugen. MCU@tie{}= "atmega103",
"at43usb320".

"avr35"
"Klassieke" apparaten met 16@tie{}KiB tot 64@tie{}KiB aan programmageheugen en met
de instructie "MOVW". MCU@tie{}= "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".

"avr4"
"Verbeterde" apparaten met maximaal 8@tie{}KiB aan programmageheugen. MCU@tie{}= "ata6285",
"ata6286", "ata6289", "ata6612c", "atmega48", "atmega48a", "atmega48p",
"atmega48pa", "atmega8", "atmega8a", "atmega8hva", "atmega8515", "atmega8535",
"atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2",
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
"Verbeterde" apparaten met 16@tie{}KiB tot 64@tie{}KiB aan programmageheugen.
MCU@tie{}= "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831",
"ata6613c", "ata6614q", "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
"atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
"atmega162", "atmega163", "atmega164a", "atmega164p", "atmega164pa", "atmega165",
"atmega165a", "atmega165p", "atmega165pa", "atmega168", "atmega168a",
"atmega168p", "atmega168pa", "atmega169", "atmega169a", "atmega169p",
"atmega169pa", "atmega32", "atmega32a", "atmega32c1", "atmega32hvb",
"atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
"atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega325pa", "atmega3250", "atmega3250a", "atmega3250p",
"atmega3250pa", "atmega328", "atmega328p", "atmega329", "atmega329a",
"atmega329p", "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
"atmega3290pa", "atmega406", "atmega64", "atmega64a", "atmega64c1", "atmega64hve",
"atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640", "atmega644",
"atmega644a", "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
"atmega645a", "atmega645p", "atmega6450", "atmega6450a", "atmega6450p",
"atmega649", "atmega649a", "atmega649p", "atmega6490", "atmega6490a",
"atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
"at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
"Verbeterde" apparaten met 128@tie{}KiB aan programmageheugen. MCU@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".

"avr6"
"Verbeterde" apparaten met 3-byte pc, dwz met meer dan 128@tie{}KiB aan programma
geheugen. MCU@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".

"avrxmega2"
"XMEGA"-apparaten met meer dan 8@tie{}KiB en maximaal 64@tie{}KiB aan programmageheugen.
MCU@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".

"avrxmega4"
"XMEGA"-apparaten met meer dan 64@tie{}KiB en maximaal 128@tie{}KiB aan programma
geheugen. MCU@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5"
"XMEGA"-apparaten met meer dan 64@tie{}KiB en maximaal 128@tie{}KiB aan programma
geheugen en meer dan 64@tie{}KiB RAM. MCU@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
"XMEGA"-apparaten met meer dan 128@tie{}KiB aan programmageheugen. MCU@tie{}=
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".

"avrxmega7"
"XMEGA"-apparaten met meer dan 128@tie{}KiB aan programmageheugen en meer dan
64@tie{}KiB RAM. MCU@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

"avrtiny"
"KLEIN" Tiny core-apparaten met 512@tie{}B tot 4@tie{}KiB aan programmageheugen.
MCU@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".

"avr1"
Deze ISA wordt geïmplementeerd door de minimale AVR-kern en wordt alleen ondersteund voor assembler.
MCU@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumuleren-args
Verzamel uitgaande functieargumenten en verkrijg / geef de benodigde stapelruimte vrij voor:
uitgaande functieargumenten eenmaal in functieproloog/epiloog. Zonder deze optie,
uitgaande argumenten worden gepusht voordat een functie wordt aangeroepen en daarna gepopt.

Het opduiken van de argumenten na de functie-aanroep kan duur zijn op AVR, zodat:
het accumuleren van de stapelruimte kan leiden tot kleinere uitvoerbare bestanden omdat argumenten nodig zijn:
niet van de stapel worden verwijderd na zo'n functieaanroep.

Deze optie kan leiden tot een kleinere codegrootte voor functies die meerdere aanroepen uitvoeren naar:
functies die hun argumenten op de stapel krijgen, zoals aanroepen van printf-achtige functies.

-mbranch-kosten=kosten
Stel de filiaalkosten voor voorwaardelijke filiaalinstructies in op: kosten. Redelijke waarden
For kosten zijn kleine, niet-negatieve gehele getallen. De standaard filiaalkosten zijn 0.

-mcall-prologen
Functies prologen/epilogen worden uitgebreid als oproepen naar geschikte subroutines. Code
maat valt kleiner.

-mint8
Neem aan dat "int" een 8-bits geheel getal is. Dit heeft invloed op de maten van alle typen: een "char" is 1
byte, een "int" is 1 byte, een "long" is 2 bytes en "long long" is 4 bytes. Alsjeblieft
merk op dat deze optie niet voldoet aan de C-normen, maar resulteert in kleinere
code grootte.

-mn-flash=num
Neem aan dat het flashgeheugen een grootte heeft van num keer 64@tie{}KiB.

-mno-onderbreekt
Gegenereerde code is niet compatibel met hardware-interrupts. De codegrootte is kleiner.

-montspan
Probeer "CALL" resp. "JMP" instructie door de kortere "RCALL" resp. "RJMP"
instructie indien van toepassing. Instelling -montspan voegt gewoon de . toe --mlink-ontspan optie voor de
assembler's commandoregel en de --ontspannen optie naar de opdrachtregel van de linker.

Sprong-relaxatie wordt uitgevoerd door de linker omdat sprong-offsets niet eerder bekend zijn
code staat. Daarom is de assembler-code die door de compiler wordt gegenereerd hetzelfde,
maar de instructies in het uitvoerbare bestand kunnen verschillen van de instructies in de assembler
code.

Relaxen moet worden ingeschakeld als linkerstubs nodig zijn, zie de sectie over "EIND" en
linkerstompjes hieronder.

-mrmw
Neem aan dat het apparaat de Read-Modify-Write-instructies "XCH", "LAC", "LAS" ondersteunt
en "LAT".

-msp8
Behandel het stackpointerregister als een 8-bits register, dwz neem aan dat de hoge byte van
de stapelaanwijzer is nul. Over het algemeen hoeft u deze optie niet handmatig in te stellen.

Deze optie wordt intern door de compiler gebruikt om multilibs te selecteren en te bouwen voor
architecturen "avr2" en "avr25". Deze architecturen combineren apparaten met en zonder
"SPF". Voor elke andere instelling dan -mmcu=gem2 or -mmcu=gem25 het compilerstuurprogramma voegt toe:
of verwijdert deze optie uit de eigenlijke opdrachtregel van de compiler, omdat de compiler
weet dan of het apparaat of de architectuur een 8-bits stackpointer heeft en dus geen "SPH"
inschrijven of niet.

-mstrict-X
Gebruik adresregister "X" op een manier die door de hardware wordt voorgesteld. Dit betekent dat "X" is
alleen gebruikt in indirecte, post-increment of pre-decrement adressering.

Zonder deze optie kan het "X"-register op dezelfde manier worden gebruikt als "Y" of "Z", wat:
dan wordt geëmuleerd door aanvullende instructies. Bijvoorbeeld, een waarde laden met
"X+const" adressering met een kleine niet-negatieve "const < 64" naar een register Rn is
uitgevoerd als

adiw r26, const; X += constant
ld , X ; = *X
sbiw r26, const; X -= constant

-mtiny-stapel
Verander alleen de onderste 8@tie{}bits van de stackpointer.

-nodevicelib
Koppel niet met de apparaatspecifieke bibliotheek van AVR-LibC "libdev.a".

-Wadd-ruimte-omzetten
Waarschuw voor conversies tussen adresruimten in het geval dat het resulterende adres
ruimte is niet opgenomen in de inkomende adresruimte.

"EIND" en apparaten met meer dan 128 Ki bytes aan Flash

Pointers in de implementatie zijn 16@tie{}bits breed. Het adres van een functie of label
wordt weergegeven als woordadres, zodat indirecte sprongen en oproepen elke code kunnen targeten
adres in het bereik van 64@tie{}Ki-woorden.

Om indirect springen op apparaten met meer dan 128@tie{}Ki bytes van
programmageheugenruimte, is er een speciaal functieregister genaamd "EIND" dat dient als:
meest significante deel van het doeladres wanneer "EICALL" of "EIJMP" instructies zijn
gebruikt.

Indirecte sprongen en oproepen op deze apparaten worden als volgt afgehandeld door de compiler en zijn:
onderhevig aan enkele beperkingen:

* De compiler stelt nooit "EIND" in.

* De compiler gebruikt "EIND" impliciet in "EICALL"/"EIJMP"-instructies of leest
"EIND" direct om een ​​indirecte oproep/sprong na te bootsen door middel van een "RET"
instructie.

* De compiler gaat ervan uit dat "EIND" nooit verandert tijdens de opstartcode of tijdens de
sollicitatie. In het bijzonder wordt "EIND" niet opgeslagen/hersteld in functie of onderbreking
service routine proloog/epiloog.

* Voor indirecte aanroepen van functies en berekende goto genereert de linker stompjes. stompjes
worden ook wel springkussens genoemd trampolines. De indirecte oproep/sprong springt dus naar
zo'n stompje. De stub bevat een directe sprong naar het gewenste adres.

* Linker-relaxatie moet zijn ingeschakeld zodat de linker de stubs correct genereert
in alle situaties. Zie de compileroptie -montspan en de linker-optie --ontspannen.
Er zijn hoekgevallen waarbij de linker verondersteld wordt stubs te genereren, maar afbreekt
zonder ontspanning en zonder een handige foutmelding.

* Het standaard linkerscript is gerangschikt voor code met "EIND = 0". Als code wordt verondersteld
om te werken voor een setup met "EIND != 0", moet een aangepast linkerscript worden gebruikt om
om de secties waarvan de naam begint met ".trampolines" in het segment te plaatsen waar
"EIND" wijst naar.

* De opstartcode van libgcc stelt nooit "EIND" in. Merk op dat de opstartcode een blend is
van code van libgcc en AVR-LibC. Voor de impact van AVR-LibC op "EIND", zie de AVR-
LibC-gebruikershandleiding ("http://nongnu.org/avr-libc/user-manual/").

* Het is legitiem voor gebruikersspecifieke opstartcode om "EIND" vroeg in te stellen, bijvoorbeeld door:
middel van initialisatiecode in sectie ".init3". Dergelijke code wordt uitgevoerd voorafgaand aan:
algemene opstartcode die RAM initialiseert en constructors aanroept, maar na het stukje
opstartcode van AVR-LibC die "EIND" instelt op het segment waar de vectortabel zich bevindt
bevindt.

#erbij betrekken

statische leegte
__attribute__((sectie(".init3"),naked,used,no_instrument_function))
init3_set_eind (ongeldig)
{
__asm ​​vluchtig ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND) : "r24","geheugen");
}

Het symbool "__trampolines_start" wordt gedefinieerd in het linkerscript.

* Stubs worden automatisch gegenereerd door de linker als aan de volgende twee voorwaarden is voldaan:
leerde kennen:

-
(kort voor voortbrengen stompjes) graag zo:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
buiten het segment waar de stompen zich bevinden.

* De compiler zendt dergelijke "gs"-modifiers uit voor codelabels in de volgende situaties:

-
-
- -mcall-prologen>
opdrachtregeloptie.

-
tabellen kunt u de . specificeren -fno-jump-tafels opdrachtregeloptie.

-
-
* Springen naar niet-symbolische adressen zoals zo is niet ondersteund:

int hoofd (void)
{
/* Oproepfunctie op woordadres 0x2 */
retourneren ((int(*)(ongeldig)) 0x2)();
}

In plaats daarvan moet een stub worden ingesteld, dwz de functie moet worden aangeroepen via een symbool
("func_4" in het voorbeeld):

int hoofd (void)
{
extern int func_4 (ongeldig);

/* Oproepfunctie op byte-adres 0x4 */
retourneer func_4();
}

en de applicatie worden gekoppeld met -Wl,--defsym,func_4=0x4. Als alternatief, "func_4"
kan worden gedefinieerd in het linkerscript.

Behandeling van de "RAMPD", "RAMPX", "RAMPY" en "RAMPZ" speciale functieregisters

Sommige AVR-apparaten ondersteunen geheugens die groter zijn dan de 64@tie{}KiB-reeks die toegankelijk is
met 16-bits aanwijzers. Om toegang te krijgen tot geheugenlocaties buiten dit 64@tie{}KiB-bereik, moet de
inhoud van een "RAMP" register wordt gebruikt als hoog deel van het adres: De "X", "Y", "Z"
adresregister is aaneengeschakeld met de speciale functie "RAMPX", "RAMPY", "RAMPZ"
registreren, respectievelijk, om een ​​breed adres te krijgen. Evenzo wordt "RAMPD" gebruikt in combinatie met:
directe adressering.

* De opstartcode initialiseert de speciale functieregisters "RAMP" met nul.

* Als een AVR Genoemd Adres Spaties, genaamd adres ruimte anders dan generiek of "__flash" is
gebruikt, dan wordt "RAMPZ" ingesteld zoals nodig voor de operatie.

* Als het apparaat RAM groter dan 64@tie{}KiB ondersteunt en de compiler moet veranderen
"RAMPZ" om een ​​bewerking uit te voeren, wordt "RAMPZ" na de bewerking op nul teruggezet.

* Als het apparaat wordt geleverd met een specifiek "RAMP"-register, is de ISR-proloog/epiloog
bewaart/herstelt die SFR en initialiseert deze met nul in het geval dat de ISR-code zou kunnen
(impliciet) gebruik het.

* RAM groter dan 64@tie{}KiB wordt niet ondersteund door GCC voor AVR-doelen. Als je gebruikt
inline assembler om te lezen van locaties buiten het 16-bits adresbereik en te wijzigen
een van de "RAMP"-registers, moet u deze na de toegang op nul resetten.

Ingebouwde AVR-macro's

GCC definieert verschillende ingebouwde macro's zodat de gebruikerscode kan testen op aanwezigheid of
afwezigheid van kenmerken. Bijna alle van de volgende ingebouwde macro's zijn afgeleid van het apparaat
mogelijkheden en dus getriggerd door de -mmcu= opdrachtregeloptie.

Voor nog meer AVR-specifieke ingebouwde macro's zie AVR Genoemd Adres Ruimtes en AVR Ingebouwd
Functies.

"__AVR_ARCH__"
Ingebouwde macro die wordt omgezet in een decimaal getal dat de architectuur identificeert en
hangt af van de -mmcu=MCU optie. Mogelijke waarden zijn:

2, 25, 3, 31, 35, 4, 5, 51, 6

For MCU= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",

respectievelijk en

100, 102, 104, 105, 106, 107

For MCU="avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
respectievelijk. Indien MCU een apparaat specificeert, wordt deze ingebouwde macro dienovereenkomstig ingesteld. Voor
bijvoorbeeld, met -mmcu=atmega8 de macro is gedefinieerd op 4.

"__AVR_Apparaat__"
omgeving -mmcu=apparaat definieert deze ingebouwde macro die de naam van het apparaat weerspiegelt. Voor
voorbeeld, -mmcu=atmega8 definieert de ingebouwde macro "__AVR_ATmega8__", -mmcu=attiny261a
definieert "__AVR_ATtiny261A__", enz.

De namen van de ingebouwde macro's volgen het schema "__AVR_Apparaat__" WAAR Apparaat is de
apparaatnaam zoals in de gebruikershandleiding van de AVR. Het verschil tussen Apparaat in de ingebouwde
macro en apparaat in -mmcu=apparaat is dat de laatste altijd kleine letters zijn.

If apparaat is geen apparaat maar slechts een kernarchitectuur zoals avr51, deze macro is niet
gedefinieerd.

"__AVR_DEVICE_NAME__"
omgeving -mmcu=apparaat definieert deze ingebouwde macro naar de naam van het apparaat. Bijvoorbeeld,
Met -mmcu=atmega8 de macro is gedefinieerd als "atmega8".

If apparaat is geen apparaat maar slechts een kernarchitectuur zoals avr51, deze macro is niet
gedefinieerd.

"__AVR_XMEGA__"
Het apparaat / de architectuur behoort tot de XMEGA-familie van apparaten.

"__AVR_HAVE_ELPM__"
Het apparaat heeft de instructie "ELPM".

"__AVR_HAVE_ELPMX__"
Het apparaat heeft de "ELPM Rn,Z" en "ELPM Rn,Z+" instructies.

"__AVR_HAVE_MOVW__"
Het apparaat heeft de "MOVW"-instructie om 16-bits register-registerbewegingen uit te voeren.

"__AVR_HAVE_LPMX__"
Het apparaat heeft de "LPM Rn,Z" en "LPM Rn,Z+" instructies.

"__AVR_HAVE_MUL__"
Het apparaat heeft een hardwaremultiplier.

"__AVR_HAVE_JMP_CALL__"
Het apparaat heeft de instructies "JMP" en "CALL". Dit is het geval voor apparaten met:
minstens 16@tie{}KiB aan programmageheugen.

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
Het apparaat heeft de instructies "EIJMP" en "EICALL". Dit is het geval voor apparaten
met meer dan 128@tie{}KiB aan programmageheugen. Dit betekent ook dat het programma
teller (PC) is 3@tie{}bytes breed.

"__AVR_2_BYTE_PC__"
De programmateller (PC) is 2@tie{}bytes breed. Dit is het geval voor apparaten met maximaal
128@tie{}KiB van programmageheugen.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Het stack pointer (SP) register wordt behandeld als 8-bits respectievelijk 16-bits register door
de compiler. De definitie van deze macro's wordt beïnvloed door: -mtiny-stapel.

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
Het apparaat heeft het speciale functieregister SPH (high part of stack pointer) of heeft
respectievelijk een 8-bits stackpointer. De definitie van deze macro's wordt beïnvloed door:
-mmcu= en in het geval van -mmcu=gem2 en -mmcu=gem25 ook door -msp8.

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Het apparaat heeft het speciale functieregister "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
respectievelijk.

"__NO_INTERRUPTS__"
Deze macro weerspiegelt de -mno-onderbreekt opdrachtregeloptie.

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Sommige AVR-apparaten (AT90S8515, ATmega103) mogen 32-bits instructies niet overslaan vanwege a
hardwarefout. Instructies voor het overslaan zijn "SBRS", "SBRC", "SBIS", "SBIC" en "CPSE".
De tweede macro wordt alleen gedefinieerd als "__AVR_HAVE_JMP_CALL__" ook is ingesteld.

"__AVR_ISA_RMW__"
Het apparaat heeft Read-Modify-Write-instructies (XCH, LAC, LAS en LAT).

"__AVR_SFR_OFFSET__=compenseren"
Instructies die I/O-registers voor speciale functies rechtstreeks kunnen adresseren, zoals "IN",
"OUT", "SBI", enz. kunnen een ander adres gebruiken alsof het wordt geadresseerd door een instructie aan
toegang krijgen tot RAM zoals "LD" of "STS". Deze offset is afhankelijk van de apparaatarchitectuur en heeft
af te trekken van het RAM-adres om het respectievelijke I/O@tie{}adres te krijgen.

"__WITH_AVRLIBC__"
De compiler is geconfigureerd om samen met AVR-Libc te worden gebruikt. Zie de --met-avrlibc
optie configureren.

Zwartvintonijn Opties

-mcpu=cpu[-sirene]
Specificeert de naam van de doel-Blackfin-processor. Momenteel, cpu kan een van zijn
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.

De optionele sirene specificeert de siliciumrevisie van het doel Blackfin
verwerker. Alle beschikbare oplossingen voor de beoogde siliciumrevisie zijn ingeschakeld.
If sirene is geen, zijn er geen tijdelijke oplossingen ingeschakeld. Indien sirene is elke, alle
tijdelijke oplossingen voor de beoogde processor zijn ingeschakeld. De macro "__SILICON_REVISION__"
wordt gedefinieerd als twee hexadecimale cijfers die de grote en kleine getallen in de vertegenwoordigen
siliconen revisie. Indien sirene is geen, is de "__SILICON_REVISION__" niet gedefinieerd.
If sirene is elke, is de "__SILICON_REVISION__" gedefinieerd als 0xffff. Als dit
optioneel sirene niet wordt gebruikt, gaat GCC uit van de laatst bekende siliciumrevisie van de
gerichte Blackfin-processor.

GCC definieert een preprocessor-macro voor de opgegeven cpu. Voor de bfin-elf gereedschapsketting,
deze optie zorgt ervoor dat de hardware BSP geleverd door libgloss wordt gekoppeld als -msim is
niet gegeven.

Zonder deze optie, bf532 wordt standaard als processor gebruikt.

Houd er rekening mee dat ondersteuning voor bf561 is onvolledig. Voor bf561, alleen de preprocessormacro is
gedefinieerd.

-msim
Specificeert dat het programma op de simulator wordt uitgevoerd. Dit zorgt ervoor dat de simulator
BSP geleverd door libgloss om in te linken. Deze optie heeft alleen effect voor: bfin-elf
gereedschapsketting. Bepaalde andere opties, zoals: -midden-gedeelde-bibliotheek en -mfdpic, impliceren
-msim.

-momit-blad-frame-aanwijzer
Bewaar de framepointer niet in een register voor bladfuncties. Dit vermijdt de
instructies om framepointers op te slaan, in te stellen en te herstellen en maakt een extra register aan
beschikbaar in bladfuncties. De optie -fomit-frame-aanwijzer verwijdert het frame
aanwijzer voor alle functies, wat het debuggen moeilijker kan maken.

-mspecld-anomalie
Indien ingeschakeld, zorgt de compiler ervoor dat de gegenereerde code geen
speculatieve belastingen na springinstructies. Als deze optie wordt gebruikt,
"__WORKAROUND_SPECULATIVE_LOADS" is gedefinieerd.

-mno-specld-anomalie
Genereer geen extra code om speculatieve belastingen te voorkomen.

-mcsync-afwijking
Indien ingeschakeld, zorgt de compiler ervoor dat de gegenereerde code geen CSYNC of . bevat
SSYNC-instructies te snel na voorwaardelijke vertakkingen. Als deze optie wordt gebruikt,
"__WORKAROUND_SPECULATIVE_SYNCS" is gedefinieerd.

-mno-csync-anomalie
Genereer geen extra code om te voorkomen dat er ook CSYNC- of SSYNC-instructies optreden
kort na een voorwaardelijke vertakking.

-mlow-64k
Indien ingeschakeld, is de compiler vrij om te profiteren van de wetenschap dat de hele
programma past in de lage 64k geheugen.

-mno-laag-64k
Neem aan dat het programma willekeurig groot is. Dit is de standaardinstelling.

-mstack-check-l1
Voer stapelcontrole uit met behulp van informatie die door de uClinux . in het L1-kladblokgeheugen is geplaatst
kernel.

-midden-gedeelde-bibliotheek
Genereer code die gedeelde bibliotheken ondersteunt via de bibliotheek-ID-methode. Dit maakt het mogelijk
voor uitvoering ter plaatse en gedeelde bibliotheken in een omgeving zonder virtueel geheugen
beheer. Deze optie houdt in: -fPIC. Met een bfin-elf doel, deze optie houdt in:
-msim.

-mno-id-gedeelde-bibliotheek
Genereer code die er niet van uitgaat dat ID-gebaseerde gedeelde bibliotheken worden gebruikt. Dit is
de standaard.

-mleaf-id-gedeelde-bibliotheek
Genereer code die gedeelde bibliotheken ondersteunt via de bibliotheek-ID-methode, maar veronderstelt:
dat deze bibliotheek of het uitvoerbare bestand niet wordt gekoppeld aan andere gedeelde ID-bibliotheken.
Hierdoor kan de compiler snellere code gebruiken voor sprongen en oproepen.

-mno-blad-id-gedeelde-bibliotheek
Ga er niet vanuit dat de code die wordt gecompileerd niet zal linken naar gedeelde ID-bibliotheken.
Langzamere code wordt gegenereerd voor jump- en call-insns.

-mshared-bibliotheek-id=n
Specificeert het identificatienummer van de op ID gebaseerde gedeelde bibliotheek die wordt gecompileerd.
Het specificeren van een waarde van 0 genereert compactere code; specificeren van andere waarden krachten
de toewijzing van dat nummer aan de huidige bibliotheek, maar is niet meer ruimte- of tijd-
efficiënter is dan deze optie weg te laten.

-msep-gegevens
Genereer code waarmee het gegevenssegment zich in een ander geheugengebied kan bevinden
uit het tekstsegment. Dit maakt het mogelijk om op zijn plaats uit te voeren in een omgeving zonder
virtueel geheugenbeheer door verplaatsingen tegen de tekstsectie te elimineren.

-mno-sep-gegevens
Genereer code die ervan uitgaat dat het gegevenssegment het tekstsegment volgt. Dit is
de standaard.

-mlong-oproepen
-mno-lange gesprekken
Vertelt de compiler om functieaanroepen uit te voeren door eerst het adres van de te laden
functie in een register en voert vervolgens een subroutine-aanroep uit op dit register. Dit
schakelaar is nodig als de doelfunctie buiten het 24-bits adresbereik van ligt
de op offset gebaseerde versie van subroutine-oproepinstructie.

Deze functie is standaard niet ingeschakeld. Specificeren -mno-lange gesprekken herstelt de
standaard gedrag. Merk op dat deze schakelaars geen effect hebben op hoe de compiler genereert
code om functieaanroepen af ​​te handelen via functiewijzers.

-mfast-fp
Koppeling met de snelle drijvende-kommabibliotheek. Deze bibliotheek versoepelt een deel van de IEEE
regels voor drijvende-kommastandaard voor het controleren van invoer tegen Not-a-Number (NAN), in de
belang van prestatie.

-minline-plt
Inline inschakelen van PLT-vermeldingen in functieaanroepen naar functies waarvan niet bekend is dat ze
lokaal binden. Het heeft geen effect zonder -mfdpic.

-mmulticore
Bouw een zelfstandige applicatie voor multicore Blackfin-processors. Deze optie veroorzaakt
juiste startbestanden en linkscripts die multicore ondersteunen die moeten worden gebruikt, en definieert de
macro "__BFIN_MULTICORE". Het kan alleen worden gebruikt met -mcpu=bf561[-sirene].

Deze optie kan worden gebruikt met: -mcore or -mcoreb, die de ene applicatie selecteert
per core programmeermodel. Zonder -mcore or -mcoreb
een enkelvoudig/dual-core programmeermodel wordt gebruikt. In dit model is de belangrijkste
functie van Core B moet worden genoemd als "coreb_main".

Als deze optie niet wordt gebruikt, wordt het single-core applicatieprogrammeermodel gebruikt.

-mcore
Bouw een standalone applicatie voor Core A van BF561 bij gebruik van de one-application-per-
kern programmeermodel. De juiste startbestanden en linkscripts worden gebruikt om Core te ondersteunen
A, en de macro "__BFIN_COREA" is gedefinieerd. Deze optie kan alleen worden gebruikt in
combinatie met -mmulticore.

-mcoreb
Bouw een standalone applicatie voor Core B van BF561 bij gebruik van de one-application-per-
kern programmeermodel. De juiste startbestanden en linkscripts worden gebruikt om Core te ondersteunen
B, en de macro "__BFIN_COREB" is gedefinieerd. Wanneer deze optie wordt gebruikt, "coreb_main"
moet worden gebruikt in plaats van "hoofd". Deze optie kan alleen worden gebruikt in combinatie met:
-mmulticore.

-msdram
Bouw een standalone applicatie voor SDRAM. Er worden juiste startbestanden en linkscripts gebruikt
om de toepassing in SDRAM te plaatsen, en de macro "__BFIN_SDRAM" is gedefinieerd. De
loader moet SDRAM initialiseren voordat de applicatie wordt geladen.

-micplb
Stel dat ICPLB's tijdens runtime zijn ingeschakeld. Dit heeft effect op bepaalde anomalie
tijdelijke oplossingen. Voor Linux-doelen wordt standaard aangenomen dat ICPLB's zijn ingeschakeld; voor
standalone toepassingen is de standaard uitgeschakeld.

C6X Opties

-maart=naam
Dit specificeert de naam van de doelarchitectuur. GCC gebruikt deze naam om te bepalen:
wat voor soort instructies het kan uitzenden bij het genereren van assemblagecode. toegestaan
namen zijn: c62x, c64x, c64x+, c67x, c67x+, c674x.

-mbig-endian
Genereer code voor een big-endian doelwit.

-mlittle-endian
Genereer code voor een klein endian doelwit. Dit is de standaardinstelling.

-msim
Kies opstartbestanden en linkerscript die geschikt zijn voor de simulator.

-msdata=standaard
Zet kleine globale en statische gegevens in de sectie ".neardata", waarnaar wordt verwezen door
registreer "B14". Zet kleine niet-geïnitialiseerde globale en statische gegevens in de sectie ".bss",
die grenst aan de sectie ".neardata". Zet kleine alleen-lezen gegevens in de
sectie ".rodata". De overeenkomstige secties die worden gebruikt voor grote hoeveelheden gegevens zijn:
".fardata", ".far" en ".const".

-msdata=alles
Plaats alle gegevens, niet alleen kleine objecten, in de secties die zijn gereserveerd voor kleine gegevens, en
gebruik adressering ten opzichte van het "B14"-register om ze te openen.

-msdata=geen
Maak geen gebruik van de secties die zijn gereserveerd voor kleine gegevens en gebruik absolute adressen om
toegang tot alle gegevens. Zet alle geïnitialiseerde globale en statische gegevens in de ".fardata"
sectie en alle niet-geïnitialiseerde gegevens in de sectie ".far". Zet alle constante gegevens in
het gedeelte ".const".

CRIS Opties

Deze opties zijn specifiek gedefinieerd voor de CRIS-poorten.

-maart=architectuur-type
-mcpu=architectuur-type
Genereer code voor de opgegeven architectuur. De keuzes voor architectuur-type zijn
v3, v8 en v10 voor respectievelijk ETRAX 4, ETRAX 100 en ETRAX 100 LX. Standaard is v0
behalve voor cris-axis-linux-gnu, waar de standaard is v10.

-mtune=architectuur-type
Stem af op architectuur-type alles wat van toepassing is over de gegenereerde code, behalve:
de ABI en de set beschikbare instructies. De keuzes voor architectuur-type zijn
hetzelfde als voor -maart=architectuur-type.

-mmax-stackframe=n
Waarschuwen wanneer het stapelframe van een functie groter is dan n bytes.

-metrax4
-metrax100
De opties -metrax4 en -metrax100 zijn synoniemen voor -maart=v3 en -maart=v8
respectievelijk.

-mmul-bug-oplossing
-mno-mul-bug-oplossing
Omzeil een bug in de instructies "muls" en "mulu" voor CPU-modellen waar het
is van toepassing. Deze optie is standaard actief.

-mpdebug
Schakel CRIS-specifieke uitgebreide debug-gerelateerde informatie in de assembly-code in. Dit
optie heeft ook het effect van het uitschakelen van de #NO_APP geformatteerde code-indicator naar de
assembler aan het begin van het montagebestand.

-mcc-init
Gebruik geen conditiecoderesultaten van eerdere instructies; altijd uitzenden vergelijken en
testinstructies voor gebruik van conditiecodes.

-mno-bijwerkingen
Geef geen instructies met bijwerkingen in andere adresseringsmodi dan post-
toename.

-mstack-uitlijnen
-mno-stack-uitlijnen
-mdata-uitlijnen
-mno-gegevens-uitlijnen
-mconst-uitlijnen
-mno-const-uitlijnen
Deze opties (Nee- opties) regelen (opstellingen elimineren) voor het stapelframe,
individuele gegevens en constanten die moeten worden uitgelijnd voor de maximale grootte van enkele gegevenstoegang
voor het gekozen CPU-model. De standaardinstelling is om 32-bits uitlijning te regelen. ABI
details zoals structuurlay-out worden niet beïnvloed door deze opties.

-m32-bit
-m16-bit
-m8-bit
Net als bij de stack-data- en const-align-opties hierboven, zorgen deze opties voor:
stapelframe, beschrijfbare gegevens en constanten om alle 32-bits, 16-bits of 8-bits uitgelijnd te zijn.
De standaardinstelling is 32-bits uitlijning.

-mno-proloog-epiloog
-mproloog-epiloog
met -mno-proloog-epiloog, de normale functie proloog en epiloog die zijn opgezet
de stapelframes worden weggelaten en er zijn geen retourinstructies of retourreeksen
gegenereerd in de code. Gebruik deze optie alleen in combinatie met visuele inspectie van de
gecompileerde code: er worden geen waarschuwingen of fouten gegenereerd wanneer aanroep opgeslagen registers moeten worden
opgeslagen, of er moet opslag voor lokale variabelen worden toegewezen.

-mno-gotplt
-mgotplt
met -fpic en -fPIC, genereer (genereer) geen instructiereeksen die worden geladen
adressen voor functies uit het PLT-gedeelte van de GOT in plaats van (traditioneel op andere)
architecturen) oproepen naar de PLT. De standaard is -mgotplt.

-melf
Legacy no-op optie alleen herkend met de cris-axis-elf en cris-axis-linux-gnu
targets.

-mlinux
Legacy no-op optie alleen herkend met het cris-axis-linux-gnu doel.

-sim
Deze optie, herkend voor de cris-axis-elf, zorgt voor een koppeling met input-output
functies uit een simulatorbibliotheek. Code, geïnitialiseerde gegevens en nul geïnitialiseerde gegevens
worden achtereenvolgens toegewezen.

-sim2
Like -sim, maar geef linkeropties door om geïnitialiseerde gegevens te lokaliseren op 0x40000000 en nul-
geïnitialiseerde gegevens op 0x80000000.

CR16 Opties

Deze opties zijn specifiek gedefinieerd voor de CR16-poorten.

-mmac
Schakel het gebruik van instructies voor meervoudig accumuleren in. Standaard uitgeschakeld.

-mcr16cplus
-mcr16c
Genereer code voor CR16C- of CR16C+-architectuur. CR16C+-architectuur is standaard.

-msim
Koppelt de bibliotheek libsim.a die compatibel is met simulator. Van toepassing op ELF
alleen compiler.

-mint32
Kies integer type als 32-bits breed.

-mbit-ops
Genereert "sbit"/"cbit" instructies voor bitmanipulaties.

-mdata-model=model
Kies een datamodel. De keuzes voor model zijn in de buurt, ver or Medium. Medium is standaard.
Echter, ver is niet geldig met -mcr16c, aangezien de CR16C-architectuur de
ver datamodel.

Darwin Opties

Deze opties zijn gedefinieerd voor alle architecturen met het Darwin-besturingssysteem.

FSF GCC op Darwin maakt geen "dikke" objectbestanden; het maakt een objectbestand aan voor de
enkele architectuur waarop GCC is gebouwd. Apple's GCC op Darwin maakt "vet"
bestanden indien meerdere -boog opties worden gebruikt; het doet dit door de compiler of linker uit te voeren
meerdere keren en voeg de resultaten samen met lipo.

Het subtype van het aangemaakte bestand (zoals ppc7400 or ppc970 or i686) wordt bepaald door de
vlaggen die de ISA specificeren waarop GCC zich richt, zoals -mcpu or -maart. De
-force_cpusubtype_ALL optie kan worden gebruikt om dit te overschrijven.

De Darwin-tools variëren in hun gedrag wanneer ze worden gepresenteerd met een ISA-mismatch. De
assembler, as, staat alleen het gebruik van instructies toe die geldig zijn voor het subtype van de
bestand dat het genereert, dus u kunt geen 64-bits instructies in a . plaatsen ppc750 object bestand. De
linker voor gedeelde bibliotheken, /usr/bin/libtool, mislukt en drukt een fout af als daarom wordt gevraagd
maak een gedeelde bibliotheek met een minder beperkend subtype dan de invoerbestanden (voor
bijvoorbeeld, proberen om een ppc970 objectbestand in a ppc7400 bibliotheek). De linker voor
uitvoerbare bestanden, ld, geeft stilletjes het uitvoerbare bestand het meest beperkende subtype van elk van zijn
invoerbestanden.

-Fdir
Voeg de framework-directory toe dir naar het hoofd van de lijst met te doorzoeken mappen
voor header-bestanden. Deze mappen zijn verweven met die gespecificeerd door: -I
opties en worden gescand in een volgorde van links naar rechts.

Een framework directory is een directory met frameworks erin. Een raamwerk is een
map met a Headers en / of PrivéHeaders directory die er direct in zit dat
eindigt in .kader. De naam van een framework is de naam van deze map exclusief
de .kader. Headers die aan het framework zijn gekoppeld, zijn te vinden in een van die twee
mappen, met Headers eerst wordt gezocht. Een deelraamwerk is een raamwerk
directory die zich in een framework's . bevindt Frameworks map. Inclusief van subframe
headers kunnen alleen voorkomen in een header van een raamwerk dat het subraamwerk bevat, of
in een subframework-header van een broer of zus. Twee subframeworks zijn broers en zussen als ze voorkomen in de
hetzelfde kader. Een deelraamwerk mag niet dezelfde naam hebben als een raamwerk; een
waarschuwing wordt gegeven als deze wordt geschonden. Momenteel kan een subframe niet hebben
subframes; in de toekomst kan het mechanisme worden uitgebreid om dit te ondersteunen. De
standaardkaders zijn te vinden in: / System / Library / Frameworks en
/ Library / Frameworks. Een voorbeeld van include ziet eruit als "#include ",
WAAR Achtergrond geeft de naam van het raamwerk aan en kop.h is te vinden in de
PrivéHeaders or Headers directory.

-iframeworkdir
Like -F behalve dat de directory wordt behandeld als een systeemdirectory. Het grootste verschil
tussen dit -iframework en -F is dat met? -iframework de compiler waarschuwt niet
over constructies in header-bestanden gevonden via dir. Deze optie is geldig
alleen voor de C-talenfamilie.

-gespuugd
Verzend foutopsporingsinformatie voor symbolen die worden gebruikt. Voor steek debugging formaat,
dit maakt het mogelijk -feliminate-ongebruikte-debug-symbolen. Dit is standaard AAN.

-vol
Verzend foutopsporingsinformatie voor alle symbolen en typen.

-mmacosx-versie-min=versie
De vroegste versie van MacOS X waarop dit uitvoerbare bestand zal draaien, is: versie. Typisch
waarden van versie omvatten 10.1, 10.2 en 10.3.9.

Als de compiler is gebouwd om standaard de systeemheaders te gebruiken, dan is de standaard voor
deze optie is de systeemversie waarop de compiler draait, anders is de
standaard is om keuzes te maken die compatibel zijn met zoveel systemen en codebases als
mogelijk.

-mkernel
Schakel de kernelontwikkelingsmodus in. De -mkernel optiesets -statisch, -fno-gemeenschappelijk,
-fno-gebruik-cxa-atexit, -fno-uitzonderingen, -fno-niet-oproep-uitzonderingen, -fapple-kext,
-fno-zwak en -fno-rtti waar van toepassing. Deze modus stelt ook in -mno-altivec,
-msoft-zweven, -fno-ingebouwd en -mlong-tak voor PowerPC-doelen.

-moon-byte-bool
Overschrijf de standaardwaarden voor "bool" zodat "sizeof(bool)==1". Standaard "sizeof(bool)"
is 4 bij het compileren voor Darwin/PowerPC en 1 bij het compileren voor Darwin/x86, dus dit
optie heeft geen effect op x86.

Waarschuwing: De -moon-byte-bool switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Het gebruik van deze schakelaar vereist mogelijk:
hercompileren van alle andere modules in een programma, inclusief systeembibliotheken. Gebruik dit
switch om te voldoen aan een niet-standaard datamodel.

-mfix-en-continue
-ffix-en-continue
-findirect-gegevens
Genereer code die geschikt is voor snelle doorlooptijdontwikkeling, zoals om GDB in staat te stellen:
dynamisch laden .o bestanden in reeds lopende programma's. -findirect-gegevens en
-ffix-en-continue zijn bedoeld voor achterwaartse compatibiliteit.

-alle_laden
Laadt alle leden van statische archiefbibliotheken. zie man ld(1) voor meer informatie.

-arch_errors_fataal
Zorg ervoor dat de fouten die te maken hebben met bestanden met de verkeerde architectuur fataal zijn.

-bind_at_load
Zorgt ervoor dat het uitvoerbestand zodanig wordt gemarkeerd dat de dynamische linker alles bindt
ongedefinieerde verwijzingen wanneer het bestand wordt geladen of gestart.

-bundel
Produceer een Mach-o-bundelformaatbestand. zie man ld(1) voor meer informatie.

-bundel_lader uitvoerbaar
Deze optie specificeert de uitvoerbaar waarmee het build-uitvoerbestand wordt geladen
gekoppeld. zie man ld(1) voor meer informatie.

-dynamische lib
Wanneer deze optie wordt doorgegeven, produceert GCC een dynamische bibliotheek in plaats van een uitvoerbaar bestand wanneer:
koppelen, met behulp van de Darwin libtool opdracht.

-force_cpusubtype_ALL
Dit zorgt ervoor dat het uitvoerbestand van GCC de ALLE subtype, in plaats van een gecontroleerd door
de -mcpu or -maart optie.

-allowable_client klantnaam
-klantnaam
-compatibiliteit_versie
-huidige versie
-dode_strip
-afhankelijkheidsbestand
-dylib_bestand
-dylinker_installatienaam
-dynamisch
-geëxporteerde_symbols_list
-bestandslijst
-flat_naamruimte
-force_flat_naamruimte
-headerpad_max_install_names
-afbeelding_basis
-in het
-installatienaam
-keep_private_externs
-multi_module
-vermenigvuldig_gedefinieerd
-vermenigvuldig_gedefinieerd_ongebruikt
-noall_load
-no_dead_strip_inits_and_terms
-nofixvoorbinding
-geenmultidefs
-niet voorbinden
-neuslinkedit
-pagezero_size
-voorbinden
-prebind_all_twolevel_modules
-private_bundel
-read_only_relocs
-seks uitlijnen
-sectieobjectsymbolen
-waarom?
-seg1adr
-secreteren
-sectieobjectsymbolen
-sectorder
-segadr
-segs_read_only_adr
-segs_read_write_adr
-seg_addr_tabel
-seg_addr_tabel_bestandsnaam
-seglinkedit
-segrot
-segs_read_only_adr
-segs_read_write_adr
-enkele_module
-statisch
-sub_bibliotheek
-sub_paraplu
-tweeniveau_naamruimte
-paraplu
-onbepaald
-niet-geëxporteerde_symbolen_lijst
-zwakke_referentie_mismatches
-wat is geladen
Deze opties worden doorgegeven aan de Darwin-linker. De Darwin linker man-pagina beschrijft:
ze in detail.

December Alpha Opties

Deze -m opties zijn gedefinieerd voor de DEC Alpha-implementaties:

-mno-soft-float
-msoft-zweven
Gebruik (niet gebruiken) de hardware drijvende-komma-instructies voor drijvende-komma
activiteiten. Wanneer -msoft-zweven is gespecificeerd, functioneert in libgcc.a worden gebruikt om te presteren
drijvende-kommabewerkingen. Tenzij ze worden vervangen door routines die de
drijvende-kommabewerkingen, of zodanig gecompileerd dat dergelijke emulaties worden aangeroepen
routines, geven deze routines drijvende-kommabewerkingen uit. Als je aan het compileren bent voor
een alfa zonder drijvende-kommabewerkingen, moet u ervoor zorgen dat de bibliotheek is gebouwd
om ze niet te bellen.

Merk op dat Alpha-implementaties zonder drijvende-kommabewerkingen moeten hebben:
drijvende-kommaregisters.

-mfp-reg
-mno-fp-regs
Genereer code die gebruikmaakt (niet gebruikt) van de registerset met drijvende komma. -mno-fp-regs
impliceert -msoft-zweven. Als de registerset met drijvende komma niet wordt gebruikt, wordt drijvende komma
operanden worden doorgegeven in gehele registers alsof het gehele getallen en drijvende komma's zijn
resultaten worden doorgegeven in $0 in plaats van $f0. Dit is een niet-standaard belvolgorde, dus
elke functie met een drijvende-kommaargument of retourwaarde aangeroepen door gecompileerde code
Met -mno-fp-regs moet ook met die optie worden gecompileerd.

Een typisch gebruik van deze optie is het bouwen van een kernel die geen gebruik maakt van, en dus
niet opslaan en herstellen, eventuele drijvende-kommaregisters.

-mieeee
De Alpha-architectuur implementeert drijvende-komma-hardware die is geoptimaliseerd voor maximale
uitvoering. Het is grotendeels compatibel met de IEEE floating-point-standaard. Echter,
voor volledige naleving is software-assistentie vereist. Deze optie genereert code
volledig IEEE-conforme code behalve dat de onnauwkeurige vlag wordt niet onderhouden (zie hieronder).
Als deze optie is ingeschakeld, wordt de preprocessor-macro "_IEEE_FP" gedefinieerd tijdens:
compilatie. De resulterende code is minder efficiënt, maar kan correct ondersteunen
gedenormaliseerde getallen en uitzonderlijke IEEE-waarden zoals niet-een-nummer en plus/minus
oneindigheid. Andere Alpha-compilers noemen deze optie -ieee_with_no_inexact.

-mieee-met-onnauwkeurig
Dit is zoals -mieeee behalve dat de gegenereerde code ook de IEEE . handhaaft onnauwkeurige vlag.
Als u deze optie inschakelt, wordt de gegenereerde code volledig conform IEEE . geïmplementeerd
wiskunde. Naast "_IEEE_FP" wordt "_IEEE_FP_EXACT" gedefinieerd als een preprocessormacro.
Bij sommige Alpha-implementaties kan de resulterende code aanzienlijk langzamer worden uitgevoerd dan
de code die standaard wordt gegenereerd. Omdat er maar heel weinig code is die afhangt van de
onnauwkeurige vlag, zou u deze optie normaal gesproken niet moeten specificeren. Andere Alpha-compilers noemen
deze optie -ieee_met_onnauwkeurig.

-mfp-trap-modus=val-modus
Deze optie bepaalt welke drijvende-komma-gerelateerde traps zijn ingeschakeld. andere alfa
compilers noemen deze optie -fptm val-modus. De valmodus kan worden ingesteld op een van de vier
waarden:

n Dit is de standaard (normale) instelling. De enige vallen die zijn ingeschakeld, zijn de
die niet in de software kunnen worden uitgeschakeld (bijv. deling door nul trap).

u Naast de vallen die zijn ingeschakeld door n, zijn ook onderstroomvangers ingeschakeld.

su Like u, maar de instructies zijn gemarkeerd om veilig te zijn voor het voltooien van de software (zie
Alpha-architectuurhandleiding voor details).

op Like su, maar onnauwkeurige vallen zijn ook ingeschakeld.

-mfp-afrondingsmodus=afrondingsmodus
Selecteert de IEEE-afrondingsmodus. Andere Alpha-compilers noemen deze optie -vrm
afrondingsmodus. De afrondingsmodus kan een van zijn:

n Normale IEEE-afrondingsmodus. Drijvende-kommagetallen worden afgerond naar het dichtstbijzijnde
machinenummer of naar het even machinenummer in geval van gelijkspel.

m Rond af naar min oneindig.

c Gehakte afrondingsmodus. Drijvende-kommagetallen worden naar nul afgerond.

d Dynamische afrondingsmodus. Een veld in het drijvende-kommabesturingsregister (fpcr, Zie
Alpha-architectuur referentiehandleiding) regelt de afrondingsmodus die van kracht is. de C
bibliotheek initialiseert dit register voor afronding naar plus oneindig. Dus,
tenzij uw programma de wijzigt fpcr, d komt overeen met rond naar plus
oneindigheid.

-mtrap-precisie=trap-precisie
In de Alpha-architectuur zijn floating-point traps onnauwkeurig. Dit betekent zonder
software-assistentie het is onmogelijk om te herstellen van een zwevende val en programma
uitvoering moet normaal gesproken worden beëindigd. GCC kan code genereren die kan helpen
besturingssysteem trap handlers bij het bepalen van de exacte locatie die een
drijvende-kommaval. Afhankelijk van de vereisten van een toepassing, kunnen verschillende
nauwkeurigheidsniveaus kunnen worden geselecteerd:

p Precisie van het programma. Deze optie is de standaardoptie en betekent dat een traphandler alleen:
identificeren welk programma een drijvende-komma-uitzondering heeft veroorzaakt.

f Functie precisie. De trap-handler kan de functie bepalen die een
drijvende-komma uitzondering.

i Precisie van de instructie. De trap-handler kan de exacte instructie bepalen die:
veroorzaakte een drijvende-komma-uitzondering.

Andere Alpha-compilers bieden de equivalente opties genaamd -scope_veilig en
-hervatting_veilig.

-mieee-conform
Deze optie markeert de gegenereerde code als IEEE-conform. U mag deze optie niet gebruiken
tenzij u ook specificeert -mtrap-precisie=i en ook -mfp-trap-modus=su or
-mfp-trap-modus=sui. Het enige effect is dat de lijn wordt uitgezonden .vlag 48 in de functie
proloog van het gegenereerde montagebestand.

-mbuild-constanten
Normaal gesproken onderzoekt GCC een 32- of 64-bits integer-constante om te zien of het deze kan construeren
van kleinere constanten in twee of drie instructies. Als het niet kan, geeft het de
constant als een letterlijke en genereert code om deze tijdens runtime uit het gegevenssegment te laden.

Gebruik deze optie om te vereisen dat GCC construeert allen integer constanten met behulp van code, zelfs als
er zijn meer instructies voor nodig (het maximum is zes).

U gebruikt deze optie meestal om een ​​dynamische lader voor een gedeelde bibliotheek te bouwen. zelf een
gedeelde bibliotheek, moet het zichzelf in het geheugen verplaatsen voordat het de variabelen kan vinden en
constanten in zijn eigen gegevenssegment.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-m max
-mno-max
Geef aan of GCC code moet genereren om de optionele BWX, CIX, FIX en MAX . te gebruiken
instructie sets. De standaard is om de instructiesets te gebruiken die door de CPU worden ondersteund
type opgegeven via -mcpu= optie of die van de CPU waarop GCC is gebouwd als er geen is
gespecificeerd.

-mfloat-vax
-mfloat-ieee
Genereer code die in plaats daarvan VAX F en G drijvende-kommaberekeningen gebruikt (niet gebruikt)
van IEEE enkele en dubbele precisie.

-mexpliciete-relocs
-mno-expliciete-relocs
Oudere Alpha-assembleurs boden geen manier om symboolverplaatsingen te genereren, behalve via
assembler macro's. Het gebruik van deze macro's staat geen optimale instructieplanning toe.
GNU binutils vanaf versie 2.12 ondersteunt een nieuwe syntaxis waarmee de compiler:
expliciet aangeven welke verhuizingen voor welke opdracht moeten gelden. Deze optie is
vooral handig voor debuggen, omdat GCC de mogelijkheden van de assembler detecteert wanneer het
is gebouwd en stelt de standaard dienovereenkomstig in.

-msmall-gegevens
-mgrote-gegevens
. -mexpliciete-relocs is van kracht, statische gegevens zijn toegankelijk via gp-relatief
verhuizingen. Wanneer -msmall-gegevens wordt gebruikt, worden objecten van 8 bytes lang of kleiner geplaatst in
a Klein gegevens gebied (de secties ".sdata" en ".sbss") en zijn toegankelijk via 16-bit
verhuizingen van het $gp-register. Dit beperkt de grootte van het kleine gegevensgebied tot:
64 KB, maar maakt het mogelijk om de variabelen direct te benaderen via een enkele instructie.

De standaard is -mgrote-gegevens. Met deze optie is het gegevensgebied beperkt tot net onder
2 GB. Programma's die meer dan 2 GB aan gegevens nodig hebben, moeten "malloc" of "mmap" gebruiken om
wijs de gegevens toe in de heap in plaats van in het gegevenssegment van het programma.

Bij het genereren van code voor gedeelde bibliotheken, -fpic impliceert -msmall-gegevens en -fPIC
impliceert -mgrote-gegevens.

-msmall-tekst
-mgrote-tekst
. -msmall-tekst wordt gebruikt, gaat de compiler ervan uit dat de code van het hele programma
(of gedeelde bibliotheek) past in 4MB, en is dus bereikbaar met een branch-instructie.
. -msmall-gegevens wordt gebruikt, kan de compiler aannemen dat alle lokale symbolen de delen
dezelfde $gp-waarde, en dus het aantal instructies dat nodig is voor een functie verminderen
bel van 4 naar 1.

De standaard is -mgrote-tekst.

-mcpu=cpu_type
Stel de instructieset en instructieplanningsparameters in voor het machinetype
cpu_type. U kunt ofwel de EV stijlnaam of het bijbehorende chipnummer.
GCC ondersteunt planningsparameters voor de EV4-, EV5- en EV6-familie van processors en
kiest de standaardwaarden voor de instructieset van de processor die u opgeeft. Indien
u geen processortype opgeeft, gebruikt GCC standaard de processor waarop de
compiler is gebouwd.

Ondersteunde waarden voor cpu_type zijn

ev4
ev45
21064
Schema's als een EV4 en heeft geen instructieset-uitbreidingen.

ev5
21164
Schema's als een EV5 en heeft geen instructieset-uitbreidingen.

ev56
21164
Schema's als een EV5 en ondersteunt de BWX-extensie.

pca56
21164pc
21164PC
Schema's als een EV5 en ondersteunt de BWX- en MAX-extensies.

ev6
21264
Schema's als een EV6 en ondersteunt de BWX-, FIX- en MAX-extensies.

ev67
21264
Schema's als een EV6 en ondersteunt de BWX-, CIX-, FIX- en MAX-extensies.

Native toolchains ondersteunen ook de waarde inheemse, die de beste architectuur selecteert
optie voor de hostprocessor. -mcpu=natief heeft geen effect als GCC niet herkent
de verwerker.

-mtune=cpu_type
Stel alleen de instructieplanningsparameters in voor het machinetype cpu_type. De
instructieset wordt niet gewijzigd.

Native toolchains ondersteunen ook de waarde inheemse, die de beste architectuur selecteert
optie voor de hostprocessor. -mtune=native heeft geen effect als GCC niet herkent
de verwerker.

-geheugen-latentie=niet de tijd of
Stelt de latentie in die de planner moet aannemen voor typische geheugenreferenties zoals gezien door
de applicatie. Dit aantal is sterk afhankelijk van de gebruikte geheugentoegangspatronen
door de toepassing en de grootte van de externe cache op de machine.

Geldige opties voor niet de tijd of zijn

aantal
Een decimaal getal dat klokcycli weergeeft.

L1
L2
L3
hoofd-
De compiler bevat schattingen van het aantal klokcycli voor "typische" EV4 &
EV5-hardware voor de Level 1, 2 & 3 caches (ook wel Dcache, Scache en . genoemd)
Bcache), evenals naar het hoofdgeheugen. Merk op dat L3 alleen geldig is voor EV5.

FR30 Opties

Deze opties zijn specifiek gedefinieerd voor de FR30-poort.

-mklein-model
Gebruik het kleine adresruimtemodel. Dit kan kleinere code produceren, maar het gaat ervan uit:
dat alle symbolische waarden en adressen in een 20-bits bereik passen.

-mno-lsim
Neem aan dat runtime-ondersteuning is geleverd en dat het dus niet nodig is om de
simulatorbibliotheek (libsim.a) op de linker-opdrachtregel.

FRV Opties

-mgpr-32
Gebruik alleen de eerste 32 algemene registers.

-mgpr-64
Gebruik alle 64 algemene registers.

-mfpr-32
Gebruik alleen de eerste 32 drijvende-kommaregisters.

-mfpr-64
Gebruik alle 64 drijvende-kommaregisters.

-mhard-zweven
Gebruik hardware-instructies voor drijvende-kommabewerkingen.

-msoft-zweven
Gebruik bibliotheekroutines voor drijvende-kommabewerkingen.

-malloc-cc
Dynamisch toewijzen van conditiecoderegisters.

-mfixed-cc
Probeer niet om conditiecoderegisters dynamisch toe te wijzen, gebruik alleen "icc0" en
"fcc0".

-mdwoord
Wijzig ABI om dubbele woord-insns te gebruiken.

-mno-dword
Gebruik geen dubbele woordinstructies.

-mdubbel
Gebruik dubbele instructies met drijvende komma.

-mno-dubbel
Gebruik geen dubbele instructies met drijvende komma.

-media
Gebruik media-instructies.

-mno-media
Gebruik geen media-instructies.

-mmuladd
Gebruik instructies voor vermenigvuldigen en optellen/aftrekken.

-mno-muladd
Gebruik geen instructies voor vermenigvuldigen en optellen/aftrekken.

-mfdpic
Selecteer de FDPIC ABI, die functiedescriptors gebruikt om verwijzingen naar . weer te geven
functies. Zonder enige PIC/PIE-gerelateerde opties, impliceert dit: -fPIE. Met -fpic or
-fpie, gaat ervan uit dat GOT-items en kleine gegevens binnen een bereik van 12 bits van de GOT . liggen
basisadres; met -fPIC or -fPIE, GOT-offsets worden berekend met 32 ​​bits. Met een
bfin-elf doel, deze optie houdt in: -msim.

-minline-plt
Inline inschakelen van PLT-vermeldingen in functieaanroepen naar functies waarvan niet bekend is dat ze
lokaal binden. Het heeft geen effect zonder -mfdpic. Het is standaard ingeschakeld als
optimaliseren voor snelheid en compileren voor gedeelde bibliotheken (dwz -fPIC or -fpic), of
wanneer een optimalisatieoptie zoals: -O3 of hoger is aanwezig in de opdrachtregel.

-mTLS
Ga uit van een groot TLS-segment bij het genereren van thread-lokale code.

-mtls
Ga niet uit van een groot TLS-segment bij het genereren van thread-lokale code.

-mgprel-ro
Schakel het gebruik van "GPREL"-verhuizingen in de FDPIC ABI in voor gegevens waarvan bekend is dat ze
alleen-lezen secties. Het is standaard ingeschakeld, behalve voor -fpic or -fpie: ondanks dat
het kan helpen om de globale offset-tabel kleiner te maken, het verhandelt 1 instructie voor 4. Met
-fPIC or -fPIE, het verhandelt 3 instructies voor 4, waarvan er één kan worden gedeeld door meerdere
symbolen, en het vermijdt de noodzaak van een GOT-invoer voor het symbool waarnaar wordt verwezen, dus het is
meer kans op een overwinning. Als het niet is, -mno-gprel-ro kan worden gebruikt om het uit te schakelen.

-multilib-bibliotheek-foto
Link met de (bibliotheek, niet FD) fotobibliotheken. Het wordt geïmpliceerd door -mlibrary-foto, ook
als door -fPIC en -fpic zonder -mfdpic. Je zou het nooit expliciet moeten gebruiken.

-mlinked-fp
Volg de EABI-vereiste om altijd een frame-aanwijzer te maken wanneer een stapelframe
wordt toegewezen. Deze optie is standaard ingeschakeld en kan worden uitgeschakeld met
-mno-gekoppelde-fp.

-mlong-oproepen
Gebruik indirecte adressering om functies buiten de huidige compilatie-eenheid aan te roepen. Dit
maakt het mogelijk om de functies overal binnen de 32-bits adresruimte te plaatsen.

-kwaadaardige-labels
Probeer labels uit te lijnen met een grens van 8 bytes door NOP's in het vorige pakket in te voegen.
Deze optie heeft alleen effect als VLIW-packing is ingeschakeld. Het maakt geen nieuwe
pakketten; het voegt alleen NOP's toe aan bestaande.

-mlibrary-foto
Genereer positie-onafhankelijke EABI-code.

-macc-4
Gebruik alleen de eerste vier media-accumulatorregisters.

-macc-8
Gebruik alle acht media-accumulatorregisters.

-mpak
Pak VLIW-instructies in.

-mno-pakket
Verpak geen VLIW-instructies.

-mno-vlaggen
Markeer geen ABI-switches in e_flags.

-mcond-zet
Schakel het gebruik van voorwaardelijke verplaatsingsinstructies in (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-cond-zet
Schakel het gebruik van voorwaardelijke verplaatsingsinstructies uit.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mscc
Schakel het gebruik van voorwaardelijke set-instructies in (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-scc
Schakel het gebruik van voorwaardelijke set-instructies uit.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mcond-exec
Schakel het gebruik van voorwaardelijke uitvoering in (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-cond-exec
Schakel het gebruik van voorwaardelijke uitvoering uit.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mvliw-tak
Voer een pas uit om takken in VLIW-instructies in te pakken (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-vliw-tak
Voer geen pas uit om takken in VLIW-instructies in te pakken.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mmulti-cond-exec
Optimalisatie van "&&" en "||" inschakelen in voorwaardelijke uitvoering (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-multi-cond-exec
Schakel optimalisatie van "&&" en "||" uit in voorwaardelijke uitvoering.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mnested-cond-exec
Geneste optimalisaties voor voorwaardelijke uitvoering inschakelen (standaard).

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-mno-geneste-cond-exec
Schakel geneste optimalisaties voor voorwaardelijke uitvoering uit.

Deze schakelaar is voornamelijk bedoeld voor het debuggen van de compiler en zal waarschijnlijk worden verwijderd in a
toekomstige versie.

-moptimize-lid
Deze schakeloptie verwijdert overbodige "membar"-instructies uit de door de compiler gegenereerde code.
Het is standaard ingeschakeld.

-mno-optimaliseer-membar
Deze schakelaar schakelt de automatische verwijdering van overbodige "membar"-instructies uit de
gegenereerde code.

-mtomcat-statistieken
Laat gas katerstatistieken afdrukken.

-mcpu=cpu
Selecteer het processortype waarvoor u code wilt genereren. Mogelijke waarden zijn frv, fr550,
kater, fr500, fr450, fr405, fr400, fr300 en simpel.

GNU / Linux Opties

Deze -m opties zijn gedefinieerd voor GNU/Linux-doelen:

-mglibc
Gebruik de GNU C-bibliotheek. Dit is de standaard behalve aan *-*-linux-*uclibc* en
*-*-linux-*android* targets.

-muclib
Gebruik de uClibc C-bibliotheek. Dit is standaard ingeschakeld *-*-linux-*uclibc* targets.

-mbionisch
Gebruik de Bionic C-bibliotheek. Dit is standaard ingeschakeld *-*-linux-*android* targets.

-mandroïde
Compileer code die compatibel is met het Android-platform. Dit is standaard ingeschakeld
*-*-linux-*android* targets.

Bij het compileren schakelt deze optie: -mbionisch, -fPIC, -fno-uitzonderingen en -fno-rtti by
standaard. Bij het koppelen zorgt deze optie ervoor dat het GCC-stuurprogramma Android-specifieke opties doorgeeft
naar de koppelaar. Ten slotte zorgt deze optie ervoor dat de preprocessor-macro "__ANDROID__" wordt
gedefinieerd.

-tno-android-cc
Compilatie-effecten van . uitschakelen -mandroïde, dwz niet inschakelen -mbionisch, -fPIC,
-fno-uitzonderingen en -fno-rtti standaard.

-tno-android-ld
Schakel koppelingseffecten van . uit -mandroïde, dat wil zeggen, geef standaard Linux-koppelingsopties door aan de
koppelaar.

H8 / 300 Opties

Deze -m opties zijn gedefinieerd voor de H8/300 implementaties:

-montspan
Kort sommige adresverwijzingen in tijdens de koppelingstijd, indien mogelijk; gebruikt de linker-optie
-kom tot rust.

-mh Genereer code voor de H8/300H.

-Mevrouw Genereer code voor de H8S.

- mn Genereer code voor de H8S en H8/300H in de normale modus. Deze schakelaar moet worden gebruikt
ofwel met -mh or -Mevrouw.

-ms2600
Genereer code voor de H8S/2600. Deze schakelaar moet worden gebruikt met: -Mevrouw.

-mexr
Uitgebreide registers worden op de stapel opgeslagen voordat de functie met monitor wordt uitgevoerd
attribuut. Standaard optie is -mexr. Deze optie is alleen geldig voor H8S-doelen.

-mno-exr
Uitgebreide registers worden niet op de stapel opgeslagen voordat de functie met monitor wordt uitgevoerd
attribuut. Standaard optie is -mno-exr. Deze optie is alleen geldig voor H8S-doelen.

-mint32
Maak standaard "int" data 32 bits.

-kwaadaardig-300
Gebruik op de H8/300H en H8S dezelfde uitlijningsregels als voor de H8/300. De standaard
voor de H8/300H en H8S is het uitlijnen van longs en floats op 4-byte-grenzen.
-kwaadaardig-300 zorgt ervoor dat ze worden uitgelijnd op 2-byte grenzen. Deze optie heeft geen effect
op de H8/300.

HPPA Opties

Deze -m opties zijn gedefinieerd voor de HPPA-familie van computers:

-maart=architectuur-type
Genereer code voor de opgegeven architectuur. De keuzes voor architectuur-type zijn
1.0 voor PA 1.0, 1.1 voor PA 1.1, en 2.0 voor PA 2.0-processors. Verwijzen naar
/usr/lib/sched.models op een HP-UX-systeem om de juiste architectuuroptie te bepalen
voor uw automaat. Code gecompileerd voor lager genummerde architecturen draait op hogere
genummerde architecturen, maar niet andersom.

-mpa-risico-1-0
-mpa-risico-1-1
-mpa-risico-2-0
Synoniemen voor -maart=1.0, -maart=1.1 en -maart=2.0 respectievelijk.

-mjump-in-vertraging
Deze optie wordt genegeerd en wordt alleen verstrekt voor compatibiliteitsdoeleinden.

-mdisable-fpregs
Voorkom dat drijvende-kommaregisters op enigerlei wijze worden gebruikt. Dit is nodig voor
het compileren van kernels die luie contextwisselingen van drijvende-kommaregisters uitvoeren. Indien
u deze optie gebruikt en probeert om drijvende-kommabewerkingen uit te voeren, de compiler
breekt af.

-mdisable-indexering
Voorkom dat de compiler indexeringsadresmodi gebruikt. Dit vermijdt nogal wat
obscure problemen bij het compileren van door MIG gegenereerde code onder MACH.

-mno-space-regs
Genereer code die ervan uitgaat dat het doel geen spatieregisters heeft. Hierdoor kan GCC
genereer snellere indirecte oproepen en gebruik ongeschaalde indexadresmodi.

Dergelijke code is geschikt voor PA-systemen en kernels van niveau 0.

-mfast-indirecte-oproepen
Genereer code die ervan uitgaat dat oproepen nooit de ruimtegrenzen overschrijden. Hierdoor kan GCC
code uitzenden die snellere indirecte oproepen uitvoert.

Deze optie werkt niet in aanwezigheid van gedeelde bibliotheken of geneste functies.

-mvast-bereik=register-bereik
Genereer code die het opgegeven registerbereik behandelt als vaste registers. Een vast register
is er een die de registertoewijzer niet kan gebruiken. Dit is handig bij het compileren van de kernel
code. Een registerbereik wordt gespecificeerd als twee registers gescheiden door een streepje. Meerdere
registerbereiken kunnen worden gespecificeerd, gescheiden door een komma.

-mlong-load-store
Genereer laad- en bewaarsequenties van 3 instructies zoals soms vereist door de HP-UX 10
koppelaar. Dit is gelijk aan de +k optie voor de HP-compilers.

-mportable-runtime
Gebruik de door HP voorgestelde conventies voor mobiel bellen voor ELF-systemen.

-mg
Schakel het gebruik van assembler-richtlijnen in die alleen GAS begrijpt.

-mschema=CPU-type
Schemacode volgens de beperkingen voor het machinetype CPU-type. De keuzes
For CPU-type zijn 700 7100, 7100LC, 7200, 7300 en 8000. Verwijzen naar
/usr/lib/sched.models op een HP-UX-systeem om de juiste planningsoptie te bepalen voor:
uw automaat. De standaard planning is 8000.

-mlinker-opt
Schakel de optimalisatiepas in de HP-UX-linker in. Merk op dat dit symbolische foutopsporing maakt
onmogelijk. Het activeert ook een bug in de HP-UX 8 en HP-UX 9 linkers waarin ze
geven valse foutmeldingen bij het koppelen van sommige programma's.

-msoft-zweven
Genereer uitvoer met bibliotheekaanroepen voor drijvende komma. Waarschuwing: het vereiste
bibliotheken zijn niet voor alle HPPA-doelen beschikbaar. Normaal gesproken zijn de faciliteiten van de
de gebruikelijke C-compiler van de machine worden gebruikt, maar dit kan niet rechtstreeks in cross-
compilatie. U moet uw eigen regelingen treffen om voor een geschikte bibliotheek te zorgen
functies voor cross-compilatie.

-msoft-zweven verandert de aanroepconventie in het uitvoerbestand; daarom is het alleen
handig als je compileert allen van een programma met deze optie. In het bijzonder moet u:
compileren libgcc.a, de bibliotheek die bij GCC wordt geleverd, met -msoft-zweven hiervoor
werken.

-msio
Genereer de predefine, "_SIO", voor server IO. De standaard is -mwsio. Dit genereert
de predefinities, "__hp9000s700", "__hp9000s700__" en "_WSIO", voor werkstation IO.
Deze opties zijn beschikbaar onder HP-UX en HI-UX.

-mgnu-ld
Gebruik opties die specifiek zijn voor GNU ld. Dit gaat voorbij -gedeeld naar ld bij het bouwen van een gedeelde
bibliotheek. Het is de standaardinstelling wanneer GCC, expliciet of impliciet, is geconfigureerd met de
GNU-linker. Deze optie heeft geen invloed op welke ld wordt genoemd; het verandert alleen wat
daar worden parameters aan doorgegeven ld. De ld dat heet wordt bepaald door de
--met-ld configuratieoptie, het zoekpad van het GCC-programma en ten slotte door de gebruikers PATH.
De linker die door GCC wordt gebruikt, kan worden afgedrukt met: welke `gcc` -print-prog-naam=ld`. Deze
optie is alleen beschikbaar op de 64-bit HP-UX GCC, dwz geconfigureerd met
hppa*64*-*-hpux*.

-mhp-ld
Gebruik opties die specifiek zijn voor HP ld. Dit gaat voorbij -b naar ld bij het bouwen van een gedeelde bibliotheek
en passen +Accepteren Type komt niet overeen naar ld op alle koppelingen. Het is de standaard wanneer GCC is
geconfigureerd, expliciet of impliciet, met de HP-linker. Deze optie heeft geen invloed op:
welke ld wordt genoemd; het verandert alleen welke parameters daaraan worden doorgegeven ld. De ld
dat heet wordt bepaald door de --met-ld configureren optie, GCC's programma zoeken
pad, en ten slotte door de gebruiker PATH. De linker die door GCC wordt gebruikt, kan worden afgedrukt met:
welke `gcc` -print-prog-naam=ld`. Deze optie is alleen beschikbaar op de 64-bit HP-UX
GCC, dwz geconfigureerd met hppa*64*-*-hpux*.

-mlong-oproepen
Genereer code die lange oproepreeksen gebruikt. Dit zorgt ervoor dat een oproep altijd kan
om linker gegenereerde stubs te bereiken. De standaardinstelling is om alleen lange gesprekken te genereren wanneer de
afstand van de oproeplocatie tot het begin van de functie of vertaaleenheid, zoals
het geval kan zijn, een vooraf gedefinieerde limiet overschrijdt die is ingesteld door het gebruikte vertakkingstype. De
limieten voor normale oproepen zijn respectievelijk 7,600,000 en 240,000 bytes voor de PA 2.0
en PA 1.X-architecturen. Sibcalls zijn altijd beperkt tot 240,000 bytes.

Afstanden worden gemeten vanaf het begin van functies bij gebruik van de
-ffunctie-secties optie, of bij gebruik van de -mg en -mno-draagbare-runtime opties
samen onder HP-UX met de SOM-linker.

Het is normaal gesproken niet wenselijk om deze optie te gebruiken, omdat dit de prestaties verslechtert. Echter,
het kan handig zijn in grote toepassingen, vooral wanneer gedeeltelijke koppeling wordt gebruikt om:
de applicatie bouwen.

De soorten lange oproepen die worden gebruikt, zijn afhankelijk van de mogelijkheden van de assembler en linker,
en het type code dat wordt gegenereerd. De impact op systemen die lang
absolute oproepen, en lange pic symbol-differentie of pc-relatieve oproepen zouden moeten zijn
relatief klein. Een indirecte oproep wordt echter gebruikt op 32-bits ELF-systemen in pic-code
en het is vrij lang.

-munix=unix-standaard
Genereer vooraf gedefinieerde compiler en selecteer een startbestand voor de opgegeven UNIX-standaard.
De keuzes voor unix-standaard zijn 93, 95 en 98. 93 wordt ondersteund op alle HP-UX-versies.
95 is beschikbaar op HP-UX 10.10 en later. 98 is beschikbaar op HP-UX 11.11 en later.
De standaardwaarden zijn 93 voor HP-UX 10.00, 95 voor HP-UX 10.10 tot 11.00 uur, en 98
voor HP-UX 11.11 en hoger.

-munix=93 biedt dezelfde predefinities als GCC 3.3 en 3.4. -munix=95 biedt
aanvullende predefinities voor "XOPEN_UNIX" en "_XOPEN_SOURCE_EXTENDED", en het startbestand
unix95.o. -munix=98 biedt aanvullende predefinities voor "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" en "_INCLUDE_XOPEN_SOURCE_500",
en het startbestand unix98.o.

Het is belangrijk om op te merken dat deze optie de interfaces voor verschillende bibliotheken verandert
routines. Het beïnvloedt ook het operationele gedrag van de C-bibliotheek. Dus, extreem
voorzichtigheid is geboden bij het gebruik van deze optie.

Bibliotheekcode die bedoeld is om met meer dan één UNIX-standaard te werken, moet worden getest,
stel de variabele "__xpg4_extended_mask" in en herstel deze waar nodig. De meeste GNU-software
biedt deze mogelijkheid niet.

-nolibld
Onderdruk het genereren van koppelingsopties om libdld.sl te doorzoeken wanneer de -statisch Optie is
gespecificeerd op HP-UX 10 en later.

-statisch
De HP-UX implementatie van setlocale in libc is afhankelijk van libdld.sl. Daar
is geen archiefversie van libdld.sl. Dus, wanneer de -statisch optie is opgegeven,
speciale koppelingsopties zijn nodig om deze afhankelijkheid op te lossen.

Op HP-UX 10 en later voegt het GCC-stuurprogramma de nodige opties toe om te koppelen met
libdld.sl wanneer de -statisch optie is opgegeven. Dit zorgt ervoor dat de resulterende binaire
dynamisch zijn. Op de 64-bits poort genereren de linkers standaard dynamische binaire bestanden in
elk geval. De -nolibld optie kan worden gebruikt om te voorkomen dat het GCC-stuurprogramma wordt toegevoegd
deze koppelingsopties.

-draden
Ondersteuning voor multithreading toevoegen met de dce draad bibliotheek onder HP-UX. Deze optie
stelt vlaggen in voor zowel de preprocessor als de linker.

IA-64 Opties

Dit zijn de -m opties gedefinieerd voor de Intel IA-64-architectuur.

-mbig-endian
Genereer code voor een big-endian doelwit. Dit is de standaardinstelling voor HP-UX.

-mlittle-endian
Genereer code voor een klein endian doelwit. Dit is de standaardinstelling voor AIX5 en GNU/Linux.

-mgnu-as
-mno-gnu-as
Genereer (of niet) code voor de GNU-assembler. Dit is de standaardinstelling.

-mgnu-ld
-mno-gnu-ld
Genereer (of niet) code voor de GNU-linker. Dit is de standaardinstelling.

-mno-foto
Genereer code die geen globaal pointerregister gebruikt. Het resultaat is geen positie
onafhankelijke code, en schendt de IA-64 ABI.

-mvluchtige-asm-stop
-mno-vluchtige-asm-stop
Genereer (of niet) een stopbit direct voor en na vluchtige asm-statements.

-mregister-namen
-mno-register-namen
Genereer (of niet) in, loc en uit registernamen voor de gestapelde registers. Dit
kan de uitvoer van de assembler leesbaarder maken.

-mno-sdata
-msgegevens
Schakel optimalisaties uit (of schakel deze in) die de kleine gegevenssectie gebruiken. Dit kan handig zijn
voor het omzeilen van optimalisatiebugs.

-mconstante-gp
Genereer code die een enkele constante globale pointerwaarde gebruikt. Dit is handig wanneer:
kernelcode compileren.

-mauto-foto
Genereer code die zelfverplaatsbaar is. Dit houdt in -mconstante-gp. Dit is handig
bij het compileren van de firmwarecode.

-minline-float-deel-min-latentie
Genereer code voor inline splitsingen van drijvende-kommawaarden met behulp van de minimale latentie
algoritme.

-minline-float-deel-max-doorvoer
Genereer code voor inline verdelingen van drijvende-kommawaarden met behulp van de maximale doorvoer
algoritme.

-mno-inline-float-delen
Genereer geen inline-code voor splitsingen van drijvende-kommawaarden.

-minline-int-verdeel-min-latentie
Genereer code voor inline verdelingen van gehele waarden met behulp van de minimale latentie
algoritme.

-minline-int-verdeel-max-doorvoer
Genereer code voor inline delingen van gehele getallen met behulp van de maximale doorvoer
algoritme.

-mno-inline-int-delen
Genereer geen inline-code voor deling van gehele getallen.

-minline-sqrt-min-latentie
Genereer code voor inline vierkantswortels met behulp van het algoritme met minimale latentie.

-minline-sqrt-max-doorvoer
Genereer code voor inline vierkantswortels met behulp van het algoritme voor maximale doorvoer.

-mno-inline-sqrt
Genereer geen inline code voor "sqrt".

-mfused-gek
-mno-gefuseerd-madd
Genereer (niet) code die gebruikmaakt van de gefuseerde vermenigvuldigen/optellen of vermenigvuldigen/aftrekken
instructies. De standaardinstelling is om deze instructies te gebruiken.

-mno-dwerg2-asm
-mdwarf2-asm
Genereer (of doe) geen assembler-code voor de foutopsporingsinformatie van DWARF 2-regelnummers.
Dit kan handig zijn als u de GNU-assembler niet gebruikt.

-mearly-stop-bits
-mno-vroege-stop-bits
Laat stopbits eerder plaatsen dan direct voorafgaand aan de instructie die:
de stopbit geactiveerd. Dit kan de instructieplanning verbeteren, maar niet altijd
doen.

-mvast-bereik=register-bereik
Genereer code die het opgegeven registerbereik behandelt als vaste registers. Een vast register
is er een die de registertoewijzer niet kan gebruiken. Dit is handig bij het compileren van de kernel
code. Een registerbereik wordt gespecificeerd als twee registers gescheiden door een streepje. Meerdere
registerbereiken kunnen worden gespecificeerd, gescheiden door een komma.

-mtls-grootte=tls-formaat
Specificeer de bitgrootte van directe TLS-offsets. Geldige waarden zijn 14, 22 en 64.

-mtune=CPU-type
Stem de instructieplanning af voor een bepaalde CPU. Geldige waarden zijn: itanium,
itanium1, genade, itanium2 en mckinley.

-milp32
-mlp64
Genereer code voor een 32-bits of 64-bits omgeving. De 32-bits omgeving zet int,
lang en pointer naar 32 bits. De 64-bits omgeving wordt ingesteld op 32 bits en lang en
verwijzing naar 64 bits. Dit zijn HP-UX-specifieke vlaggen.

-mno-sched-br-data-specificatie
-msched-br-data-specificatie
(De-/inschakel) speculatieve planning van gegevens vóór herladen. Dit resulteert in het genereren van
"ld.a"-instructies en de bijbehorende controle-instructies ("ld.c" / "chk.a"). De
standaard is 'uitschakelen'.

-msched-ar-data-specificatie
-mno-sched-ar-data-specificatie
(En/De) speculatieve planning van gegevens na opnieuw laden. Dit resulteert in het genereren van
"ld.a"-instructies en de bijbehorende controle-instructies ("ld.c" / "chk.a"). De
standaard is 'inschakelen'.

-mno-sched-control-spec
-msched-controle-specificatie
(De-/inschakel) controle speculatieve planning. Deze functie is alleen beschikbaar tijdens:
regioplanning (dwz vóór herladen). Dit resulteert in het genereren van de "ld.s"
instructies en de bijbehorende controle-instructies "chk.s". De standaard is
'uitzetten'.

-msched-br-in-data-specificatie
-mno-sched-br-in-data-specificatie
(En/Dis)able speculatieve planning van de instructies die afhankelijk zijn van de gegevens
speculatieve ladingen voor herladen. Dit is alleen effectief met: -msched-br-data-specificatie
ingeschakeld. De standaard is 'inschakelen'.

-msched-ar-in-data-specificatie
-mno-sched-ar-in-data-specificatie
(En/Dis)able speculatieve planning van de instructies die afhankelijk zijn van de gegevens
speculatieve ladingen na herladen. Dit is alleen effectief met: -msched-ar-data-specificatie
ingeschakeld. De standaard is 'inschakelen'.

-msched-in-control-specificatie
-mno-sched-in-control-specificatie
(En/Dis)able speculatieve planning van de instructies die afhankelijk zijn van de
speculatieve belastingen te beheersen. Dit is alleen effectief met: -msched-controle-specificatie ingeschakeld.
De standaard is 'inschakelen'.

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Indien ingeschakeld, worden gegevensspeculatieve instructies alleen gekozen voor planning als er geen
andere keuzes op dit moment. Dit maakt het gebruik van de gegevensspeculatie veel meer
conservatief. De standaard is 'uitschakelen'.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Indien ingeschakeld, worden controle-speculatieve instructies alleen gekozen voor schema als er:
geen andere keuzes op dit moment. Dit maakt het gebruik van de controle-speculatie veel
conservatiever. De standaard is 'uitschakelen'.

-mno-sched-count-specificatie-in-kritiek pad
-msched-telling-spec-in-kritiek-pad
Indien ingeschakeld, wordt rekening gehouden met speculatieve afhankelijkheden tijdens de berekening van de
instructies prioriteiten. Dit maakt het gebruik van de speculatie een beetje meer
conservatief. De standaard is 'uitschakelen'.

-msched-spec-ldc
Gebruik een eenvoudige controle op gegevensspeculatie. Deze optie is standaard ingeschakeld.

-msched-control-spec-ldc
Gebruik een eenvoudige controle voor controlespeculatie. Deze optie is standaard ingeschakeld.

-msched-stop-bits-na-elke-cyclus
Plaats een stopbit na elke cyclus bij het plannen. Deze optie is standaard ingeschakeld.

-msched-fp-mem-deps-nul-kosten
Neem aan dat drijvende-komma-opslag en -ladingen waarschijnlijk geen conflict veroorzaken wanneer:
in dezelfde instructiegroep geplaatst. Deze optie is standaard uitgeschakeld.

-msel-sched-dont-check-control-spec
Genereer controles voor controlespeculatie in selectieve planning. Deze vlag is
standaard uitgeschakeld.

-msched-max-geheugen-insns=max-insns
Beperk het aantal geheugeninsns per instructiegroep, met een lagere prioriteit aan:
volgende geheugeninsns die proberen in dezelfde instructiegroep te plannen.
Vaak handig om cachebankconflicten te voorkomen. De standaardwaarde is 1.

-msched-max-geheugen-insns-harde-limiet
Maakt de limiet gespecificeerd door msched-max-geheugen-insns een harde limiet, meer niet toestaan
dan dat aantal in een instructiegroep. Anders is de limiet "zacht", wat betekent:
dat niet-geheugenbewerkingen de voorkeur hebben wanneer de limiet is bereikt, maar geheugen
operaties kunnen nog worden gepland.

LM32 Opties

Deze -m opties zijn gedefinieerd voor de LatticeMico32-architectuur:

-mbarrel-shift ingeschakeld
Schakel instructies voor loopverschuiving in.

-mdivide ingeschakeld
Schakel verdeel- en modulus-instructies in.

-mmultiply ingeschakeld
Schakel instructies voor vermenigvuldigen in.

-msign-uitbreiden ingeschakeld
Instructies voor tekenverlenging inschakelen.

-muser ingeschakeld
Schakel door de gebruiker gedefinieerde instructies in.

M32C Opties

-mcpu=naam
Selecteer de CPU waarvoor de code wordt gegenereerd. naam kan een van zijn r8c voor de R8C/Tiny
serie, m16c voor de M16C (tot /60) serie, m32cm voor de M16C/80-serie, of m32c
voor de M32C/80-serie.

-msim
Specificeert dat het programma op de simulator wordt uitgevoerd. Dit veroorzaakt een alternatieve
te koppelen runtime-bibliotheek waarin bijvoorbeeld bestands-I/O wordt ondersteund. Je moet niet
gebruik deze optie bij het genereren van programma's die op echte hardware zullen draaien; je moet
zorg voor uw eigen runtime-bibliotheek voor alle I/O-functies die nodig zijn.

-memregs=aantal
Specificeert het aantal geheugengebaseerde pseudoregisters dat GCC gebruikt tijdens het genereren van code.
Deze pseudo-registers worden gebruikt als echte registers, dus er is een afweging tussen:
GCC's vermogen om de code in beschikbare registers te passen, en de prestatiestraf van
geheugen gebruiken in plaats van registers. Merk op dat alle modules in een programma moeten zijn
gecompileerd met dezelfde waarde voor deze optie. Daarom mag u dit niet gebruiken
optie met de standaard runtime-bibliotheken van GCC.

M32R/D Opties

Deze -m opties zijn gedefinieerd voor Renesas M32R/D-architecturen:

-m32r2
Genereer code voor de M32R/2.

-m32rx
Genereer code voor de M32R/X.

-m32r
Genereer code voor de M32R. Dit is de standaardinstelling.

-mmodel=klein
Neem aan dat alle objecten zich in de onderste 16 MB geheugen bevinden (zodat hun adressen kunnen worden
geladen met de "ld24"-instructie), en neem aan dat alle subroutines bereikbaar zijn met de
"bl" instructie. Dit is de standaardinstelling.

De adresseerbaarheid van een bepaald object kan worden ingesteld met het attribuut "model".

-mmodel=gemiddeld
Neem aan dat objecten zich overal in de 32-bits adresruimte kunnen bevinden (de compiler genereert
"seth/add3" instructies om hun adressen te laden), en neem aan dat alle subroutines zijn
bereikbaar met de instructie "bl".

-mmodel=groot
Neem aan dat objecten zich overal in de 32-bits adresruimte kunnen bevinden (de compiler genereert
"seth/add3" instructies om hun adressen te laden), en neem aan dat subroutines dat niet zijn
bereikbaar met de instructie "bl" (de compiler genereert de veel langzamere)
"seth/add3/jl" instructiereeks).

-msdata=geen
Schakel het gebruik van het kleine gegevensgebied uit. Variabelen worden geplaatst in een van ".data", ".bss", of
".rodata" (tenzij het kenmerk "section" is opgegeven). Dit is de standaardinstelling.

Het kleine gegevensgebied bestaat uit secties ".sdata" en ".sbss". Objecten kunnen zijn:
expliciet in het kleine gegevensgebied plaatsen met het kenmerk "sectie" met behulp van een van deze
secties.

-msdata=sdata
Zet kleine globale en statische gegevens in het kleine gegevensgebied, maar genereer geen speciale
code om ernaar te verwijzen.

-msdata=gebruik
Zet kleine globale en statische gegevens in het kleine gegevensgebied en genereer speciale
instructies om ernaar te verwijzen.

-G num
Zet globale en statische objecten kleiner dan of gelijk aan num bytes in de kleine gegevens of
BSS-secties in plaats van de normale data- of BSS-secties. De standaardwaarde van num is
8. De -msgegevens optie moet zijn ingesteld op een van gegevens or . voor deze optie om er een te hebben
effect.

Alle modules moeten worden gecompileerd met dezelfde -G num waarde. Compileren met verschillende
waarden van num kan wel of niet werken; als dit niet het geval is, geeft de linker een fout
bericht --- er wordt geen onjuiste code gegenereerd.

-mdebug
Zorgt ervoor dat de M32R-specifieke code in de compiler enkele statistieken weergeeft die kunnen helpen
in foutopsporingsprogramma's.

-kwaadaardige-loops
Lijn alle lussen uit met een grens van 32 bytes.

-mno-align-loops
Forceer geen 32-byte uitlijning voor lussen. Dit is de standaardinstelling.

-missue-tarief=aantal
Uitgifte aantal instructies per cyclus. aantal kan maar 1 of 2 zijn.

-mbranch-kosten=aantal
aantal kan maar 1 of 2 zijn. Als het 1 is, hebben vertakkingen de voorkeur boven voorwaardelijk
code, is het 2, dan geldt het tegenovergestelde.

-mflush-trap=aantal
Specificeert het trapnummer dat moet worden gebruikt om de cache te legen. De standaardwaarde is 12. Geldig
getallen liggen tussen 0 en 15.

-mno-flush-trap
Geeft aan dat de cache niet kan worden leeggemaakt met behulp van een trap.

-mflush-func=naam
Specificeert de naam van de functie van het besturingssysteem die moet worden aangeroepen om de cache te legen. De
standaard is _flush_cache, maar een functieaanroep wordt alleen gebruikt als er geen trap beschikbaar is.

-mno-flush-func
Geeft aan dat er geen OS-functie is voor het leegmaken van de cache.

M680x0 Opties

Dit zijn de -m opties gedefinieerd voor M680x0- en ColdFire-processors. De standaard instellingen
hangt af van welke architectuur werd geselecteerd toen de compiler werd geconfigureerd; de standaardinstellingen
voor de meest voorkomende keuzes worden hieronder gegeven.

-maart=boog
Genereer code voor een specifieke M680x0- of ColdFire-instructiesetarchitectuur.
Toegestane waarden van boog voor M680x0-architecturen zijn: 68000, 68010, 68020, 68030,
68040, 68060 en cpu32. ColdFire-architecturen zijn geselecteerd volgens Freescale's
ISA-classificatie en de toegestane waarden zijn: isaa, isaplus, isab en Isaac.

GCC definieert een macro "__mcfboog__" wanneer het code genereert voor een ColdFire
doelwit. De boog in deze macro is een van de -maart hierboven gegeven argumenten.

Wanneer samen gebruikt, -maart en -mtune selecteer code die draait op een familie van soortgelijke
processors, maar dat is geoptimaliseerd voor een bepaalde microarchitectuur.

-mcpu=cpu
Genereer code voor een specifieke M680x0- of ColdFire-processor. De M680x0 cpus zijn:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 en cpu32. het koude vuur cpus
worden gegeven door de onderstaande tabel, die ook de CPU's in families indeelt:

Familie : -mcpu argumenten
51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211 : 5210 5211
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485

-mcpu=cpu overschrijvingen -maart=boog if boog is compatibel met cpu. Andere combinaties van
-mcpu en -maart worden afgewezen.

GCC definieert de macro "__mcf_cpu_processor" wanneer ColdFire-doel cpu is geselecteerd. Het ook
definieert "__mcf_family_familie", waarbij de waarde van familie wordt gegeven door de bovenstaande tabel.

-mtune=toon
Stem de code af voor een bepaalde microarchitectuur binnen de beperkingen die zijn ingesteld door -maart
en -mcpu. De M680x0-microarchitecturen zijn: 68000, 68010, 68020, 68030, 68040,
68060 en cpu32. De ColdFire-microarchitecturen zijn: cfv1, cfv2, cfv3, cfv4 en
cfv4e.

U kunt ook gebruik maken van -mtune=68020-40 voor code die relatief goed moet werken op 68020,
68030 en 68040 doelen. -mtune=68020-60 is vergelijkbaar, maar bevat 68060 doelen als
goed. Deze twee opties selecteren dezelfde afstemmingsbeslissingen als: -m68020-40 en -m68020-60
respectievelijk.

GCC definieert de macro's "__mcboog" en "__mcboog__" bij het afstemmen op 680x0-architectuur
boog. Het definieert ook "mcboog" tenzij ofwel -ansi of een niet-GNU -soa optie wordt gebruikt.
Als GCC afstemt op een reeks architecturen, zoals geselecteerd door -mtune=68020-40 or
-mtune=68020-60, het definieert de macro's voor elke architectuur in het bereik.

GCC definieert ook de macro "__mvroeg__" bij het afstemmen op ColdFire-microarchitectuur
vroeg, Waar vroeg is een van de bovenstaande argumenten.

-m68000
-mc68000
Genereer output voor een 68000. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68000-gebaseerde systemen. Het is gelijk aan -maart=68000.

Gebruik deze optie voor microcontrollers met een 68000- of EC000-kern, inclusief de 68008,
68302, 68306, 68307, 68322, 68328 en 68356.

-m68010
Genereer output voor een 68010. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68010-gebaseerde systemen. Het is gelijk aan -maart=68010.

-m68020
-mc68020
Genereer output voor een 68020. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68020-gebaseerde systemen. Het is gelijk aan -maart=68020.

-m68030
Genereer output voor een 68030. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68030-gebaseerde systemen. Het is gelijk aan -maart=68030.

-m68040
Genereer output voor een 68040. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68040-gebaseerde systemen. Het is gelijk aan -maart=68040.

Deze optie verhindert het gebruik van 68881/68882 instructies die moeten worden geëmuleerd door:
software op de 68040. Gebruik deze optie als uw 68040 geen code heeft om te emuleren
die instructies.

-m68060
Genereer output voor een 68060. Dit is de standaard wanneer de compiler is geconfigureerd voor:
68060-gebaseerde systemen. Het is gelijk aan -maart=68060.

Deze optie verhindert het gebruik van instructies 68020 en 68881/68882 die moeten worden
geëmuleerd door software op de 68060. Gebruik deze optie als uw 68060 geen code heeft
om die instructies te emuleren.

-mcpu32
Genereer output voor een CPU32. Dit is de standaard wanneer de compiler is geconfigureerd voor:
CPU32-gebaseerde systemen. Het is gelijk aan -maart=cpu32.

Gebruik deze optie voor microcontrollers met een CPU32 of CPU32+ core, inclusief de 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 en 68360.

-m5200
Genereer output voor een 520X ColdFire CPU. Dit is de standaard wanneer de compiler is
geconfigureerd voor op 520X gebaseerde systemen. Het is gelijk aan -mcpu=5206en is nu
afgekeurd ten gunste van die optie.

Gebruik deze optie voor microcontrollers met een 5200 core, inclusief de MCF5202, MCF5203,
MCF5204 en MCF5206.

-m5206e
Genereer output voor een 5206e ColdFire CPU. De optie is nu verouderd ten gunste van
het equivalent -mcpu=5206e.

-m528x
Genereer output voor een lid van de ColdFire 528X-familie. De optie is nu
afgekeurd ten gunste van het equivalent -mcpu=528x.

-m5307
Genereer output voor een ColdFire 5307 CPU. De optie is nu verouderd ten gunste van de
gelijkwaardig -mcpu=5307.

-m5407
Genereer output voor een ColdFire 5407 CPU. De optie is nu verouderd ten gunste van de
gelijkwaardig -mcpu=5407.

-mcfv4e
Genereer output voor een ColdFire V4e-familie CPU (bijv. 547x/548x). Dit omvat het gebruik van
hardware drijvende-komma instructies. De optie is gelijk aan -mcpu=547x, en is
nu afgeschaft ten gunste van die optie.

-m68020-40
Genereer output voor een 68040, zonder de nieuwe instructies te gebruiken. Dit resulteert
in code die relatief efficiënt kan worden uitgevoerd op een 68020/68881 of een 68030 of een
68040. De gegenereerde code gebruikt de 68881-instructies die worden geëmuleerd op de
68040.

De optie is gelijk aan -maart=68020 -mtune=68020-40.

-m68020-60
Genereer output voor een 68060, zonder de nieuwe instructies te gebruiken. Dit resulteert
in code die relatief efficiënt kan worden uitgevoerd op een 68020/68881 of een 68030 of een
68040. De gegenereerde code gebruikt de 68881-instructies die worden geëmuleerd op de
68060.

De optie is gelijk aan -maart=68020 -mtune=68020-60.

-mhard-zweven
-m68881
Genereer drijvende-komma-instructies. Dit is de standaardinstelling voor 68020 en hoger, en
voor ColdFire-apparaten met een FPU. Het definieert de macro "__HAVE_68881__" op
M680x0-doelen en "__mcffpu__" op ColdFire-doelen.

-msoft-zweven
Genereer geen drijvende-komma-instructies; gebruik in plaats daarvan bibliotheekoproepen. Dit is de
standaard voor 68000, 68010 en 68832 doelen. Het is ook de standaardinstelling voor ColdFire
apparaten zonder FPU.

-mdiv
-mno-div
Genereer (niet genereren) ColdFire hardware verdeel en rest instructies. Indien
-maart wordt gebruikt zonder -mcpu, de standaard is "aan" voor ColdFire-architecturen en "uit"
voor M680x0-architecturen. Anders wordt de standaardwaarde overgenomen van de doel-CPU (ofwel
de standaard CPU, of degene die is gespecificeerd door -mcpu). De standaardwaarde is bijvoorbeeld "uit"
For -mcpu=5206 en "aan" voor -mcpu=5206e.

GCC definieert de macro "__mcfhwdiv__" wanneer deze optie is ingeschakeld.

-mkort
Beschouw type "int" als 16 bits breed, zoals "short int". Bovendien, parameters
doorgegeven op de stapel zijn ook uitgelijnd met een 16-bits grens, zelfs op doelen waarvan de API
machtigt promotie naar 32-bit.

-mno-kort
Beschouw type "int" niet als 16 bits breed. Dit is de standaardinstelling.

-mnobitveld
-mno-bitveld
Gebruik niet de bit-veld instructies. De -m68000, -mcpu32 en -m5200 opties impliceren:
-mnobitveld.

-mbitveld
Gebruik de bit-field instructies. De -m68020 optie impliceert -mbitveld. Dit is
de standaardwaarde als u een configuratie gebruikt die is ontworpen voor een 68020.

-mrtd
Gebruik een andere conventie voor het aanroepen van functies, waarin functies waarvoor een vaste
aantal argumenten keert terug met de instructie "rtd", die hun argumenten laat verschijnen
tijdens het terugkeren. Dit bespaart één instructie in de beller, aangezien dit niet nodig is
zet de argumenten daar neer.

Deze belconventie is niet compatibel met degene die normaal op Unix wordt gebruikt, dus u
kan het niet gebruiken als u bibliotheken moet oproepen die zijn gecompileerd met de Unix-compiler.

U moet ook functieprototypes leveren voor alle functies waarvoor variabele
aantal argumenten (inclusief "printf"); anders wordt er onjuiste code gegenereerd voor
oproepen naar die functies.

Bovendien krijg je ernstig onjuiste code als je een functie aanroept met te veel
argumenten. (Normaal gesproken worden extra argumenten onschadelijk genegeerd.)

De "rtd" instructie wordt ondersteund door de 68010, 68020, 68030, 68040, 68060 en CPU32
processors, maar niet door de 68000 of 5200.

-mno-rtd
Gebruik niet de belconventies geselecteerd door -mrtd. Dit is de standaardinstelling.

-kwaadaardig-in
-mno-align-int
Bepaal of GCC "int", "long", "long long", "float", "double" en "long uitlijnt"
dubbele" variabelen op een 32-bits grens (-kwaadaardig-in) of een 16-bits grens
(-mno-align-int). Het uitlijnen van variabelen op 32-bits grenzen levert code op die wordt uitgevoerd
iets sneller op processors met 32-bits bussen ten koste van meer geheugen.

Waarschuwing: als u de -kwaadaardig-in switch, GCC lijnt structuren uit die het bovenstaande bevatten
typen anders dan de meeste gepubliceerde specificaties voor binaire toepassingen voor:
de m68k.

-mprel
Gebruik de pc-relatieve adresseringsmodus van de 68000 rechtstreeks, in plaats van een globale
offset tafel. Momenteel houdt deze optie in: -fpic, waardoor maximaal een 16-bits offset mogelijk is
voor pc-relatieve adressering. -fPIC wordt momenteel niet ondersteund met -mprelEchter
dit zou kunnen worden ondersteund voor 68020 en hogere processors.

-mno-strikt-uitlijnen
-mstrict-uitlijnen
Ga er (niet) vanuit dat niet-uitgelijnde geheugenreferenties door het systeem worden afgehandeld.

-msep-gegevens
Genereer code waarmee het gegevenssegment zich in een ander geheugengebied kan bevinden
uit het tekstsegment. Dit zorgt voor execute-in-place in een omgeving zonder
virtueel geheugenbeheer. Deze optie houdt in: -fPIC.

-mno-sep-gegevens
Genereer code die ervan uitgaat dat het gegevenssegment het tekstsegment volgt. Dit is
de standaard.

-midden-gedeelde-bibliotheek
Genereer code die gedeelde bibliotheken ondersteunt via de bibliotheek-ID-methode. Dit maakt het mogelijk
voor execute-in-place en gedeelde bibliotheken in een omgeving zonder virtueel geheugen
beheer. Deze optie houdt in: -fPIC.

-mno-id-gedeelde-bibliotheek
Genereer code die er niet van uitgaat dat ID-gebaseerde gedeelde bibliotheken worden gebruikt. Dit is
de standaard.

-mshared-bibliotheek-id=n
Specificeert het identificatienummer van de op ID gebaseerde gedeelde bibliotheek die wordt gecompileerd.
Het specificeren van een waarde van 0 genereert compactere code; specificeren van andere waarden krachten
de toewijzing van dat nummer aan de huidige bibliotheek, maar is niet meer ruimte- of tijd-
efficiënter is dan deze optie weg te laten.

-mxgot
-mno-xgot
Bij het genereren van positie-onafhankelijke code voor ColdFire, genereer code die werkt als:
de GOT heeft meer dan 8192 inzendingen. Deze code is groter en langzamer dan code
gegenereerd zonder deze optie. Op M680x0-processors is deze optie niet nodig; -fPIC
volstaat.

GCC gebruikt normaal gesproken een enkele instructie om waarden uit de GOT te laden. terwijl dit is
relatief efficiënt, het werkt alleen als de GOT kleiner is dan ongeveer 64k. Iets
groter zorgt ervoor dat de linker een fout meldt, zoals:

verhuizing afgekapt om te passen: R_68K_GOT16O foobar

Als dit gebeurt, moet u uw code opnieuw compileren met: -mxgot. Het zou dan moeten werken met
zeer grote GOT's. Echter, code gegenereerd met -mxgot is minder efficiënt, omdat het
heeft 4 instructies nodig om de waarde van een globaal symbool op te halen.

Merk op dat sommige linkers, inclusief nieuwere versies van de GNU linker, kunnen maken
meerdere GOT's en sorteer GOT-items. Als je zo'n linker hebt, hoef je alleen
gebruiken -mxgot bij het compileren van een enkel objectbestand dat toegang heeft tot meer dan 8192 GOT
inzendingen. Heel weinig doen dat.

Deze opties hebben geen effect tenzij GCC positie-onafhankelijke code genereert.

MCore Opties

Dit zijn de -m opties gedefinieerd voor de Motorola M*Core-processors.

-mhardlit
-mno-hardlit
Inline constanten in de codestroom als dit in twee instructies of minder kan worden gedaan.

-mdiv
-mno-div
Gebruik de verdeelinstructie. (Standaard ingeschakeld).

-mrelax-onmiddellijk
-mno-relax-onmiddellijk
Sta willekeurige grootte onmiddellijk toe in bit-operaties.

-mwide-bitvelden
-mno-brede bitvelden
Behandel bitvelden altijd als "int"-formaat.

-m4byte-functies
-mno-4byte-functies
Forceer alle functies om te worden uitgelijnd op een grens van 4 bytes.

-mcallgraph-gegevens
-mno-callgraph-data
Zend callgraph-informatie uit.

-mslow-bytes
-mno-slow-bytes
Geef de voorkeur aan woordtoegang bij het lezen van bytehoeveelheden.

-mlittle-endian
-mbig-endian
Genereer code voor een klein endian doelwit.

-m210
-m340
Genereer code voor de 210-processor.

-mno-lsim
Ga ervan uit dat runtime-ondersteuning is geleverd en laat dus de simulatorbibliotheek weg
(libsim.a) vanaf de linker-opdrachtregel.

-mstack-increment=grootte
Stel het maximale bedrag in voor een enkele stapelstapbewerking. Grote waarden kunnen
verhoog de snelheid van programma's die functies bevatten die een grote hoeveelheid nodig hebben
stapelruimte, maar ze kunnen ook een segmentatiefout veroorzaken als de stapel wordt uitgebreid
te veel. De standaardwaarde is 0x1000.

IkP Opties

-mabsdiff
Schakelt de "abs"-instructie in, wat het absolute verschil is tussen twee registers.

-mall-opteert
Schakelt alle optionele instructies in --- gemiddelde, vermenigvuldigen, delen, bitbewerkingen,
voorloopnul, absoluut verschil, min/max, clip en verzadiging.

-gemiddeld
Schakelt de "ave"-instructie in, die het gemiddelde van twee registers berekent.

-mgebaseerd=n
Variabelen van grootte n bytes of kleiner worden standaard in de sectie ".based" geplaatst.
Gebaseerde variabelen gebruiken het $tp-register als basisregister en er is een limiet van 128 bytes
naar de ".based" sectie.

-mbitoppen
Schakelt de instructies voor bitbewerkingen in --- bittest ("btstm"), set ("bsetm"), wissen
("bclrm"), invert ("bnotm") en test-en-set ("tas").

-mc=naam
Selecteert in welke sectie constante gegevens worden geplaatst. naam kan zijn kleine, in de buurtof ver.

-mclip
Schakelt de instructie "clip" in. Let daar op -mclip is niet nuttig tenzij u ook
zorgen voor -mmminmax.

-mconfig=naam
Selecteert een van de ingebouwde kernconfiguraties. Elke MeP-chip heeft een of meer
modules erin; elke module heeft een kern-CPU en een verscheidenheid aan coprocessors, optioneel
instructies en randapparatuur. De tool "MeP-Integrator", die geen deel uitmaakt van GCC, biedt:
deze configuraties via deze optie; het gebruik van deze optie is hetzelfde als het gebruik van alles
de bijbehorende opdrachtregelopties. De standaardconfiguratie is: verzuim.

-mkop
Schakelt de coprocessor-instructies in. Standaard is dit een 32-bits coprocessor. Opmerking
dat de coprocessor normaal gesproken wordt ingeschakeld via de -mconfig= optie.

-mcop32
Schakelt de instructies van de 32-bits coprocessor in.

-mcop64
Schakelt de instructies van de 64-bits coprocessor in.

-mivc2
Maakt IVC2-planning mogelijk. IVC2 is een 64-bits VLIW-coprocessor.

-mdc
Zorgt ervoor dat constante variabelen in de sectie ".near" worden geplaatst.

-mdiv
Schakelt de instructies "div" en "divu" in.

-meb
Genereer big-endian-code.

-mel
Genereer little-endian-code.

-mio-vluchtig
Vertelt de compiler dat elke variabele die is gemarkeerd met het kenmerk "io" moet zijn
als vluchtig beschouwd.

-ml Zorgt ervoor dat variabelen standaard worden toegewezen aan de sectie ".far".

-mleadz
Schakelt de instructie "leadz" (voorloopnul) in.

-mm Zorgt ervoor dat variabelen standaard worden toegewezen aan de sectie ".near".

-mmminmax
Schakelt de "min" en "max" instructies in.

-mmult
Schakelt instructies voor vermenigvuldigen en vermenigvuldigen in.

-mno-opteert
Schakelt alle optionele instructies uit die zijn ingeschakeld door -mall-opteert.

-mherhalen
Schakelt de instructies voor "herhalen" en "herhalen" in, die worden gebruikt voor lussen met een lage overhead.

-Mevrouw Zorgt ervoor dat alle variabelen standaard naar de ".tiny"-sectie gaan. Merk op dat er een
limiet van 65536 bytes voor deze sectie. Toegang tot deze variabelen maakt gebruik van de %gp-basis
registreren.

-msatur
Schakelt de verzadigingsinstructies in. Merk op dat de compiler momenteel niet:
deze zelf genereren, maar deze optie is opgenomen voor compatibiliteit met andere tools,
net als".

-msdram
Koppel de op SDRAM gebaseerde runtime in plaats van de standaard ROM-gebaseerde runtime.

-msim
Koppel de runtime-bibliotheken van de simulator.

-msimnovec
Koppel de runtime-bibliotheken van de simulator, met uitzondering van ingebouwde ondersteuning voor reset en
uitzonderingsvectoren en tabellen.

-mtf
Zorgt ervoor dat alle functies standaard worden ingesteld op de sectie ".far". Zonder deze optie, functies
standaard naar de ".near" sectie.

-min=n
Variabelen die zijn n bytes of kleiner worden toegewezen aan de sectie ".tiny". Deze
variabelen gebruiken het $gp-basisregister. De standaardwaarde voor deze optie is 4, maar houd er rekening mee dat:
er is een limiet van 65536 bytes voor de sectie ".tiny".

MicroBlaze Opties

-msoft-zweven
Gebruik software-emulatie voor drijvende komma (standaard).

-mhard-zweven
Gebruik hardware drijvende-komma-instructies.

-mmmpy
Optimaliseer geen blokbewegingen, gebruik "memcpy".

-mno-clearbss
Deze optie is verouderd. Gebruik maken van -fno-nul-geïnitialiseerd-in-bss gebruiken.

-mcpu=CPU-type
Gebruik functies van en schemacode voor de gegeven CPU. Ondersteunde waarden staan ​​in de
formaat vX.YY.Z, Waar X is een grote versie, YY is de kleine versie, en Z is
compatibiliteitscode. Voorbeeldwaarden zijn v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.

-mxl-zacht-mul
Gebruik software vermenigvuldiging emulatie (standaard).

-mxl-zacht-div
Gebruik software-emulatie voor splitsingen (standaard).

-mxl-barrel-shift
Gebruik de hardware barrel shifter.

-mxl-patroon-vergelijken
Gebruik patroonvergelijkingsinstructies.

-mklein-verdeelt
Gebruik tabelopzoekoptimalisatie voor kleine getekende integer-delingen.

-mxl-stapelcontrole
Deze optie is verouderd. Gebruik maken van -fstack-controle gebruiken.

-mxl-gp-opt
Gebruik GP-relatieve ".sdata"/".sbss" secties.

-mxl-vermenigvuldigen-hoog
Gebruik instructies voor vermenigvuldigen hoog voor het hoge deel van 32x32 vermenigvuldigen.

-mxl-float-omzetten
Gebruik hardware-instructies voor drijvende-kommaconversie.

-mxl-float-sqrt
Gebruik hardware drijvende-komma vierkantswortel instructie.

-mbig-endian
Genereer code voor een big-endian doelwit.

-mlittle-endian
Genereer code voor een klein endian doelwit.

-mxl-opnieuw bestellen
Gebruik instructies voor opnieuw bestellen (omwisselen en byte omgekeerd laden/opslaan).

-mxl-modus-app-model
Selecteer toepassingsmodel app-model. Geldige modellen zijn:

uitvoerbaar
normaal uitvoerbaar (standaard), gebruikt opstartcode crt0.o.

xmdstub
voor gebruik met op Xilinx Microprocessor Debugger (XMD) gebaseerde software intrusive debug
agent genaamd xmdstub. Dit gebruikt opstartbestand crt1.o en stelt het startadres in van
het programma naar 0x800.

bootstrap
voor toepassingen die worden geladen met een bootloader. Dit model gebruikt opstartbestand
crt2.o die geen processorreset-vectorhandler bevat. Dit is geschikt
voor het overdragen van de controle over een processorreset naar de bootloader in plaats van de
toepassing.

geen vectoren
voor toepassingen die geen van de MicroBlaze-vectoren nodig hebben. Deze optie
kan handig zijn voor toepassingen die binnen een bewakingstoepassing worden uitgevoerd. Dit model
toepassingen crt3.o als opstartbestand.

Keuze -xl-modus-app-model is een verouderde alias voor -mxl-modus-app-model.

MIPS Opties

-EB Genereer big-endian-code.

-DE Genereer little-endian-code. Dit is de standaard voor mips*el-*-* configuraties.

-maart=boog
Genereer code die draait op boog, wat de naam kan zijn van een generieke MIPS ISA, of de
naam van een bepaalde verwerker. De ISA-namen zijn: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5
en mips64r6. De processornamen zijn: 4kc, 4km, 4kp, 4ksc, 4kec, 4km, 4 kep, 4knd,
5kc, 5 kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1, 24kef1_1, 34kc, 34kf2_1,
34kf1_1, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1,
loonson2e, loonson2f, loonson3a, m4k, m14k, m14kc, m14ke, m14kec, achtste, achtste+,
octaon2, octaon3, Orion, p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650,
r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000,
vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, xlr en XLP. De
speciale waarde van-abi selecteert de meest compatibele architectuur voor de geselecteerde ABI
(dat is, mips1 voor 32-bits ABI's en mips3 voor 64-bits ABI's).

De native Linux/GNU-toolchain ondersteunt ook de waarde inheemse, die de beste selecteert
architectuuroptie voor de hostprocessor. -maart=inheems heeft geen effect als GCC dat wel doet
de processor niet herkennen.

In processornamen, een finale 000 kan worden afgekort als k (bijvoorbeeld, -maart=r2k).
Voorvoegsels zijn optioneel, en vr kan worden geschreven r.

Namen van het formulier nf2_1 verwijzen naar processors met FPU's geklokt op de helft van de snelheid van de
kern, namen van de vorm nf1_1 verwijzen naar processors met FPU's die met dezelfde snelheid zijn geklokt
als de kern, en namen van de vorm nf3_2 verwijzen naar processors met FPU's geklokt een ratio
van 3:2 met betrekking tot de kern. Om compatibiliteitsredenen, nf wordt geaccepteerd als een
synoniem voor nf2_1 en nx en bfx worden geaccepteerd als synoniemen voor nf1_1.

GCC definieert twee macro's op basis van de waarde van deze optie. De eerste is "_MIPS_ARCH",
die de naam van de doelarchitectuur geeft, als een tekenreeks. De tweede heeft de vorm
"_MIPS_ARCH_foo", Waar foo is de hoofdletterwaarde van "_MIPS_ARCH". Bijvoorbeeld,
-maart=r2000 stelt "_MIPS_ARCH" in op "r2000" en definieert de macro "_MIPS_ARCH_R2000".

Merk op dat de macro "_MIPS_ARCH" de hierboven gegeven processornamen gebruikt. In andere
woorden, het heeft het volledige voorvoegsel en wordt niet afgekort 000 as k. In het geval van van-
abi, noemt de macro de opgeloste architectuur (ofwel "mips1" of "mips3"). Het noemt
de standaardarchitectuur wanneer nee -maart optie wordt gegeven.

-mtune=boog
Optimaliseren voor boog. Deze optie bepaalt onder andere de manier waarop instructies worden gegeven:
gepland, en de waargenomen kosten van rekenkundige bewerkingen. De lijst van boog waarden
is hetzelfde als voor -maart.

Als deze optie niet wordt gebruikt, optimaliseert GCC voor de processor gespecificeerd door -maart. Door
gebruik -maart en -mtune samen is het mogelijk om code te genereren die draait op a
familie van processors, maar optimaliseer de code voor een bepaald lid van die familie.

-mtune definieert de macro's "_MIPS_TUNE" en "_MIPS_TUNE_foo", die in hetzelfde werken
manier als de -maart die hierboven zijn beschreven.

-mips1
Gelijkwaardig aan -maart=mips1.

-mips2
Gelijkwaardig aan -maart=mips2.

-mips3
Gelijkwaardig aan -maart=mips3.

-mips4
Gelijkwaardig aan -maart=mips4.

-mips32
Gelijkwaardig aan -maart=mips32.

-mips32r3
Gelijkwaardig aan -maart=mips32r3.

-mips32r5
Gelijkwaardig aan -maart=mips32r5.

-mips32r6
Gelijkwaardig aan -maart=mips32r6.

-mips64
Gelijkwaardig aan -maart=mips64.

-mips64r2
Gelijkwaardig aan -maart=mips64r2.

-mips64r3
Gelijkwaardig aan -maart=mips64r3.

-mips64r5
Gelijkwaardig aan -maart=mips64r5.

-mips64r6
Gelijkwaardig aan -maart=mips64r6.

-mips16
-mno-mips16
Genereer (niet genereren) MIPS16-code. Als GCC een MIPS32 of MIPS64 target
architectuur maakt het gebruik van de MIPS16e ASE.

MIPS16-codegeneratie kan ook per functie worden geregeld door middel van:
"mips16" en "nomips16" kenmerken.

-mflip-mips16
Genereer MIPS16-code op afwisselende functies. Deze optie is bedoeld voor regressie
testen van gemengde MIPS16/niet-MIPS16-codegeneratie, en is niet bedoeld voor gewone
gebruiken bij het samenstellen van de gebruikerscode.

-minterlink-gecomprimeerd
-mno-interlink-gecomprimeerd
Vereist (niet vereist) die code met behulp van de standaard (ongecomprimeerde) MIPS ISA be link-
compatibel met MIPS16- en microMIPS-code en vice versa.

Code die de standaard ISA-codering gebruikt, kan bijvoorbeeld niet rechtstreeks naar MIPS16 of . springen
microMIPS-code; het moet ofwel een oproep of een indirecte sprong gebruiken. -minterlink-gecomprimeerd
schakelt daarom directe sprongen uit, tenzij GCC weet dat het doel van de sprong niet is
gecomprimeerd.

-minterlink-mips16
-mno-interlink-mips16
aliassen van -minterlink-gecomprimeerd en -mno-interlink-gecomprimeerd. Deze opties
dateren van vóór de microMIPS ASE en worden bewaard voor achterwaartse compatibiliteit.

-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Genereer code voor de gegeven ABI.

Merk op dat de EABI een 32-bits en een 64-bits variant heeft. GCC genereert normaal gesproken 64-bit
code wanneer u een 64-bits architectuur selecteert, maar u kunt gebruiken -mgp32 om 32-bits code te krijgen
gebruiken.

Voor informatie over de O64 ABI, zie:http://gcc.gnu.org/projects/mipso64-abi.html>.

GCC ondersteunt een variant van de o32 ABI waarin floating-point registers eerder 64 zijn
dan 32 bits breed. U kunt deze combinatie selecteren met -mabi=32 -mfp64. Deze ABI
vertrouwt op de instructies "mthc1" en "mfhc1" en wordt daarom alleen ondersteund voor:
MIPS32R2-, MIPS32R3- en MIPS32R5-processors.

De registertoewijzingen voor argumenten en retourwaarden blijven hetzelfde, maar elk
scalaire waarde wordt doorgegeven in een enkel 64-bits register in plaats van een paar 32-bits
registreert. Zo worden scalaire waarden met drijvende komma geretourneerd in $f0 alleen, niet een
$f0/$f1 paar. De set van oproep-opgeslagen registers blijft ook hetzelfde in die zin dat de even-
genummerde registers met dubbele precisie worden opgeslagen.

Er worden twee extra varianten van de o32 ABI ondersteund om een ​​overgang mogelijk te maken van
32-bits tot 64-bits registers. Dit zijn FPXX (-mfpxx) en FP64A (-mfp64
-mno-oneven-spreg). De FPXX-extensie schrijft voor dat alle code correct moet worden uitgevoerd
wanneer uitgevoerd met 32-bits of 64-bits registers. De code kan worden gekoppeld met ofwel:
FP32 of FP64, maar niet beide. De FP64A-extensie is vergelijkbaar met de FP64-extensie, maar:
verbiedt het gebruik van oneven genummerde single-precision registers. Dit kan worden gebruikt in
combinatie met de "FRE"-modus van FPU's in MIPS32R5-processors en staat zowel FP32
en FP64A-code om onderling te koppelen en in hetzelfde proces uit te voeren zonder de FPU-modi te wijzigen.

-mabicbellen
-mno-abicalls
Genereer (niet genereren) code die geschikt is voor dynamische objecten in SVR4-stijl.
-mabicbellen is de standaardinstelling voor op SVR4 gebaseerde systemen.

-mgedeeld
-mno-gedeeld
Genereer (niet genereren) code die volledig positie-onafhankelijk is en die:
daarom worden gekoppeld aan gedeelde bibliotheken. Deze optie heeft alleen invloed op -mabicbellen.

Alles -mabicbellen code is van oudsher positie-onafhankelijk, ongeacht de opties
als -fPIC en -fpic. Als extensie staat de GNU-toolchain echter uitvoerbare bestanden toe
om absolute toegangen te gebruiken voor lokaal bindende symbolen. Het kan ook kortere GP gebruiken
initialisatiesequenties en genereer directe oproepen naar lokaal gedefinieerde functies. Dit
modus wordt geselecteerd door -mno-gedeeld.

-mno-gedeeld hangt af van binutils 2.16 of hoger en genereert objecten die alleen kunnen worden
gekoppeld door de GNU-linker. De optie heeft echter geen invloed op de ABI van de finale
uitvoerbaar; het heeft alleen invloed op de ABI van verplaatsbare objecten. Gebruik makend van -mno-gedeeld
maakt over het algemeen uitvoerbare bestanden zowel kleiner als sneller.

-mgedeeld is de standaard.

-mplt
-mno-plt
Neem aan (neem niet aan) dat de statische en dynamische linkers PLT's ondersteunen en kopieer
verhuizingen. Deze optie heeft alleen invloed op -mno-gedeeld -mabicbellen. Voor de n64 ABI is dit:
optie heeft geen effect zonder -msym32.

U Can Make -mplt de standaard door GCC te configureren met --met-mips-plt. De standaard
is -mno-plt anders.

-mxgot
-mno-xgot
Til (niet optillen) de gebruikelijke beperkingen op voor de grootte van de globale offset-tabel.

GCC gebruikt normaal gesproken een enkele instructie om waarden uit de GOT te laden. terwijl dit is
relatief efficiënt, het werkt alleen als de GOT kleiner is dan ongeveer 64k. Iets
groter zorgt ervoor dat de linker een fout meldt, zoals:

verhuizing afgekapt om te passen: R_MIPS_GOT16 foobar

Als dit gebeurt, moet u uw code opnieuw compileren met: -mxgot. Dit werkt met zeer
grote GOT's, hoewel de code ook minder efficiënt is, omdat er drie
instructies om de waarde van een globaal symbool op te halen.

Merk op dat sommige linkers meerdere GOT's kunnen maken. Als je zo'n linker hebt,
zou alleen moeten gebruiken -mxgot wanneer een enkel objectbestand toegang heeft tot meer dan 64k's
ter waarde van GOT-inzendingen. Heel weinig doen dat.

Deze opties hebben geen effect tenzij GCC positie-onafhankelijke code genereert.

-mgp32
Neem aan dat registers voor algemene doeleinden 32 bits breed zijn.

-mgp64
Neem aan dat registers voor algemene doeleinden 64 bits breed zijn.

-mfp32
Neem aan dat floating-point registers 32 bits breed zijn.

-mfp64
Neem aan dat floating-point registers 64 bits breed zijn.

-mfpxx
Ga niet uit van de breedte van drijvende-kommaregisters.

-mhard-zweven
Gebruik drijvende-komma coprocessor-instructies.

-msoft-zweven
Gebruik geen coprocessor-instructies met drijvende komma. Implementeer drijvende komma
berekeningen met behulp van bibliotheekaanroepen in plaats daarvan.

-mno-zweven
Gelijkwaardig aan -msoft-zweven, maar beweert bovendien dat het programma dat wordt gecompileerd
voert geen drijvende-kommabewerkingen uit. Deze optie wordt momenteel ondersteund
alleen door sommige bare-metal MIPS-configuraties, waar het een speciale set kan selecteren:
bibliotheken die niet alle drijvende-komma-ondersteuning hebben (inclusief bijvoorbeeld de drijvende-
punt "printf" formaten). Als code is gecompileerd met -mno-zweven bevat per ongeluk
drijvende-kommabewerkingen, is het waarschijnlijk dat er een linktime- of runtime-fout optreedt.

-msingle-float
Neem aan dat de drijvende-komma-coprocessor alleen bewerkingen met één precisie ondersteunt.

-mdubbele-zwevende
Neem aan dat de drijvende-komma-coprocessor bewerkingen met dubbele precisie ondersteunt. Dit
is de standaard.

-modd-sreg
-mno-oneven-spreg
Schakel het gebruik van oneven genummerde single-precision floating-point registers in voor de o32
ABI. Dit is de standaardinstelling voor processors waarvan bekend is dat ze deze registers ondersteunen.
Bij gebruik van de o32 FPXX ABI, -mno-oneven-spreg is standaard ingesteld.

-mabs=2008
-mabs=erfenis
Deze opties regelen de behandeling van de speciale niet-een-nummer (NaN) IEEE 754
drijvende-kommagegevens met de "abs.fmt" en "neg.fmt" machine instructies.

Standaard of wanneer -mabs=erfenis wordt gebruikt, wordt de legacy-behandeling geselecteerd. In deze
in het geval dat deze instructies als rekenkundig worden beschouwd en vermeden worden bij correcte werking
is vereist en de invoeroperand kan een NaN zijn. Een langere reeks instructies
die het tekenbit van de drijvende-kommadatum handmatig manipuleren, wordt in plaats daarvan gebruikt, tenzij
de -alleen eindige-wiskunde optie is ook opgegeven.

De -mabs=2008 optie selecteert de IEEE 754-2008-behandeling. In dit geval deze
instructies worden als niet-rekenkundig beschouwd en werken daarom in het algemeen correct
gevallen, ook in het bijzonder wanneer de invoeroperand een NaN is. Deze instructies:
worden daarom altijd gebruikt voor de respectievelijke bewerkingen.

-mnan=2008
-mnan=erfenis
Deze opties regelen de codering van de speciale niet-een-nummer (NaN) IEEE 754
drijvende-kommagegevens.

De -mnan=erfenis optie selecteert de oude codering. In dit geval rustige NaNs (qNaNs)
worden aangegeven door het eerste bit van hun volgende significante veld dat 0 is, terwijl
signalerende NaN's (sNaN's) worden aangegeven met het eerste bit van hun achterliggende betekenis
veld is 1.

De -mnan=2008 optie selecteert de IEEE 754-2008-codering. In dit geval zijn qNaNs
aangegeven door het eerste bit van hun achterliggende significante veld dat 1 is, terwijl sNaNs
worden aangegeven door het eerste bit van hun volgende significante veld dat 0 is.

De standaard is -mnan=erfenis tenzij GCC is geconfigureerd met --met-nan=2008.

-mllsc
-mno-llsc
Gebruik (niet gebruiken) ll, sc en sync instructies om ingebouwd atomair geheugen te implementeren
functies. Als geen van beide opties is opgegeven, gebruikt GCC de instructies als het doel
architectuur ondersteunt hen.

-mllsc is handig als de runtime-omgeving de instructies kan emuleren en -mno-llsc
kan handig zijn bij het compileren voor niet-standaard ISA's. U kunt van beide opties de
standaard door GCC te configureren met --met-llsc en --zonder-llsc respectievelijk.
--met-llsc is de standaard voor sommige configuraties; zie de installatiedocumentatie
voor meer info.

-mdsp
-mno-dsp
Gebruik (niet gebruiken) revisie 1 van de MIPS DSP ASE.
Deze optie definieert de preprocessor-macro "__mips_dsp". Het definieert ook
"__mips_dsp_rev" naar 1.

-mdspr2
-mno-dspr2
Gebruik (niet gebruiken) revisie 2 van de MIPS DSP ASE.
Deze optie definieert de preprocessor-macro's "__mips_dsp" en "__mips_dspr2". Het
definieert ook "__mips_dsp_rev" tot 2.

-msmartmips
-mno-smartmips
Gebruik (niet gebruiken) de MIPS SmartMIPS ASE.

-gehandicapt-single
-mno-gepaarde-single
Gebruik (niet gebruiken) gepaarde-enkele drijvende-komma-instructies.
Voor deze optie moet hardware-ondersteuning voor drijvende komma's zijn ingeschakeld.

-mdmx
-mno-mdmx
Gebruik (niet gebruiken) MIPS Digital Media Extension-instructies. Deze optie kan alleen
gebruikt bij het genereren van 64-bits code en vereist hardware-floating-point-ondersteuning om
ingeschakeld.

-mips3d
-mno-mips3d
Gebruik (niet gebruiken) de MIPS-3D ASE. De optie -mips3d impliceert -gehandicapt-single.

-mmmicromips
-mno-micromips
Genereer (niet genereren) microMIPS-code.

MicroMIPS-codegeneratie kan ook per functie worden geregeld door middel van:
"micromips" en "nomicromips" attributen.

- mmt
-mno-mt
Gebruik (niet gebruiken) MT Multithreading instructies.

-mmcu
-mno-mcu
Gebruik (niet gebruiken) de MIPS MCU ASE-instructies.

-meva
-mno-eva
Gebruik (niet gebruiken) de instructies voor MIPS Enhanced Virtual Addressing.

-mvirt
-mno-virt
Gebruik (niet gebruiken) de MIPS Virtualization Application Specific instructies.

-mxpa
-mno-xpa
Gebruik (niet gebruiken) de MIPS eXtended Physical Address (XPA) instructies.

-mlong64
Forceer "lange" typen om 64 bits breed te zijn. Zien -mlong32 voor een uitleg van de standaard
en de manier waarop de grootte van de aanwijzer wordt bepaald.

-mlong32
Forceer "long", "int" en pointer typen om 32 bits breed te zijn.

De standaardgrootte van "int"s, "long"s en pointers is afhankelijk van de ABI. Al de
ondersteunde ABI's gebruiken 32-bits "int"s. De n64 ABI gebruikt 64-bit "lange" s, net als de 64-bit
EABI; de anderen gebruiken 32-bit "long"s. Pointers zijn even groot als "lange" s, of de
dezelfde grootte als integer registers, welke kleiner is.

-msym32
-mno-sym32
Neem aan (neem niet aan) dat alle symbolen 32-bits waarden hebben, ongeacht de geselecteerde
ABI. Deze optie is handig in combinatie met: -mabi=64 en -mno-abicalls omdat
stelt GCC in staat om kortere en snellere verwijzingen naar symbolische adressen te genereren.

-G num
Zet definities van extern zichtbare gegevens in een kleine gegevenssectie als die gegevens niet bestaan
groter dan num bytes. GCC kan dan efficiëntere toegangen tot de gegevens genereren; zien
-mgpopt voor meer info.

De standaard -G optie hangt af van de configuratie.

-mlokale-sdata
-mno-lokale-sdata
Verlengen (niet verlengen) de -G gedrag ook naar lokale gegevens, zoals naar statische variabelen
in C. -mlokale-sdata is de standaard voor alle configuraties.

Als de linker klaagt dat een toepassing te veel kleine gegevens gebruikt, kunt u:
wilt proberen de minder prestatiekritische onderdelen opnieuw op te bouwen met -mno-lokale-sdata. Je
wil misschien ook grote bibliotheken bouwen met -mno-lokale-sdata, zodat de bibliotheken
laat meer ruimte over voor het hoofdprogramma.

-mextern-sdata
-mno-externe-sdata
Neem aan (neem niet aan) dat extern gedefinieerde gegevens zich in een kleine gegevenssectie bevinden als de
grootte van die gegevens is binnen de -G limit. -mextern-sdata is de standaard voor iedereen
configuraties.

Als je een module compileert Weg Met -mextern-sdata -G num -mgpopt en Weg referenties a
variabele was dat is niet groter dan num bytes, moet u ervoor zorgen dat was is geplaatst
in een kleine gegevenssectie. Indien was wordt gedefinieerd door een andere module, moet u ofwel compileren
die module met een hoog genoeg -G instelling of voeg een attribuut "sectie" toe aan was's
definitie. Indien was gebruikelijk is, moet u de toepassing koppelen met een voldoende hoog -G
instellen.

De gemakkelijkste manier om aan deze beperkingen te voldoen, is door elke module te compileren en te koppelen
met dezelfde -G optie. Het is echter mogelijk dat u een bibliotheek wilt bouwen die ondersteuning biedt voor
verschillende kleine datalimieten. U kunt dit doen door de bibliotheek te compileren met
de hoogst ondersteunde -G instellen en aanvullend gebruiken -mno-externe-sdata om de
bibliotheek van het maken van aannames over extern gedefinieerde gegevens.

-mgpopt
-mno-gpopt
Gebruik (niet gebruiken) GP-relatieve toegangen voor symbolen waarvan bekend is dat ze in kleine gegevens voorkomen
sectie; zien -G, -mlokale-sdata en -mextern-sdata. -mgpopt is de standaard voor iedereen
configuraties.

-mno-gpopt is handig voor gevallen waarin het $gp-register mogelijk niet de waarde van bevat
"_gp". Als de code bijvoorbeeld deel uitmaakt van een bibliotheek die kan worden gebruikt bij het opstarten
monitor, geven programma's die opstartmonitorroutines aanroepen een onbekende waarde door in $gp. (In
dergelijke situaties wordt de opstartmonitor zelf meestal gecompileerd met: -G0.)

-mno-gpopt impliceert -mno-lokale-sdata en -mno-externe-sdata.

-ingesloten-gegevens
-mno-ingebedde-gegevens
Wijs variabelen eerst toe aan de alleen-lezen gegevenssectie indien mogelijk, dan daarna in de
kleine gegevenssectie indien mogelijk, anders in gegevens. Dit geeft een iets langzamere code
dan de standaard, maar vermindert de hoeveelheid RAM die nodig is bij het uitvoeren, en kan dus
voorkeur hebben voor sommige embedded systemen.

-muninit-const-in-rodata
-mno-unitit-const-in-rodata
Zet niet-geïnitialiseerde "const"-variabelen in de alleen-lezen gegevenssectie. Deze optie is
alleen zinvol in combinatie met -ingesloten-gegevens.

-mcode-leesbaar=het instellen van
Geef op of GCC code mag genereren die leest uit uitvoerbare secties. Er zijn
drie mogelijke instellingen:

-mcode-readable=ja
Instructies hebben vrij toegang tot uitvoerbare secties. Dit is de standaardinstelling.

-mcode-leesbaar=pcrel
MIPS16 PC-relatieve laadinstructies hebben toegang tot uitvoerbare secties, maar andere
instructies mogen dit niet doen. Deze optie is handig op 4KSc- en 4KSd-processors
wanneer de code-TLB's de Read Inhibit-bit hebben ingesteld. Het is ook handig op processors
die kan worden geconfigureerd om een ​​dubbele instructie/data SRAM-interface te hebben en dat,
net als de M4K, leiden pc-relatieve belastingen automatisch naar het instructie-RAM.

-mcode-readable=nee
Instructies mogen geen toegang hebben tot uitvoerbare secties. Deze optie kan handig zijn op:
doelen die zijn geconfigureerd om een ​​dubbele instructie/data SRAM-interface te hebben, maar
die (in tegenstelling tot de M4K) pc-relatieve belastingen niet automatisch omleiden naar de
instructie RAM.

-msplit-adressen
-mno-split-adressen
Schakel het gebruik van de "%hi()" en "%lo()" assembler-verplaatsingsoperators in (uit). Dit
optie is vervangen door -mexpliciete-relocs maar wordt bewaard voor achteruit
compatibiliteit.

-mexpliciete-relocs
-mno-expliciete-relocs
Gebruik (niet gebruiken) assembler-verplaatsingsoperatoren bij het omgaan met symbolische adressen.
Het alternatief, geselecteerd door -mno-expliciete-relocs, is om in plaats daarvan assembler-macro's te gebruiken.

-mexpliciete-relocs is de standaard als GCC is geconfigureerd om een ​​assembler te gebruiken die:
ondersteunt verhuisbedrijven.

-mcheck-nul-divisie
-mno-check-nul-divisie
Trap (niet trap) op integer delen door nul.

De standaard is -mcheck-nul-divisie.

-mdivide-vallen
-tussenpauzes
MIPS-systemen controleren op deling door nul door ofwel een conditionele trap of a . te genereren
instructie breken. Het gebruik van traps resulteert in kleinere code, maar wordt alleen ondersteund op MIPS
II en later. Sommige versies van de Linux-kernel hebben ook een bug die trap voorkomt
van het genereren van het juiste signaal ("SIGFPE"). Gebruik maken van -mdivide-vallen voorwaardelijk toestaan
vallen op architecturen die ze ondersteunen en -tussenpauzes het gebruik van
pauzes.

De standaard is meestal -mdivide-vallen, maar dit kan worden overschreven tijdens het configureren
gebruik --with-divide=onderbrekingen. Verdeel-door-nul-controles kunnen volledig worden uitgeschakeld met behulp van
-mno-check-nul-divisie.

-mmmpy
-mno-memcpy
Forceer (dwing niet) het gebruik van "memcpy" voor niet-triviale blokbewegingen. De standaard is
-mno-memcpy, waarmee GCC de meeste kopieën van constant formaat inline kan plaatsen.

-mlong-oproepen
-mno-lange gesprekken
Schakel het gebruik van de "jal"-instructie uit (niet uitschakelen). Functies oproepen met "jal"
is efficiënter, maar vereist dat de beller en de gebelde zich in dezelfde 256 megabyte bevinden
segment.

Deze optie heeft geen effect op de abicalls-code. De standaard is -mno-lange gesprekken.

-mad
-mno-gek
Schakel het gebruik van de instructies "mad", "madu" en "mul" in (uit) zoals geleverd door de
R4650 ISA.

-mimadd
-mno-imadd
Schakel het gebruik van de "madd" en "msub" integer-instructies in (uit). De standaard is
-mimadd op architecturen die "madd" en "msub" ondersteunen, behalve de 74k
architectuur waar het langzamere code bleek te genereren.

-mfused-gek
-mno-gefuseerd-madd
Schakel het gebruik van de drijvende-komma-instructies voor vermenigvuldigen en accumuleren in (uit) wanneer ze
zijn beschikbaar. De standaard is -mfused-gek.

Op de R8000 CPU wanneer instructies voor meervoudig accumuleren worden gebruikt, is de tussenliggende
product wordt met oneindige precisie berekend en is niet onderworpen aan de FCSR Flush to
Nul bit. Dit kan onder bepaalde omstandigheden onwenselijk zijn. Op andere processors de
resultaat is numeriek identiek aan de equivalente berekening met afzonderlijke vermenigvuldiging,
instructies optellen, aftrekken en negeren.

-nocpp
Vertel de MIPS-assembler om zijn preprocessor niet uit te voeren over gebruikers-assembler-bestanden (met a
.s achtervoegsel) bij het samenstellen ervan.

-mfix-24k
-mno-fix-24k
Werk rond de 24K E48 (verloren gegevens over winkels tijdens bijvullen) errata. De oplossingen
worden uitgevoerd door de assembler in plaats van door GCC.

-mfix-r4000
-mno-fix-r4000
Werk om bepaalde R4000 CPU-errata heen:

- Een dubbelwoord of een variabele verschuiving kan een onjuist resultaat geven als het wordt uitgevoerd
onmiddellijk na het starten van een gehele deling.

- Een dubbel woord of een variabele verschuiving kan een onjuist resultaat geven als het wordt uitgevoerd terwijl
een gehele vermenigvuldiging aan de gang is.

- Een gehele deling kan een onjuist resultaat geven als het wordt gestart in een vertragingsslot van a
genomen tak of een sprong.

-mfix-r4400
-mno-fix-r4400
Werk om bepaalde R4400 CPU-errata heen:

- Een dubbelwoord of een variabele verschuiving kan een onjuist resultaat geven als het wordt uitgevoerd
onmiddellijk na het starten van een gehele deling.

-mfix-r10000
-mno-fix-r10000
Werk rond bepaalde R10000-errata:

- "ll"/"sc"-reeksen gedragen zich mogelijk niet atomair bij revisies vóór 3.0. Zij mogen
impasse bij revisies 2.6 en eerder.

Deze optie kan alleen worden gebruikt als de doelarchitectuur branch-waarschijnlijk ondersteunt
instructies. -mfix-r10000 is de standaard wanneer -maart=r10000 is gebruikt; -mno-fix-r10000
is anders de standaard.

-mfix-rm7000
-mno-fix-rm7000
Werk om de RM7000 "dmult"/"dmultu" errata heen. De tijdelijke oplossingen worden geïmplementeerd door:
de assembler in plaats van door GCC.

-mfix-vr4120
-mno-fix-vr4120
Werk om bepaalde VR4120-errata heen:

- "dmultu" geeft niet altijd het juiste resultaat.

- "div" en "ddiv" geven niet altijd het juiste resultaat als een van de operanden
is negatief.

De tijdelijke oplossingen voor de errata van de deling zijn afhankelijk van speciale functies in libgcc.a. Op
aanwezig zijn, worden deze functies alleen geleverd door de "mips64vr*-elf"-configuraties.

Voor andere VR4120-errata moet een NOP worden ingevoegd tussen bepaalde paren
instructies. Deze errata worden afgehandeld door de assembler, niet door GCC zelf.

-mfix-vr4130
Werk rond de VR4130 "mflo"/"mfhi" errata. De tijdelijke oplossingen worden geïmplementeerd door de
assembler in plaats van door GCC, hoewel GCC het gebruik van "mflo" en "mfhi" vermijdt als de
VR4130 "macc", "macchi", "dmacc" en "dmacchi" instructies zijn in plaats daarvan beschikbaar.

-mfix-sb1
-mno-fix-sb1
Werk om bepaalde SB-1 CPU-kernfouten heen. (Deze vlag werkt momenteel rond de SB-1
revisie 2 "F1" en "F2" drijvende-komma errata.)

-mr10k-cache-barrière=het instellen van
Geef aan of GCC cachebarrières moet invoegen om de bijwerkingen van:
speculatie over R10K-processors.

Net als bij veel processors probeert de R10K de uitkomst van een voorwaardelijke
branch en voert speculatief instructies uit van de "genomen" branch. het later
breekt deze instructies af als de voorspelde uitkomst verkeerd is. Echter, op de R10K,
zelfs afgebroken instructies kunnen bijwerkingen hebben.

Dit probleem is alleen van invloed op kernel-archieven en, afhankelijk van het systeem, op het laden van de kernel.
Een speculatief uitgevoerde winkel kan bijvoorbeeld het doelgeheugen in de cache laden
en markeer de cacheregel als vuil, zelfs als de winkel zelf later wordt afgebroken. Als een DMA
bewerking schrijft naar hetzelfde geheugengebied voordat de "vuile" regel wordt leeggemaakt, de
gegevens in de cache overschrijven de DMA-ed gegevens. Zie de handleiding van de R10K-processor voor een volledige
beschrijving, inclusief andere mogelijke problemen.

Een tijdelijke oplossing is om instructies voor de cachebarrière in te voegen vóór elke geheugentoegang die:
zou speculatief kunnen worden uitgevoerd en dat kan bijwerkingen hebben, zelfs als het wordt afgebroken.
-mr10k-cache-barrière=het instellen van controleert de implementatie van deze tijdelijke oplossing door GCC. Het
gaat ervan uit dat afgebroken toegangen tot een byte in de volgende regio's geen side . hebben
Effecten:

1. het geheugen dat wordt ingenomen door het stapelframe van de huidige functie;

2. het geheugen dat wordt ingenomen door een inkomend stapelargument;

3. het geheugen bezet door een object met een link-time-constant adres.

Het is de verantwoordelijkheid van de kernel om ervoor te zorgen dat speculatieve toegang tot deze regio's
zijn inderdaad veilig.

Als het invoerprogramma een functiedeclaratie bevat, zoals:

void foo (nietig);

dan moet de implementatie van "foo" toestaan ​​dat "j foo" en "jal foo" worden uitgevoerd
speculatief. GCC respecteert deze beperking voor functies die het zelf compileert. Het
verwacht dat niet-GCC-functies (zoals handgeschreven assemblagecode) hetzelfde doen.

De optie heeft drie vormen:

-mr10k-cache-barrier=laad-opslag
Plaats een cache-barrière vóór een belasting of winkel die speculatief kan worden uitgevoerd
en dat kan bijwerkingen hebben, zelfs als het wordt afgebroken.

-mr10k-cache-barrier=winkel
Plaats een cachebarrière voor een winkel die speculatief kan worden uitgevoerd en
dat kan bijwerkingen hebben, zelfs als het wordt afgebroken.

-mr10k-cache-barrier=geen
Schakel het invoegen van cachebarrières uit. Dit is de standaardinstelling.

-mflush-func=func
-mno-flush-func
Specificeert de functie die moet worden aangeroepen om de I- en D-caches te spoelen, of om dergelijke niet aan te roepen
functie. Indien aangeroepen, moet de functie dezelfde argumenten hebben als de common
"_flush_func", dat wil zeggen, het adres van het geheugenbereik waarvoor de cache wordt gebruikt
flushed, de grootte van het geheugenbereik en het getal 3 (om beide caches te wissen). De
standaard hangt af van het doel waarvoor GCC is geconfigureerd, maar is meestal ofwel:
"_flush_func" of "__cpu_flush".

mbranch-kosten=num
Stel de kosten van filialen in op ongeveer num "eenvoudige" instructies. Deze kosten zijn slechts een
heuristiek en levert niet gegarandeerd consistente resultaten op voor alle releases. Een nul
cost redundant selecteert de standaard, die is gebaseerd op de -mtune instellen.

-mbranch-waarschijnlijk
-mno-tak-waarschijnlijk
Schakel het gebruik van Vertakkingswaarschijnlijke instructies in of uit, ongeacht de standaard voor de
geselecteerde architectuur. Standaard kunnen Branch Likely-instructies worden gegenereerd als:
ze worden ondersteund door de geselecteerde architectuur. Een uitzondering is voor de MIPS32 en
MIPS64-architecturen en processors die deze architecturen implementeren; voor degenen,
Vertakkingswaarschijnlijke instructies worden niet standaard gegenereerd omdat de MIPS32 en
MIPS64-architecturen keuren het gebruik ervan specifiek af.

-mfp-uitzonderingen
-mno-fp-uitzonderingen
Geeft aan of FP-uitzonderingen zijn ingeschakeld. Dit heeft invloed op hoe FP-instructies zijn
gepland voor sommige processors. De standaard is dat FP-uitzonderingen zijn ingeschakeld.

Bijvoorbeeld, op de SB-1, als FP-uitzonderingen zijn uitgeschakeld en we 64-bits uitzenden
code, dan kunnen we beide FP-buizen gebruiken. Anders kunnen we maar één FP-buis gebruiken.

-mvr4130-uitlijnen
-mno-vr4130-uitlijnen
De VR4130-pijplijn is superscalair in twee richtingen, maar kan slechts twee instructies geven
samen als de eerste 8-byte is uitgelijnd. Als deze optie is ingeschakeld, wordt GCC uitgelijnd
paar instructies waarvan het denkt dat ze parallel moeten worden uitgevoerd.

Deze optie heeft alleen effect bij het optimaliseren voor de VR4130. Het maakt normaal gesproken code
sneller, maar ten koste van het groter maken. Het is standaard ingeschakeld op
optimalisatie niveau -O3.

-msynci
-mno-sync
Activeer (deactiveer) het genereren van "synci"-instructies op architecturen die dit ondersteunen.
De "synci"-instructies (indien ingeschakeld) worden gegenereerd wanneer "__builtin___clear_cache" is
gecompileerd.

Deze optie is standaard -mno-sync, maar de standaard kan worden overschreven door te configureren
GCC met --met-synchronisatie.

Bij het compileren van code voor systemen met één processor is het over het algemeen veilig om "synci" te gebruiken.
Op veel multi-core (SMP) systemen maakt het de instructie echter niet ongeldig
caches op alle kernen en kan leiden tot ongedefinieerd gedrag.

-mrelax-pic-oproepen
-mno-relax-pic-oproepen
Probeer PIC-oproepen die normaal via register $ 25 worden verzonden, om te zetten in directe oproepen.
Dit is alleen mogelijk als de linker de bestemming op link-time kan bepalen en als
de bestemming is binnen bereik voor een directe oproep.

-mrelax-pic-oproepen is de standaard als GCC is geconfigureerd om een ​​assembler te gebruiken en a
linker die de montagerichtlijn ".reloc" ondersteunt en -mexpliciete-relocs in
effect. Met -mno-expliciete-relocs, deze optimalisatie kan worden uitgevoerd door de
assembler en de linker alleen zonder hulp van de compiler.

-mmcount-ra-adres
-mno-mcount-ra-adres
Emit (niet uitzenden) code waarmee "_mcount" de return van de aanroepende functie kan wijzigen
adres. Indien ingeschakeld, breidt deze optie de gebruikelijke "_mcount"-interface uit met een nieuwe
ra-adres parameter, die het type "intptr_t *" heeft en wordt doorgegeven in register $12.
"_mcount" kan vervolgens het retouradres wijzigen door het volgende te doen:

* Teruggeven van het nieuwe adres in register $31.

* Het nieuwe adres opslaan in "*ra-adres", als ra-adres is niet-null.

De standaard is -mno-mcount-ra-adres.

MMIX Opties

Deze opties zijn gedefinieerd voor de MMIX:

-mlibfuncties
-mno-libfuncs
Specificeer dat intrinsieke bibliotheekfuncties worden gecompileerd, waarbij alle waarden worden doorgegeven
registers, ongeacht de grootte.

-mepsilon
-mno-epsilon
Genereer drijvende-komma-vergelijkingsinstructies die vergelijkbaar zijn met de "rE"
epsilon registreren.

-mabi=mmixware
-mabi=gnu
Genereer code die functieparameters doorgeeft en retourneert waarden die (in de aangeroepen
functie) worden gezien als registers $0 en hoger, in tegenstelling tot de GNU ABI die gebruikmaakt van global
registreert $ 231 en hoger.

-mzero-uitbreiden
-mno-nul-verlengen
Als u gegevens uit het geheugen leest met een grootte kleiner dan 64 bits, gebruik dan (niet gebruiken) nul-
het standaard uitbreiden van laadinstructies in plaats van tekenverlengende instructies.

-mknuthdiv
-mno-knuthdiv
Zorg dat het resultaat van een deling die een rest oplevert hetzelfde teken heeft als de deler.
Met de standaard, -mno-knuthdiv, het teken van de rest volgt het teken van de
dividend. Beide methoden zijn rekenkundig geldig, de laatste is bijna uitsluitend
gebruikt.

-mtoplevel-symbolen
-mno-toplevel-symbolen
Voeg toe (niet toevoegen) a : op alle globale symbolen, zodat de assembly-code kan worden gebruikt
met de montagerichtlijn "PREFIX".

-melf
Genereer een uitvoerbaar bestand in de ELF-indeling, in plaats van de standaard mmo formaat gebruikt door
de mix simulator.

-mtak-voorspellen
-mno-tak-voorspelling
Gebruik (gebruik niet) de instructies voor waarschijnlijke vertakkingen, wanneer statische vertakkingsvoorspelling
geeft een waarschijnlijke tak aan.

-mbase-adressen
-mno-base-adressen
Genereer (niet genereren) code die gebruikmaakt van baseren adressen. Een basisadres gebruiken
genereert automatisch een verzoek (verwerkt door de assembler en de linker) voor a
constante op te zetten in een globaal register. Het register wordt gebruikt voor een of meer bases
adresverzoeken binnen het bereik 0 tot 255 vanaf de waarde in het register. De
leidt over het algemeen tot korte en snelle code, maar het aantal verschillende gegevensitems dat
kunnen worden aangepakt, is beperkt. Dit betekent dat een programma dat veel statische gegevens gebruikt
kan nodig hebben -mno-base-adressen.

-msingle-uitgang
-mno-enkele-uitgang
Forceer (dwing niet) gegenereerde code om een ​​enkel exit-punt in elke functie te hebben.

MN10300 Opties

Deze -m opties zijn gedefinieerd voor Matsushita MN10300-architecturen:

-mmult-bug
Genereer code om fouten in de vermenigvuldigingsinstructies voor de MN10300-processors te voorkomen.
Dit is de standaardinstelling.

-mno-multi-bug
Genereer geen code om fouten in de vermenigvuldigingsinstructies voor de MN10300 te voorkomen
processors.

-mama33
Genereer code met behulp van functies die specifiek zijn voor de AM33-processor.

-mno-am33
Genereer geen code met functies die specifiek zijn voor de AM33-processor. Dit is de
standaard.

-mam33-2
Genereer code met behulp van functies die specifiek zijn voor de AM33/2.0-processor.

-mama34
Genereer code met behulp van functies die specifiek zijn voor de AM34-processor.

-mtune=CPU-type
Gebruik de timingkenmerken van het aangegeven CPU-type bij het plannen van instructies.
Dit verandert niets aan het beoogde processortype. Het CPU-type moet een van zijn:
mn10300, am33, ben33-2 or am34.

-mretourwijzer-op-d0
Wanneer u een functie genereert die een aanwijzer retourneert, retourneert u de aanwijzer in zowel "a0" als
"d0". Anders wordt de aanwijzer alleen geretourneerd in "a0", en probeert deze aan te roepen
functies zonder prototype resulteren in fouten. Merk op dat deze optie is ingeschakeld door
standaard; gebruik maken van -mno-retourwijzer-op-d0 om het uit te schakelen.

-mno-crt0
Maak geen koppeling in het C runtime initialisatieobjectbestand.

-montspan
Geef aan de linker aan dat deze een relaxatie-optimalisatie moet uitvoeren om
vertakkingen, oproepen en absolute geheugenadressen verkorten. Deze optie heeft alleen effect
wanneer gebruikt op de opdrachtregel voor de laatste linkstap.

Deze optie maakt symbolische foutopsporing onmogelijk.

-mlw
Laat de compiler genereren lang Instructie Woord instructies als het doel de . is
AM33 of later. Dit is de standaardinstelling. Deze optie definieert de preprocessor-macro
"__LIW__".

-mijn
Sta niet toe dat de compiler genereert lang Instructie Woord instructies. Deze optie
definieert de preprocessor-macro "__NO_LIW__".

-msetlb
Laat de compiler de genereren SETLB en Lcc instructies als het doel de . is
AM33 of later. Dit is de standaardinstelling. Deze optie definieert de preprocessor-macro
"__SETLB__".

-mnosetlb
Sta niet toe dat de compiler genereert SETLB or Lcc instructies. Deze optie definieert
de preprocessor-macro "__NO_SETLB__".

Moxie Opties

-meb
Genereer big-endian-code. Dit is de standaard voor moxie-*-* configuraties.

-mel
Genereer little-endian-code.

-mmul.x
Genereer mul.x en umul.x instructies. Dit is de standaard voor moxiebox-*-*
configuraties.

-mno-crt0
Maak geen koppeling in het C runtime initialisatieobjectbestand.

MSP430 Opties

Deze opties zijn gedefinieerd voor de MSP430:

-masm-hex
Forceer de uitvoer van de assembly om altijd hex-constanten te gebruiken. Normaal gesproken zijn dergelijke constanten ondertekend
decimalen, maar deze optie is beschikbaar voor testsuite en/of esthetische doeleinden.

-mmcu=
Selecteer de MCU die u wilt targeten. Dit wordt gebruikt om een ​​C-preprocessor-symbool te maken op basis van:
de MCU-naam, geconverteerd naar hoofdletters en vooraf en achteraf gefixeerd met __. Dit op zijn beurt
wordt gebruikt door de msp430.h header-bestand om een ​​MCU-specifieke aanvullende header te selecteren
bestand.

De optie stelt ook de ISA in om te gebruiken. Als de MCU-naam er een is die alleen bekend is bij:
ondersteunt de 430 ISA dan is dat geselecteerd, anders wordt de 430X ISA geselecteerd. EEN
generieke MCU-naam van msp430 kan ook worden gebruikt om de 430 ISA te selecteren. evenzo de
algemeen msp430x MCU-naam selecteert de 430X ISA.

Daarnaast wordt een MCU-specifiek linker-script toegevoegd aan de linker-opdrachtregel. De
de naam van het script is de naam van de MCU met .ld toegevoegd. dus specificeren -mmcu=xxx on
de gcc opdrachtregel definieert het C preprocessor-symbool "__XXX__" en veroorzaakt de linker
om te zoeken naar een script genaamd xxx.ld.

Deze optie wordt ook doorgegeven aan de assembler.

-mcpu=
Specificeert de te gebruiken ISA. Geaccepteerde waarden zijn: msp430, msp430x en msp430xv2. Deze
optie wordt afgeraden. De -mmcu= optie moet worden gebruikt om de ISA te selecteren.

-msim
Link naar de runtime-bibliotheken van de simulator en het linkerscript. Overschrijft alle scripts die
zou worden geselecteerd door de -mmcu= optie.

-groter
Gebruik adressering voor grote modellen (20-bits pointers, 32-bits "size_t").

-mklein
Gebruik adressering met een klein model (16-bits pointers, 16-bits "size_t").

-montspan
Deze optie wordt doorgegeven aan de assembler en linker, en stelt de linker in staat om te presteren
bepaalde optimalisaties die niet kunnen worden gedaan tot de laatste link.

mhwmult=
Beschrijft het type hardwarevermenigvuldiging dat door het doel wordt ondersteund. Geaccepteerde waarden zijn:
geen voor geen hardware vermenigvuldigen, 16bit voor de originele 16-bits vermenigvuldiging alleen ondersteund
door vroege MCU's. 32bit voor de 16/32-bits vermenigvuldiging ondersteund door latere MCU's en f5serie
voor de 16/32-bits vermenigvuldiging die wordt ondersteund door MCU's uit de F5-serie. een waarde van auto kan ook
gegeven. Dit vertelt GCC om de hardware-multiple-ondersteuning af te leiden op basis van de MCU-naam
geleverd door de -mmcu optie. Als Nee -mmcu optie is opgegeven dan 32bit hardware
vermenigvuldigingsondersteuning wordt aangenomen. auto is de standaardinstelling.

Hardwarevermenigvuldigingen worden normaal gesproken uitgevoerd door een bibliotheekroutine aan te roepen. Dit bespaart
spatie in de gegenereerde code. Bij het compileren op -O3 of hoger, maar de hardware
multiplier wordt inline aangeroepen. Dit zorgt voor grotere, maar snellere code.

De hardware-vermenigvuldigingsroutines schakelen interrupts uit tijdens het uitvoeren en herstellen de
vorige onderbrekingsstatus wanneer ze klaar zijn. Dit maakt ze veilig om binnen te gebruiken
interrupt handlers als in normale code.

-minrt
Schakel het gebruik van een minimale runtime-omgeving in - geen statische initializers of
constructeurs. Dit is bedoeld voor apparaten met een beperkt geheugen. De compiler bevat:
speciale symbolen in sommige objecten die de linker en runtime vertellen welke codefragmenten
nodig.

NDS32 Opties

Deze opties zijn gedefinieerd voor NDS32-implementaties:

-mbig-endian
Genereer code in big-endian-modus.

-mlittle-endian
Genereer code in little-endian-modus.

-mgereduceerde-regs
Gebruik gereduceerde registers voor registertoewijzing.

-mfull-regs
Gebruik volledige registers voor registertoewijzing.

-mcmov
Genereer voorwaardelijke verplaatsingsinstructies.

-mno-cmov
Genereer geen voorwaardelijke verplaatsingsinstructies.

-mperf-ext
Genereer instructies voor prestatie-uitbreiding.

-mno-perf-ext
Genereer geen instructies voor prestatie-uitbreidingen.

-mv3push
Genereer v3 push25/pop25 instructies.

-mno-v3push
Genereer geen v3 push25/pop25-instructies.

-m16-bit
Genereer 16-bits instructies.

-mno-16-bits
Genereer geen 16-bits instructies.

-misr-vectorgrootte=num
Specificeer de grootte van elke onderbrekingsvector, die 4 of 16 moet zijn.

-mcache-blokgrootte=num
Specificeer de grootte van elk cacheblok, dit moet een macht van 2 zijn tussen 4 en 512.

-maart=boog
Geef de naam van de doelarchitectuur op.

-mcmodel=codemodel
Stel het codemodel in op een van

Klein
Alle gegevens en alleen-lezen gegevenssegmenten moeten zich binnen een adresruimte van 512 KB bevinden.
Het tekstsegment moet binnen 16 MB adresruimte zijn.

Medium
Het datasegment moet binnen 512 KB zijn, terwijl het alleen-lezen datasegment kan zijn:
binnen 4GB adresseringsruimte. Het tekstsegment moet nog steeds binnen 16 MB zijn
ruimte aanspreken.

Groot
Alle tekst- en gegevenssegmenten kunnen zich binnen een adresruimte van 4 GB bevinden.

-mctor-dtor
Constructor/destructor-functie inschakelen.

-montspan
Gids linker om instructies te ontspannen.

Nios II Opties

Dit zijn de opties die zijn gedefinieerd voor de Altera Nios II-processor.

-G num
Zet globale en statische objecten kleiner dan of gelijk aan num bytes in de kleine gegevens of
BSS-secties in plaats van de normale data- of BSS-secties. De standaardwaarde van num is
8.

-mgpopt=optie
-mgpopt
-mno-gpopt
Genereer (niet genereren) GP-relatieve toegangen. Het volgende optie namen zijn
erkend:

geen
Genereer geen GP-relatieve toegangen.

lokaal
Genereer GP-relatieve toegangen voor kleine gegevensobjecten die niet extern zijn of
zwak. Gebruik ook GP-relatieve adressering voor objecten die expliciet zijn
geplaatst in een kleine gegevenssectie via een "sectie" -kenmerk.

globaal
Wat betreft lokaal, maar genereer ook GP-relatieve toegangen voor kleine gegevensobjecten die:
extern of zwak zijn. Als u deze optie gebruikt, moet u ervoor zorgen dat alle onderdelen van
uw programma (inclusief bibliotheken) is gecompileerd met hetzelfde -G instellen.

gegevens
Genereer GP-relatieve toegangen voor alle data-objecten in het programma. Als je gebruikt
deze optie moeten de volledige data- en BSS-segmenten van uw programma passen in 64K of
geheugen en u moet een geschikt linkerscript gebruiken om ze toe te wijzen aan de
adresseerbaar bereik van de globale aanwijzer.

allen Genereer GP-relatieve adressen voor zowel functieaanwijzers als gegevensaanwijzers. Indien
u deze optie gebruikt, moeten de volledige tekst-, data- en BSS-segmenten van uw programma
passen in 64K geheugen en u moet een geschikt linkerscript gebruiken om toe te wijzen
ze binnen het adresseerbare bereik van de globale aanwijzer.

-mgpopt is gelijk aan -mgpopt=lokaal en -mno-gpopt is gelijk aan -mgpopt=geen.

De standaard is -mgpopt behalve wanneer -fpic or -fPIC is opgegeven om positie-
onafhankelijke code. Merk op dat de Nios II ABI geen GP-gerelateerde toegangen toestaat van:
gedeelde bibliotheken.

Mogelijk moet u specificeren: -mno-gpopt expliciet bij het bouwen van programma's die:
grote hoeveelheden kleine gegevens, inclusief grote GOT-gegevenssecties. In dit geval is de
16-bits offset voor GP-relatieve adressering is mogelijk niet groot genoeg om toegang te geven tot:
het hele kleine gegevensgedeelte.

-mel
-meb
Genereer respectievelijk little-endian (standaard) of big-endian (experimentele) code.

-mbypass-cache
-mno-bypass-cache
Forceer alle laad- en opslaginstructies om de cache altijd te omzeilen met behulp van I/O-varianten van
de instructies. De standaardinstelling is om de cache niet te omzeilen.

-mno-cache-vluchtig
-mcache-vluchtig
Vluchtige geheugentoegang omzeilt de cache met behulp van de I/O-varianten van laden en opslaan
instructies. De standaardinstelling is om de cache niet te omzeilen.

-mno-snel-sw-div
-mfast-sw-div
Gebruik geen op tabellen gebaseerde snelle verdeling voor kleine getallen. De standaard is om de fast . te gebruiken
verdelen over -O3 en hoger.

-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-mhw-mulx
-mno-hw-div
-mhw-div
Schakel het uitzenden van "mul", "mulx" en "div" familie van instructies in of uit door de
compiler. De standaardinstelling is om "mul" uit te zenden en niet "div" en "mulx".

-maangepast-ins=N
-mno-aangepast-ins
Elke -maangepast-ins=N optie maakt het gebruik van een aangepaste instructie met codering mogelijk N wanneer
het genereren van code die gebruik maakt van ins. Bijvoorbeeld, -mcustom-rages=253 genereert maatwerk
instructie 253 voor optelbewerkingen met enkele precisie met drijvende komma in plaats van de
standaardgedrag van het gebruik van een bibliotheekaanroep.

De volgende waarden van ins worden ondersteund. Tenzij anders vermeld, drijvende-komma
operaties zullen naar verwachting worden geïmplementeerd met de normale IEEE 754-semantiek en
komen rechtstreeks overeen met de C-operators of de equivalente ingebouwde GCC-functies.

Enkele precisie drijvende komma:

rages, fsub's, fdiv's, fmuls
Binaire rekenkundige bewerkingen.

vingers
Unaire ontkenning.

fabs
Unaire absolute waarde.

fcmpeqs, fcmpges, fcmgts, fcmels, fcmplts, fcmnes
Vergelijking operaties.

minuten, fmax's
Drijvende-komma minimum en maximum. Deze instructies worden alleen gegenereerd als:
-alleen eindige-wiskunde is gespecificeerd.

fsqrts
Unaire vierkantswortelbewerking.

fcoss, fsins, ftans, fatanen, fex, geselingen
Trigonometrische en exponentiële functies met drijvende komma. Deze instructies zijn:
alleen gegenereerd als -funsafe-math-optimalisaties staat ook vermeld.

Drijvende komma met dubbele precisie:

gek, fsubd, fdivd, vullen
Binaire rekenkundige bewerkingen.

fnegd
Unaire ontkenning.

geweldig
Unaire absolute waarde.

fcmpeqd, gefcmpged, fcmpgtd, ingevuld, fcmpltd, gecomprimeerd
Vergelijking operaties.

vind ik, fmaxd
Minimaal en maximaal met dubbele precisie. Deze instructies worden alleen gegenereerd als:
-alleen eindige-wiskunde is gespecificeerd.

fsqrtd
Unaire vierkantswortelbewerking.

fcosd, vind, ften, dik en, fexpd, geseling
Trigonometrische en exponentiële functies met dubbele precisie. Deze instructies zijn:
alleen gegenereerd als -funsafe-math-optimalisaties staat ook vermeld.

conversies:

fetsd
Conversie van enkele precisie naar dubbele precisie.

ftruncds
Conversie van dubbele precisie naar enkele precisie.

fixsi, fixsu, vast, fixdu
Conversie van drijvende-komma naar getekende of niet-ondertekende integer-types, met
afknotting naar nul.

ronde
Conversie van zwevende komma met enkele precisie naar geheel getal met teken, afronding naar de
dichtstbijzijnde gehele getal en banden weg van nul. Dit komt overeen met de
"__builtin_lroundf" functie wanneer -fno-wiskunde-errno is gebruikt.

zweeft, floatus, zwevend, zwevend
Conversie van getekende of niet-ondertekende integer-typen naar typen met drijvende komma.

Bovendien zijn alle volgende overdrachtsinstructies voor interne registers X en Y
moet worden verstrekt om een ​​van de dubbele-precisie drijvende-komma-instructies te gebruiken.
Aangepaste instructies die twee bronoperanden met dubbele precisie gebruiken, verwachten de eerste
operand in het 64-bits register X. De andere operand (of alleen operand van een unaire)
bewerking) wordt gegeven aan de aangepaste rekenkundige instructie met de minst significante
helft in bronregister src1 en de belangrijkste helft in src2. Een gewoonte
instructie die een resultaat met dubbele precisie retourneert, retourneert de meest significante 32
bits in het bestemmingsregister en de andere helft in 32-bits register Y. GCC
genereert automatisch de benodigde codereeksen om register X te schrijven en/of te lezen
register Y wanneer dubbele-precisie drijvende-komma-instructies worden gebruikt.

fwrx
Schrijven src1 in de minst significante helft van X en src2 in de meest significante
de helft van X.

flauw
Schrijven src1 in Y.

frdxhi, frdxlo
Lees de meest of minst (respectievelijk) significante helft van X en sla deze op in dest.

frdy
Lees de waarde van Y en sla deze op in dest.

Merk op dat u meer lokale controle kunt krijgen over het genereren van Nios II custom
instructies met behulp van de "target("custom-insn=N")" en "target("no-custom-insn")"
functieattributen of pragma's.

-mcustom-fpu-cfg=naam
Deze optie schakelt een vooraf gedefinieerde, benoemde set aangepaste instructiecoderingen in (zie
-maangepast-ins bovenstaand). Momenteel zijn de volgende sets gedefinieerd:

-maangepast-fpu-cfg=60-1 is gelijk aan: -mcustom-fmuls=252 -mcustom-rages=253
-maangepast-fsubs=254 -fsingle-precisie-constante

-maangepast-fpu-cfg=60-2 is gelijk aan: -mcustom-fmuls=252 -mcustom-rages=253
-maangepast-fsubs=254 -maangepast-fdivs=255 -fsingle-precisie-constante

-maangepast-fpu-cfg=72-3 is gelijk aan: -mcustom-floatus=243 -mcustom-fixsi=244
-mcustom-floatis=245 -mcustom-fcmpgts=246 -mcustom-fcmples=249 -mcustom-fcmpeqs=250
-mcustom-fcmpnes=251 -mcustom-fmuls=252 -mcustom-rages=253 -maangepast-fsubs=254
-maangepast-fdivs=255 -fsingle-precisie-constante

Op maat gemaakte instructie-opdrachten gegeven door individu -maangepast-ins= opties negeren
die gegeven door -mcustom-fpu-cfg=, ongeacht de volgorde van de opties op de
opdrachtregel.

Merk op dat u meer lokale controle kunt krijgen over de selectie van een FPU-configuratie door:
met behulp van de "target("custom-fpu-cfg=naam")" functieattribuut of pragma.

deze extra -m opties zijn beschikbaar voor het Altera Nios II ELF (bare-metal) doel:

-mhal
Koppeling met HAL BSP. Dit onderdrukt de koppeling met de door GCC geleverde C runtime startup
en beëindigingscode, en wordt meestal gebruikt in combinatie met: -msys-crt0= specificeren
de locatie van de alternatieve opstartcode die wordt verstrekt door de HAL BSP.

-mkleinc
Koppeling met een beperkte versie van de C-bibliotheek, -lkleinc, in plaats van Newlib.

-msys-crt0=startbestand
startbestand is de bestandsnaam van het startbestand (crt0) dat moet worden gebruikt bij het koppelen. Deze optie
is alleen nuttig in combinatie met -mhal.

-msys-lib=systeemlib
systeemlib is de bibliotheeknaam van de bibliotheek die systeemaanroepen op laag niveau mogelijk maakt
vereist door de C-bibliotheek, bijv. "lezen" en "schrijven". Deze optie wordt meestal gebruikt om:
koppeling met een bibliotheek van een HAL BSP.

Nvidia PTX Opties

Deze opties zijn gedefinieerd voor Nvidia PTX:

-m32
-m64
Genereer code voor 32-bits of 64-bits ABI.

-mainkernel
Link in code voor een __main kernel. Dit is voor stand-alone in plaats van offloading
uitvoering.

PDP-11 Opties

Deze opties zijn gedefinieerd voor de PDP-11:

-mfpu
Gebruik hardware FPP drijvende komma. Dit is de standaardinstelling. (FIS drijvende komma op de
PDP-11/40 wordt niet ondersteund.)

-msoft-zweven
Gebruik geen hardware drijvende komma.

-mac0
Retourneer drijvende-kommaresultaten in ac0 (fr0 in Unix assembler-syntaxis).

-mno-ac0
Retourneer drijvende-kommaresultaten in het geheugen. Dit is de standaardinstelling.

-m40
Genereer code voor een PDP-11/40.

-m45
Genereer code voor een PDP-11/45. Dit is de standaardinstelling.

-m10
Genereer code voor een PDP-11/10.

-mbcopy-ingebouwd
Gebruik inline "movmemhi" patronen voor het kopiëren van geheugen. Dit is de standaardinstelling.

-mbkopie
Gebruik geen inline "movmemhi"-patronen voor het kopiëren van geheugen.

-mint16
-mno-int32
Gebruik 16-bits "int". Dit is de standaardinstelling.

-mint32
-mno-int16
Gebruik 32-bits "int".

-mfloat64
-mno-float32
Gebruik 64-bits "float". Dit is de standaardinstelling.

-mfloat32
-mno-float64
Gebruik 32-bits "float".

-mabshi
Gebruik "abshi2" patroon. Dit is de standaardinstelling.

-mno-abshi
Gebruik geen "abshi2" patroon.

-mbranch-duur
Doen alsof filialen duur zijn. Dit is om te experimenteren met codegeneratie
alleen.

-mbrach-goedkoop
Doe niet alsof filialen duur zijn. Dit is de standaardinstelling.

-munix-asm
Gebruik Unix assembler-syntaxis. Dit is de standaard wanneer geconfigureerd voor: pdp11-*-bsd.

-mdec-asm
Gebruik DEC assembler-syntaxis. Dit is de standaardinstelling indien geconfigureerd voor een PDP-11-doel
dan pdp11-*-bsd.

picoChip Opties

Deze -m opties zijn gedefinieerd voor picoChip-implementaties:

-mae=een_type
Stel de instructieset, registerset en instructieplanningsparameters in voor array
elementtype een_type. Ondersteunde waarden voor een_type zijn ENIGE, MUL en MAC-adres.

-mae=ELKE selecteert een volledig generiek AE-type. Code gegenereerd met deze optie wordt uitgevoerd
op een van de andere AE-typen. De code is niet zo efficiënt als hij zou zijn als hij was gecompileerd
voor een specifiek AE-type, en sommige soorten bewerkingen (bijv. vermenigvuldigen) werken niet
correct op alle soorten AE.

-mae=MUL selecteert een MUL AE-type. Dit is het meest bruikbare AE-type voor gecompileerde code,
en is de standaard.

-mae=MAC selecteert een DSP-achtige MAC AE. Code die met deze optie is gecompileerd, kan last hebben van:
slechte prestaties van byte (char) manipulatie, omdat de DSP AE niet voorziet in
hardware-ondersteuning voor byte load/stores.

-msymbool-als-adres
Schakel de compiler in om een ​​symboolnaam direct te gebruiken als een adres in een load/store
instructie, zonder deze eerst in een register te laden. Meestal is het gebruik hiervan
optie genereert grotere programma's, die sneller werken dan wanneer de optie niet wordt gebruikt.
De resultaten variëren echter van programma tot programma, dus het wordt overgelaten als een gebruikersoptie,
in plaats van permanent ingeschakeld te zijn.

-mno-inefficiënte-waarschuwingen
Schakelt waarschuwingen over het genereren van inefficiënte code uit. Deze waarschuwingen kunnen zijn:
gegenereerd, bijvoorbeeld bij het compileren van code die geheugenbewerkingen op byteniveau uitvoert
op het MAC AE-type. De MAC AE heeft geen hardwareondersteuning voor geheugen op byteniveau
operaties, dus alle byte load/stores moeten worden gesynthetiseerd uit word load/store
activiteiten. Dit is inefficiënt en er wordt een waarschuwing gegenereerd om aan te geven dat u
moet de code herschrijven om byte-bewerkingen te vermijden, of om een ​​AE-type te targeten dat de . heeft
noodzakelijke hardware-ondersteuning. Met deze optie worden deze waarschuwingen uitgeschakeld.

PowerPC Opties

Deze staan ​​vermeld onder

RL78 Opties

-msim
Koppelingen in aanvullende doelbibliotheken om de werking binnen een simulator te ondersteunen.

-mmul=geen
-mmul=g13
-mmul=rl78
Specificeert het type ondersteuning voor hardwarevermenigvuldiging dat moet worden gebruikt. De standaard is
geen, die softwarevermenigvuldigingsfuncties gebruikt. De g13 optie is voor de
hardware vermenigvuldig/deel randapparatuur alleen op de RL78/G13-doelen. De rl78 Optie is
voor de standaard hardwarevermenigvuldiging gedefinieerd in de RL78 softwarehandleiding.

-m64bit-verdubbelt
-m32bit-verdubbelt
Maak het "dubbele" gegevenstype 64 bits (-m64bit-verdubbelt) of 32 bits (-m32bit-verdubbelt)
qua grootte. De standaard is -m32bit-verdubbelt.

IBM RS / 6000 en PowerPC Opties

Deze -m opties zijn gedefinieerd voor de IBM RS/6000 en PowerPC:

-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfpnd
-mno-vprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-harde-dfp
U gebruikt deze opties om aan te geven welke instructies beschikbaar zijn op de processor die u
gebruiken. De standaardwaarde van deze opties wordt bepaald bij het configureren van GCC.
Specificeren van de -mcpu=cpu_type overschrijft de specificatie van deze opties. We
raad u aan de te gebruiken -mcpu=cpu_type optie in plaats van de hierboven genoemde opties.

opgeven -mpowerpc-gpopt stelt GCC in staat om de optionele PowerPC-architectuur te gebruiken
instructies in de groep Algemeen gebruik, inclusief vierkantswortel met drijvende komma.
opgeven -mpowerpc-gfxopt stelt GCC in staat om de optionele PowerPC-architectuur te gebruiken
instructies in de groep Afbeeldingen, inclusief selectie met drijvende komma.

De -mmfcrf optie stelt GCC in staat om de verplaatsing vanuit het veld conditieregister te genereren
instructie geïmplementeerd op de POWER4-processor en andere processors die de
PowerPC V2.01-architectuur. De -mpopcntb optie stelt GCC in staat om de popcount te genereren
en dubbele precisie FP wederzijdse schattingsinstructie geïmplementeerd op de POWER5
processor en andere processors die de PowerPC V2.02-architectuur ondersteunen. De
-mpopcntd optie stelt GCC in staat om de popcount-instructie te genereren die is geïmplementeerd op de
POWER7-processor en andere processors die de PowerPC V2.06-architectuur ondersteunen.
De -mfpnd optie stelt GCC in staat om de FP-ronde naar integer-instructies te genereren
geïmplementeerd op de POWER5+ processor en andere processors die de PowerPC . ondersteunen
V2.03-architectuur. De -mcmpb optie stelt GCC in staat om de vergelijkingsbytes te genereren
instructie geïmplementeerd op de POWER6-processor en andere processors die de
PowerPC V2.05-architectuur. De -mmfpgpr optie stelt GCC in staat om de FP-zet te genereren
naar/van registerinstructies voor algemene doeleinden geïmplementeerd op de POWER6X-processor en
andere processors die de uitgebreide PowerPC V2.05-architectuur ondersteunen. De -mhard-dfp
optie stelt GCC in staat om de decimale drijvende-komma-instructies te genereren die zijn geïmplementeerd op
sommige POWER-processors.

De -mpowerpc64 optie stelt GCC in staat om de extra 64-bits instructies te genereren die:
zijn te vinden in de volledige PowerPC64-architectuur en om GPR's te behandelen als 64-bits, dubbelwoord
hoeveelheden. GCC is standaard ingesteld op -mno-powerpc64.

-mcpu=cpu_type
Stel architectuurtype, registergebruik en instructieplanningsparameters in voor:
type machine cpu_type. Ondersteunde waarden voor cpu_type zijn 401, 403, 405, 405fp, 440,
440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, Titan, power3, power4, power5, kracht5+, power6,
kracht6x, power7, power8, stroom pc, stroompc64, powerpc64le en rs64.

-mcpu=powerpc, -mcpu=powerpc64 en -mcpu=powerpc64le specificeer pure 32-bit PowerPC
(ofwel endian), 64-bit big endian PowerPC en 64-bit little endian PowerPC
architectuur machinetypes, met een geschikt, generiek processormodel aangenomen voor
planningsdoeleinden.

De andere opties specificeren een specifieke processor. Code gegenereerd onder die opties
werkt het beste op die processor en werkt mogelijk helemaal niet op andere.

De -mcpu opties activeren of deactiveren automatisch de volgende opties:

-maltiefc -mfpnd -mhard-zweven -mmfcrf -mveelvoudig -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdubbele-zwevende -msimple-fpu -mtekenreeks
-mmulhw -mdlmzb -mmfpgpr -mvsx -crypto -mdirect-verplaatsen -mpower8-fusie
-mpower8-vector -mquad-geheugen -mquad-geheugen-atomisch

De specifieke opties die voor een bepaalde CPU zijn ingesteld, variëren tussen compilerversies,
afhankelijk van welke instelling de optimale code voor die CPU lijkt te produceren; dat doet het niet
weerspiegelen noodzakelijkerwijs de mogelijkheden van de daadwerkelijke hardware. Als u een wilt instellen
individuele optie naar een bepaalde waarde, kunt u deze specificeren na de -mcpu keuze,
als -mcpu=970 -mno-altivec.

Op AIX, de -maltiefc en -mpowerpc64 opties worden niet in- of uitgeschakeld door de -mcpu
optie op dit moment omdat AIX deze opties niet volledig ondersteunt. Jij mag
schakel ze nog steeds afzonderlijk in of uit als u zeker weet dat het werkt in uw
milieu.

-mtune=cpu_type
Stel de instructieplanningsparameters in voor het machinetype: cpu_type, maar niet instellen
het architectuurtype of registergebruik, als -mcpu=cpu_type doet. Dezelfde waarden voor
cpu_type worden gebruikt voor -mtune als voor -mcpu. Als beide zijn opgegeven, wordt de gegenereerde code
gebruikt de architectuur en registers die zijn ingesteld door -mcpu, maar de planningsparameters ingesteld door
-mtune.

-mcmodel=klein
Genereer PowerPC64-code voor het kleine model: de TOC is beperkt tot 64k.

-mcmodel=gemiddeld
Genereer PowerPC64-code voor het mediummodel: de inhoudsopgave en andere statische gegevens zijn mogelijk up
tot een totaal van 4G in grootte.

-mcmodel=groot
Genereer PowerPC64-code voor het grote model: de TOC kan tot 4G groot zijn. Ander
gegevens en code wordt alleen beperkt door de 64-bits adresruimte.

-maltiefc
-mno-altivec
Genereer code die gebruikmaakt (gebruikt niet) AltiVec-instructies, en schakel ook het gebruik in
van ingebouwde functies die directere toegang tot de AltiVec-instructieset mogelijk maken.
Mogelijk moet u ook instellen -mabi=altivec om de huidige ABI aan te passen met AltiVec ABI
verbeteringen.

. -maltiefc wordt gebruikt, in plaats van -maltivec=le or -maltivec=zijn, de elementenvolgorde
voor Altivec-intrinsieken zoals "vec_splat", "vec_extract" en "vec_insert" komen overeen
volgorde van array-elementen die overeenkomt met de endianness van het doel. Dat wil zeggen, element
nul identificeert het meest linkse element in een vectorregister bij het targeten van een big-endian
platform, en identificeert het meest rechtse element in een vectorregister bij het richten op a
little endian platform.

-maltivec=zijn
Genereer Altivec-instructies met behulp van big-endian-elementvolgorde, ongeacht of:
het doelwit is big- of little-endian. Dit is de standaardinstelling bij het targeten van een big-endian
platform.

De elementvolgorde wordt gebruikt om elementnummers in Altivec-intrinsieken te interpreteren, zoals:
"vec_splat", "vec_extract" en "vec_insert". Deze komen standaard overeen met het array-element
volgorde die overeenkomt met de endianness voor het doel.

-maltivec=le
Genereer Altivec-instructies met behulp van de little-endian-elementvolgorde, ongeacht of:
het doelwit is big- of little-endian. Dit is de standaardinstelling bij het targeten van een klein
endian platform. Deze optie wordt momenteel genegeerd bij het targeten van een big-endian
platform.

De elementvolgorde wordt gebruikt om elementnummers in Altivec-intrinsieken te interpreteren, zoals:
"vec_splat", "vec_extract" en "vec_insert". Deze komen standaard overeen met het array-element
volgorde die overeenkomt met de endianness voor het doel.

-mvropslaan
-mno-vrsave
Genereer VRSAVE-instructies bij het genereren van AltiVec-code.

-mgen-cel-microcode
Genereer instructies voor celmicrocodes.

-mwarn-cel-microcode
Waarschuwen wanneer een celmicrocode-instructie wordt uitgezonden. Een voorbeeld van een celmicrocode
instructie is een variabele verschuiving.

-msecure-plt
Genereer code die het mogelijk maakt ld en zo om uitvoerbare bestanden en gedeelde bibliotheken te bouwen met
niet-uitvoerbare secties ".plt" en ".got". Dit is een PowerPC 32-bit SYSV ABI-optie.

-mbss-plt
Genereer code die een BSS ".plt" sectie gebruikt die zo vult in en vereist ".plt"
en ".got" secties die zowel beschrijfbaar als uitvoerbaar zijn. Dit is een PowerPC 32-bit
SYSV ABI-optie.

- misel
-mno-isel
Deze schakelaar schakelt het genereren van ISEL-instructies in of uit.

-misel=Ja nee
Deze schakelaar is afgeschaft. Gebruik maken van - misel en -mno-isel gebruiken.

-msp
-mno-spec
Deze schakelaar schakelt het genereren van SPE simd-instructies in of uit.

-verslechterd
-mno-gepaard
Deze schakelaar schakelt het genereren van GEKOPPELDE simd-instructies in of uit.

-msp=Ja nee
Deze optie is afgeschaft. Gebruik maken van -msp en -mno-spec gebruiken.

-mvsx
-mno-vsx
Genereer code die gebruikmaakt (geen gebruik maakt van) vector/scalar (VSX) instructies, en ook
het gebruik van ingebouwde functies mogelijk maken die directere toegang tot de VSX . mogelijk maken
instructie set.

-crypto
-mno-crypto
Schakel het gebruik in (uit) van de ingebouwde functies die directe toegang tot de
cryptografische instructies die zijn toegevoegd in versie 2.07 van de PowerPC ISA.

-mdirect-verplaatsen
-mno-directe-zet
Genereer code die de instructies gebruikt (niet gebruikt) om gegevens te verplaatsen tussen de
registers voor algemene doeleinden en de vector/scalaire (VSX) registers die zijn toegevoegd in
versie 2.07 van de PowerPC ISA.

-mpower8-fusie
-mno-power8-fusie
Genereer code die sommige gehele operaties naast elkaar houdt (niet houdt) zodat de
instructies kunnen worden samengevoegd op power8 en latere processors.

-mpower8-vector
-mno-power8-vector
Genereer code die de vector- en scalaire instructies gebruikt (niet gebruikt) die waren
toegevoegd in versie 2.07 van de PowerPC ISA. Schakel ook het gebruik van ingebouwde functies in
die directere toegang tot de vectorinstructies mogelijk maken.

-mquad-geheugen
-mno-quad-geheugen
Genereer code die gebruikmaakt (niet gebruikt) van de niet-atomaire quad-woordgeheugeninstructies.
De -mquad-geheugen optie vereist het gebruik van de 64-bits modus.

-mquad-geheugen-atomisch
-mno-quad-geheugen-atomaire
Genereer code die gebruikmaakt (niet gebruikt) van de atomaire quad-woordgeheugeninstructies. De
-mquad-geheugen-atomisch optie vereist het gebruik van de 64-bits modus.

-mupper-regs-df
-mno-upper-regs-df
Genereer code die de scalaire dubbele precisie-instructies gebruikt (niet gebruikt) die:
target alle 64 registers in de vector/scalaire registerset met drijvende komma die waren
toegevoegd in versie 2.06 van de PowerPC ISA. -mupper-regs-df is standaard ingeschakeld als
je gebruikt een van de -mcpu=vermogen7, -mcpu=vermogen8of -mvsx opties.

-mupper-regs-sf
-mno-upper-regs-sf
Genereer code die gebruik maakt van (geen gebruik maakt van) de scalaire enkele precisie-instructies die:
target alle 64 registers in de vector/scalaire registerset met drijvende komma die waren
toegevoegd in versie 2.07 van de PowerPC ISA. -mupper-regs-sf is standaard ingeschakeld als
je gebruikt een van de twee -mcpu=vermogen8 or -mpower8-vector opties.

-mupper-regs
-mno-upper-regs
Genereer code die gebruikmaakt (gebruikt niet) de scalaire instructies die gericht zijn op alle 64
registers in de vector/scalaire registerset met drijvende komma, afhankelijk van het model van
de machine.

Indien de -mno-upper-regs optie wordt gebruikt, wordt beide uitgeschakeld -mupper-regs-sf en
-mupper-regs-df opties.

-mfloat-gprs=ja/enkel/dubbel/nee
-mfloat-gprs
Deze schakelaar schakelt het genereren van drijvende-kommabewerkingen in of uit op de
registers voor algemene doeleinden voor architecturen die dit ondersteunen.

Het argument ja or single maakt het gebruik van single-precision floating-point mogelijk
operaties.

Het argument verdubbelen maakt het gebruik van enkele en dubbele precisie drijvende komma mogelijk
operaties.

Het argument geen schakelt drijvende-kommabewerkingen uit op de registers voor algemene doeleinden.

Deze optie is momenteel alleen beschikbaar op de MPC854x.

-m32
-m64
Genereer code voor 32-bits of 64-bits omgevingen van Darwin- en SVR4-doelen (inclusief:
GNU/Linux). De 32-bits omgeving stelt int, long en pointer in op 32 bits en
genereert code die op elke PowerPC-variant draait. De 64-bits omgeving wordt ingesteld op
32 bits en lang en pointer naar 64 bits, en genereert code voor PowerPC64, zoals voor:
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-som-in-toc
-minimale-toc
Wijzig het genereren van de TOC (Table Of Contents), die is gemaakt voor elke
uitvoerbaar bestand. De -mfull-toc optie is standaard geselecteerd. In dat geval GCC
wijst ten minste één TOC-item toe voor elke unieke niet-automatische variabeleverwijzing in
uw programma. GCC plaatst ook drijvende-kommaconstanten in de TOC. Echter, alleen
16,384 vermeldingen zijn beschikbaar in de TOC.

Als u een linker-foutbericht ontvangt dat zegt dat u de beschikbare . hebt overschreden
TOC-ruimte, kunt u de hoeveelheid TOC-ruimte die wordt gebruikt verminderen met de -mno-fp-in-toc en
-mno-som-in-toc opties. -mno-fp-in-toc voorkomt dat GCC een drijvende komma plaatst
constanten in de TOC en -mno-som-in-toc dwingt GCC om code te genereren om de . te berekenen
som van een adres en een constante tijdens runtime in plaats van die som in de TOC te zetten.
U kunt een of beide van deze opties specificeren. Elk zorgt ervoor dat GCC zeer
iets langzamere en grotere code ten koste van het besparen van TOC-ruimte.

Als u nog steeds onvoldoende ruimte heeft in de inhoudsopgave, zelfs als u beide opties opgeeft,
specificeren -minimale-toc in plaats daarvan. Deze optie zorgt ervoor dat GCC slechts één inhoudsopgave invoert voor:
elk bestand. Wanneer u deze optie opgeeft, produceert GCC code die langzamer en groter is
maar die extreem weinig TOC-ruimte gebruikt. Misschien wilt u deze optie alleen gebruiken op:
bestanden die minder vaak uitgevoerde code bevatten.

-maix64
-maix32
Schakel 64-bits AIX ABI en aanroepconventie in: 64-bits pointers, 64-bits "lang" type en
de infrastructuur die nodig is om hen te ondersteunen. Specificeren -maix64 impliceert -mpowerpc64,
en -maix32 schakelt de 64-bits ABI uit en impliceert: -mno-powerpc64. GCC is standaard ingesteld op
-maix32.

-mxl-compatibel
-mno-xl-compatibel
Produceer code die beter overeenkomt met de IBM XL-compilersemantiek bij gebruik van AIX-
compatibele ABI. Geef drijvende-kommaargumenten door aan geprototypeerde functies buiten de
registreer opslaggebied (RSA) op de stapel naast argument-FPR's. Ga er niet van uit
dat meest significante dubbel in 128-bit lange dubbele waarde correct is afgerond wanneer
waarden vergelijken en converteren naar dubbel. Gebruik XL-symboolnamen voor lang dubbel
routines ondersteunen.

De AIX-aanroepconventie werd uitgebreid, maar was aanvankelijk niet gedocumenteerd voor het afhandelen van een
obscuur K&R C geval van het aanroepen van een functie waaraan het adres van zijn argumenten moet doorgegeven worden
minder argumenten dan aangegeven. IBM XL-compilers hebben toegang tot drijvende-kommaargumenten die:
passen niet in de RSA van de stapel wanneer een subroutine wordt gecompileerd zonder
optimalisatie. Omdat altijd het opslaan van drijvende-kommaargumenten op de stapel is
inefficiënt en zelden nodig, deze optie is niet standaard ingeschakeld en is alleen:
nodig bij het aanroepen van subroutines die zijn gecompileerd door IBM XL-compilers zonder optimalisatie.

-mp
Support IBM RS / 6000 SP Parallel Milieu (PE). Koppel een applicatie die is geschreven om te gebruiken
bericht doorgeven met speciale opstartcode om de toepassing te laten draaien. De
systeem moet PE geïnstalleerd hebben op de standaardlocatie (/usr/lpp/ppe.poe/), of de
bril bestand moet worden overschreven met de -specificaties= optie om de juiste te specificeren
directory locatie. De Parallelle Omgeving ondersteunt geen threads, dus de -mp
optie en de -pdraad optie zijn niet compatibel.

-kwaadaardig-natuurlijk
-kwaadaardige macht
Op AIX, 32-bit Darwin en 64-bit PowerPC GNU/Linux is de optie -kwaadaardig-natuurlijk
overschrijft de ABI-gedefinieerde uitlijning van grotere typen, zoals floating-point doubles,
op hun natuurlijke op grootte gebaseerde grens. De optie -kwaadaardige macht instrueert GCC om:
volg de ABI-gespecificeerde uitlijningsregels. GCC is standaard ingesteld op de standaarduitlijning
gedefinieerd in de ABI.

Op 64-bits Darwin is natuurlijke uitlijning de standaard, en -kwaadaardige macht is niet
ondersteund.

-msoft-zweven
-mhard-zweven
Genereer code die de registerset met drijvende komma niet gebruikt (gebruikt). Software
emulatie met drijvende komma is beschikbaar als u de -msoft-zweven optie, en geef de . door
optie naar GCC bij het koppelen.

-msingle-float
-mdubbele-zwevende
Genereer code voor drijvende-kommabewerkingen met enkele of dubbele precisie.
-mdubbele-zwevende impliceert -msingle-float.

-msimple-fpu
Genereer geen "sqrt" en "div" instructies voor hardware drijvende-komma-eenheden.

-mfpu=naam
Geef het type drijvende-komma-eenheid op. Geldige waarden voor naam zijn sp_lite (gelijk aan
-msingle-float -msimple-fpu), dp_lite (gelijk aan -mdubbele-zwevende -msimple-fpu),
sp_vol (gelijk aan -msingle-float), En dp_vol (gelijk aan -mdubbele-zwevende).

-mxilinx-fpu
Voer optimalisaties uit voor de drijvende-kommaeenheid op Xilinx PPC 405/440.

-mveelvoudig
-mno-meerdere
Genereer code die gebruik maakt van (niet gebruikt) de instructies voor het laden van meerdere woorden en de
sla instructies met meerdere woorden op. Deze instructies worden standaard gegenereerd op
POWER-systemen en niet gegenereerd op PowerPC-systemen. Gebruik niet -mveelvoudig op kleine-
endian PowerPC-systemen, aangezien die instructies niet werken wanneer de processor is ingeschakeld
little-endian-modus. De uitzonderingen zijn PPC740 en PPC750 die deze toestaan
instructies in little-endian-modus.

-mtekenreeks
-mno-tekenreeks
Genereer code die de instructies voor het laden van de tekenreeks en de winkel gebruikt (niet gebruikt)
tekenreekswoordinstructies om meerdere registers op te slaan en kleine blokbewegingen uit te voeren. Deze
instructies worden standaard gegenereerd op POWER-systemen en niet gegenereerd op PowerPC
systemen. Gebruik niet -mtekenreeks op little-endian PowerPC-systemen, aangezien die
instructies werken niet als de processor in de little-endian-modus staat. de uitzonderingen
zijn PPC740 en PPC750 die deze instructies in little-endian-modus toestaan.

-mupdate
-mno-update
Genereer code die de laad- of opslaginstructies gebruikt (niet gebruikt) die de . updaten
basisregister naar het adres van de berekende geheugenlocatie. Deze instructies:
worden standaard gegenereerd. Als je gebruikt -mno-update, er is een klein venster tussen de
keer dat de stapelaanwijzer is bijgewerkt en het adres van het vorige frame is
opgeslagen, wat betekent dat code die door het stapelframe loopt over onderbrekingen of signalen kan
beschadigde gegevens krijgen.

-mavoid-geïndexeerde-adressen
-mno-vermijd-geïndexeerde-adressen
Genereer code die het gebruik van geïndexeerde belasting of winkel probeert te vermijden (niet te vermijden)
instructies. Deze instructies kunnen leiden tot prestatieverlies op Power6-processors
in bepaalde situaties, zoals wanneer u door grote arrays stapt die een 16M . overschrijden
grens. Deze optie is standaard ingeschakeld bij het targeten van Power6 en uitgeschakeld
anders.

-mfused-gek
-mno-gefuseerd-madd
Genereer code die de drijvende-komma vermenigvuldigen en accumuleren gebruikt (niet gebruikt)
instructies. Deze instructies worden standaard gegenereerd als hardware floating point
is gebruikt. De machine-afhankelijke -mfused-gek optie is nu toegewezen aan de machine-
onafhankelijk -ffp-contract=snel optie, en -mno-gefuseerd-madd is toegewezen aan
-ffp-contract=uit.

-mmulhw
-mno-mulhw
Genereer code die gebruik maakt (gebruikt niet) het halve woord vermenigvuldigen en vermenigvuldigen-accumuleren
instructies op de IBM 405, 440, 464 en 476 processors. Deze instructies zijn:
standaard gegenereerd bij het targeten van die processors.

-mdlmzb
-mno-dlmzb
Genereer code die de string-search gebruikt (niet gebruikt) dlmzb instructie op de IBM
405, 440, 464 en 476 processoren. Deze instructie wordt standaard gegenereerd wanneer:
gericht op die verwerkers.

-mno-bit-align
-mbit-uitlijnen
Op System V.4 en embedded PowerPC-systemen forceren (doen) geen structuren en vakbonden
die bitvelden bevatten die moeten worden uitgelijnd met het basistype van het bitveld.

Bijvoorbeeld, standaard een structuur die niets anders bevat dan 8 "unsigned" bit-velden van
lengte 1 is uitgelijnd met een grens van 4 bytes en heeft een grootte van 4 bytes. Door het gebruiken van
-mno-bit-align, de structuur is uitgelijnd op een grens van 1 byte en is 1 byte groot.

-mno-strikt-uitlijnen
-mstrict-uitlijnen
Op System V.4 en embedded PowerPC-systemen (gaan) er niet van uit dat niet-uitgelijnd geheugen
referenties worden verwerkt door het systeem.

-mrelocable
-mno-verplaatsbaar
Genereer code waarmee (niet) een statisch uitvoerbaar bestand kan worden verplaatst naar een
ander adres tijdens runtime. Een eenvoudige embedded PowerPC-systeemlader zou:
verplaats de volledige inhoud van ".got2" en 4-byte locaties vermeld in de ".fixup"
sectie, een tabel met 32-bits adressen die door deze optie worden gegenereerd. Om dit te laten werken, allemaal
aan elkaar gekoppelde objecten moeten worden gecompileerd met -mrelocable or -mrelocable-lib.
-mrelocable code lijnt de stapel uit met een grens van 8 bytes.

-mrelocable-lib
-mno-verplaatsbare-lib
Like -mrelocable, -mrelocable-lib genereert een ".fixup" sectie om static . toe te staan
uitvoerbare bestanden die tijdens runtime moeten worden verplaatst, maar -mrelocable-lib maakt geen gebruik van de
kleinere stapeluitlijning van -mrelocable. Objecten gecompileerd met -mrelocable-lib mogen
worden gekoppeld aan objecten die zijn gecompileerd met een combinatie van de -mrelocable opties.

-mno-toc
-mtoc
Op System V.4 en embedded PowerPC-systemen (neem) niet aan dat register 2 bevat:
een aanwijzer naar een globaal gebied dat verwijst naar de adressen die in het programma worden gebruikt.

-kleine
-mlittle-endian
Op System V.4 en embedded PowerPC-systemen compileert u code voor de processor in weinig
endische modus. De -mlittle-endian optie is hetzelfde als -kleine.

-groot
-mbig-endian
Op System V.4 en embedded PowerPC-systemen compileert u code voor de processor in grote
endische modus. De -mbig-endian optie is hetzelfde als -groot.

-mdynamic-geen-foto
Op Darwin- en Mac OS X-systemen moet u de code compileren zodat deze niet verplaatsbaar is, maar dat:
de externe referenties zijn verplaatsbaar. De resulterende code is geschikt voor:
toepassingen, maar geen gedeelde bibliotheken.

-msingle-pic-basis
Behandel het register dat wordt gebruikt voor PIC-adressering als alleen-lezen, in plaats van het te laden in de
proloog voor elke functie. Het runtime-systeem is verantwoordelijk voor het initialiseren hiervan
registreer met een geschikte waarde voordat de uitvoering begint.

-mprioritize-restricted-insns=prioriteit
Deze optie regelt de prioriteit die wordt toegewezen aan beperkte verzendingssleuf
instructies tijdens de tweede planningspas. het argument prioriteit neemt de waarde
0, 1of 2 om geen, hoogste of op één na hoogste (respectievelijk) prioriteit toe te kennen aan
verzending-slot beperkte instructies.

-msched-kostbare-dep=afhankelijkheidstype
Deze optie bepaalt welke afhankelijkheden door het doelwit als duur worden beschouwd tijdens:
instructie plannen. het argument afhankelijkheidstype neemt een van de volgende:
waarden:

geen Geen afhankelijkheid is kostbaar.

allen Alle afhankelijkheden zijn kostbaar.

true_store_to_load
Een echte afhankelijkheid van winkel tot lading is kostbaar.

winkel_naar_laden
Elke afhankelijkheid van winkel tot lading is kostbaar.

aantal
Elke afhankelijkheid waarvoor de latentie groter is dan of gelijk is aan aantal is kostbaar.

-minsert-sched-nops=schema
Deze optie bepaalt welk NOP-invoegschema wordt gebruikt tijdens de tweede planning
doorgang. het argument schema neemt een van de volgende waarden aan:

geen Plaats geen NOP's.

stootkussen Vul met NOP's elke verzendgroep die lege uitgifteplaatsen heeft, volgens de
groepering van de planner.

hergroeperen_exact
Voeg NOP's in om kostbare afhankelijke insns in afzonderlijke groepen te forceren. Precies invoegen
zoveel NOP's als nodig zijn om een ​​insn naar een nieuwe groep te dwingen, volgens de geschatte
processorgroepering.

aantal
Voeg NOP's in om dure afhankelijke insns in afzonderlijke groepen te forceren. Invoegen aantal
NOP's om een ​​insn naar een nieuwe groep te dwingen.

-mcall-sysv
Op System V.4 en embedded PowerPC-systemen compileert code met behulp van aanroepconventies die:
zich houden aan het ontwerp van maart 1995 van de System V Application Binary Interface, PowerPC
processor supplement. Dit is de standaardinstelling, tenzij u GCC hebt geconfigureerd met
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Specificeer beide -mcall-sysv en -meabi opties.

-mcall-sysv-noeabi
Specificeer beide -mcall-sysv en -mno-eabi opties.

-mcall-aixdesc
Op System V.4 en embedded PowerPC-systemen compileert u code voor het AIX-besturingssysteem.

-mcall-linux
Op System V.4 en embedded PowerPC-systemen compileert u code voor de op Linux gebaseerde GNU
systeem.

-mcall-freebsd
Op System V.4 en embedded PowerPC-systemen compileert u code voor de FreeBSD-besturing
systeem.

-mcall-netbsd
Op System V.4 en embedded PowerPC-systemen compileert u code voor de NetBSD-besturing
systeem.

-mcall-openbsd
Op System V.4 en embedded PowerPC-systemen compileert u code voor de OpenBSD-besturing
systeem.

-maix-struct-return
Retourneer alle structuren in het geheugen (zoals gespecificeerd door de AIX ABI).

-msvr4-struct-return
Retourstructuren kleiner dan 8 bytes in registers (zoals gespecificeerd door de SVR4 ABI).

-mabi=abi-type
Breid de huidige ABI uit met een bepaalde extensie, of verwijder een dergelijke extensie. Geldig
waarden zijn altiefc, geen-altivec, specifiek, no-spec, ibmlongdubbel, ieelongdouble, elfv1,
elfv2.

-mabi=speci
Breid de huidige ABI uit met SPE ABI-extensies. Dit verandert niets aan de standaard ABI,
in plaats daarvan voegt het de SPE ABI-extensies toe aan de huidige ABI.

-mabi=no-spec
Schakel Book-E SPE ABI-extensies uit voor de huidige ABI.

-mabi=ibmlongdubbel
Wijzig de huidige ABI om IBM extended-precision long double te gebruiken. Dit is een PowerPC
32-bit SYSV ABI-optie.

-mabi=ieelongdouble
Wijzig de huidige ABI om IEEE extended-precision long double te gebruiken. Dit is een PowerPC
32-bits Linux ABI-optie.

-mabi=elfv1
Wijzig de huidige ABI om de ELFv1 ABI te gebruiken. Dit is de standaard ABI voor big-endian
PowerPC 64-bit Linux. Het negeren van de standaard ABI vereist speciale systeemondersteuning en
zal waarschijnlijk op spectaculaire manieren mislukken.

-mabi=elfv2
Wijzig de huidige ABI om de ELFv2 ABI te gebruiken. Dit is de standaard ABI voor kleine-
endian PowerPC 64-bit Linux. Het negeren van de standaard ABI vereist een speciaal systeem
ondersteuning en zal waarschijnlijk op spectaculaire wijze mislukken.

-m prototype
-mno-prototype
Op System V.4 en embedded PowerPC-systemen wordt ervan uitgegaan dat alle aanroepen naar variabele argument
functies zijn correct geprototypeerd. Anders moet de compiler een instructie invoegen
vóór elke niet-prototype-aanroep om bit 6 van het conditiecoderegister in te stellen of te wissen
("CR") om aan te geven of drijvende-kommawaarden worden doorgegeven in de drijvende-komma
registers voor het geval de functie variabele argumenten aanneemt. Met -m prototype, alleen bellen
om prototypen van variabele argumentfuncties de bit in te stellen of te wissen.

-msim
Neem op embedded PowerPC-systemen aan dat de opstartmodule wordt genoemd sim-crt0.o en
dat de standaard C-bibliotheken zijn libsim.a en libc.a. Dit is de standaard voor
powerpc-*-eabisim configuraties.

-mmvme
Neem op embedded PowerPC-systemen aan dat de opstartmodule wordt genoemd crt0.o en
standaard C-bibliotheken zijn: libmvme.a en libc.a.

-gekken
Neem op embedded PowerPC-systemen aan dat de opstartmodule wordt genoemd crt0.o en
standaard C-bibliotheken zijn: libads.a en libc.a.

-mgeel mes
Neem op embedded PowerPC-systemen aan dat de opstartmodule wordt genoemd crt0.o en
standaard C-bibliotheken zijn: libyk.a en libc.a.

-mvxwerkt
Geef op System V.4 en embedded PowerPC-systemen aan dat u compileert voor een
VxWorks-systeem.

-lid
Op embedded PowerPC-systemen stelt u de bit "PPC_EMB" in de kop van de ELF-vlaggen in om aan te geven:
dat eabi uitgebreide verhuizingen worden gebruikt.

-meabi
-mno-eabi
Op System V.4 en embedded PowerPC-systemen houden (niet) zich aan de Embedded
Applications Binary Interface (EABI), een reeks wijzigingen aan het systeem
V.4 specificaties. Selecteren -meabi betekent dat de stapel is uitgelijnd op een 8-byte
grens wordt een functie "__eabi" aangeroepen vanuit "main" om de EABI-omgeving in te stellen,
en -msgegevens optie kan zowel "r2" als "r13" gebruiken om naar twee afzonderlijke kleine gegevens te verwijzen
gebieden. Selecteren -mno-eabi betekent dat de stapel is uitgelijnd op een grens van 16 bytes, nee
EABI-initialisatiefunctie wordt aangeroepen vanuit "main", en de -msgegevens optie gebruikt alleen
"r13" om naar een enkel klein gegevensgebied te verwijzen. De -meabi optie is standaard ingeschakeld als u
geconfigureerde GCC met behulp van een van de powerpc*-*-eabi* opties.

-msdata=eabi
Zet op System V.4 en embedded PowerPC-systemen de kleine geïnitialiseerde "const" globaal en
statische gegevens in de sectie ".sdata2", waarnaar wordt verwezen door register "r2". klein zetten
geïnitialiseerd niet-"const" globale en statische gegevens in de ".sdata" sectie, dat is
aangeduid door register "r13". Zet kleine niet-geïnitialiseerde globale en statische gegevens in de
".sbss" sectie, die grenst aan de ".sdata" sectie. De -msdata=eabi optie
is onverenigbaar met de -mrelocable optie. De -msdata=eabi optie stelt ook de
-lid optie.

-msdata=sysv
Plaats op System V.4 en embedded PowerPC-systemen kleine globale en statische gegevens in de
sectie ".sdata", waarnaar wordt verwezen door register "r13". Zet kleine niet-geïnitialiseerde
globale en statische gegevens in de sectie ".sbss", die grenst aan de ".sdata"
sectie. De -msdata=sysv optie is incompatibel met de -mrelocable optie.

-msdata=standaard
-msgegevens
Op System V.4 en embedded PowerPC-systemen, als: -meabi wordt gebruikt, compileer code hetzelfde
as -msdata=eabi, anders compileer code hetzelfde als -msdata=sysv.

-msdata=gegevens
Plaats op System V.4 en embedded PowerPC-systemen kleine globale gegevens in de ".sdata"
sectie. Zet kleine niet-geïnitialiseerde globale gegevens in de sectie ".sbss". Gebruik niet
registreer echter "r13" om kleine gegevens aan te pakken. Dit is het standaardgedrag, tenzij
anders -msgegevens opties worden gebruikt.

-msdata=geen
-mno-sdata
Plaats op embedded PowerPC-systemen alle geïnitialiseerde globale en statische gegevens in de ".data"
sectie en alle niet-geïnitialiseerde gegevens in de sectie ".bss".

-mblock-move-inline-limit=num
Inline alle blokbewegingen (zoals oproepen naar "memcpy" of structuurkopieën) kleiner dan of
gelijk aan num bytes. De minimumwaarde voor num is 32 bytes op 32-bits doelen en 64
bytes op 64-bits doelen. De standaardwaarde is doelspecifiek.

-G num
Zet op embedded PowerPC-systemen globale en statische items kleiner dan of gelijk aan num
bytes in de kleine gegevens- of BSS-secties in plaats van de normale gegevens- of BSS-sectie.
Standaard num is 8. De -G num switch wordt ook doorgegeven aan de linker. Alle modules
moet worden gecompileerd met dezelfde -G num waarde.

-mregnamen
-mno-regnames
Op System V.4 en embedded PowerPC-systemen zenden (geen) registernamen uit in de
assembler-uitvoer met behulp van symbolische vormen.

-mlongcall
-mno-longcall
Ga er standaard vanuit dat alle gesprekken ver weg zijn, zodat een langere en duurdere
belvolgorde is vereist. Dit is vereist voor oproepen van meer dan 32 megabyte
(33,554,432 bytes) vanaf de huidige locatie. Er wordt een korte oproep gegenereerd als de
compiler weet dat de oproep niet zo ver weg kan zijn. Deze instelling kan worden overschreven door:
het functiekenmerk "shortcall" of door "#pragma lang bellen(0) ".

Sommige linkers zijn in staat om oproepen buiten het bereik te detecteren en lijmcode te genereren
de vlieg. Op deze systemen zijn lange gesprekken niet nodig en genereren ze langzamere code. Als
van dit schrijven kan de AIX-linker dit doen, evenals de GNU-linker voor PowerPC/64. Het
is van plan om deze functie ook toe te voegen aan de GNU-linker voor 32-bit PowerPC-systemen.

Op Darwin/PPC-systemen genereert "#pragma longcall" "jbsr callee, L42", plus een tak
eiland (lijmcode). De twee doeladressen vertegenwoordigen de aangeroepene en de vertakking
eiland. De Darwin/PPC-linker geeft de voorkeur aan het eerste adres en genereert een "bl callee"
als de PPC "bl"-instructie de opgeroepene rechtstreeks bereikt; anders, de linker
genereert "bl L42" om het vertakkingseiland aan te roepen. Het vertakkingseiland is toegevoegd aan de
lichaam van de aanroepende functie; het berekent het volledige 32-bits adres van de aangeroepene en
springt er naar toe.

Op Mach-O (Darwin)-systemen stuurt deze optie de compiler naar de lijm voor
elke directe oproep, en de Darwin-linker beslist of hij deze gebruikt of weggooit.

In de toekomst kan GCC alle longcall-specificaties negeren als bekend is dat de linker
lijm genereren.

-mtls-markeringen
-mno-tls-markeringen
Markeer (niet markeren) oproepen naar "__tls_get_addr" met een verplaatsing die de functie specificeert
argument. Door de verplaatsing kan de linker een functieaanroep op betrouwbare wijze associëren met:
instructies voor het instellen van argumenten voor TLS-optimalisatie, waardoor GCC beter kan
de volgorde plannen.

-pdraad
Voegt ondersteuning toe voor multithreading met de pdraden bibliotheek. Deze optie stelt vlaggen in voor
zowel de preprocessor als de linker.

-mrecipe
-mno-recept
Deze optie maakt het gebruik van de wederzijdse schatting en de wederzijdse vierkantswortelschatting mogelijk
instructies met extra Newton-Raphson-stappen om de precisie te vergroten in plaats van:
een deel of vierkantswortel doen en delen voor drijvende-kommaargumenten. Je zou ... moeten gebruiken
de -ffast-wiskunde optie bij gebruik -mrecipe (of ten minste -funsafe-math-optimalisaties,
-eindige-wiskunde-alleen, -freciprocal-wiskunde en -fno-trapping-wiskunde). Merk op dat terwijl de
doorvoer van de reeks is over het algemeen hoger dan de doorvoer van de niet-
wederzijdse instructie, de nauwkeurigheid van de reeks kan worden verminderd met maximaal 2 ulp
(dwz de inverse van 1.0 is gelijk aan 0.99999994) voor wederzijdse vierkantswortels.

-mrecept=opteren
Deze optie bepaalt welke wederzijdse schattingsinstructies mogen worden gebruikt. opteren is een
door komma's gescheiden lijst met opties, die kan worden voorafgegaan door een "!" om de optie om te keren:

allen Schakel alle schattingsinstructies in.

verzuim
Schakel de standaardinstructies in, gelijk aan -mrecipe.

geen
Schakel alle schattingsinstructies uit, gelijk aan -mno-recept.

div Schakel de wederzijdse benaderingsinstructies in voor zowel enkel als dubbel
precisie.

div
Schakel de instructies voor wederzijdse benadering met enkele precisie in.

div
Schakel de instructies voor wederzijdse benadering met dubbele precisie in.

rsqrt
Schakel de wederzijdse vierkantswortelbenadering-instructies in voor zowel enkelvoudige als
dubbele precisie.

rsqrtf
Schakel de instructies voor wederzijdse vierkantswortelbenadering met enkele precisie in.

rsqrtd
Schakel de wederzijdse vierkantswortelbenadering met dubbele precisie in.

Dus bijvoorbeeld -mrecip=alle,!rsqrtd maakt alle wederzijdse schatting mogelijk
instructies, behalve de instructies voor "FRSQRTE", "XSRSQRTEDP" en "XVRSQRTEDP"
die de wederzijdse vierkantswortelberekeningen met dubbele precisie afhandelen.

-mrecip-precisie
-mno-recept-precisie
Neem aan (veronderstel niet) dat de wederzijdse schattingsinstructies hogere
precisieschattingen dan is vereist door de PowerPC ABI. Selecteren -mcpu=vermogen6,
-mcpu=vermogen7 or -mcpu=vermogen8 selecteert automatisch -mrecip-precisie. Het dubbele-
precisie-instructies voor vierkantswortelschattingen worden niet standaard gegenereerd op lage
precisiemachines, omdat ze geen schatting geven die na drie
stappen.

-mveclibabi= type dan:
Specificeert het ABI-type dat moet worden gebruikt voor het vectoriseren van intrinsieke gegevens met behulp van een externe bibliotheek.
Het enige type dat momenteel wordt ondersteund, is: massa, die specificeert om IBM's Mathematical te gebruiken
Acceleration Subsystem (MASS) bibliotheken voor het vectoriseren van intrinsieke elementen met behulp van externe
bibliotheken. GCC zendt momenteel oproepen uit naar "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", en
"tanhf4" bij het genereren van code voor power7. Beide -ftree-vectoriseren en
-funsafe-math-optimalisaties moet ook ingeschakeld zijn. De MASS-bibliotheken moeten:
opgegeven bij de koppelingstijd.

-mfriz
-mno-friz
Genereer (genereer niet) de "friz" -instructie wanneer de -funsafe-math-optimalisaties
optie wordt gebruikt om de afronding van drijvende-kommawaarden te optimaliseren naar 64-bits integer en
terug naar de drijvende komma. De instructie "friz" retourneert niet dezelfde waarde als de
getal met drijvende komma is te groot om in een geheel getal te passen.

-mpointers-naar-geneste-functies
-mno-pointers-naar-geneste-functies
Genereer (niet genereren) code om het statische kettingregister ("r11") te laden wanneer:
aanroepen via een aanwijzer op AIX- en 64-bits Linux-systemen waarbij een functieaanwijzer
verwijst naar een descriptor van 3 woorden die het functieadres, de TOC-waarde die moet worden geladen, geeft
register "r2", en statische ketenwaarde die in register "r11" moet worden geladen. De
-mpointers-naar-geneste-functies staat standaard aan. U kunt geen doorverwijzingen naar:
geneste functies of verwijzingen naar functies die zijn gecompileerd in andere talen die de
statische ketting als je gebruikt -mno-pointers-naar-geneste-functies.

-msave-toc-indirect
-mno-save-toc-indirect
Genereer (niet genereren) code om de TOC-waarde op de gereserveerde stapellocatie op te slaan
in de functie-proloog als de functie via een pointer op AIX en 64-bit wordt aangeroepen
Linux-systemen. Als de TOC-waarde niet in de proloog wordt opgeslagen, wordt deze vlak ervoor opgeslagen
de oproep via de aanwijzer. De -mno-save-toc-indirect optie is de standaard.

-mcompat-align-parm
-mno-compat-align-parm
Genereer (niet genereren) code om structuurparameters door te geven met een maximale uitlijning
van 64 bits, voor compatibiliteit met oudere versies van GCC.

Oudere versies van GCC (vóór 4.9.0) hebben een structuurparameter onjuist uitgelijnd
op een 128-bits grens wanneer die structuur een lid bevat dat 128-bits vereist
uitlijning. Dit is gecorrigeerd in recentere versies van GCC. Deze optie kan worden gebruikt
om code te genereren die compatibel is met functies die zijn gecompileerd met oudere versies van
GCC.

De -mno-compat-align-parm optie is de standaard.

RX Opties

Deze opdrachtregelopties zijn gedefinieerd voor RX-doelen:

-m64bit-verdubbelt
-m32bit-verdubbelt
Maak het "dubbele" gegevenstype 64 bits (-m64bit-verdubbelt) of 32 bits (-m32bit-verdubbelt)
qua grootte. De standaard is -m32bit-verdubbelt. Note RX floating-point hardware werkt alleen
op 32-bits waarden, daarom is de standaard -m32bit-verdubbelt.

-fpu
-nofpu
Schakelt in (-fpu) of deactiveert (-nofpu) het gebruik van RX-hardware met drijvende komma. De
standaard is ingeschakeld voor de RX600-serie en uitgeschakeld voor de RX200-serie.

Drijvende-komma-instructies worden alleen gegenereerd voor 32-bits drijvende-kommawaarden,
de FPU-hardware wordt echter niet gebruikt voor doubles als de -m64bit-verdubbelt Optie is
gebruikt.

Note Indien de -fpu optie is ingeschakeld dan -funsafe-math-optimalisaties is ook ingeschakeld
automatisch. Dit komt omdat de instructies van de RX FPU zelf onveilig zijn.

-mcpu=naam
Selecteert het type RX CPU dat moet worden getarget. Momenteel worden drie typen ondersteund, de
algemeen RX600 en RX200 serie hardware en de specifieke RX610 PROCESSOR. De standaard is
RX600.

Het enige verschil tussen RX600 en RX610 is dat de RX610 ondersteunt niet de
"MVTIPL" instructie.

De RX200 serie heeft geen hardware floating-point unit en dus -nofpu is ingeschakeld
standaard wanneer dit type is geselecteerd.

-mbig-endian-gegevens
-mlittle-endian-gegevens
Sla gegevens (maar geen code) op in het big-endian-formaat. De standaard is
-mlittle-endian-gegevens, dwz om gegevens op te slaan in het little-endian-formaat.

-msmall-data-limiet=N
Specificeert de maximale grootte in bytes van globale en statische variabelen die kunnen worden geplaatst
in het kleine gegevensgebied. Het gebruik van het kleine gegevensgebied kan leiden tot kleinere en snellere
code, maar de grootte van het gebied is beperkt en het is aan de programmeur om ervoor te zorgen dat:
het gebied loopt niet over. Ook wanneer het kleine gegevensgebied wordt gebruikt, een van de RX's
registers (meestal "r13") is gereserveerd voor gebruik dat naar dit gebied verwijst, dus het is geen
langer beschikbaar voor gebruik door de compiler. Dit kan resulteren in langzamere en/of grotere
code als variabelen op de stapel worden geduwd in plaats van in dit register te worden vastgehouden.

Let op, gemeenschappelijke variabelen (variabelen die niet zijn geïnitialiseerd) en constanten zijn
niet in het kleine gegevensgebied geplaatst omdat ze zijn toegewezen aan andere secties in de
uitvoer uitvoerbaar.

De standaardwaarde is nul, waardoor deze functie wordt uitgeschakeld. Let op, deze functie is niet:
standaard ingeschakeld met hogere optimalisatieniveaus (-O2 enz.) vanwege de
mogelijk nadelige gevolgen van het reserveren van een register. Het is aan de programmeur
om te experimenteren en te ontdekken of deze functie hun programma ten goede komt. Zien
de beschrijving van de -mpid optie voor een beschrijving van hoe het eigenlijke register
houd de kleine gegevensgebiedaanwijzer is gekozen.

-msim
-mno-sim
Gebruik de runtime van de simulator. De standaard is om de libgloss board-specifieke runtime te gebruiken.

-mas100-syntaxis
-mno-as100-syntaxis
Gebruik bij het genereren van assembler-uitvoer een syntaxis die compatibel is met de AS100 van Renesas
assembler. Deze syntaxis kan ook worden afgehandeld door de GAS-assembler, maar het heeft een aantal
beperkingen, zodat het niet standaard wordt gegenereerd.

-mmax-constante-grootte=N
Specificeert de maximale grootte, in bytes, van een constante die kan worden gebruikt als een operand in
een RX-instructie. Hoewel de RX-instructieset constanten tot 4 . toestaat
bytes lang voor gebruik in instructies, een langere waarde komt overeen met een langere
instructie. Dus in sommige omstandigheden kan het voordelig zijn om de grootte van
constanten die in instructies worden gebruikt. Constanten die te groot zijn, zijn in plaats daarvan
geplaatst in een constante pool en waarnaar wordt verwezen via registerindirectie.

De waarde N kan tussen 0 en 4 liggen. Een waarde van 0 (de standaardwaarde) of 4 betekent dat
constanten van elke grootte zijn toegestaan.

-montspan
Schakel linker ontspanning in. Linker-relaxatie is een proces waarbij de linker probeert
om de omvang van een programma te verkleinen door kortere versies van verschillende instructies te vinden.
Standaard uitgeschakeld.

-mint-register=N
Geef het aantal registers op dat moet worden gereserveerd voor functies voor snelle interruptafhandeling. De
waarde N kan tussen 0 en 4 liggen. Een waarde van 1 betekent dat register "r13" is gereserveerd
voor het exclusieve gebruik van snelle interrupt-handlers. Een waarde van 2 reserves "r13" en
"r12". Een waarde van 3 reserves "r13", "r12" en "r11", en een waarde van 4 reserves "r13"
via "r10". Een waarde van 0, de standaard, reserveert geen registers.

-msave-acc-in-onderbreekt
Specificeert dat interrupt-handlerfuncties het accumulatorregister moeten behouden.
Dit is alleen nodig als normale code bijvoorbeeld het accumulatorregister kan gebruiken
omdat het 64-bits vermenigvuldigingen uitvoert. De standaard is om de accumulator te negeren
omdat dit de interrupt-handlers sneller maakt.

-mpid
-mno-pid
Maakt het genereren van positie-onafhankelijke gegevens mogelijk. Indien ingeschakeld, is toegang tot
constante gegevens worden gedaan via een offset van een basisadres in een register. Dit
maakt het mogelijk om de locatie van constante gegevens tijdens runtime te bepalen zonder dat
het uitvoerbare bestand moet worden verplaatst, wat een voordeel is voor embedded applicaties met strakke
geheugen beperkingen. Gegevens die kunnen worden gewijzigd, worden niet beïnvloed door deze optie.

Let op, het gebruik van deze functie reserveert een register, meestal "r13", voor de constante gegevens
basis adres. Dit kan resulteren in langzamere en/of grotere code, vooral in gecompliceerde
functies.

Het daadwerkelijke register dat is gekozen om het constante databaseadres vast te houden, hangt af van of:
de -msmall-datalimiet en / of de -munt-register opdrachtregelopties zijn ingeschakeld.
Beginnend met register "r13" en verder naar beneden, worden eerst registers toegewezen
om te voldoen aan de eisen van -munt-registerdan -mpid en tot slot
-msmall-datalimiet. Het is dus mogelijk dat het kleine gegevensgebiedregister "r8" is
als beide -mint-register=4 en -mpid worden opgegeven op de opdrachtregel.

Standaard is deze functie niet ingeschakeld. De standaard kan worden hersteld via de -mno-pid
opdrachtregeloptie.

-mno-waarschuwing-meerdere-snelle-interrupts
-mwarn-meerdere-snelle-interrupts
Voorkomt dat GCC een waarschuwingsbericht afgeeft als er meer dan één snelle onderbreking wordt gevonden
handler wanneer het een bestand aan het compileren is. De standaard is om een ​​waarschuwing te geven voor elke extra
snelle interrupt-handler gevonden, omdat de RX slechts één dergelijke interrupt ondersteunt.

Opmerking: De generieke GCC-opdrachtregeloptie -fvast-reg heeft een speciale betekenis voor de RX
port bij gebruik met het functiekenmerk "interrupt". Dit attribuut geeft a . aan
functie bedoeld om snelle interrupts te verwerken. GCC zorgt ervoor dat het alleen de registers gebruikt
"r10", "r11", "r12" en/of "r13" en alleen op voorwaarde dat het normale gebruik van de
overeenkomstige registers zijn beperkt via de -fvast-reg or -munt-register
opdrachtregelopties.

S / 390 en zSerie Opties

Dit zijn de -m opties gedefinieerd voor de S/390- en zSeries-architectuur.

-mhard-zweven
-msoft-zweven
Gebruik (gebruik niet) de hardware floating-point instructies en registers voor floating-
punt operaties. Wanneer -msoft-zweven is gespecificeerd, functioneert in libgcc.a zijn gewend aan
drijvende-kommabewerkingen uitvoeren. Wanneer -mhard-zweven is opgegeven, de compiler
genereert IEEE drijvende-komma-instructies. Dit is de standaardinstelling.

-mhard-dfp
-mno-harde-dfp
Gebruik (gebruik niet) de hardware-instructies voor decimalen met drijvende komma voor decimale-
drijvende-kommabewerkingen. Wanneer -mno-harde-dfp is gespecificeerd, functioneert in libgcc.a zijn
gebruikt om decimaal-drijvende-komma bewerkingen uit te voeren. Wanneer -mhard-dfp is opgegeven, de
compiler genereert hardware-instructies met drijvende komma. Dit is de standaard
For -maart=z9-ec of hoger.

-mlong-dubbel-64
-mlong-dubbel-128
Deze schakelaars regelen de grootte van het "lange dubbele" type. Een grootte van 64 bits maakt de
"long double" type equivalent aan het "double" type. Dit is de standaardinstelling.

-mbackchain
-mno-backchain
Sla het adres van het frame van de beller op (niet opslaan) als backchain-aanwijzer in de
het stapelframe van callee. Er kan een backchain nodig zijn om foutopsporing mogelijk te maken met tools die:
begrijp DWARF 2 oproepframe-informatie niet. Wanneer -mno-verpakt-stack in
effect, de backchain-aanwijzer wordt onderaan het stapelframe opgeslagen; wanneer
-mpacked-stack van kracht is, wordt de backchain in het bovenste woord van de . geplaatst
96/160 byte register opslaan gebied.

In het algemeen code gecompileerd met -mbackchain is oproep-compatibel met code gecompileerd met
-mmo-backchain; het gebruik van de backchain voor foutopsporingsdoeleinden vereist echter meestal:
waarmee het hele binaire bestand is gebouwd -mbackchain. Merk op dat de combinatie van
-mbackchain, -mpacked-stack en -mhard-zweven wordt niet ondersteund. Om een ​​te bouwen
gebruik van linux-kernel -msoft-zweven.

De standaard is om de backchain niet te onderhouden.

-mpacked-stack
-mno-verpakt-stack
Gebruik (niet gebruiken) de lay-out van de verpakte stapel. Wanneer -mno-verpakt-stack is opgegeven, de
compiler gebruikt alle velden van het 96/160 byte registeropslaggebied alleen voor hun
standaard doel; ongebruikte velden nemen nog steeds stapelruimte in beslag. Wanneer -mpacked-stack is
gespecificeerd, zijn registeropslagplaatsen dicht opeengepakt aan de bovenkant van de registeropslag
Oppervlakte; ongebruikte ruimte wordt hergebruikt voor andere doeleinden, waardoor efficiënter gebruik kan worden gemaakt van
de beschikbare stapelruimte. Echter, wanneer? -mbackchain is ook van kracht, de bovenste
woord van het opslaggebied wordt altijd gebruikt om de backchain op te slaan en het retouradres
register wordt altijd twee woorden onder de backchain opgeslagen.

Zolang de backchain van het stapelframe niet wordt gebruikt, wordt de code gegenereerd met -mpacked-stack
is oproep-compatibel met code gegenereerd met -mno-verpakt-stack. Merk op dat sommige niet-FSF
releases van GCC 2.95 voor S/390 of zSeries gegenereerde code die het stackframe gebruikt
backchain tijdens runtime, niet alleen voor foutopsporingsdoeleinden. Een dergelijke code is niet oproep-
compatibel met code gecompileerd met -mpacked-stack. Merk ook op dat de combinatie van
-mbackchain, -mpacked-stack en -mhard-zweven wordt niet ondersteund. Om een ​​te bouwen
gebruik van linux-kernel -msoft-zweven.

De standaardinstelling is om de lay-out van de verpakte stapel niet te gebruiken.

-msmall-exec
-mno-klein-exec
Genereer (of genereer niet) code met behulp van de "bras"-instructie om subroutine te doen
belt. Dit werkt alleen betrouwbaar als de totale grootte van het uitvoerbare bestand niet groter is dan 64k.
De standaard is om in plaats daarvan de "basr" -instructie te gebruiken, die dit niet heeft
beperking.

-m64
-m31
. -m31 is opgegeven, genereert u code die voldoet aan de GNU/Linux voor S/390 ABI. Wanneer
-m64 is opgegeven, genereert u code die voldoet aan de GNU/Linux voor zSeries ABI. Dit
stelt GCC in het bijzonder in staat 64-bits instructies te genereren. Voor de s390 doelen, de
standaard is -m31, Terwijl de s390x doelen standaard op -m64.

-mzar
-mesa
. -mzar is opgegeven, genereer code met behulp van de instructies die beschikbaar zijn op
z/Architectuur. Wanneer -mesa is opgegeven, genereer code met behulp van de instructies
beschikbaar op ESA/390. Let daar op -mesa is niet mogelijk met -m64. Bij het genereren
code die voldoet aan de GNU/Linux voor S/390 ABI, de standaard is: -mesa. Bij het genereren
code compatibel met de GNU/Linux voor zSeries ABI, de standaard is: -mzar.

-mmvcle
-mno-mvcle
Genereer (of genereer niet) code met behulp van de "mvcle" -instructie om blok uit te voeren
beweegt. Wanneer -mno-mvcle is opgegeven, gebruikt u in plaats daarvan een "mvc"-lus. Dit is de standaard
tenzij optimaliseren voor grootte.

-mdebug
-mno-foutopsporing
Extra debug-informatie afdrukken (of niet afdrukken) tijdens het compileren. De standaard is
om foutopsporingsinformatie niet af te drukken.

-maart=CPU-type
Genereer code die draait op CPU-type, wat de naam is van een systeem dat staat voor a
bepaald processortype. Mogelijke waarden voor CPU-type zijn g5, g6, z900, z990, z9-109,
z9-ec, z10, z196, zEC12 en z13. Bij het genereren van code met behulp van de instructies
beschikbaar op z/Architecture, de standaard is -maart=z900. Anders is de standaard
-maart=g5.

-mtune=CPU-type
Stem af op CPU-type alles wat van toepassing is over de gegenereerde code, behalve de ABI
en de set beschikbare instructies. De lijst van CPU-type waarden is hetzelfde als voor
-maart. De standaardwaarde is de waarde die wordt gebruikt voor -maart.

-mtpf-trace
-mno-tpf-trace
Genereer code die toevoegt (niet toevoegt) in TPF OS-specifieke takken om routines te traceren
in het besturingssysteem. Deze optie is standaard uitgeschakeld, zelfs bij het compileren voor de
TPF-OS.

-mfused-gek
-mno-gefuseerd-madd
Genereer code die de drijvende-komma vermenigvuldigen en accumuleren gebruikt (niet gebruikt)
instructies. Deze instructies worden standaard gegenereerd als hardware floating point
is gebruikt.

-mwarn-framegrootte=kadergrootte
Geef een waarschuwing als de huidige functie de opgegeven framegrootte overschrijdt. Omdat dit is
een controle tijdens het compileren hoeft geen echt probleem te zijn als het programma draait. Het
is bedoeld om functies te identificeren die hoogstwaarschijnlijk een stack overflow veroorzaken. Het is
handig om te gebruiken in een omgeving met een beperkte stapelgrootte, bijvoorbeeld de linux-kernel.

-mwarn-dynamicstack
Geef een waarschuwing af als de functie "alloca" aanroept of arrays van dynamische grootte gebruikt. Dit
is over het algemeen een slecht idee met een beperkte stapelgrootte.

-mstack-guard=stapelbewaker
-mstack-grootte=stapel grootte
Als deze opties aanwezig zijn, geeft de S/390-backend aanvullende instructies in de
functie proloog die een val activeert als de stapelgrootte is stapelbewaker bytes boven de
stapel grootte (onthoud dat de stapel op S/390 naar beneden groeit). Als de stapelbewaker
optie is weggelaten de kleinste macht van 2 groter dan de framegrootte van de gecompileerde
functie wordt gekozen. Deze opties zijn bedoeld om te helpen bij het debuggen van stack
overloop problemen. De extra uitgezonden code veroorzaakt slechts weinig overhead en
kan daarom ook worden gebruikt in productie-achtige systemen zonder betere prestaties
degradatie. De gegeven waarden moeten exacte machten van 2 zijn en stapel grootte moet zijn
groter dan stapelbewaker zonder 64k te overschrijden. Om efficiënt te zijn de extra
code gaat ervan uit dat de stapel begint bij een adres dat is uitgelijnd met de waarde
gegeven door stapel grootte. De stapelbewaker optie kan alleen worden gebruikt in combinatie met
stapel grootte.

-mhotpatch=pre-halve woorden,post-halve woorden
Als de hotpatch-optie is ingeschakeld, wordt een "hot-patching"-functieproloog gegenereerd voor
alle functies in de compilatie-eenheid. Het functielabel wordt voorafgegaan door het gegeven
aantal NOP-instructies van twee bytes (pre-halve woorden, maximaal 1000000). Na de
etiket, 2 * post-halve woorden bytes worden toegevoegd, met behulp van de grootste NOP-achtige instructies
de architectuur staat toe (maximaal 1000000).

Als beide argumenten nul zijn, is hotpatching uitgeschakeld.

Deze optie kan voor individuele functies worden overschreven met het kenmerk "hotpatch".

Score Opties

Deze opties zijn gedefinieerd voor Score-implementaties:

-meb
Compileer code voor big-endian-modus. Dit is de standaardinstelling.

-mel
Compileer code voor little-endian-modus.

- mnhwloop
Schakel het genereren van "bcnz"-instructies uit.

-muls
Maak het genereren van niet-uitgelijnde laad- en opslaginstructies mogelijk.

-mmac
Schakel het gebruik van instructies voor meervoudig accumuleren in. Standaard uitgeschakeld.

-mscore5
Specificeer de SCORE5 als de doelarchitectuur.

-mscore5u
Specificeer de SCORE5U van de doelarchitectuur.

-mscore7
Specificeer de SCORE7 als de doelarchitectuur. Dit is de standaardinstelling.

-mscore7d
Specificeer de SCORE7D als de doelarchitectuur.

SH Opties

Deze -m opties zijn gedefinieerd voor de SH-implementaties:

-m1 Genereer code voor de SH1.

-m2 Genereer code voor de SH2.

-m2e
Genereer code voor de SH2e.

-m2a-nofpu
Genereer code voor de SH2a zonder FPU, of voor een SH2a-FPU zodanig dat de
drijvende-komma-eenheid wordt niet gebruikt.

-m2a-enkelvoudig
Genereer code voor de SH2a-FPU, op zo'n manier dat er geen dubbele precisie drijvende komma
operaties worden gebruikt.

-m2a-eenpersoons
Genereer code voor de SH2a-FPU, ervan uitgaande dat de drijvende-kommaeenheid met enkele precisie is
modus standaard.

-m2a
Genereer code voor de SH2a-FPU, ervan uitgaande dat de drijvende-kommaeenheid dubbele precisie heeft
modus standaard.

-m3 Genereer code voor de SH3.

-m3e
Genereer code voor de SH3e.

-m4-nofpu
Genereer code voor de SH4 zonder een drijvende-kommaeenheid.

-m4-enkelvoudig
Genereer code voor de SH4 met een drijvende-kommaeenheid die alleen single-
precisie rekenen.

-m4-single
Genereer code voor de SH4, ervan uitgaande dat de drijvende-kommaeenheid zich in de single-precision-modus bevindt
standaard.

-m4 Genereer code voor de SH4.

-m4-100
Genereer code voor SH4-100.

-m4-100-nofpu
Genereer code voor SH4-100 op een zodanige manier dat de drijvende-kommaeenheid niet wordt gebruikt.

-m4-100-enkel
Genereer code voor SH4-100, ervan uitgaande dat de drijvende-kommaeenheid zich in de single-precision-modus bevindt
standaard.

-m4-100-enkelvoudig
Genereer code voor SH4-100 op een zodanige manier dat er geen dubbele precisie drijvende komma
operaties worden gebruikt.

-m4-200
Genereer code voor SH4-200.

-m4-200-nofpu
Genereer code voor SH4-200 zonder op een zodanige manier dat de drijvende-kommaeenheid niet is
gebruikt.

-m4-200-enkel
Genereer code voor SH4-200, ervan uitgaande dat de drijvende-kommaeenheid zich in de single-precision-modus bevindt
standaard.

-m4-200-enkelvoudig
Genereer code voor SH4-200 op een zodanige manier dat er geen dubbele precisie drijvende komma
operaties worden gebruikt.

-m4-300
Genereer code voor SH4-300.

-m4-300-nofpu
Genereer code voor SH4-300 zonder op een zodanige manier dat de drijvende-kommaeenheid niet is
gebruikt.

-m4-300-enkel
Genereer code voor SH4-300 op een zodanige manier dat er geen dubbele precisie drijvende komma
operaties worden gebruikt.

-m4-300-enkelvoudig
Genereer code voor SH4-300 op een zodanige manier dat er geen dubbele precisie drijvende komma
operaties worden gebruikt.

-m4-340
Genereer code voor SH4-340 (geen MMU, geen FPU).

-m4-500
Genereer code voor SH4-500 (geen FPU). passen -isa=sh4-nofpu naar de monteur.

-m4a-nofpu
Genereer code voor de SH4al-dsp, of voor een SH4a op zo'n manier dat de drijvende-komma
eenheid wordt niet gebruikt.

-m4a-enkelvoudig
Genereer code voor de SH4a, op zo'n manier dat er geen dubbele precisie drijvende komma
operaties worden gebruikt.

-m4a-eenpersoons
Genereer code voor de SH4a, ervan uitgaande dat de drijvende-kommaeenheid in enkele precisie is
modus standaard.

-m4a
Genereer code voor de SH4a.

-m4al
Hetzelfde als -m4a-nofpu, behalve dat het impliciet voorbij gaat -dsp naar de monteur. GCC
genereert momenteel geen DSP-instructies.

-m5-32media
Genereer 32-bits code voor SHmedia.

-m5-32media-nofpu
Genereer 32-bits code voor SHmedia op een zodanige manier dat de drijvende-komma-eenheid niet:
gebruikt.

-m5-64media
Genereer 64-bits code voor SHmedia.

-m5-64media-nofpu
Genereer 64-bits code voor SHmedia op een zodanige manier dat de drijvende-komma-eenheid niet:
gebruikt.

-m5-compact
Genereer code voor SHcompact.

-m5-compact-nofpu
Genereer code voor SHcompact op een zodanige manier dat de drijvende-komma-eenheid niet wordt gebruikt.

-mb Compileer code voor de processor in big-endian-modus.

-ml Compileer code voor de processor in little-endian-modus.

-muitlijnen
Align verdubbelt bij 64-bits grenzen. Merk op dat dit de belconventies verandert,
en dus werken sommige functies uit de standaard C-bibliotheek niet tenzij u opnieuw compileert
het eerst met -muitlijnen.

-montspan
Kort sommige adresverwijzingen in tijdens de koppelingstijd, indien mogelijk; gebruikt de linker-optie
-kom tot rust.

- twijfelbaar
Gebruik 32-bits offsets in "switch"-tabellen. De standaardinstelling is om 16-bits offsets te gebruiken.

-mbitoppen
Schakel het gebruik van instructies voor bitmanipulatie op SH2A in.

-mfmovd
Schakel het gebruik van de instructie "fmovd" in. Rekening -muitlijnen voor uitlijningsbeperkingen.

-mrenesas
Houd u aan de belconventies die zijn gedefinieerd door Renesas.

-mno-renas
Voldoen aan de belconventies die zijn gedefinieerd voor GCC vóór de Renesas-conventies
beschikbaar waren. Deze optie is de standaard voor alle doelen van de SH-toolchain.

-mnomacsave
Markeer het "MAC"-register als belazerd, zelfs als -mrenesas is gegeven.

-mieeee
-mno-ieee
Controleer de IEEE-conformiteit van drijvende-kommavergelijkingen, wat de verwerking beïnvloedt
gevallen waarin het resultaat van een vergelijking ongeordend is. Standaard -mieeee is
impliciet ingeschakeld. Indien -alleen eindige-wiskunde is ingeschakeld -mno-ieee is impliciet ingesteld,
wat resulteert in snellere drijvende-komma meer-gelijke en minder-gelijke vergelijkingen. De
geïmpliceerde instellingen kunnen worden overschreven door een van beide op te geven: -mieeee or -mno-ieee.

-minline-ic_invalidate
Inline code om instructiecachevermeldingen ongeldig te maken na het instellen van de geneste functie
trampolines. Deze optie heeft geen effect als -musermodus is van kracht en de geselecteerde
optie voor het genereren van codes (bijv -m4) staat het gebruik van de "icbi"-instructie niet toe.
Als de geselecteerde optie voor het genereren van codes het gebruik van de "icbi" niet toestaat
instructie, en -musermodus niet van kracht is, manipuleert de inline-code de
instructie cache adres array direct met een associatieve schrijven. Dit niet alleen
vereist bevoorrechte modus tijdens runtime, maar het mislukt ook als de cacheregel was
in kaart gebracht via de TLB en is niet meer in kaart gebracht.

-mismaat
Dump instructiegrootte en locatie in de montagecode.

-mpadstructuur
Deze optie is verouderd. Het vult structuren op tot een veelvoud van 4 bytes, dat is:
onverenigbaar met de SH ABI.

-matomisch-model=model
Stelt het model van atomaire bewerkingen en aanvullende parameters in als gescheiden door komma's
lijst. Zie voor details over de atomaire ingebouwde functies: __atomair Ingebouwde. De
volgende modellen en parameters worden ondersteund:

geen
Schakel door de compiler gegenereerde atoomreeksen uit en verzend bibliotheekaanroepen voor atomic
activiteiten. Dit is de standaardinstelling als het doel niet "sh*-*-linux*" is.

zacht-gusa
Genereer GNU/Linux-compatibele gUSA-software atomaire sequenties voor de atomaire ingebouwde
in functies. De gegenereerde atomaire sequenties vereisen extra ondersteuning van de
interrupt/uitzonderingscode van het systeem en zijn alleen geschikt voor SH3* en
SH4* single-core systemen. Deze optie is standaard ingeschakeld wanneer het doel is
"sh*-*-linux*" en SH3* of SH4*. Als het doel SH4A is, is deze optie ook:
maakt gedeeltelijk gebruik van de hardware-atomische instructies "movli.l" en "movco.l" om
maak efficiëntere code, tenzij streng is gespecificeerd.

zacht-tcb
Genereer atomaire sequenties in software die een variabele gebruiken in de threadcontrole
blok. Dit is een variatie op de gUSA-sequenties die ook op SH1* kunnen worden gebruikt
en SH2*-doelen. De gegenereerde atomaire sequenties hebben extra ondersteuning nodig van:
de onderbrekings-/uitzonderingscode van het systeem en zijn alleen geschikt voor:
single-core systemen. Bij gebruik van dit model, gbr-offset= parameter moet zijn
ook opgegeven.

zacht masker
Genereer atomaire sequenties in de software die onderbrekingen tijdelijk uitschakelen door in te stellen:
"SR.IMASK = 1111". Dit model werkt alleen als het programma in de bevoorrechte modus draait
en is alleen geschikt voor single-core systemen. Extra ondersteuning van de
onderbrekings-/uitzonderingscode van het systeem is niet vereist. Dit model is
standaard ingeschakeld wanneer het doel "sh*-*-linux*" en SH1* of SH2* is.

harde llcs
Genereer hardware-atomaire sequenties met behulp van de instructies "movli.l" en "movco.l"
enkel en alleen. Deze is alleen beschikbaar op SH4A en is geschikt voor multi-core systemen.
Omdat de hardware-instructies alleen 32-bits atomaire variabelen ondersteunen, is toegang tot 8
of 16-bits variabelen worden geëmuleerd met 32-bits toegangen. Code hiermee gecompileerd
optie is ook compatibel met andere software atomaire model interrupt/uitzondering
handlingsystemen indien uitgevoerd op een SH4A-systeem. Extra ondersteuning van de
onderbrekings-/uitzonderingscode van het systeem is niet vereist voor dit model.

gbr-offset=
Deze parameter specificeert de offset in bytes van de variabele in de thread control
blokstructuur die moet worden gebruikt door de gegenereerde atomaire sequenties wanneer de
zacht-tcb model is gekozen. Voor andere modellen wordt deze parameter genegeerd.
De opgegeven waarde moet een geheel veelvoud van vier zijn en moet tussen 0-1020 liggen.

streng
Deze parameter voorkomt gemengd gebruik van meerdere atoommodellen, zelfs als dat het geval is
compatibel, en zorgt ervoor dat de compiler atomaire reeksen genereert van de gespecificeerde
alleen model.

-mtas
Genereer de "tas.b" opcode voor "__atomic_test_and_set". Merk op dat, afhankelijk van de
bepaalde hardware- en softwareconfiguratie kan dit de algehele prestaties verslechteren
vanwege de operand-cacheregelspoelingen die worden geïmpliceerd door de "tas.b" -instructie. Op
multi-core SH4A-processors de instructie "tas.b" moet met voorzichtigheid worden gebruikt, aangezien het
kan leiden tot gegevensbeschadiging voor bepaalde cacheconfiguraties.

-prefergot
Bij het genereren van positie-onafhankelijke code, zend functieaanroepen uit met behulp van de Global Offset
Tabel in plaats van de Procedure Linkage Table.

-musermodus
-mno-gebruikersmodus
Sta niet toe (sta toe) dat de compiler geprivilegieerde moduscode genereert. Specificeren
-musermodus houdt ook in -mno-inline-ic_invalidate als de inline code niet zou werken
in gebruikersmodus. -musermodus is de standaard wanneer het doel "sh*-*-linux*" is. Als de
doel is SH1* of SH2* -musermodus heeft geen effect, aangezien er geen gebruikersmodus is.

-multikosten=aantal
Stel de kosten in die moeten worden aangenomen voor een vermenigvuldigingsinsn.

-mdiv=strategie
Stel de delingsstrategie in die moet worden gebruikt voor gehele delingsbewerkingen. Voor SHmedia
strategie kan een van zijn:

fp Voert de bewerking uit in drijvende komma. Dit heeft een zeer hoge latentie, maar moet
slechts een paar instructies, dus het kan een goede keuze zijn als je code voldoende is
gemakkelijk te exploiteren ILP zodat de compiler de drijvende komma kan plannen
instructies samen met andere instructies. Deling door nul veroorzaakt a
drijvende-komma uitzondering.

inv Gebruikt gehele operaties om de inverse van de deler te berekenen, en dan
vermenigvuldigt het dividend met het omgekeerde. Deze strategie maakt CSE en hijsen mogelijk
van de inverse berekening. Delen door nul berekent een niet-gespecificeerd resultaat,
maar trapt niet.

inv:minlat
Een variant van inv waar, als er geen CSE of hijsmogelijkheden zijn gevonden, of als
de hele operatie is naar dezelfde plek gehesen, de laatste etappes van de
inverse berekening zijn verweven met de laatste vermenigvuldiging om de algehele
latentie, ten koste van het gebruik van een paar instructies, en dus minder aanbieden
mogelijkheden plannen met andere code.

Bellen
Roept een bibliotheekfunctie aan die meestal de implementeert inv:minlat strategie. Dit
geeft een hoge codedichtheid voor "m5-*media-nofpu"-compilaties.

call2
Gebruikt een ander ingangspunt van dezelfde bibliotheekfunctie, waarbij wordt aangenomen dat a
aanwijzer naar een opzoektabel is al ingesteld, wat de aanwijzerbelasting blootlegt
naar CSE en code hoisting optimalisaties.

inv:oproep
inv:bel2
inv:fp
Gebruik de inv algoritme voor het genereren van initiële code, maar als de code blijft
niet-geoptimaliseerd, keer terug naar de Bellen, call2of fp respectievelijk strategieën. Let daar op
het potentieel overheersende neveneffect van deling door nul wordt gedragen door een aparte
instructie, dus het is mogelijk dat alle integer-instructies eruit worden gehesen,
maar de marker voor de bijwerking blijft waar hij is. Een recombinatie naar
drijvende-kommabewerkingen of een oproep is in dat geval niet mogelijk.

inv20u
inv20l
Varianten van de inv:minlat strategie. In het geval dat de inverse berekening is
niet gescheiden van de vermenigvuldiging, ze versnellen de verdeling waar het dividend past
in 20 bits (plusteken indien van toepassing) door een test in te voegen om een ​​aantal
operaties in dit geval; deze test vertraagt ​​het geval van grotere dividenden.
inv20u neemt aan dat het geval van een dergelijk klein dividend onwaarschijnlijk is, en inv20l
gaat ervan uit dat het waarschijnlijk is.

Voor andere doelen dan SHmedia strategie kan een van zijn:

bel-div1
Roept een bibliotheekfunctie aan die de eenstaps delingsinstructie "div1" gebruikt om
de operatie uitvoeren. Delen door nul berekent een niet-gespecificeerd resultaat en doet:
niet val. Dit is de standaard behalve voor SH4, SH2A en SHcompact.

bel-fp
Roept een bibliotheekfunctie aan die de bewerking met dubbele precisie zwevend uitvoert
punt. Deling door nul veroorzaakt een uitzondering met drijvende komma. Dit is de standaard
voor SHcompact met FPU. Dit specificeren voor doelen die geen dubbele hebben
precisie FPU is standaard ingesteld op "call-div1".

beltafel
Roept een bibliotheekfunctie aan die een opzoektabel gebruikt voor kleine delers en de
"div1" -instructie met onderscheid tussen hoofdletters en kleine letters voor grotere delers. Deling door nul
berekent een niet-gespecificeerd resultaat en trapt niet. Dit is de standaardinstelling voor SH4.
Dit specificeren voor doelen die geen standaardinstellingen voor dynamische schakelinstructies hebben
naar "call-div1".

Als er geen divisiestrategie is gespecificeerd, wordt de standaardstrategie geselecteerd op basis van
op het huidige doel. Voor SH2A is de standaardstrategie om de "divs" en "divu" te gebruiken
instructies in plaats van aanroepen van bibliotheekfuncties.

-bereken-uitgaande-args
Reserveer één keer ruimte voor uitgaande argumenten in de proloog van de functie in plaats van rond
elke oproep. Over het algemeen gunstig voor prestaties en grootte. Ook nodig om te ontspannen
om te voorkomen dat het stapelframe rond voorwaardelijke code wordt gewijzigd.

-mdivsi3_libfunc=naam
Stel de naam van de bibliotheekfunctie die wordt gebruikt voor 32-bits getekende deling in op: naam. Deze
heeft alleen invloed op de naam die wordt gebruikt in de Bellen en inv:oproep divisiestrategieën, en de
compiler verwacht nog steeds dezelfde reeksen invoer/uitvoer/bewerkte registers alsof dit
optie waren niet aanwezig.

-mvast-bereik=register-bereik
Genereer code die het opgegeven registerbereik behandelt als vaste registers. Een vast register
is er een die de registertoewijzer niet kan gebruiken. Dit is handig bij het compileren van de kernel
code. Een registerbereik wordt gespecificeerd als twee registers gescheiden door een streepje. Meerdere
registerbereiken kunnen worden gespecificeerd, gescheiden door een komma.

-mindexed-adressering
Schakel het gebruik van de geïndexeerde adresseringsmodus in voor SHmedia32/SHcompact. Dit is alleen
veilig als de hardware en/of het besturingssysteem 32-bits wrap-around-semantiek voor de geïndexeerde
adressering modus. De architectuur maakt de implementatie van processors met 64-bits mogelijk
MMU, die het besturingssysteem zou kunnen gebruiken om 32-bits adressering te krijgen, maar aangezien er geen huidige hardware is
implementatie ondersteunt deze of een andere manier om de geïndexeerde adresseringsmodus veilig te maken
om te gebruiken in de 32-bits ABI, is de standaard -mno-geïndexeerde-adressering.

-mgettrcost=aantal
Stel de veronderstelde kosten voor de "gettr"-instructie in op aantal. De standaard is 2 als
-mpt-vast van kracht is, anders 100.

-mpt-vast
Neem aan dat "pt*"-instructies niet vastlopen. Dit genereert over het algemeen beter geplande code,
maar is onveilig op de huidige hardware. De huidige architectuurdefinitie zegt dat:
"ptabs" en "ptrel" vallen wanneer het doel ened met 3 gelijk is aan 3. Dit heeft de
onbedoeld effect van het onveilig maken van het plannen van deze instructies vóór een
tak of hijs ze uit een lus. Bijvoorbeeld, "__do_global_ctors", een deel van
libgcc die constructors uitvoert bij het opstarten van het programma, functies aanroept in een lijst die is
begrensd door -1. Met de -mpt-vast optie, de "ptabs" is gedaan voor het testen
tegen -1. Dat betekent dat alle constructeurs iets sneller lopen, maar wanneer de
lus aan het einde van de lijst komt, crasht het programma omdat "ptabs" -1 in a . laadt
doel register.

Aangezien deze optie onveilig is voor hardware die de huidige architectuur implementeert
specificatie, de standaard is: -mno-pt-vast. Tenzij expliciet aangegeven met
-mgettrkosten, -mno-pt-vast houdt ook in -mgettrkosten = 100; dit schrikt registratie af
toewijzing van het gebruik van doelregisters voor het opslaan van gewone gehele getallen.

-mingeldige-symbolen
Stel dat symbolen mogelijk ongeldig zijn. Gewone functiesymbolen gegenereerd door de compiler
zijn altijd geldig om te laden met "movi"/"shori"/"ptabs" of "movi"/"shori"/"ptrel", maar
met assembler- en/of linkertrucs is het mogelijk om symbolen te genereren die
"ptabs" of "ptrel" om te vangen. Deze optie is alleen zinvol als -mno-pt-vast in
effect. Het voorkomt CSE met meerdere basisblokken, hijsen en de meeste planning van symbolen
ladingen. De standaard is -mno-ongeldige-symbolen.

-mbranch-kosten=num
Uitgaan van num om de kosten voor een filiaalinstructie te zijn. Hogere getallen maken de compiler
probeer indien mogelijk meer takvrije code te genereren. Indien niet gespecificeerd, is de waarde
geselecteerd afhankelijk van het processortype waarvoor wordt gecompileerd.

-mzdctak
-mno-zdcbranch
Neem aan (neem niet aan) dat nul verplaatsing voorwaardelijke aftakkingsinstructies "bt" en
"bf" zijn snel. Indien -mzdctak is opgegeven, geeft de compiler de voorkeur aan nulverplaatsing
sequenties van branchecodes. Dit is standaard ingeschakeld bij het genereren van code voor SH4 en
SH4A. Het kan expliciet worden uitgeschakeld door op te geven: -mno-zdcbranch.

-mcbranch-force-delay-slot
Forceer het gebruik van vertragingsslots voor voorwaardelijke vertakkingen, waardoor het vertragingsslot wordt gevuld
met een "nop" als een geschikte instructie niet kan worden gevonden. Standaard is deze optie
gehandicapt. Het kan worden ingeschakeld om hardwarefouten te omzeilen zoals gevonden in het origineel
SH7055.

-mfused-gek
-mno-gefuseerd-madd
Genereer code die de drijvende-komma vermenigvuldigen en accumuleren gebruikt (niet gebruikt)
instructies. Deze instructies worden standaard gegenereerd als hardware floating point
is gebruikt. De machine-afhankelijke -mfused-gek optie is nu toegewezen aan de machine-
onafhankelijk -ffp-contract=snel optie, en -mno-gefuseerd-madd is toegewezen aan
-ffp-contract=uit.

-mfsc
-mno-fsca
De compiler toestaan ​​of weigeren om de "fsca"-instructie voor sinus en cosinus uit te zenden
benaderingen. De optie -mfsc moet worden gebruikt in combinatie met
-funsafe-math-optimalisaties. Het is standaard ingeschakeld bij het genereren van code voor SH4A.
gebruik -mno-fsca schakelt sinus- en cosinusbenaderingen uit, zelfs als
-funsafe-math-optimalisaties van kracht is.

-mfsrra
-mno-fsrra
De compiler toestaan ​​of weigeren om de "fsrra"-instructie voor wederkerig vierkant uit te zenden
wortel benaderingen. De optie -mfsrra moet worden gebruikt in combinatie met
-funsafe-math-optimalisaties en -alleen eindige-wiskunde. Het is standaard ingeschakeld wanneer:
genererende code voor SH4A. Gebruik makend van -mno-fsrra schakelt wederzijdse vierkantswortel uit
benaderingen, zelfs als -funsafe-math-optimalisaties en -alleen eindige-wiskunde zijn in
effect.

-verweer-cmove
Voorkeur voor voorwaardelijke vertakkingen met nul verplaatsing voor voorwaardelijke verplaatsingsinstructie
patronen. Dit kan resulteren in snellere code op de SH4-processor.

solaris 2 Opties

Deze -m opties worden ondersteund op Solaris 2:

-mclear-hwcap
-mclear-hwcap vertelt de compiler om de hardwaremogelijkheden te verwijderen die zijn gegenereerd door de
Solaris monteur. Dit is alleen nodig als objectbestanden geen ISA-extensies gebruiken
ondersteund door de huidige machine, maar controleer tijdens runtime of u ze wel of niet wilt gebruiken.

-mimpure-tekst
-mimpure-tekst, gebruikt in aanvulling op -gedeeld, vertelt de compiler om niet door te geven -z tekst naar
de linker bij het koppelen van een gedeeld object. Met deze optie kunt u positie-
afhankelijke code in een gedeeld object.

-mimpure-tekst onderdrukt de "verhuizingen blijven tegen toewijsbare maar niet-beschrijfbare"
secties" linker-foutbericht. De noodzakelijke verplaatsingen activeren echter kopiëren-op-
schrijven, en het gedeelde object wordt niet echt gedeeld tussen processen. In plaats van
gebruik -mimpure-tekst, moet u alle broncode compileren met -fpic or -fPIC.

Deze switches worden naast het bovenstaande ondersteund op Solaris 2:

-pthreads
Ondersteuning voor multithreading toevoegen met behulp van de POSIX-threadsbibliotheek. Deze optie stelt
vlaggen voor zowel de preprocessor als de linker. Deze optie heeft geen invloed op de thread
veiligheid van objectcode geproduceerd door de compiler of die van bibliotheken die ermee zijn meegeleverd.

-pdraad
Dit is een synoniem voor -pthreads.

SPARC Opties

Deze -m opties worden ondersteund op de SPARC:

-mno-app-regs
-map-regs
Specificeren -map-regs om output te genereren met behulp van de globale registers 2 tot en met 4, die:
de SPARC SVR4 ABI reserveert voor toepassingen. Zoals het globale register 1, elke global
register 2 t/m 4 wordt dan behandeld als een toewijsbaar register dat wordt beklad door
functie oproepen. Dit is de standaardinstelling.

Om volledig SVR4 ABI-compatibel te zijn ten koste van enig prestatieverlies, specificeer:
-mno-app-regs. Met deze optie moet u bibliotheken en systeemsoftware compileren.

-mplat
-mno-plat
met -mplat, de compiler genereert geen instructies voor het opslaan/herstellen en gebruikt a
"plat" of enkelvoudig raammodel. Dit model is compatibel met de reguliere
raammodel registreren. De lokale registers en de invoerregisters (0--5) zijn nog steeds
behandeld als "call-saved"-registers en worden indien nodig op de stapel opgeslagen.

met -mno-plat (de standaard), de compiler genereert instructies voor opslaan/herstellen (behalve
voor bladfuncties). Dit is de normale bedrijfsmodus.

-mfpu
-mhard-zweven
Genereer output met drijvende-komma-instructies. Dit is de standaardinstelling.

-mno-fpu
-msoft-zweven
Genereer uitvoer met bibliotheekaanroepen voor drijvende komma. Waarschuwing: het vereiste
bibliotheken zijn niet voor alle SPARC-doelen beschikbaar. Normaal gesproken zijn de faciliteiten van de
de gebruikelijke C-compiler van de machine worden gebruikt, maar dit kan niet rechtstreeks in cross-
compilatie. U moet uw eigen regelingen treffen om voor een geschikte bibliotheek te zorgen
functies voor cross-compilatie. De ingebedde doelen sparc-*-uit en sparcliet-*-*
bieden wel software drijvende-komma-ondersteuning.

-msoft-zweven verandert de aanroepconventie in het uitvoerbestand; daarom is het alleen
handig als je compileert allen van een programma met deze optie. In het bijzonder moet u:
compileren libgcc.a, de bibliotheek die bij GCC wordt geleverd, met -msoft-zweven hiervoor
werken.

-mhard-quad-float
Genereer output met quad-word (lange dubbele) floating-point instructies.

-msoft-quad-float
Genereer output met bibliotheekaanroepen voor quad-word (long double) floating-point
instructies. De aangeroepen functies zijn die gespecificeerd in de SPARC ABI. Dit is de
standaard.

Op het moment van schrijven zijn er geen SPARC-implementaties die hardware-ondersteuning hebben voor:
de quad-woord drijvende-komma-instructies. Ze roepen allemaal een valbehandelaar aan voor een van
deze instructies, en vervolgens emuleert de trap-handler het effect van de instructie.
Vanwege de overhead van de trap-handler is dit veel langzamer dan het aanroepen van de ABI-bibliotheek
routines. dus de -msoft-quad-float optie is de standaard.

-mno-niet-uitgelijnde dubbels
-unaligned-dubbels
Neem aan dat doubles 8-byte uitlijning hebben. Dit is de standaardinstelling.

met -unaligned-dubbels, GCC gaat ervan uit dat doubles alleen 8-byte uitlijning hebben als ze
zijn opgenomen in een ander type, of als ze een absoluut adres hebben. Anders zou het
gaat ervan uit dat ze een uitlijning van 4 bytes hebben. Door deze optie op te geven, vermijdt u zeldzame
compatibiliteitsproblemen met code gegenereerd door andere compilers. Het is niet de standaard
omdat het resulteert in prestatieverlies, vooral voor drijvende-kommacode.

-muser-modus
-mno-gebruikersmodus
Genereer geen code die alleen in de supervisormodus kan worden uitgevoerd. Dit is alleen relevant voor:
de "casa"-instructie uitgezonden voor de LEON3-processor. Dit is de standaardinstelling.

-mno-sneller-structs
-mfaster-structuren
met -mfaster-structuren, gaat de compiler ervan uit dat structuren 8-byte moeten hebben
uitlijning. Dit maakt het gebruik van paren "ldd" en "std" instructies voor kopieën mogelijk
in structuurtoewijzing, in plaats van tweemaal zoveel "ld" en "st" paren. echter, de
het gebruik van deze gewijzigde uitlijning is rechtstreeks in strijd met de SPARC ABI. Het is dus de bedoeling
alleen voor gebruik op doelen waar de ontwikkelaar erkent dat de resulterende code is
niet direct in lijn met de regels van de ABI.

-mcpu=cpu_type
Stel de instructieset, registerset en instructieplanningsparameters in voor:
type machine cpu_type. Ondersteunde waarden voor cpu_type zijn v7, cypres, v8, supersparc,
hyperspaat, leon, leon3, leon3v7, sparcliet, f930, f934, spaclite86x, sterretje,
tsc701, v9, ultrasparc, ultraspark3, Niagara, niagara2, niagara3 en niagara4.

Native Solaris en GNU/Linux toolchains ondersteunen ook de waarde inheemse, die selecteert
de beste architectuuroptie voor de hostprocessor. -mcpu=natief heeft geen effect als
GCC herkent de processor niet.

Standaardinstructieplanningsparameters worden gebruikt voor waarden die een
architectuur en niet een implementatie. Dit zijn v7, v8, sparcliet, sterretje, v9.

Hier is een lijst van elke ondersteunde architectuur en hun ondersteunde implementaties.

v7 cipres, leon3v7

v8 supersparc, hypersparc, leon, leon3

sparcliet
f930, f934, spaclite86x

sterretje
tsc701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

Standaard (tenzij anders geconfigureerd) genereert GCC code voor de V7-variant van de
SPARC-architectuur. Met -mcpu=cipres, de compiler optimaliseert het bovendien voor
de Cypress CY7C602-chip, zoals gebruikt in de SPARCStation/SPARCServer 3xx-serie. Dit is
ook geschikt voor de oudere SPARCStation 1, 2, IPX etc.

met -mcpu=v8, genereert GCC code voor de V8-variant van de SPARC-architectuur. De
het enige verschil met V7-code is dat de compiler het gehele getal vermenigvuldigt en
integer verdeelinstructies die in SPARC-V8 voorkomen, maar niet in SPARC-V7. Met
-mcpu=supersparc, optimaliseert de compiler het bovendien voor de SuperSPARC-chip, zoals
gebruikt in de SPARCStation 10, 1000 en 2000 series.

met -mcpu=sparcliet, GCC genereert code voor de SPARClite-variant van de SPARC
architectuur. Dit voegt de stap integer vermenigvuldigen, integer delen toe en scan ("ffs")
instructies die bestaan ​​in SPARClite maar niet in SPARC-V7. Met -mcpu=f930
compiler optimaliseert het bovendien voor de Fujitsu MB86930-chip, wat het origineel is
SPARClite, zonder FPU. Met -mcpu=f934, de compiler optimaliseert het bovendien voor
de Fujitsu MB86934-chip, de recentere SPARClite met FPU.

met -mcpu=spikkeltje, GCC genereert code voor de SPARClet-variant van de SPARC
architectuur. Dit voegt het gehele getal vermenigvuldigen, vermenigvuldigen/accumuleren, geheel getal delen toe
step and scan ("ffs") instructies die wel in SPARClet maar niet in SPARC-V7 voorkomen. Met
-mcpu=tsc701, optimaliseert de compiler het bovendien voor de TEMIC SPARClet-chip.

met -mcpu=v9, genereert GCC code voor de V9-variant van de SPARC-architectuur. Dit
voegt 64-bits integer en floating-point verplaatsingsinstructies toe, 3 extra floating-point
conditiecoderegisters en voorwaardelijke verplaatsingsinstructies. Met -mcpu=ultrasparc,
de compiler optimaliseert het bovendien voor de Sun UltraSPARC I/II/IIi-chips. Met
-mcpu=ultrasparc3, de compiler optimaliseert het bovendien voor de Sun UltraSPARC
III/III+/IIIi/IIIi+/IV/IV+-chips. Met -mcpu=niagara, de compiler bovendien
optimaliseert het voor Sun UltraSPARC T1-chips. Met -mcpu=niagara2, de compiler
optimaliseert het bovendien voor Sun UltraSPARC T2-chips. Met -mcpu=niagara3
compiler optimaliseert het bovendien voor Sun UltraSPARC T3-chips. Met -mcpu=niagara4,
de compiler optimaliseert het bovendien voor Sun UltraSPARC T4-chips.

-mtune=cpu_type
Stel de instructieplanningsparameters in voor het machinetype: cpu_type, maar niet instellen
de instructieset of registerset die de optie -mcpu=cpu_type doet.

Dezelfde waarden voor -mcpu=cpu_type kan worden gebruikt voor -mtune=cpu_type, maar de enige
bruikbare waarden zijn die welke een bepaalde CPU-implementatie selecteren. Die zijn
cypres, supersparc, hyperspaat, leon, leon3, leon3v7, f930, f934, spaclite86x,
tsc701, ultrasparc, ultraspark3, Niagara, niagara2, niagara3 en niagara4. Met
native Solaris- en GNU/Linux-toolchains, inheemse kunnen ook worden gebruikt.

-mv8plus
-mno-v8plus
met -mv8plus, GCC genereert code voor de SPARC-V8+ ABI. Het verschil met de V8
ABI is dat de globale en uit-registers als 64 bits breed worden beschouwd. Dit is ingeschakeld
standaard op Solaris in 32-bits modus voor alle SPARC-V9-processors.

-mvis
-mno-vis
met -mvis, GCC genereert code die gebruikmaakt van de UltraSPARC Visual
Instructie Set extensies. De standaard is -mno-vis.

-mvis2
-mno-vis2
met -mvis2, GCC genereert code die gebruikmaakt van versie 2.0 van de UltraSPARC
Visuele Instructie Set-uitbreidingen. De standaard is -mvis2 bij het targeten van een cpu die
ondersteunt dergelijke instructies, zoals UltraSPARC-III en later. Instelling -mvis2 ook
sets -mvis.

-mvis3
-mno-vis3
met -mvis3, GCC genereert code die gebruikmaakt van versie 3.0 van de UltraSPARC
Visuele Instructie Set-uitbreidingen. De standaard is -mvis3 bij het targeten van een cpu die
ondersteunt dergelijke instructies, zoals niagara-3 en later. Instelling -mvis3 ook sets
-mvis2 en -mvis.

-mcbcond
-mno-cbcond
met -mcbcond, GCC genereert code die gebruikmaakt van vergelijken en vertakken
instructies, zoals gedefinieerd in de Sparc Architecture 2011. De standaard is -mcbcond wanneer
gericht op een cpu die dergelijke instructies ondersteunt, zoals niagara-4 en hoger.

-mpopc
-mno-popc
met -mpopc, GCC genereert code die gebruikmaakt van de UltraSPARC-populatie
tel instructie. De standaard is -mpopc bij het targeten van een cpu die dergelijke ondersteunt
instructies, zoals Niagara-2 en later.

-mfmaf
-mno-fmaf
met -mfmaf, genereert GCC code die gebruikmaakt van de UltraSPARC Fused Multiply-
Drijvende-komma-extensies toevoegen. De standaard is -mfmaf bij het targeten van een cpu die
ondersteunt dergelijke instructies, zoals Niagara-3 en later.

-mfix-at697f
Schakel de gedocumenteerde oplossing voor het enkele erratum van de Atmel AT697F-processor in
(wat overeenkomt met erratum #13 van de AT697E-processor).

-mfix-ut699
Schakel de gedocumenteerde tijdelijke oplossingen voor de drijvende-komma errata en de gegevenscache in
maak fouten van de UT699-processor ongedaan.

Deze -m opties worden naast het bovenstaande ondersteund op SPARC-V9-processors in 64-bit
omgevingen:

-m32
-m64
Genereer code voor een 32-bits of 64-bits omgeving. De 32-bits omgeving zet int,
lang en pointer naar 32 bits. De 64-bits omgeving wordt ingesteld op 32 bits en lang en
verwijzing naar 64 bits.

-mcmodel=welke
Stel het codemodel in op een van

meeldauw
Het Medium/Low code-model: 64-bit adressen, programma's moeten worden gekoppeld in de lage 32
stukjes geheugen. Programma's kunnen statisch of dynamisch gekoppeld worden.

midden
Het Medium/Middle-codemodel: 64-bits adressen, programma's moeten in de lage worden gekoppeld
44 bits geheugen, de tekst- en gegevenssegmenten moeten kleiner zijn dan 2 GB en
het datasegment moet zich binnen 2 GB van het tekstsegment bevinden.

medanie
Het Medium/Anywhere-codemodel: 64-bits adressen, programma's kunnen overal worden gekoppeld
in het geheugen moeten de tekst- en gegevenssegmenten kleiner zijn dan 2 GB en de gegevens
segment moet zich binnen 2 GB van het tekstsegment bevinden.

embleem
Het Medium/Anywhere-codemodel voor embedded systemen: 64-bits adressen, de tekst
en datasegmenten moeten kleiner zijn dan 2 GB, beide beginnend ergens in het geheugen
(bepaald op linktijd). Het globale register %g4 wijst naar de basis van de gegevens
segment. Programma's zijn statisch gekoppeld en PIC wordt niet ondersteund.

-geheugen-model=mem-model
Stel het geheugenmodel dat van kracht is op de processor in op een van:

verzuim
Het standaard geheugenmodel voor de processor en het besturingssysteem.

rmo Ontspannen geheugen bestellen

pso Gedeeltelijke winkelbestelling

tso Totale winkelbestelling

sc Sequentiële consistentie

Deze geheugenmodellen zijn formeel gedefinieerd in Bijlage D van de Sparc V9-architectuur
handleiding, zoals ingesteld in het veld "PSTATE.MM" van de processor.

-mstack-bias
-mno-stack-bias
met -mstack-bias, GCC gaat ervan uit dat de stapelaanwijzer en de frameaanwijzer, indien aanwezig,
worden gecompenseerd door -2047, die weer moeten worden toegevoegd bij het maken van verwijzingen naar stapelframes. Dit
is de standaardinstelling in 64-bits modus. Ga er anders vanuit dat een dergelijke offset niet aanwezig is.

SPU Opties

Deze -m opties worden ondersteund op de SPU:

-mwarn-reloc
-fout-reloc
De loader voor SPU verwerkt geen dynamische verhuizingen. Standaard geeft GCC een
fout wanneer het code genereert waarvoor een dynamische verplaatsing vereist is. -mno-fout-reloc
schakelt de fout uit, -mwarn-reloc genereert in plaats daarvan een waarschuwing.

-msafe-dma
-munsafe-dma
Instructies die de voltooiing van DMA initiëren of testen, mogen niet opnieuw worden besteld met
met betrekking tot belastingen en winkels van het geheugen dat wordt benaderd. Met -munsafe-dma
u moet het trefwoord "vluchtig" gebruiken om geheugentoegangen te beschermen, maar dat kan leiden tot:
inefficiënte code op plaatsen waarvan bekend is dat het geheugen niet verandert. In plaats van markeren
het geheugen als vluchtig, kunt u gebruiken -msafe-dma om de compiler te vertellen om de DMA te behandelen
instructies die mogelijk al het geheugen beïnvloeden.

-mtak-hints
Standaard genereert GCC een vertakkingshint-instructie om te voorkomen dat de pijplijn stopt voor:
altijd genomen of waarschijnlijk genomen takken. Een hint wordt niet dichter dan 8 . gegenereerd
instructies weg van zijn tak. Er is weinig reden om ze uit te schakelen, behalve voor:
foutopsporingsdoeleinden, of om een ​​object een beetje kleiner te maken.

-mklein-mem
-grote-mem
Standaard genereert GCC code in de veronderstelling dat adressen nooit groter zijn dan 18 bits.
met -grote-mem code wordt gegenereerd die uitgaat van een volledig 32-bits adres.

-mstdmain
Standaard koppelt GCC met opstartcode die de SPU-achtige hoofdfunctie overneemt
interface (die een onconventionele parameterlijst heeft). Met -mstdmain, GCC-links
uw programma tegen opstartcode die een interface in C99-stijl aanneemt als "main",
inclusief een lokale kopie van "argv" strings.

-mvast-bereik=register-bereik
Genereer code die het opgegeven registerbereik behandelt als vaste registers. Een vast register
is er een die de registertoewijzer niet kan gebruiken. Dit is handig bij het compileren van de kernel
code. Een registerbereik wordt gespecificeerd als twee registers gescheiden door een streepje. Meerdere
registerbereiken kunnen worden gespecificeerd, gescheiden door een komma.

-me32
-me64
Compileer code ervan uitgaande dat verwijzingen naar de PPU-adresruimte toegankelijk zijn via de "__ea"
benoemde adresruimte-kwalificatie zijn 32 of 64 bits breed. De standaardwaarde is 32 bits.
Aangezien dit een ABI-veranderende optie is, moet alle objectcode in een uitvoerbaar bestand worden gecompileerd
met dezelfde instelling.

-adres-ruimte-conversie
-mno-adres-ruimte-conversie
Toestaan/niet toestaan ​​dat de "__ea" adresruimte wordt behandeld als een superset van het generieke adres
ruimte. Dit maakt expliciete typecasts tussen "__ea" en generieke aanwijzer mogelijk, evenals:
impliciete conversies van generieke pointers naar "__ea" pointers. De standaard is om toe te staan
adresruimte pointer conversies.

-mcache-grootte=cache grootte
Deze optie regelt de versie van libgcc die de compiler koppelt aan een uitvoerbaar bestand
en selecteert een door software beheerde cache voor toegang tot variabelen in het "__ea"-adres
ruimte met een bepaalde cachegrootte. Mogelijke opties voor cache grootte zijn 8, 16, 32, 64
en 128. De standaardcachegrootte is 64 KB.

-matomische-updates
-mno-atomaire-updates
Deze optie regelt de versie van libgcc die de compiler koppelt aan een uitvoerbaar bestand
en selecteert of atomaire updates voor de door software beheerde cache van variabelen aan de PPU-zijde
worden gebruikt. Als u atomaire updates gebruikt, worden wijzigingen in een PPU-variabele van SPU-code met behulp van
de "__ea" benoemde adresruimte-kwalificatie interfereert niet met wijzigingen aan andere PPU
variabelen die zich in dezelfde cacheregel van PPU-code bevinden. Als u geen gebruik maakt van atomic
updates, dergelijke interferentie kan optreden; het terugschrijven van cacheregels is echter meer
efficiënt. Het standaardgedrag is het gebruik van atomaire updates.

-mdual-nops
-mdual-nops=n
Standaard voegt GCC nops in om het dubbele probleem te vergroten wanneer het verwacht dat het zal toenemen
prestaties. n kan een waarde van 0 tot 10 zijn. Een kleinere n voegt minder nops in. 10 is
de standaardwaarde, 0 is hetzelfde als -mno-dubbele-nops. uitgeschakeld met -Jij.

-mhint-max-nops=n
Maximaal aantal nops dat moet worden ingevoegd voor een vertakkingshint. Een takhint moet minimaal 8 . zijn
instructies weg van de tak die het beïnvloedt. GCC voegt tot n nee tegen
forceer dit, anders wordt de branchhint niet gegenereerd.

-mhint-max-afstand=n
De codering van de vertakkingshint-instructie beperkt de hint tot binnen 256
instructies van het filiaal waarop het betrekking heeft. Standaard zorgt GCC ervoor dat het binnen
125.

-msafe-tips
Omzeil een hardwarefout die ervoor zorgt dat de SPU voor onbepaalde tijd vastloopt. Standaard is GCC
voegt de "hbrp" -instructie in om ervoor te zorgen dat dit niet gebeurt.

Opties For Systeem V

Deze extra opties zijn beschikbaar op System V Release 4 voor compatibiliteit met andere
compilers op die systemen:

-G Maak een gedeeld object. Het is aanbevolen dat -symbolisch or -gedeeld in plaats daarvan worden gebruikt.

-Qy Identificeer de versies van elke tool die door de compiler wordt gebruikt, in een ".ident" assembler
richtlijn in de output.

-Qn Vermijd het toevoegen van ".ident"-richtlijnen aan het uitvoerbestand (dit is de standaardinstelling).

-YP,dirs
Doorzoek de mappen dirs, en geen andere, voor bibliotheken gespecificeerd met -l.

-Ja,dir
Kijk in de directory dir om de M4-preprocessor te vinden. De assembler gebruikt dit
optie.

TEGEL-Gx Opties

Deze -m opties worden ondersteund op de TILE-Gx:

-mcmodel=klein
Genereer code voor het kleine model. De afstand voor directe oproepen is beperkt tot 500M
in beide richtingen. PC-relatieve adressen zijn 32 bits. Ondersteuning voor absolute adressen
het volledige adresbereik.

-mcmodel=groot
Genereer code voor het grote model. Er is geen beperking op de gespreksafstand, pc-
relatieve adressen of absolute adressen.

-mcpu=naam
Selecteert het type CPU dat moet worden getarget. Momenteel is het enige ondersteunde type tegelgx.

-m32
-m64
Genereer code voor een 32-bits of 64-bits omgeving. De 32-bits omgeving zet int,
lang, en pointer naar 32 bits. De 64-bits omgeving wordt ingesteld op 32 bits en lang en
verwijzing naar 64 bits.

-mbig-endian
-mlittle-endian
Genereer code in respectievelijk big/little endian-modus.

TEGELPro Opties

Deze -m opties worden ondersteund op de TILEPro:

-mcpu=naam
Selecteert het type CPU dat moet worden getarget. Momenteel is het enige ondersteunde type tegelpro.

-m32
Genereer code voor een 32-bits omgeving, die int, long en pointer instelt op 32 bits.
Dit is het enige ondersteunde gedrag, dus de vlag wordt in wezen genegeerd.

V850 Opties

Deze -m opties zijn gedefinieerd voor V850-implementaties:

-mlong-oproepen
-mno-lange gesprekken
Behandel alle oproepen als ver weg (dichtbij). Als wordt aangenomen dat gesprekken ver weg zijn,
compiler laadt altijd het adres van de functie in een register en roept indirect . aan
door de wijzer.

-mno-ep
-mep
Niet optimaliseren (wel optimaliseren) basisblokken die dezelfde indexaanwijzer 4 of meer gebruiken
keer om de aanwijzer naar het "ep"-register te kopiëren en de kortere "sld" en "sst" te gebruiken
instructies. De -mep optie is standaard ingeschakeld als u optimaliseert.

-mno-prolog-functie
-mprolog-functie
Gebruik geen externe functies om registers op de proloog op te slaan en te herstellen
en epiloog van een functie. De externe functies zijn langzamer, maar gebruiken minder code
spatie als meer dan één functie hetzelfde aantal registers opslaat. De
-mprolog-functie optie is standaard ingeschakeld als u optimaliseert.

-mruimte
Probeer de code zo klein mogelijk te maken. Op dit moment schakelt dit alleen de -mep
en -mprolog-functie opties.

-mtda=n
Zet statische of globale variabelen waarvan de grootte is n bytes of minder in het kleine gegevensgebied
waar het register "ep" naar verwijst. Het kleine gegevensgebied kan in totaal maximaal 256 bytes bevatten
(128 bytes voor bytereferenties).

-msda=n
Zet statische of globale variabelen waarvan de grootte is n bytes of minder in het kleine gegevensgebied
dat register "gp" verwijst naar. Het kleine gegevensgebied kan maximaal 64 kilobyte bevatten.

-mzda=n
Zet statische of globale variabelen waarvan de grootte is n bytes of minder in de eerste 32
kilobyte geheugen.

-mv850
Geef aan dat de doelprocessor de V850 is.

-mv850e3v5
Geef aan dat de doelprocessor de V850E3V5 is. De preprocessorconstante
"__v850e3v5__" wordt gedefinieerd als deze optie wordt gebruikt.

-mv850e2v4
Geef aan dat de doelprocessor de V850E3V5 is. Dit is een alias voor de
-mv850e3v5 optie.

-mv850e2v3
Geef aan dat de doelprocessor de V850E2V3 is. De preprocessorconstante
"__v850e2v3__" wordt gedefinieerd als deze optie wordt gebruikt.

-mv850e2
Geef aan dat de doelprocessor de V850E2 is. De preprocessorconstante
"__v850e2__" wordt gedefinieerd als deze optie wordt gebruikt.

-mv850e1
Geef aan dat de doelprocessor de V850E1 is. De preprocessor constanten
"__v850e1__" en "__v850e__" worden gedefinieerd als deze optie wordt gebruikt.

-mv850es
Geef aan dat de doelprocessor de V850ES is. Dit is een alias voor de -mv850e1
optie.

-mv850e
Geef aan dat de doelprocessor de V850E is. De preprocessorconstante "__v850e__"
wordt gedefinieerd als deze optie wordt gebruikt.

Als geen van beide -mv850 noch -mv850e noch -mv850e1 noch -mv850e2 noch -mv850e2v3 noch -mv850e3v5
zijn gedefinieerd, wordt een standaard doelprocessor gekozen en de relevante __v850*__
preprocessorconstante is gedefinieerd.

De preprocessorconstanten "__v850" en "__v851__" zijn altijd gedefinieerd, ongeacht
welke processorvariant het doelwit is.

-mdisable-callt
-mno-uitschakelen-callt
Deze optie onderdrukt het genereren van de "CALLT"-instructie voor de v850e, v850e1,
v850e2, v850e2v3 en v850e3v5 smaken van de v850-architectuur.

Deze optie is standaard ingeschakeld wanneer de RH850 ABI in gebruik is (zie -mrh850-abi), En
standaard uitgeschakeld wanneer de GCC ABI in gebruik is. Als "CALLT" instructies worden gegeven
gegenereerd, wordt het C-preprocessorsymbool "__V850_CALLT__" gedefinieerd.

-montspan
-mno-ontspannen
Geef het door (of geef het niet door) -montspan opdrachtregeloptie naar de assembler.

-mverspringen
-mno-verspringen
Schakel het genereren van pc-relatieve springinstructies uit (of opnieuw in).

-msoft-zweven
-mhard-zweven
Schakel het genereren van hardware-drijvende-komma-instructies uit (of opnieuw in). Dit
optie is alleen significant als de doelarchitectuur is V850E2V3 of hoger. Indien
hardware drijvende-komma-instructies worden gegenereerd en vervolgens de C-preprocessor
symbool "__FPU_OK__" is gedefinieerd, anders is het symbool "__NO_FPU__" gedefinieerd.

-mlus
Maakt het gebruik van de e3v5 LOOP-instructie mogelijk. Het gebruik van deze instructie is niet:
standaard ingeschakeld wanneer de e3v5-architectuur is geselecteerd omdat het gebruik nog steeds is
experimenteel.

-mrh850-abi
-mghs
Maakt ondersteuning voor de RH850-versie van de V850 ABI mogelijk. Dit is de standaardinstelling. Met
deze versie van de ABI gelden de volgende regels:

* Structuren en vakbonden ter grootte van een geheel getal worden geretourneerd via een geheugenaanwijzer in plaats van
een register.

* Grote structuren en vakbonden (meer dan 8 bytes groot) worden per waarde doorgegeven.

* Functies zijn uitgelijnd op 16-bits grenzen.

* De -m8byte-uitlijnen opdrachtregeloptie wordt ondersteund.

* De -mdisable-callt opdrachtregeloptie is standaard ingeschakeld. De
-mno-uitschakelen-callt opdrachtregeloptie wordt niet ondersteund.

Wanneer deze versie van de ABI is ingeschakeld, wordt het C-preprocessor-symbool "__V850_RH850_ABI__" weergegeven
is gedefinieerd.

-mgcc-abi
Maakt ondersteuning voor de oude GCC-versie van de V850 ABI mogelijk. Met deze versie van de ABI
de volgende regels zijn van toepassing:

* Structuren en vakbonden ter grootte van een geheel getal worden geretourneerd in register "r10".

* Grote structuren en vakbonden (meer dan 8 bytes groot) worden als referentie doorgegeven.

* Functies zijn uitgelijnd op 32-bits grenzen, tenzij ze worden geoptimaliseerd voor grootte.

* De -m8byte-uitlijnen opdrachtregeloptie wordt niet ondersteund.

* De -mdisable-callt opdrachtregeloptie wordt ondersteund, maar niet standaard ingeschakeld.

Wanneer deze versie van de ABI is ingeschakeld, wordt het C-preprocessor-symbool "__V850_GCC_ABI__" weergegeven
is gedefinieerd.

-m8byte-uitlijnen
-mno-8byte-uitlijnen
Maakt ondersteuning mogelijk voor "dubbele" en "lange lange" typen om te worden uitgelijnd op 8-byte-grenzen.
De standaardinstelling is om de uitlijning van alle objecten te beperken tot maximaal 4 bytes. Wanneer
-m8byte-uitlijnen is in feite het C preprocessor-symbool "__V850_8BYTE_ALIGN__" is
gedefinieerd.

-mbig-schakelaar
Genereer code die geschikt is voor grote schakeltabellen. Gebruik deze optie alleen als de
assembler/linker klagen over vertakkingen die buiten het bereik vallen binnen een schakeltabel.

-map-regs
Deze optie zorgt ervoor dat r2 en r5 worden gebruikt in de code die door de compiler wordt gegenereerd. Dit
instelling is de standaardinstelling.

-mno-app-regs
Deze optie zorgt ervoor dat r2 en r5 worden behandeld als vaste registers.

VAX Opties

Deze -m opties zijn gedefinieerd voor de VAX:

-munix
Voer bepaalde springinstructies ("aobleq" enzovoort) niet uit die de Unix-assembler
want de VAX kan niet over lange afstanden overweg.

-mg nu
Voer die springinstructies uit, in de veronderstelling dat de GNU-assembler wordt
gebruikt.

- mg Uitvoercode voor getallen met drijvende komma in G-formaat in plaats van D-formaat.

Visium Opties

-mdebug
Een programma dat bestands-I/O uitvoert en bedoeld is om op een MCM-doel te draaien, moet:
gekoppeld aan deze optie. Het zorgt ervoor dat de bibliotheken libc.a en libdebug.a worden gekoppeld.
Het programma moet op het doel worden uitgevoerd onder controle van de GDB-foutopsporing op afstand
stomp.

-msim
Een programma dat bestands-I/O uitvoert en bedoeld is om op de simulator te draaien, moet:
gekoppeld aan optie. Hierdoor worden bibliotheken libc.a en libsim.a gekoppeld.

-mfpu
-mhard-zweven
Genereer code met drijvende-komma-instructies. Dit is de standaardinstelling.

-mno-fpu
-msoft-zweven
Genereer code met bibliotheekaanroepen voor drijvende komma.

-msoft-zweven verandert de aanroepconventie in het uitvoerbestand; daarom is het alleen
handig als je compileert allen van een programma met deze optie. In het bijzonder moet u:
compileren libgcc.a, de bibliotheek die bij GCC wordt geleverd, met -msoft-zweven hiervoor
werken.

-mcpu=cpu_type
Stel de instructieset, registerset en instructieplanningsparameters in voor:
type machine cpu_type. Ondersteunde waarden voor cpu_type zijn mcm, gr5 en gr6.

mcm is een synoniem van gr5 aanwezig voor achterwaartse compatibiliteit.

Standaard (tenzij anders geconfigureerd) genereert GCC code voor de GR5-variant van
de Visium-architectuur.

met -mcpu=gr6, genereert GCC code voor de GR6-variant van de Visium-architectuur.
Het enige verschil met GR5-code is dat de compiler blokbewegingen genereert
instructies.

-mtune=cpu_type
Stel de instructieplanningsparameters in voor het machinetype: cpu_type, maar niet instellen
de instructieset of registerset die de optie -mcpu=cpu_type zou doen.

-msv-modus
Genereer code voor de supervisor-modus, waar er geen beperkingen zijn op de toegang
naar algemene registers. Dit is de standaardinstelling.

-muser-modus
Genereer code voor de gebruikersmodus, waar de toegang tot enkele algemene registers is
verboden: op de GR5 zijn registers r24 tot r31 niet toegankelijk in deze modus; op de
GR6, alleen de registers r29 tot en met r31 worden beïnvloed.

VMS Opties

Deze -m opties zijn gedefinieerd voor de VMS-implementaties:

-mvms-retourcodes
Retourneer VMS-voorwaardecodes van "hoofd". De standaard is om de toestand in POSIX-stijl terug te geven
(bijv. fout)codes.

-mdebug-main=voorvoegsel
Markeer de eerste routine waarvan de naam begint met voorvoegsel als de belangrijkste routine voor de
debugger.

-mmalloc64
Standaard ingesteld op 64-bits geheugentoewijzingsroutines.

-mpointer-grootte=grootte
Stel de standaardgrootte van aanwijzers in. Mogelijke opties voor grootte zijn 32 or kort voor 32 bit
wijzers, 64 or lang voor 64-bits pointers, en geen voor het ondersteunen van alleen 32-bits pointers.
De latere optie schakelt "pragma pointer_size" uit.

VxWorks Opties

De opties in deze sectie zijn gedefinieerd voor alle VxWorks-doelen. Opties specifiek voor de
doelhardware worden weergegeven met de andere opties voor dat doel.

-mrtp
GCC kan code genereren voor zowel VxWorks-kernels als realtime processen (RTP's). Dit
optie schakelt van de eerste naar de laatste. Het definieert ook de preprocessor-macro
"__RTP__".

-niet-statisch
Koppel een RTP-uitvoerbaar bestand aan gedeelde bibliotheken in plaats van statische bibliotheken. De
opties -statisch en -gedeeld kan ook worden gebruikt voor RTP's; -statisch is de standaard.

-Bstatisch
-Bdynamisch
Deze opties worden doorgegeven aan de linker. Ze zijn gedefinieerd voor compatibiliteit met:
diab.

-Xbind-lui
Schakel luie binding van functieaanroepen in. Deze optie is gelijk aan: -Wl,-z,nu en
gedefinieerd voor compatibiliteit met Diab.

-Xbind-nu
Schakel luie binding van functieaanroepen uit. Deze optie is de standaard en is gedefinieerd voor:
compatibiliteit met Diab.

x86 Opties

Deze -m opties zijn gedefinieerd voor de x86-familie van computers.

-maart=CPU-type
Genereer instructies voor het machinetype CPU-type. In contrast met -mtune=CPU-type,
die alleen de gegenereerde code afstemt voor de opgegeven CPU-type, -maart=CPU-type
stelt GCC in staat om code te genereren die mogelijk helemaal niet op andere processors dan die ene draait
aangegeven. Specificeren -maart=CPU-type impliceert -mtune=CPU-type.

De keuzes voor CPU-type zijn:

inheemse
Dit selecteert de CPU om code voor te genereren tijdens het compileren door de . te bepalen
processortype van de compileermachine. Gebruik makend van -maart=inheems maakt alles mogelijk
instructie-subsets ondersteund door de lokale machine (vandaar dat het resultaat mogelijk niet wordt uitgevoerd)
op verschillende machines). Gebruik makend van -mtune=native produceert code die is geoptimaliseerd voor de lokale
machine onder de beperkingen van de geselecteerde instructieset.

i386
Originele Intel i386-CPU.

i486
Intel i486-CPU. (Er is geen planning geïmplementeerd voor deze chip.)

i586
pentium
Intel Pentium CPU zonder MMX-ondersteuning.

pentium-mmx
Intel Pentium MMX CPU, gebaseerd op Pentium core met ondersteuning voor MMX instructieset.

pentiumpro
Intel Pentium Pro-CPU.

i686
Bij gebruik bij -maart, de Pentium Pro-instructieset wordt gebruikt, dus de code wordt uitgevoerd
op alle i686-familiechips. Bij gebruik met -mtune, het heeft dezelfde betekenis als
algemeen.

pentium2
Intel Pentium II CPU, gebaseerd op Pentium Pro core met ondersteuning voor MMX-instructieset.

pentium3
pentium3m
Intel Pentium III CPU, gebaseerd op Pentium Pro core met MMX en SSE instructieset
Ondersteunen.

pentium-m
Intel Pentium M; low-power versie van Intel Pentium III CPU met MMX, SSE en SSE2
instructieset ondersteuning. Gebruikt door Centrino notebooks.

pentium4
pentium4m
Intel Pentium 4 CPU met ondersteuning voor MMX, SSE en SSE2 instructieset.

prescott
Verbeterde versie van Intel Pentium 4 CPU met MMX, SSE, SSE2 en SSE3 instructies
ondersteuning instellen.

geen
Verbeterde versie van Intel Pentium 4 CPU met 64-bit extensies, MMX, SSE, SSE2 en
Ondersteuning voor SSE3-instructieset.

core2
Intel Core 2 CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3 en SSSE3
instructieset ondersteuning.

ik adem
Intel Nehalem CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Ondersteuning voor SSE4.2 en POPCNT instructieset.

westen
Intel Westmere CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Ondersteuning voor SSE4.2, POPCNT, AES en PCLMUL instructieset.

zandbrug
Intel Sandy Bridge CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3,
Ondersteuning voor SSE4.1, SSE4.2, POPCNT, AVX, AES en PCLMUL instructieset.

klimop
Intel Ivy Bridge CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND en F16C instructieset
Ondersteunen.

Haswell
Intel Haswell CPU met 64-bit extensies, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2
en F16C instructieset ondersteuning.

breed
Intel Broadwell CPU met 64-bit extensies, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
Ondersteuning voor F16C, RDSEED, ADCX en PREFETCHW instructieset.

bonnel
Intel Bonnell CPU met 64-bit extensies, MOVBE, MMX, SSE, SSE2, SSE3 en SSSE3
instructieset ondersteuning.

zilvermont
Intel Silvermont CPU met 64-bit extensies, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
Ondersteuning voor SSE4.1, SSE4.2, POPCNT, AES, PCLMUL en RDRND instructieset.

KNL Intel Knight's Landing CPU met 64-bit extensies, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER en AVX512CD
instructieset ondersteuning.

k6 AMD K6 CPU met ondersteuning voor MMX-instructieset.

k6-2
k6-3
Verbeterde versies van AMD K6 CPU met MMX en 3DNow! instructieset ondersteuning.

Athlon
atlon-tbird
AMD Athlon CPU met MMX, 3dNOW!, verbeterde 3DNow! en SSE prefetch instructies
Ondersteunen.

atlon-4
athlon-xp
atlon-mp
Verbeterde AMD Athlon CPU met MMX, 3DNow!, verbeterde 3DNow! en volledige SSE instructie
ondersteuning instellen.

k8
Opteron
atlon64
athlon-fx
Processors gebaseerd op de AMD K8 core met x86-64 instructieset ondersteuning, inclusief
de AMD Opteron-, Athlon 64- en Athlon 64 FX-processors. (Dit overtreft MMX,
SSE, SSE2, 3DNow!, verbeterde 3DNow! en 64-bits instructieset-extensies.)

k8-sse3
opteron-sse3
atlon64-sse3
Verbeterde versies van AMD K8-kernen met ondersteuning voor SSE3-instructieset.

amdfam10
Barcelona
CPU's gebaseerd op AMD Family 10h cores met ondersteuning voor x86-64 instructieset. (Dit
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, verbeterde 3DNow!, ABM en 64-bit
instructieset-extensies.)

bdver1
CPU's gebaseerd op AMD Family 15h cores met ondersteuning voor x86-64 instructieset. (Dit
supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM en 64-bit instructieset-extensies.)

bdver2
AMD Family 15h core-gebaseerde CPU's met x86-64 instructieset ondersteuning. (Dit
supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM en 64-bit instructieset
extensies.)

bdver3
AMD Family 15h core-gebaseerde CPU's met x86-64 instructieset ondersteuning. (Dit
supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM en 64-bit instructieset
extensies.

bdver4
AMD Family 15h core-gebaseerde CPU's met x86-64 instructieset ondersteuning. (Dit
supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM en
64-bit instructieset extensies.

btver1
CPU's gebaseerd op AMD Family 14h cores met ondersteuning voor x86-64 instructieset. (Dit
supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM en 64-bit instructieset
extensies.)

btver2
CPU's gebaseerd op AMD Family 16h cores met ondersteuning voor x86-64 instructieset. Dit
omvat MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3-, SSE3-, SSE2-, SSE-, MMX- en 64-bits instructiesetuitbreidingen.

lier-c6
IDT WinChip C6 CPU, op dezelfde manier behandeld als i486 met extra MMX-instructieset
Ondersteunen.

lier2
IDT WinChip 2 CPU, op dezelfde manier behandeld als i486 met extra MMX en 3DNow!
instructieset ondersteuning.

c3 VIA C3 CPU met MMX en 3DNow! instructieset ondersteuning. (Geen planning is
geïmplementeerd voor deze chip.)

c3-2
VIA C3-2 (Nehemiah/C5XL) CPU met ondersteuning voor MMX- en SSE-instructieset. (Nee
planning is geïmplementeerd voor deze chip.)

geode
AMD Geode embedded processor met MMX en 3DNow! instructieset ondersteuning.

-mtune=CPU-type
Stem af op CPU-type alles wat van toepassing is over de gegenereerde code, behalve de ABI
en de set beschikbare instructies. Tijdens het kiezen van een specifieke CPU-type schema
dingen die geschikt zijn voor die specifieke chip, genereert de compiler geen code
die niet op het standaard machinetype kan draaien, tenzij u a . gebruikt -maart=CPU-type optie.
Als GCC bijvoorbeeld is geconfigureerd voor i686-pc-linux-gnu, dan: -mtune=pentium4 genereert
code die is afgestemd op Pentium 4 maar nog steeds op i686-machines draait.

De keuzes voor CPU-type zijn hetzelfde als voor -maart. Bovendien, -mtune ondersteunt 2
extra keuzes voor CPU-type:

algemeen
Produceer code die is geoptimaliseerd voor de meest voorkomende IA32/AMD64/EM64T-processors. als jij
weet op welke CPU uw code wordt uitgevoerd, dan moet u de bijbehorende . gebruiken
-mtune or -maart optie in plaats van -mtune=generiek. Maar als je het niet weet
precies wat CPU-gebruikers van uw applicatie zullen hebben, dan zou u dit moeten gebruiken
optie.

Naarmate nieuwe processors op de markt worden geïmplementeerd, is het gedrag van deze optie
zal veranderen. Daarom, als u een upgrade uitvoert naar een nieuwere versie van GCC, moet u code genereren
bestuurd door deze optie zal veranderen om de processors weer te geven die het meest zijn
gebruikelijk op het moment dat de versie van GCC wordt uitgebracht.

Er is geen -maart=generiek optie omdat -maart geeft de instructieset de . aan
compiler kan gebruiken, en er is geen generieke instructieset die voor iedereen van toepassing is
verwerkers. In tegenstelling tot, -mtune geeft de processor aan (of, in dit geval,
verzameling processors) waarvoor de code is geoptimaliseerd.

intel
Produceer code die is geoptimaliseerd voor de meest recente Intel-processors, namelijk Haswell
en Silvermont voor deze versie van GCC. Als u weet op welke CPU uw code staat
wordt uitgevoerd, moet u de bijbehorende -mtune or -maart optie in plaats van
-mtune=informatie. Maar als u wilt dat uw toepassing beter presteert op zowel Haswell
en Silvermont, dan moet u deze optie gebruiken.

Naarmate nieuwe Intel-processors op de markt worden ingezet, is het gedrag van deze
optie zal veranderen. Daarom, als u een upgrade uitvoert naar een nieuwere versie van GCC, code
generatie die door deze optie wordt beheerd, zal veranderen om de meest recente Intel
processors op het moment dat de versie van GCC wordt uitgebracht.

Er is geen -maart=intel optie omdat -maart geeft de instructieset de . aan
compiler kan gebruiken, en er is geen gemeenschappelijke instructieset die voor iedereen van toepassing is
verwerkers. In tegenstelling tot, -mtune geeft de processor aan (of, in dit geval,
verzameling processors) waarvoor de code is geoptimaliseerd.

-mcpu=CPU-type
Een verouderd synoniem voor -mtune.

-mfpmath=eenheid
Genereer drijvende-kommaberekeningen voor geselecteerde eenheid eenheid. De keuzes voor eenheid zijn:

387 Gebruik de standaard 387 floating-point coprocessor die aanwezig is op de meeste chips
en anders geëmuleerd. Code die met deze optie is gecompileerd, wordt bijna overal uitgevoerd.
De tijdelijke resultaten worden berekend in 80-bits precisie in plaats van de precisie
gespecificeerd door het type, wat resulteert in iets andere resultaten in vergelijking met de meeste
andere chips. Zien -float-winkel voor een meer gedetailleerde beschrijving.

Dit is de standaardkeuze voor x86-32-doelen.

sse Gebruik scalaire drijvende-komma-instructies die aanwezig zijn in de SSE-instructieset. Dit
instructieset wordt ondersteund door Pentium III en nieuwere chips, en in de AMD-lijn
door Athlon-4, Athlon XP en Athlon MP-chips. De eerdere versie van de SSE
instructieset ondersteunt alleen rekenen met enkele precisie, dus de dubbele en
rekenen met uitgebreide precisie wordt nog steeds gedaan met 387. Een latere versie, aanwezig
alleen in Pentium 4 en AMD x86-64-chips, ondersteunt ook dubbele-precisie rekenen.

Voor de x86-32-compiler moet u gebruiken -maart=CPU-type, -ms or -msse2 schakelt naar
schakel SSE-extensies in en maak deze optie effectief. Voor de x86-64-compiler,
deze extensies zijn standaard ingeschakeld.

De resulterende code zou in de meeste gevallen aanzienlijk sneller moeten zijn en
vermijd de numerieke instabiliteitsproblemen van 387-code, maar kan sommige bestaande breken
code die verwacht dat tijdelijke 80 bits zijn.

Dit is de standaardkeuze voor de x86-64-compiler.

zo,387
sse+387
zowel
Probeer beide instructiesets tegelijk te gebruiken. Dit verdubbelt effectief de
aantal beschikbare registers, en op chips met aparte uitvoeringseenheden voor 387
en SSE ook de uitvoeringsmiddelen. Gebruik deze optie met zorg, want het is nog steeds
experimenteel, omdat de GCC-registertoewijzer niet afzonderlijk model
functionele eenheden goed, wat resulteert in onstabiele prestaties.

-masm=tongval
Uitvoer montage-instructies met behulp van geselecteerd tongval. Heeft ook invloed op welk dialect is
gebruikt voor basis "asm" en uitgebreide "asm". Ondersteunde keuzes (in dialectvolgorde) zijn: naar
or intel. De standaardwaarde is naar. Darwin ondersteunt niet intel.

-mieee-fp
-mno-ieee-fp
Bepaal of de compiler wel of niet IEEE-drijvende-kommavergelijkingen gebruikt. Deze
correct omgaan met het geval waarin het resultaat van een vergelijking ongeordend is.

-msoft-zweven
Genereer uitvoer met bibliotheekaanroepen voor drijvende komma.

Waarschuwing: de benodigde bibliotheken maken geen deel uit van GCC. Normaal gesproken zijn de faciliteiten van de
de gebruikelijke C-compiler van de machine wordt gebruikt, maar dit kan niet rechtstreeks in cross-
compilatie. U moet uw eigen regelingen treffen om voor een geschikte bibliotheek te zorgen
functies voor cross-compilatie.

Op machines waar een functie drijvende-kommaresultaten retourneert in het 80387-register
stack, kunnen sommige drijvende-komma-opcodes worden uitgezonden, zelfs als: -msoft-zweven is gebruikt.

-mno-fp-ret-in-387
Gebruik de FPU-registers niet voor retourwaarden van functies.

De gebruikelijke aanroepconventie heeft functies die waarden van de typen "float" en "double" retourneren
in een FPU-register, ook als er geen FPU is. Het idee is dat het besturingssysteem
zou een FPU moeten emuleren.

De optie -mno-fp-ret-in-387 zorgt ervoor dat dergelijke waarden worden geretourneerd in de gewone CPU
in plaats daarvan registreert.

-mno-fancy-wiskunde-387
Sommige 387-emulators ondersteunen de instructies "sin", "cos" en "sqrt" niet voor de
387. Specificeer deze optie om te voorkomen dat deze instructies worden gegenereerd. Deze optie is de
standaard op OpenBSD en NetBSD. Deze optie wordt overschreven wanneer: -maart geeft aan dat
de doel-CPU heeft altijd een FPU en dus heeft de instructie geen emulatie nodig.
Deze instructies worden niet gegenereerd tenzij u ook de
-funsafe-math-optimalisaties schakelaar.

-kwaadaardig-dubbel
-mno-uitlijnen-dubbel
Bepaal of GCC de variabelen "double", "long double" en "long long" uitlijnt op a
grens van twee woorden of een grens van één woord. Uitlijnen van "dubbele" variabelen op een twee-woord
grens produceert code die iets sneller draait op een Pentium ten koste van meer
geheugen.

Op x86-64, -kwaadaardig-dubbel is standaard ingeschakeld.

Waarschuwing: als u de -kwaadaardig-dubbel switch, structuren die de bovenstaande typen bevatten
zijn anders uitgelijnd dan de gepubliceerde specificaties van de binaire interface van de toepassing
voor de x86-32 en zijn niet binair compatibel met structuren in code die is gecompileerd zonder
die schakelaar.

-m96bit-lang-dubbel
-m128bit-lang-dubbel
Deze schakelaars regelen de grootte van het "lange dubbele" type. De x86-32 applicatie binaire
interface specificeert de grootte als 96 bits, dus -m96bit-lang-dubbel is de standaard in
32-bits modus.

Moderne architecturen (Pentium en nieuwer) geven er de voorkeur aan dat "lange dubbele" wordt uitgelijnd op een 8-
of 16-byte grens. In arrays of structuren die voldoen aan de ABI is dit niet:
mogelijk. Dus specificeren -m128bit-lang-dubbel lijnt "long double" uit op een 16-byte
grens door de "lange dubbele" op te vullen met een extra 32-bits nul.

In de x86-64-compiler, -m128bit-lang-dubbel is de standaardkeuze als zijn ABI
geeft aan dat "long double" is uitgelijnd op een grens van 16 bytes.

Merk op dat geen van deze opties extra precisie mogelijk maakt ten opzichte van de x87-standaard
van 80 bits voor een "long double".

Waarschuwing: als u de standaardwaarde voor uw doel-ABI overschrijft, verandert dit de grootte
van structuren en arrays die "lange dubbele" variabelen bevatten, evenals het wijzigen van de
functieaanroepconventie voor functies die "long double" nemen. Daarom zijn ze dat niet
binair compatibel met code die is gecompileerd zonder die schakelaar.

-mlong-dubbel-64
-mlong-dubbel-80
-mlong-dubbel-128
Deze schakelaars regelen de grootte van het "lange dubbele" type. Een grootte van 64 bits maakt de
"long double" type equivalent aan het "double" type. Dit is de standaard voor 32-bit
Bionic C-bibliotheek. Een grootte van 128 bits maakt het "lange dubbele" type gelijk aan de
"__float128"-type. Dit is de standaardinstelling voor de 64-bit Bionic C-bibliotheek.

Waarschuwing: als u de standaardwaarde voor uw doel-ABI overschrijft, verandert dit de grootte
van structuren en arrays die "lange dubbele" variabelen bevatten, evenals het wijzigen van de
functieaanroepconventie voor functies die "long double" nemen. Daarom zijn ze dat niet
binair compatibel met code die is gecompileerd zonder die schakelaar.

-kwaadaardige-gegevens= type dan:
Bepaal hoe GCC variabelen uitlijnt. Ondersteunde waarden voor type dan: zijn compat gebruikt toegenomen
uitlijningswaarde compatibel maakt gebruik van GCC 4.8 en eerder, abi gebruikt uitlijningswaarde als
gespecificeerd door de psABI, en cachelijn gebruikt een verhoogde uitlijningswaarde om overeen te komen met de
grootte van de cacheregel. compat is de standaard.

-mlarge-data-drempel=drempel
. -mcmodel=gemiddeld is opgegeven, data-objecten groter dan drempel worden geplaatst in
het grote gegevensgedeelte. Deze waarde moet hetzelfde zijn voor alle objecten die zijn gekoppeld aan
het binaire bestand en is standaard ingesteld op 65535.

-mrtd
Gebruik een andere conventie voor het aanroepen van functies, waarin functies waarvoor een vaste
aantal argumenten komt terug met de "ret nummer" instructie, die hun argumenten laat zien
tijdens het terugkeren. Dit bespaart één instructie in de beller, aangezien dit niet nodig is
zet de argumenten daar neer.

U kunt specificeren dat een individuele functie wordt aangeroepen met deze aanroepreeks met
het functieattribuut "stdcall". U kunt ook de -mrtd optie met behulp van de
functieattribuut "cdecl".

Waarschuwing: deze oproepconventie is incompatibel met degene die normaal op Unix wordt gebruikt,
dus je kunt het niet gebruiken als je bibliotheken moet aanroepen die zijn gecompileerd met de Unix-compiler.

U moet ook functieprototypes leveren voor alle functies waarvoor variabele
aantal argumenten (inclusief "printf"); anders wordt er onjuiste code gegenereerd voor
oproepen naar die functies.

Bovendien krijg je ernstig onjuiste code als je een functie aanroept met te veel
argumenten. (Normaal gesproken worden extra argumenten onschadelijk genegeerd.)

-mregparm=num
Bepaal hoeveel registers worden gebruikt om integer-argumenten door te geven. Standaard, nee
registers worden gebruikt om argumenten door te geven en er kunnen maximaal 3 registers worden gebruikt. Jij kan
controleer dit gedrag voor een specifieke functie met behulp van het functiekenmerk
"repareren".

Waarschuwing: als u deze schakelaar gebruikt, en num is niet nul, dan moet je alle modules bouwen
met dezelfde waarde, inclusief eventuele bibliotheken. Dit omvat de systeembibliotheken en
opstartmodules.

-msseregparm
Gebruik conventies voor het doorgeven van SSE-registers voor float- en dubbele argumenten en retourwaarden.
U kunt dit gedrag voor een specifieke functie regelen met behulp van het functiekenmerk
"sseregparm".

Waarschuwing: als je deze switch gebruikt, moet je alle modules met dezelfde waarde bouwen,
inclusief eventuele bibliotheken. Dit omvat de systeembibliotheken en opstartmodules.

-mvect8-ret-in-mem
Retourneer 8-byte vectoren in het geheugen in plaats van MMX-registers. Dit is de standaard aan
Solaris@tie{}8 en 9 en VxWorks om overeen te komen met de ABI van de Sun Studio-compilers tot
versie 12. Latere compilerversies (te beginnen met Studio 12 Update@tie{}1) volgen
de ABI die wordt gebruikt door andere x86-doelen, wat de standaard is op Solaris@tie{}10 ​​en hoger.
Alleen gebruik deze optie als u compatibel moet blijven met de bestaande code die is geproduceerd door
die eerdere compilerversies of oudere versies van GCC.

-mpc32
-mpc64
-mpc80
Stel 80387 floating-point precisie in op 32, 64 of 80 bits. Wanneer -mpc32 is gespecificeerd,
de significanties van resultaten van drijvende-kommabewerkingen worden afgerond op 24 bits
(enkele precisie); -mpc64 rondt de significanties van resultaten van drijvende-komma af
bewerkingen tot 53 bits (dubbele precisie) en -mpc80 rondt de significanties van resultaten af
van drijvende-kommabewerkingen tot 64 bits (uitgebreide dubbele precisie), wat de
standaard. Wanneer deze optie wordt gebruikt, zijn bewerkingen met drijvende komma met hogere precisie
niet beschikbaar voor de programmeur zonder expliciet het FPU-stuurwoord in te stellen.

De afronding van drijvende-kommabewerkingen instellen op minder dan de standaard 80 bits kan
snelheid van sommige programma's met 2% of meer. Merk op dat sommige wiskundige bibliotheken aannemen dat:
uitgebreide precisie (80-bits) drijvende-kommabewerkingen zijn standaard ingeschakeld; routines
in dergelijke bibliotheken aanzienlijk verlies aan nauwkeurigheid kunnen lijden, meestal door zo-
"catastrofale annulering" genoemd, wanneer deze optie wordt gebruikt om de precisie in te stellen op
minder dan uitgebreide precisie.

-mstack opnieuw uitlijnen
Lijn de stapel opnieuw uit bij binnenkomst. Op de x86 is de -mstack opnieuw uitlijnen optie genereert een
afwisselende proloog en epiloog die de runtime-stack indien nodig opnieuw uitlijnt. Dit
ondersteunt het mixen van oude codes die de 4-byte stack-uitlijning behouden met moderne codes die
houd 16-byte-stackuitlijning voor SSE-compatibiliteit. Zie ook het attribuut
"force_align_arg_pointer", van toepassing op individuele functies.

-mpreferred-stack-grens=num
Poging om de stapelgrens uitgelijnd te houden met een 2 verhoogd tot num byte grens. Indien
-mpreferred-stack-grens niet is opgegeven, is de standaardwaarde 4 (16 bytes of 128 bits).

Waarschuwing: Bij het genereren van code voor de x86-64-architectuur met SSE-extensies
gehandicapt, -mppreferred-stack-grens=3 kan worden gebruikt om de stapelgrens uitgelijnd te houden
tot 8 byte grens. Aangezien x86-64 ABI 16 byte-stackuitlijning vereist, is dit ABI
onverenigbaar en bedoeld om te worden gebruikt in een gecontroleerde omgeving waar stapelruimte is
belangrijke beperking. Deze optie leidt tot verkeerde code wanneer functies gecompileerd met 16
byte stack uitlijning (zoals functies uit een standaard bibliotheek) worden aangeroepen met
verkeerd uitgelijnde stapel. In dit geval kunnen SSE-instructies leiden tot verkeerd uitgelijnde geheugentoegang
vallen. Bovendien worden variabele argumenten onjuist behandeld voor 16 bytes uitgelijnd
objecten (inclusief x87 long double en __int128), wat tot verkeerde resultaten leidt. Je moet
bouw alle modules met -mppreferred-stack-grens=3, inclusief eventuele bibliotheken. Dit
bevat de systeembibliotheken en opstartmodules.

-mincoming-stack-grens=num
Neem aan dat de inkomende stapel is uitgelijnd met een 2 die is verhoogd tot num byte grens. Indien
-minkomende-stapelgrens is niet gespecificeerd, degene gespecificeerd door
-mpreferred-stack-grens is gebruikt.

Op Pentium en Pentium Pro moeten "dubbele" en "lange dubbele" waarden worden uitgelijnd op een
8-byte grens (zie -kwaadaardig-dubbel) of lijden aan aanzienlijke runtime-prestaties
boetes. Op Pentium III kan het Streaming SIMD Extension (SSE) gegevenstype "__m128" mogelijk
werkt niet goed als het niet 16-byte is uitgelijnd.

Om een ​​juiste uitlijning van deze waarden op de stapel te garanderen, moet de stapelgrens zo zijn:
uitgelijnd zoals vereist door elke waarde die op de stapel is opgeslagen. Verder, elke functie
moet zodanig worden gegenereerd dat de stapel uitgelijnd blijft. Dus een functie aanroepen
gecompileerd met een hogere geprefereerde stapelgrens van een functie gecompileerd met een lagere
geprefereerde stapelgrens is hoogstwaarschijnlijk een verkeerde uitlijning van de stapel. Het is aanbevolen dat
bibliotheken die callbacks gebruiken, gebruiken altijd de standaardinstelling.

Deze extra uitlijning verbruikt extra stapelruimte en verhoogt in het algemeen de code
maat. Code die gevoelig is voor het gebruik van stackruimte, zoals embedded systemen en
besturingssysteemkernels, wilt u misschien de voorkeursuitlijning verminderen tot:
-mppreferred-stack-grens=2.

- mmmx
-ms
-msse2
-msse3
-mssse3
-msse4
-msse4a
-msse4.1
-msse4.2
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-msha
-maes
-mpclmul
-mclfusopt
-mfsgsbase
-mrdrnd
-mf16c
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dnu
-mpopcnt
-mabm
-mbmi
-mbmi2
-mlzct
-mfxsr
-mxopslaan
-mxsaveopt
-mxsavec
-mxopgeslagen
-mrtm
-MTB
-mmpx
-mmwachtx
Deze schakelaars maken het gebruik van instructies in de MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE,
RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT,
RTM, MPX, MWAITX of 3DNow! uitgebreide instructiesets. Elk heeft een overeenkomstige -mnee-
optie om het gebruik van deze instructies uit te schakelen.

Deze uitbreidingen zijn ook beschikbaar als ingebouwde functies: zie x86 Ingebouwd Functies,
voor details over de functies die door deze schakelaars worden in- en uitgeschakeld.

Automatisch SSE/SSE2-instructies genereren op basis van drijvende-kommacode (in tegenstelling tot)
tot 387 instructies), zie -mfpmath=sse.

GCC drukt SSEx-instructies in wanneer: -mavx is gebruikt. In plaats daarvan genereert het nieuwe AVX
instructies of AVX-equivalentie voor alle SSEx-instructies indien nodig.

Met deze opties kan GCC deze uitgebreide instructies gebruiken in gegenereerde code, zelfs
zonder -mfpmath=sse. Toepassingen die runtime-CPU-detectie uitvoeren, moeten compileren
aparte bestanden voor elke ondersteunde architectuur, met behulp van de juiste vlaggen. In
in het bijzonder moet het bestand met de CPU-detectiecode worden gecompileerd zonder
deze opties.

-mdump-tune-functies
Deze optie geeft GCC de opdracht om de namen van de x86 prestatieafstemmingsfuncties te dumpen en
standaard instellingen. De namen kunnen worden gebruikt in -mtune-ctrl=lijst met functies.

-mtune-ctrl=lijst met functies
Deze optie wordt gebruikt om fijnkorrelige controle uit te voeren van functies voor het genereren van x86-codes.
lijst met functies is een door komma's gescheiden lijst van kenmerken namen. Zie ook
-mdump-tune-functies. Indien gespecificeerd, de kenmerken is ingeschakeld als het niet is voorafgegaan
Met ^, anders is het uitgeschakeld. -mtune-ctrl=lijst met functies is bedoeld om te worden gebruikt
door GCC-ontwikkelaars. Het gebruik ervan kan leiden tot codepaden die niet worden gedekt door testen en kan
mogelijk resulteren in compiler-ICE's of runtime-fouten.

-mno-standaard
Deze optie geeft GCC de opdracht om alle afstembare functies uit te schakelen. Zie ook
-mtune-ctrl=lijst met functies en -mdump-tune-functies.

-mcld
Deze optie instrueert GCC om een ​​"cld"-instructie uit te zenden in de proloog van functies
die tekenreeksinstructies gebruiken. Tekenreeksinstructies zijn afhankelijk van de te selecteren DF-vlag
tussen de modus automatisch verhogen of automatisch verlagen. Terwijl de ABI de DF-vlag specificeert om
worden gewist bij het invoeren van een functie, sommige besturingssystemen schenden deze specificatie door niet
het wissen van de DF-vlag in hun exception-dispatchers. De uitzonderingshandler kan zijn:
aangeroepen met de DF-vlagset, wat leidt tot de verkeerde richtingsmodus bij string
instructies worden gebruikt. Deze optie kan standaard worden ingeschakeld op 32-bit x86-doelen door:
GCC configureren met de --enable-cld optie configureren. Generatie van "cld"
instructies kunnen worden onderdrukt met de -mno-cld compiler-optie in dit geval.

-mvzerupper
Deze optie instrueert GCC om een ​​"vzeroupper"-instructie uit te zenden vóór een overdracht van
regel de stroom uit de functie om ook de overgangsboete van AVX naar SSE te minimaliseren
als verwijder onnodige "zeroupper" intrinsieks.

-mpprefer-avx128
Deze optie instrueert GCC om 128-bit AVX-instructies te gebruiken in plaats van 256-bit AVX
instructies in de auto-vectorizer.

-mcx16
Met deze optie kan GCC "CMPXCHG16B"-instructies genereren. "CMPXCHG16B" staat toe:
voor atomaire bewerkingen op 128-bits dubbele quadword (of oword) gegevenstypen. Dit is
handig voor tellers met een hoge resolutie die kunnen worden bijgewerkt door meerdere processors (of
kernen). Deze instructie wordt gegenereerd als onderdeel van atomaire ingebouwde functies: zie
__synchroniseren Ingebouwde or __atomair Ingebouwde voor meer info.

-msahf
Deze optie maakt het genereren van "SAHF"-instructies in 64-bits code mogelijk. vroege Intel
Pentium 4 CPU's met Intel 64-ondersteuning, voorafgaand aan de introductie van Pentium 4 G1 step
in december 2005 ontbrak de "LAHF" en "SAHF" instructies die worden ondersteund door
AMD64. Dit zijn respectievelijk laad- en opslaginstructies voor bepaalde statusvlaggen.
In 64-bits modus wordt de instructie "SAHF" gebruikt om "fmod", "drem" en te optimaliseren
"overige" ingebouwde functies; zien Overige Ingebouwde voor meer info.

-mmovbe
Deze optie maakt het gebruik van de "movbe" instructie mogelijk om "__builtin_bswap32" te implementeren
en "__builtin_bswap64".

-mcrc32
Deze optie activeert ingebouwde functies "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" en "__builtin_ia32_crc32di" om
genereer de machine-instructie "crc32".

-mrecipe
Deze optie maakt het gebruik van "RCPSS" en "RSQRTSS" instructies mogelijk (en hun gevectoriseerde
varianten "RCPPS" en "RSQRTPS") met een extra Newton-Raphson-stap om te verhogen
precisie in plaats van "DIVSS" en "SQRTSS" (en hun gevectoriseerde varianten) voor single-
nauwkeurige drijvende-komma-argumenten. Deze instructies worden alleen gegenereerd wanneer:
-funsafe-math-optimalisaties is ingeschakeld samen met -eindige-wiskunde-alleen en
-fno-trapping-wiskunde. Merk op dat hoewel de doorvoer van de reeks hoger is dan de
doorvoer van de niet-wederkerige instructie, de precisie van de reeks kan zijn:
verminderd met maximaal 2 ulp (dwz het omgekeerde van 1.0 is gelijk aan 0.99999994).

Merk op dat GCC "1.0f/sqrtf(x)" in termen van "RSQRTSS" (of "RSQRTPS") al
Met -ffast-wiskunde (of de bovenstaande optiecombinatie), en hoeft niet -mrecipe.

Merk ook op dat GCC de bovenstaande reeks uitzendt met extra Newton-Raphson-stap voor:
gevectoriseerde single-float deling en gevectoriseerde "sqrtf(x)" al met -ffast-wiskunde
(of de bovenstaande optiecombinatie), en hoeft niet -mrecipe.

-mrecept=opteren
Deze optie bepaalt welke wederzijdse schattingsinstructies mogen worden gebruikt. opteren is een
door komma's gescheiden lijst met opties, die kan worden voorafgegaan door a ! om de optie om te keren:

allen Schakel alle schattingsinstructies in.

verzuim
Schakel de standaardinstructies in, gelijk aan -mrecipe.

geen
Schakel alle schattingsinstructies uit, gelijk aan -mno-recept.

div Schakel de benadering voor scalaire deling in.

vec-div
Schakel de benadering voor gevectoriseerde deling in.

vierkante meter
Schakel de benadering voor scalaire vierkantswortel in.

vec-sqrt
Schakel de benadering voor gevectoriseerde vierkantswortel in.

Dus bijvoorbeeld -mrecip=alle,!sqrt maakt alle wederzijdse benaderingen mogelijk,
behalve vierkantswortel.

-mveclibabi= type dan:
Specificeert het ABI-type dat moet worden gebruikt voor het vectoriseren van intrinsieke gegevens met behulp van een externe bibliotheek.
Ondersteunde waarden voor type dan: zijn svml voor de Intel korte vector wiskundebibliotheek en acml
voor de AMD-wiskundekernbibliotheek. Om deze optie te gebruiken, beide -ftree-vectoriseren en
-funsafe-math-optimalisaties moeten zijn ingeschakeld, en een SVML of ACML ABI-compatibel
bibliotheek moet worden opgegeven tijdens het koppelen.

GCC verzendt momenteel aanroepen naar "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" en "vmlsAcos4" voor het corresponderende functietype wanneer: -mveclibabi=svml is
gebruikt, en "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
"__vrs4_log2f", "__vrs4_log10f" en "__vrs4_powf" voor het overeenkomstige functietype
wanneer -mveclibabi=acml is gebruikt.

-mabi=naam
Genereer code voor de opgegeven belconventie. Toegestane waarden zijn systeem For
de ABI die wordt gebruikt op GNU/Linux en andere systemen, en ms voor de Microsoft ABI. De
standaard is om de Microsoft ABI te gebruiken bij het richten op Microsoft Windows en de SysV ABI
op alle andere systemen. U kunt dit gedrag voor specifieke functies regelen met behulp van
de functieattributen "ms_abi" en "sysv_abi".

-mtls-dialect= type dan:
Genereer code om toegang te krijgen tot thread-lokale opslag met behulp van de gnoe or gnu2 conventies. gnoe
is de conservatieve standaard; gnu2 is efficiënter, maar het kan compileren- en uitvoeren-
tijdvereisten waaraan niet op alle systemen kan worden voldaan.

-mpush-args
-mno-push-args
Gebruik PUSH-bewerkingen om uitgaande parameters op te slaan. Deze methode is korter en meestal
even snel als methode met SUB/MOV-bewerkingen en is standaard ingeschakeld. In bepaalde
gevallen kan het uitschakelen ervan de prestaties verbeteren vanwege een verbeterde planning en verminderde
afhankelijkheden.

-bereken-uitgaande-args
Indien ingeschakeld, wordt de maximale hoeveelheid ruimte die nodig is voor uitgaande argumenten berekend in
de functie proloog. Dit is sneller op de meeste moderne CPU's vanwege verminderde
afhankelijkheden, verbeterde planning en verminderd stackgebruik wanneer de voorkeursstack
grens is niet gelijk aan 2. Het nadeel is een opmerkelijke toename van de codegrootte. Dit
schakelaar impliceert: -mno-push-args.

-mthreads
Ondersteuning thread-safe exception handling op MinGW. Programma's die afhankelijk zijn van thread-safe
het afhandelen van uitzonderingen moet alle code compileren en koppelen met de -mthreads optie. Wanneer
compileren, -mthreads definieert -D_MT; bij het linken linkt het in een speciale threadhelper
bibliotheek -Lingbreedte die per-thread uitzonderingsafhandelingsgegevens opschoont.

-mno-uitlijnen-stringops
Lijn de bestemming van inline-tekenreeksbewerkingen niet uit. Deze schakelaar reduceert code
grootte en verbetert de prestaties in het geval dat de bestemming al is uitgelijnd, maar GCC
weet er niets van.

-minline-all-stringops
Standaard plaatst GCC tekenreeksbewerkingen alleen wanneer bekend is dat de bestemming is
uitgelijnd met ten minste een grens van 4 bytes. Dit maakt meer inlining mogelijk en verhoogt de code
grootte, maar kan de prestaties van code verbeteren die afhankelijk is van snelle "memcpy", "strlen" en
"memset" voor korte lengtes.

-minline-stringops-dynamisch
Gebruik voor stringbewerkingen van onbekende grootte runtimecontroles met inline code voor small
blokken en een bibliotheekoproep voor grote blokken.

-mstringop-strategie=alg
Overschrijf de interne beslissingsheuristiek voor het specifieke algoritme om voor te gebruiken
inlining string operaties. De toegestane waarden voor alg zijn:

rep_byte
rep_4byte
rep_8byte
Breid uit met het voorvoegsel i386 "rep" van de opgegeven grootte.

byte_lus
lus
uitgerold_lus
Breid uit tot een inline-lus.

libcall
Gebruik altijd een bibliotheekoproep.

-mmemcpy-strategie=strategie
Overschrijf de interne beslissingsheuristiek om te beslissen of "__builtin_memcpy" zou moeten zijn
inline en welk inline-algoritme te gebruiken wanneer de verwachte grootte van de kopieerbewerking
is bekend. strategie is een door komma's gescheiden lijst van alg:max_grootte:beste_align drieling. alg
is gespecificeerd in -mstringop-strategie, max_grootte specificeert de maximale bytegrootte waarmee
inline algoritme alg is toegestaan. Voor de laatste triplet, de max_grootte moet "-1" zijn. De
max_grootte van de drielingen in de lijst moeten in oplopende volgorde worden opgegeven. De
minimale bytegrootte voor alg is 0 voor het eerste triplet en "max_grootte + 1" van de
voorgaande bereik.

-mmemset-strategie=strategie
De optie is vergelijkbaar met: -mmemcpy-strategie= behalve dat het is om te controleren
"__builtin_memset" uitbreiding.

-momit-blad-frame-aanwijzer
Bewaar de framepointer niet in een register voor bladfuncties. Dit vermijdt de
instructies om framepointers op te slaan, in te stellen en te herstellen en maakt een extra register aan
beschikbaar in bladfuncties. De optie -fomit-blad-frame-aanwijzer verwijdert het frame
pointer voor leaf-functies, wat het debuggen moeilijker kan maken.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Bepaalt of TLS-variabelen toegankelijk zijn met offsets van het TLS-segment
register (%gs voor 32-bits, %fs voor 64-bits), of dat de basisaanwijzer van de thread moet zijn
toegevoegd. Of dit geldig is, hangt af van het besturingssysteem en of het
brengt het segment in kaart om het hele TLS-gebied te bestrijken.

Voor systemen die de GNU C-bibliotheek gebruiken, is de standaard ingeschakeld.

-msse2avx
-mno-sse2avx
Specificeer dat de assembler SSE instructies moet coderen met VEX prefix. De optie
-mavx zet dit standaard aan.

-mfentry
-mno-fentry
Als profilering actief is (-blz), plaats de profileringsteller vóór de proloog.
Opmerking: op x86-architecturen is het attribuut "ms_hook_prologue" niet mogelijk bij de
moment voor -mfentry en -blz.

-mrecord-mcount
-mno-record-mcount
Als profilering actief is (-blz), genereer een __mcount_loc sectie die pointers bevat
voor elke profileringsoproep. Dit is handig voor het automatisch patchen en uitzetten van oproepen.

-mnop-mcount
-mno-nop-mcount
Als profilering actief is (-blz), genereer de aanroepen naar de profileringsfuncties als nops.
Dit is handig wanneer ze later dynamisch moeten worden gepatcht. Dit is waarschijnlijk alleen
handig samen met -mrecord-mcount.

-mskip-rax-setup
-mno-skip-rax-installatie
Bij het genereren van code voor de x86-64-architectuur met SSE-extensies uitgeschakeld,
-skip-rax-installatie kan worden gebruikt om het instellen van het RAX-register over te slaan als er geen variabele is
argumenten doorgegeven in vectorregisters.

Waarschuwing: Aangezien het RAX-register wordt gebruikt om te voorkomen dat vectorregisters onnodig worden opgeslagen op:
stack bij het doorgeven van variabele argumenten, de effecten van deze optie zijn callees may
wat stapelruimte verspillen, zich misdragen of naar een willekeurige locatie springen. GCC 4.4 of nieuwer
hebben die problemen niet, ongeacht de RAX-registerwaarde.

-m8bit-idiv
-mno-8bit-idiv
Op sommige processors, zoals Intel Atom, is 8-bit unsigned integer divide veel sneller dan
32-bit/64-bit integer delen. Deze optie genereert een runtime-controle. Als beide
deeltal en deler liggen binnen het bereik van 0 tot 255, 8-bits geheel getal zonder teken is
gebruikt in plaats van 32-bit/64-bit integer delen.

-mavx256-gesplitste niet-uitgelijnde belasting
-mavx256-split-unaligned-store
Split 32-byte AVX niet-uitgelijnd laden en opslaan.

-mstack-protector-guard=bewaker
Genereer stackbeveiligingscode met canary at bewaker. Ondersteunde locaties zijn: globaal
voor globale kanarie of tls voor per-thread kanarie in het TLS-blok (de standaardinstelling). Dit
optie heeft alleen effect wanneer -stack-beschermer or -fstack-protector-all is gespecificeerd.

Deze -m switches worden naast het bovenstaande ondersteund op x86-64-processors in 64-bit
omgevingen.

-m32
-m64
-mx32
-m16
Genereer code voor een 16-bits, 32-bits of 64-bits omgeving. De -m32 optiesets "int",
"long", en aanwijzer typt naar 32 bits, en genereert code die op elk i386-systeem draait.

De -m64 optie stelt "int" in op 32 bits en "long" en pointertypes op 64 bits, en
genereert code voor de x86-64-architectuur. Voor Darwin alleen de -m64 optie ook
schakelt de uit -fno-foto en -mdynamic-geen-foto opties.

De -mx32 optie stelt "int", "long" en pointertypes in op 32 bits en genereert code
voor de x86-64-architectuur.

De -m16 optie is hetzelfde als -m32, behalve dat het de ".code16gcc" uitvoert
assembly-richtlijn aan het begin van de assembly-uitvoer, zodat het binaire bestand kan worden uitgevoerd
in 16-bits modus.

-mno-rode-zone
Gebruik geen zogenaamde "rode zone" voor x86-64-code. De rode zone wordt opgelegd door de
x86-64 ABI; het is een gebied van 128 bytes voorbij de locatie van de stapelaanwijzer die niet is
gewijzigd door signaal- of onderbrekingshandlers en kan daarom worden gebruikt voor tijdelijke gegevens
zonder de stapelaanwijzer aan te passen. De vlag -mno-rode-zone schakelt deze rode zone uit.

-mcmodel=klein
Genereer code voor het kleine codemodel: het programma en zijn symbolen moeten worden gekoppeld in
de onderste 2 GB van de adresruimte. Pointers zijn 64 bits. Programma's kunnen
statisch of dynamisch gekoppeld. Dit is het standaard codemodel.

-mcmodel=kernel
Genereer code voor het kernelcodemodel. De kernel draait in de min 2 GB van de
adres ruimte. Dit model moet worden gebruikt voor Linux-kernelcode.

-mcmodel=gemiddeld
Genereer code voor het medium model: het programma is gekoppeld in de onderste 2 GB van de
adres ruimte. Daar worden ook kleine symbolen geplaatst. Symbolen met formaten groter dan
-mgrote-gegevens-drempel worden in grote data- of BSS-secties geplaatst en kunnen worden gelokaliseerd
boven de 2 GB. Programma's kunnen statisch of dynamisch gekoppeld worden.

-mcmodel=groot
Genereer code voor het grote model. Dit model doet geen aannames over adressen
en afmetingen van secties.

-madress-mode=lang
Genereer code voor lange adresmodus. Dit wordt alleen ondersteund voor 64-bits en x32
omgevingen. Het is de standaard adresmodus voor 64-bits omgevingen.

-madress-mode=short
Genereer code voor korte adresmodus. Dit wordt alleen ondersteund voor 32-bits en x32
omgevingen. Het is de standaard adresmodus voor 32-bits en x32-omgevingen.

x86 Dakramen en raamkozijnen Opties

Deze extra opties zijn beschikbaar voor Microsoft Windows-doelen:

-mconsole
Deze optie geeft aan dat er een consoletoepassing moet worden gegenereerd door de opdracht
de linker om het type PE-headersubsysteem in te stellen dat vereist is voor consoletoepassingen.
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen en is standaard ingeschakeld op
die doelen.

-mdll
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat een DLL---a
dynamische linkbibliotheek --- moet worden gegenereerd, waardoor de selectie van de vereiste
runtime opstartobject en toegangspunt.

-mnop-fun-dllimport
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat de
Het kenmerk "dllimport" moet worden genegeerd.

-mthread
Deze optie is beschikbaar voor MinGW-doelen. Het specificeert dat MinGW-specifieke thread
ondersteuning moet worden gebruikt.

-muncode
Deze optie is beschikbaar voor MinGW-w64-doelen. Het veroorzaakt de "UNICODE" preprocessor
macro vooraf te definiëren en kiest voor Unicode-compatibele runtime-opstartcode.

-mwin32
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat de typische
Vooraf gedefinieerde macro's van Microsoft Windows moeten worden ingesteld in de pre-processor, maar doen dat niet
invloed hebben op de keuze van de runtime-bibliotheek/opstartcode.

-mvensters
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat een GUI
applicatie moet worden gegenereerd door de linker te instrueren om de PE-header in te stellen
subsysteem het juiste type.

-fno-set-stack-uitvoerbaar
Deze optie is beschikbaar voor MinGW-doelen. Het specificeert dat de uitvoerbare vlag voor
de stapel die door geneste functies wordt gebruikt, is niet ingesteld. Dit is nodig voor het uitvoeren van binaire bestanden
in de kernelmodus van Microsoft Windows, zoals daar de User32 API, die wordt gebruikt om in te stellen
uitvoerbare rechten, is niet beschikbaar.

-fwritable-verhuisde-rdata
Deze optie is beschikbaar voor MinGW- en Cygwin-doelen. Het specificeert dat verplaatste-
gegevens in het alleen-lezen gedeelte worden in het .data-gedeelte geplaatst. Dit is een noodzaak voor oudere
runtimes ondersteunen geen wijziging van .rdata-secties voor pseudo-verplaatsing.

-mpe-uitgelijnd-commons
Deze optie is beschikbaar voor Cygwin- en MinGW-doelen. Het specificeert dat de GNU
extensie naar het PE-bestandsformaat dat de juiste uitlijning van COMMON-variabelen mogelijk maakt
moet worden gebruikt bij het genereren van code. Het is standaard ingeschakeld als GCC detecteert dat de
doel assembler gevonden tijdens de configuratie ondersteunt de functie.

Zie ook onder x86 Opties voor standaard opties.

Xstormy16 Opties

Deze opties zijn gedefinieerd voor Xstormy16:

-msim
Kies opstartbestanden en linkerscript die geschikt zijn voor de simulator.

Xtensa Opties

Deze opties worden ondersteund voor Xtensa-doelen:

-mconst16
-mno-const16
Schakel het gebruik van "CONST16"-instructies voor het laden van constante waarden in of uit. De
De instructie "CONST16" is momenteel geen standaardoptie van Tensilica. Wanneer
ingeschakeld, worden "CONST16"-instructies altijd gebruikt in plaats van de standaard "L32R"
instructies. Het gebruik van "CONST16" is standaard alleen ingeschakeld als de "L32R"
instructie is niet beschikbaar.

-mfused-gek
-mno-gefuseerd-madd
Schakel het gebruik van gecombineerde instructies voor vermenigvuldigen/optellen en vermenigvuldigen/aftrekken in de
optie met drijvende komma. Dit heeft geen effect als de optie met drijvende komma niet ook is
ingeschakeld. Het uitschakelen van gefuseerde instructies voor vermenigvuldigen/optellen en vermenigvuldigen/aftrekken dwingt de
compiler om afzonderlijke instructies te gebruiken voor de bewerkingen vermenigvuldigen en optellen/aftrekken.
Dit kan wenselijk zijn in sommige gevallen waar strikte IEEE 754-conforme resultaten zijn:
vereist: de samengevoegde instructies voor vermenigvuldigen optellen/aftrekken ronden het tussenliggende niet af
resultaat, waardoor resultaten worden behaald met meer bits van precisie dan gespecificeerd door de
IEEE-standaard. Het uitschakelen van instructies voor gefuseerd vermenigvuldigen optellen/aftrekken zorgt er ook voor dat:
de programma-uitvoer is niet gevoelig voor het vermogen van de compiler om vermenigvuldigen en . te combineren
optellen/aftrekken bewerkingen.

-mserialiseren-vluchtig
-mno-serialiseren-vluchtig
Wanneer deze optie is ingeschakeld, voegt GCC "MEMW"-instructies in voor "vluchtig" geheugen
referenties om sequentiële consistentie te garanderen. De standaard is -mserialiseren-vluchtig.
Te gebruiken -mno-serialiseren-vluchtig om de "MEMW" instructies weg te laten.

-mforce-geen-pic
Voor doelen, zoals GNU/Linux, waar alle gebruikersmodus Xtensa-code position-
onafhankelijke code (PIC), deze optie schakelt PIC uit voor het compileren van kernelcode.

-mtext-sectie-literals
-mno-tekst-sectie-literals
Deze opties regelen de behandeling van letterlijke pools. De standaard is
-mno-tekst-sectie-literals, die letterlijke waarden in een aparte sectie in de uitvoer plaatst
het dossier. Hierdoor kan de letterlijke pool in een data-RAM/ROM worden geplaatst, en het staat ook toe:
de linker om letterlijke pools van afzonderlijke objectbestanden te combineren om overbodige te verwijderen
literals en de codegrootte te verbeteren. Met -mtext-sectie-literals, de letterlijke zijn
afgewisseld in het tekstgedeelte om ze zo dicht mogelijk bij hun
referenties. Dit kan nodig zijn voor grote montagebestanden.

-mtarget-uitlijnen
-mno-target-uitlijnen
Wanneer deze optie is ingeschakeld, instrueert GCC de assembler om automatisch uit te lijnen
instructies om takstraffen te verminderen ten koste van een bepaalde codedichtheid. De
assembler probeert de dichtheidsinstructies te verbreden om vertakkingsdoelen en de
instructies na oproepinstructies. Als er niet genoeg voorafgaande kluis zijn
dichtheidsinstructies om een ​​doel uit te lijnen, wordt er geen verbreding uitgevoerd. De standaard is
-mtarget-uitlijnen. Deze opties hebben geen invloed op de behandeling van automatisch uitgelijnd
instructies zoals "LOOP", die de assembler altijd uitlijnt, hetzij door te verbreden
dichtheidsinstructies of door NOP-instructies in te voegen.

-lange oproepen
-mno-longcalls
Wanneer deze optie is ingeschakeld, instrueert GCC de assembler om directe oproepen te vertalen naar:
indirecte oproepen, tenzij het kan bepalen dat het doel van een directe oproep zich in de
bereik toegestaan ​​door de oproepinstructie. Deze vertaling komt meestal voor bij oproepen naar:
functies in andere bronbestanden. In het bijzonder vertaalt de assembler een direct
"CALL" instructie in een "L32R" gevolgd door een "CALLX" instructie. De standaard is
-mno-longcalls. Deze optie moet worden gebruikt in programma's waarin het oproepdoel kan
mogelijk buiten bereik zijn. Deze optie is geïmplementeerd in de assembler, niet de
compiler, dus de door GCC gegenereerde assembly-code toont nog steeds directe aanroep
instructies --- kijk naar de gedemonteerde objectcode om de daadwerkelijke instructies te zien.
Merk op dat de assembler een indirecte aanroep gebruikt voor elke aanroep tussen bestanden, niet alleen
die echt buiten bereik zijn.

zSerie Opties

Deze staan ​​vermeld onder

Opties For Code Generatie conventies
Deze machine-onafhankelijke opties regelen de interface-conventies die in code worden gebruikt
generatie.

De meeste hebben zowel positieve als negatieve vormen; de negatieve vorm van -foei is
-fno-foo. In de onderstaande tabel wordt slechts één van de formulieren vermeld --- degene die niet de . is
standaard. U kunt het andere formulier achterhalen door ofwel te verwijderen Nee- of toevoegen.

-fbounds-controle
Voor frontends die dit ondersteunen, genereert u extra code om te controleren of indices dat deden:
access-arrays binnen het gedeclareerde bereik vallen. Dit wordt momenteel alleen ondersteund door de
Java- en Fortran-frontends, waarbij deze optie standaard is ingesteld op waar en onwaar
respectievelijk.

-fstack-hergebruik=hergebruik-niveau
Deze optie regelt het hergebruik van stapelruimte voor door de gebruiker gedeclareerde lokale/auto-variabelen en
compiler gegenereerde tijdelijke bestanden. hergebruik_niveau kan zijn allen, genaamd_varsof geen. allen
maakt stapelhergebruik mogelijk voor alle lokale variabelen en tijdelijke, genaamd_vars maakt de
alleen hergebruiken voor door de gebruiker gedefinieerde lokale variabelen met namen, en geen schakelt stapelhergebruik uit
volledig. De standaardwaarde is allen. De optie is nodig wanneer het programma wordt verlengd
de levensduur van een lokale variabele met een scope of een compiler die tijdelijk is gegenereerd buiten de
eindpunt gedefinieerd door de taal. Wanneer een levensduur van een variabele eindigt, en als de
variabele leeft in het geheugen, de optimaliserende compiler heeft de vrijheid om zijn stapel opnieuw te gebruiken
ruimte met andere tijdelijke of bereikbare lokale variabelen waarvan het livebereik dat niet doet
ermee overlappen. Verouderde code die de lokale levensduur verlengt, breekt waarschijnlijk met de
optimalisatie van stapelhergebruik.

Bijvoorbeeld

int *p;
{
int lokaal1;

p = &lokaal1;
lokaal1 = 10;
....
}
{
int lokaal2;
lokaal2 = 20;
...
}

if (*p == 10) // buiten bereik gebruik van local1
{

}

Een ander voorbeeld:

structuur A
{
A(int k) : i(k), j(k) { }
int i;
intj;
};

een *ap;

void foo(const A& ar)
{
ap = &ar;
}

lege balk()
{
foe (A(10)); // de levensduur van het tijdelijke object eindigt wanneer foo terugkeert

{
A a(20);
....
}
ap->i+= 10; // ap-referenties buiten scope temp waarvan de ruimte
// wordt hergebruikt met een. Wat is de waarde van ap->i?
}

De levensduur van een tijdelijk gegenereerde compiler wordt goed gedefinieerd door de C++-standaard.
Wanneer een leven van een tijdelijk einde, en als het tijdelijke in het geheugen leeft, de
optimaliserende compiler heeft de vrijheid om de stapelruimte opnieuw te gebruiken met andere tijdelijke of
scoped lokale variabelen waarvan het live bereik er niet mee overlapt. Maar sommige van de
legacy-code is afhankelijk van het gedrag van oudere compilers waarin de tijdelijke stack
ruimte niet opnieuw wordt gebruikt, kan het agressieve hergebruik van de stack leiden tot runtime-fouten. Dit
optie wordt gebruikt om de optimalisatie van het tijdelijke stapelhergebruik te regelen.

-ftrapv
Deze optie genereert traps voor ondertekende overloop bij optellen, aftrekken,
bewerkingen van vermenigvuldiging.

-fwrapv
Deze optie instrueert de compiler om aan te nemen dat getekende rekenkundige overloop van
optellen, aftrekken en vermenigvuldigen wikkelt zich rond met behulp van twee-complement
vertegenwoordiging. Deze vlag schakelt sommige optimalisaties in en schakelt andere uit. Dit
optie is standaard ingeschakeld voor de Java-frontend, zoals vereist door de Java-taal
specificatie.

-uitzonderingen
Afhandeling van uitzonderingen inschakelen. Genereert extra code die nodig is om uitzonderingen te verspreiden. Voor
sommige doelen, dit houdt in dat GCC frame-ontwikkelinformatie genereert voor alle functies,
wat een aanzienlijke overhead voor gegevensomvang kan veroorzaken, hoewel het geen invloed heeft op
executie. Als u deze optie niet opgeeft, schakelt GCC deze standaard in voor talen
zoals C++ die normaal gesproken uitzonderingsbehandeling vereisen, en schakelt het uit voor talen zoals
C die dit normaal gesproken niet nodig hebben. Het is echter mogelijk dat u deze optie moet inschakelen wanneer:
het compileren van C-code die correct moet samenwerken met geschreven uitzonderingshandlers
in C++. Mogelijk wilt u deze optie ook uitschakelen als u oudere C++ . compileert
programma's die geen exception handling gebruiken.

-fnon-call-uitzonderingen
Genereer code waarmee trapping-instructies uitzonderingen kunnen genereren. Merk op dat dit
vereist platformspecifieke runtime-ondersteuning die niet overal bestaat. Bovendien,
het staat alleen toe trapping instructies om uitzonderingen te genereren, bijv. geheugenverwijzingen of
drijvende-komma instructies. Het staat niet toe dat er willekeurige uitzonderingen worden gegenereerd
signaal handlers zoals "SIGALRM".

-fverwijder-dode-uitzonderingen
Bedenk dat instructies die uitzonderingen kunnen veroorzaken, maar verder niet bijdragen aan:
de uitvoering van het programma kan weg worden geoptimaliseerd. Deze optie is standaard ingeschakeld
voor de Ada-frontend, zoals toegestaan ​​door de Ada-taalspecificatie. Optimalisatie
passen die ervoor zorgen dat dode uitzonderingen worden verwijderd, worden onafhankelijk ingeschakeld op verschillende
optimalisatie niveaus.

-funwind-tafels
Soortgelijke -uitzonderingen, behalve dat het alleen de benodigde statische gegevens genereert, maar
heeft op geen enkele andere manier invloed op de gegenereerde code. Normaal gesproken hoeft u niet
schakel deze optie in; in plaats daarvan maakt een taalprocessor die deze verwerking nodig heeft, dit mogelijk
namens u.

-fasynchrone-afwikkel-tabellen
Genereer een afwikkeltabel in DWARF 2-formaat, indien ondersteund door de doelmachine. De tafel is
exact bij elke instructiegrens, zodat het kan worden gebruikt voor het afwikkelen van de stapel vanaf
asynchrone gebeurtenissen (zoals debugger of garbage collector).

-fno-gnu-uniek
Op systemen met een recente GNU-assembler en C-bibliotheek, gebruikt de C++-compiler de
"STB_GNU_UNIQUE"-binding om ervoor te zorgen dat de definities van statische sjabloongegevensleden
en statische lokale variabelen in inline-functies zijn uniek, zelfs in de aanwezigheid van
"RTLD_LOCAL"; dit is nodig om problemen te voorkomen met een bibliotheek die door twee verschillende
"RTLD_LOCAL" plug-ins afhankelijk van een definitie in een van hen en daarom
het oneens zijn met de ander over de binding van het symbool. Maar dit veroorzaakt
"dlclose" moet worden genegeerd voor getroffen DSO's; als uw programma afhankelijk is van herinitialisatie
van een DSO via "dlclose" en "dlopen", kunt u -fno-gnu-uniek.

-fpcc-struct-return
Retourneer "korte" "struct" en "union" waarden in het geheugen zoals langere, in plaats van in
registreert. Deze conventie is minder efficiënt, maar heeft het voordeel dat:
intercallability tussen GCC-gecompileerde bestanden en bestanden die zijn gecompileerd met andere compilers,
met name de Portable C Compiler (pcc).

De precieze conventie voor het retourneren van structuren in het geheugen hangt af van het doel
configuratie macro's.

Korte structuren en vakbonden zijn die waarvan de grootte en uitlijning overeenkomen met die van sommigen
geheel getal.

Waarschuwing: code gecompileerd met de -fpcc-struct-return schakelaar is niet binair compatibel
met code gecompileerd met de -freg-struct-return schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-freg-struct-return
Retourneert waar mogelijk de waarden "struct" en "union" in registers. Dit is efficiënter
voor kleine constructies dan -fpcc-struct-return.

Als u geen van beide opgeeft -fpcc-struct-return noch -freg-struct-return, GCC is standaard ingesteld op
welke conventie ook standaard is voor het doel. Als er geen standaardconventie is,
GCC is standaard ingesteld op -fpcc-struct-return, behalve op doelen waar GCC de opdrachtgever is
compiler. In die gevallen kunnen we de standaard kiezen en hebben we de efficiëntere gekozen
aanmelden retour alternatief.

Waarschuwing: code gecompileerd met de -freg-struct-return schakelaar is niet binair compatibel
met code gecompileerd met de -fpcc-struct-return schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-fkorte-enums
Wijs aan een "enum"-type slechts zoveel bytes toe als nodig is voor het gedeclareerde bereik van
Mogelijke waarden. In het bijzonder is het type "enum" gelijk aan het kleinste gehele getal
type dat voldoende ruimte heeft.

Waarschuwing: de -fkorte-enums switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-fkort-dubbel
Gebruik dezelfde maat voor "double" als voor "float".

Waarschuwing: de -fkort-dubbel switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-fkort-wchar
Overschrijf het onderliggende type voor "wchar_t" om "short unsigned int" te zijn in plaats van de
standaard voor het doel. Deze optie is handig voor het bouwen van programma's om onder te draaien
WIJN.

Waarschuwing: de -fkort-wchar switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Gebruik het om te voldoen aan een niet-
standaard applicatie binaire interface.

-fno-gemeenschappelijk
Regelt in C-code de plaatsing van niet-geïnitialiseerde globale variabelen. Unix C-compilers
hebben traditioneel meerdere definities van dergelijke variabelen in verschillende
compilatie-eenheden door de variabelen in een gemeenschappelijk blok te plaatsen. Dit is het gedrag
gespecificeerd door -fgewone, en is de standaard voor GCC op de meeste doelen. Anderzijds,
dit gedrag is niet vereist door ISO C en kan op sommige doelen een snelheid of code bevatten
groottestraf op variabele referenties. De -fno-gemeenschappelijk optie geeft aan dat de
compiler moet niet-geïnitialiseerde globale variabelen in de gegevenssectie van het object plaatsen
bestand, in plaats van ze als gemeenschappelijke blokken te genereren. Dit heeft tot gevolg dat als de
dezelfde variabele wordt gedeclareerd (zonder "extern") in twee verschillende compilaties, krijg je a
fout met meerdere definities wanneer u ze koppelt. In dit geval moet u compileren met
-fgewone in plaats daarvan. Compileren met -fno-gemeenschappelijk is handig op doelen waarvoor het
betere prestaties levert, of als u wilt controleren of het programma werkt,
andere systemen die niet-geïnitialiseerde variabele declaraties altijd op deze manier behandelen.

-fno-ident
Negeer de "#ident" richtlijn.

-finhibit-maat-richtlijn
Voer geen ".size" assembler-richtlijn uit, of iets anders dat problemen zou veroorzaken
als de functie in het midden wordt gesplitst en de twee helften op verafgelegen locaties worden geplaatst
apart in het geheugen. Deze optie wordt gebruikt bij het compileren crststuff.c; je zou niet nodig moeten hebben
om het voor iets anders te gebruiken.

-fverbose-asm
Zet extra commentaarinformatie in de gegenereerde assembly-code om het meer te maken
leesbaar. Deze optie is over het algemeen alleen nuttig voor degenen die de
gegenereerde assembly-code (misschien tijdens het debuggen van de compiler zelf).

-fno-uitgebreide-asm, de standaard, zorgt ervoor dat de extra informatie wordt weggelaten en is
handig bij het vergelijken van twee assembler-bestanden.

-frecord-gcc-schakelaars
Deze schakeloptie zorgt ervoor dat de opdrachtregel die wordt gebruikt om de compiler aan te roepen, wordt opgenomen in:
het objectbestand dat wordt gemaakt. Deze schakelaar is alleen geïmplementeerd op sommige
doelen en het exacte formaat van de opname is doel- en binair bestandsformaat
afhankelijk, maar heeft meestal de vorm van een sectie met ASCII-tekst. Dit
schakelaar is gerelateerd aan de -fverbose-asm schakelaar, maar die schakelaar neemt alleen op
informatie in het uitvoerbestand van de assembler als opmerkingen, zodat het nooit het object bereikt
het dossier. Zie ook -grecord-gcc-schakelaars voor een andere manier om compileropties op te slaan in
het objectbestand.

-fpic
Genereer positie-onafhankelijke code (PIC) die geschikt is voor gebruik in een gedeelde bibliotheek, als
ondersteund voor de doelcomputer. Een dergelijke code heeft toegang tot alle constante adressen via a
globale offsettabel (GOT). De dynamische lader lost de GOT-vermeldingen op wanneer de
programma start (de dynamische lader maakt geen deel uit van GCC; het maakt deel uit van de
systeem). Als de GOT-grootte voor het gekoppelde uitvoerbare bestand een machinespecifiek maximum overschrijdt
size, krijg je een foutmelding van de linker die aangeeft dat: -fpic werkt niet; in
in dat geval, hercompileer met -fPIC in plaats daarvan. (Deze maxima zijn 8k op de SPARC en 32k
op de m68k en RS/6000. De x86 heeft zo'n limiet niet.)

Positie-onafhankelijke code vereist speciale ondersteuning en werkt daarom alleen op
bepaalde automaten. Voor de x86 ondersteunt GCC PIC voor System V, maar niet voor de Sun
386i. Code gegenereerd voor de IBM RS/6000 is altijd positie-onafhankelijk.

Wanneer deze vlag is ingesteld, worden de macro's "__pic__" en "__PIC__" gedefinieerd als 1.

-fPIC
Indien ondersteund voor de doelmachine, zend positie-onafhankelijke code uit, geschikt voor:
dynamisch koppelen en het vermijden van enige limiet op de grootte van de globale offset-tabel. Dit
optie maakt een verschil op de m68k, PowerPC en SPARC.

Positie-onafhankelijke code vereist speciale ondersteuning en werkt daarom alleen op
bepaalde automaten.

Wanneer deze vlag is ingesteld, worden de macro's "__pic__" en "__PIC__" gedefinieerd als 2.

-fpie
-fPIE
Deze opties zijn vergelijkbaar met: -fpic en -fPIC, maar gegenereerde positie-onafhankelijke code
kan alleen worden gekoppeld aan uitvoerbare bestanden. Meestal worden deze opties gebruikt wanneer: -taart GCC
optie wordt gebruikt tijdens het koppelen.

-fpie en -fPIE beide definiëren de macro's "__pie__" en "__PIE__". De macro's hebben de
waarde 1 voor -fpie en 2 voor -fPIE.

-fno-jump-tafels
Gebruik geen jump-tabellen voor switch-statements, zelfs niet waar dit efficiënter zou zijn
dan andere strategieën voor het genereren van codes. Deze optie is nuttig in combinatie met:
-fpic or -fPIC voor het bouwen van code die deel uitmaakt van een dynamische linker en niet kan
verwijzen naar het adres van een sprongtabel. Op sommige doelen hebben springtafels geen
GOT en deze optie is niet nodig.

-fvast-reg
Behandel het register met de naam reg als vast register; gegenereerde code mag nooit verwijzen naar:
het (behalve misschien als stapelaanwijzer, frameaanwijzer of in een andere vaste rol).

reg moet de naam van een register zijn. De geaccepteerde registernamen zijn machinespecifiek
en worden gedefinieerd in de macro "REGISTER_NAMES" in het macrobestand van de machinebeschrijving.

Deze vlag heeft geen negatieve vorm, omdat het een driewegkeuze aangeeft.

-fcall-gebruikt-reg
Behandel het register met de naam reg als een toewijsbaar register dat door functie wordt beklad
belt. Het kan worden toegewezen aan tijdelijke of variabelen die niet over een
telefoongesprek. Functies die op deze manier zijn gecompileerd, slaan het register niet op en herstellen het niet reg.

Het is een fout om deze vlag te gebruiken met de frame-aanwijzer of stapelaanwijzer. Gebruik hiervan
vlag voor andere registers die vaste doordringende rollen hebben in de uitvoering van de machine
model levert rampzalige resultaten op.

Deze vlag heeft geen negatieve vorm, omdat het een driewegkeuze aangeeft.

-fcall-opgeslagen-reg
Behandel het register met de naam reg als een toewijsbaar register opgeslagen door functies. Het kan zijn
toegewezen, zelfs voor tijdelijke of variabelen die in een gesprek leven. Functies
op deze manier gecompileerd sla het register op en herstel het reg als ze het gebruiken.

Het is een fout om deze vlag te gebruiken met de frame-aanwijzer of stapelaanwijzer. Gebruik hiervan
vlag voor andere registers die vaste doordringende rollen hebben in de uitvoering van de machine
model levert rampzalige resultaten op.

Een ander soort ramp is het gevolg van het gebruik van deze vlag voor een register waarin:
functiewaarden kunnen worden geretourneerd.

Deze vlag heeft geen negatieve vorm, omdat het een driewegkeuze aangeeft.

-fpack-structuur[=n]
Pak alle constructiedelen zonder gaten samen zonder een opgegeven waarde. Wanneer een
waarde is opgegeven (die een kleine macht van twee moet zijn), pack-structuurleden
volgens deze waarde, die de maximale uitlijning vertegenwoordigt (dat wil zeggen, objecten met
standaard uitlijningsvereisten groter dan dit worden mogelijk niet uitgelijnd uitgevoerd op
de volgende montageplaats.

Waarschuwing: de -fpack-structuur switch zorgt ervoor dat GCC code genereert die niet binair is
compatibel met code gegenereerd zonder die schakelaar. Bovendien maakt het de code
suboptimaal. Gebruik het om te voldoen aan een niet-standaard binaire applicatie-interface.

-finstrument-functies
Genereer instrumentatie-oproepen voor toegang en vertrek naar functies. Net na functie
entry en net voor het verlaten van de functie, worden de volgende profileringsfuncties aangeroepen met
het adres van de huidige functie en de oproepsite. (Op sommige platforms,
"__builtin_return_address" werkt niet verder dan de huidige functie, dus de oproepsite
informatie is anders mogelijk niet beschikbaar voor de profileringsfuncties.)

ongeldig __cyg_profile_func_enter (ongeldig *this_fn,
ongeldig *call_site);
void __cyg_profile_func_exit (ongeldig *this_fn,
ongeldig *call_site);

Het eerste argument is het adres van het begin van de huidige functie, wat kan zijn:
precies opgezocht in de symbolentabel.

Deze instrumentatie wordt ook gedaan voor functies die inline worden uitgebreid in andere functies.
De profileringsaanroepen geven aan waar, conceptueel, de inline-functie is ingevoerd en
verlaten. Dit betekent dat adresseerbare versies van dergelijke functies beschikbaar moeten zijn. Indien
al uw gebruik van een functie wordt inline uitgebreid, dit kan een extra uitbreiding betekenen
van codegrootte. Als u "extern inline" gebruikt in uw C-code, een adresseerbare versie van
dergelijke functies moeten worden geboden. (Normaal gesproken is dit sowieso het geval, maar als je
geluk en de optimizer breidt de functies altijd inline uit, je hebt misschien gekregen
weg zonder statische kopieën te verstrekken.)

Een functie kan het attribuut "no_instrument_function" krijgen, in welk geval dit
instrumentatie is niet gedaan. Dit kan bijvoorbeeld worden gebruikt voor de profilering
bovenstaande functies, interrupt-routines met hoge prioriteit en alle functies waarvan:
de profileringsfuncties kunnen niet veilig worden aangeroepen (misschien signaalbehandelaars, als de
profileringsroutines genereren output of wijzen geheugen toe).

-finstrument-functions-exclude-file-list=filet,filet, ...
Stel de lijst met functies in die zijn uitgesloten van instrumentatie (zie de beschrijving
of -finstrument-functies). Als het bestand dat een functiedefinitie bevat overeenkomt met
met een van filet, dan is die functie niet geïnstrumenteerd. De wedstrijd is gedaan op
substrings: als de filet parameter is een substring van de bestandsnaam, wordt beschouwd als
een match zijn.

Bijvoorbeeld:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

sluit elke inline-functie uit die is gedefinieerd in bestanden waarvan de padnamen bevatten /bits/stl or
omvatten/sys.

Als u om de een of andere reden een brief wilt opnemen , in een van sym, schrijven ,. Bijvoorbeeld,
-finstrument-functions-exclude-file-list=',,tmp' (let op het enkele aanhalingsteken eromheen)
de optie).

-finstrument-functions-exclude-function-list=sym,sym, ...
Dit is vergelijkbaar met -finstrument-functies-exclusief-bestandslijst, maar deze optie stelt de
lijst met functienamen die van instrumentatie moeten worden uitgesloten. De functienaam die moet zijn
overeenkomend is de voor de gebruiker zichtbare naam, zoals "vector blah(const vector &)", niet
de interne verminkte naam (bijv. "_Z4blahRSt6vectorIiSaIiEE"). De wedstrijd is gedaan op
substrings: als de sym parameter is een substring van de functienaam, het wordt beschouwd als
een wedstrijd zijn. Voor uitgebreide identifiers C99 en C++ moet de functienaam worden gegeven
in UTF-8, waarbij geen universele tekennamen worden gebruikt.

-fstack-controle
Genereer code om te controleren of u niet verder gaat dan de grens van de stapel. Jij
moet deze vlag specificeren als u in een omgeving met meerdere threads werkt,
maar je hoeft het maar zelden op te geven in een omgeving met één thread sinds stack
overflow wordt automatisch gedetecteerd op bijna alle systemen als er maar één stack is.

Merk op dat deze omschakeling er niet echt toe leidt dat er wordt gecontroleerd; de operationele
systeem of de taalruntime moet dat doen. De schakelaar zorgt ervoor dat het genereren van code:
zorg ervoor dat ze zien dat de stapel wordt uitgebreid.

U kunt bovendien een stringparameter opgeven: geen betekent geen controle, algemeen middel
het gebruik van ouderwetse controle afdwingen, specifiek betekent gebruik de beste controlemethode en
is gelijk aan bare -fstack-controle.

Controle in oude stijl is een generiek mechanisme waarvoor geen specifieke doelondersteuning nodig is
de compiler, maar heeft de volgende nadelen:

1. Aangepaste toewijzingsstrategie voor grote objecten: ze worden altijd toegewezen
dynamisch als hun grootte een vaste drempel overschrijdt.

2. Vaste limiet voor de grootte van het statische frame van functies: wanneer het wordt bekroond door a
bepaalde functie, is de stapelcontrole niet betrouwbaar en wordt er een waarschuwing gegeven door de
compiler.

3. Inefficiëntie: vanwege zowel de gewijzigde allocatiestrategie als de generieke
implementatie, worden de codeprestaties belemmerd.

Houd er rekening mee dat stapelcontrole in oude stijl ook de uitwijkmethode is voor: specifiek als Nee
target-ondersteuning is toegevoegd in de compiler.

-fstack-limiet-register=reg
-fstack-limiet-symbool=sym
-fno-stack-limiet
Genereer code om ervoor te zorgen dat de stapel ook niet boven een bepaalde waarde groeit
de waarde van een register of het adres van een symbool. Als een grotere stapel nodig is, a
signaal wordt verhoogd tijdens runtime. Voor de meeste doelen wordt het signaal verhoogd vóór de stapel
overschrijdt de grens, dus het is mogelijk om het signaal te vangen zonder speciaal te nemen
voorzorgsmaatregelen.

Als de stapel bijvoorbeeld begint op het absolute adres 0x80000000 en groeit naar beneden,
je kunt de vlaggen gebruiken -fstack-limit-symbol=__stack_limit en
-Wl,--defsym,__stack_limit=0x7ffe0000 om een ​​stapellimiet van 128 KB af te dwingen. Let daar op
dit werkt mogelijk alleen met de GNU-linker.

-fsplitstack
Genereer code om de stapel automatisch te splitsen voordat deze overloopt. Het resultaat
programma heeft een niet-aangrenzende stapel die alleen kan overlopen als het programma dat niet kan
nog meer geheugen toewijzen. Dit is vooral handig bij het uitvoeren van programma's met een thread, omdat het
is niet langer nodig om voor elke thread een goede stapelgrootte te berekenen. Dit is
momenteel alleen geïmplementeerd voor de x86-doelen met GNU/Linux.

Wanneer code gecompileerd met -fsplitstack roept code gecompileerd zonder -fsplitstacker
er is mogelijk niet veel stapelruimte beschikbaar om de laatste code uit te voeren. Als je alles compileert
code, inclusief bibliotheekcode, met -fsplitstack is geen optie, dan kan de linker
repareer deze aanroepen zodat de code is gecompileerd zonder -fsplitstack heeft altijd een grote
stapel. Ondersteuning hiervoor is geïmplementeerd in de gouden linker in GNU binutils release
2.21 en later.

-fleading-onderstrepingsteken
Deze optie en zijn tegenhanger, -fno-leidende-underscore, verander met geweld de manier waarop C
symbolen worden weergegeven in het objectbestand. Eén gebruik is om te helpen koppelen met legacy
montagecode.

Waarschuwing: de -fleading-onderstrepingsteken switch zorgt ervoor dat GCC code genereert die dat niet is
binair compatibel met code gegenereerd zonder die schakelaar. Gebruik het om te voldoen aan a
niet-standaard applicatie binaire interface. Niet alle doelen bieden volledige ondersteuning
voor deze schakelaar.

-ftls-model=model
Wijzig het te gebruiken thread-lokale opslagmodel. De model argument zou een van moeten zijn
globaal-dynamisch, lokaal-dynamisch, initiële-exec or lokale exec. Merk op dat de keuze is:
onderhevig aan optimalisatie: de compiler kan een efficiënter model gebruiken voor symbolen, niet
zichtbaar buiten de vertaaleenheid, of als -fpic wordt niet gegeven op de opdrachtregel.

De standaard zonder -fpic is initiële-exec; met -fpic de standaard is globaal-dynamisch.

-fzichtbaarheid=[verzuim|intern|verborgen|beschermd]
Stel de standaard zichtbaarheid van ELF-afbeeldingssymbolen in op de opgegeven optie --- alle symbolen zijn
gemarkeerd met dit, tenzij overschreven in de code. Het gebruik van deze functie kan heel
de koppelings- en laadtijden van gedeelde objectbibliotheken aanzienlijk verbeteren, meer produceren
geoptimaliseerde code, bieden bijna perfecte API-export en voorkomen symboolbotsingen. Het is
sterk aanbevolen dat u dit gebruikt in alle gedeelde objecten die u distribueert.

Ondanks de naamgeving, verzuim betekent altijd openbaar; dat wil zeggen, beschikbaar om te worden gekoppeld
tegen van buiten het gedeelde object. beschermd en intern zijn behoorlijk nutteloos in
gebruik in de echte wereld, dus de enige andere veelgebruikte optie is: verborgen. De standaard als
-fzichtbaarheid is niet gespecificeerd is verzuim, dat wil zeggen, maak elk symbool openbaar.

Een goede uitleg van de voordelen die worden geboden door ervoor te zorgen dat ELF-symbolen de juiste
zichtbaarheid wordt gegeven door "How To Write Shared Libraries" door Ulrich Drepper (wat kan zijn:
gevonden bijhttp://www.akkadia.org/drepper/>) --- maar een superieure oplossing gemaakt
mogelijk door deze optie om dingen verborgen te markeren wanneer de standaard openbaar is om te maken
de standaard verborgen en markeer dingen openbaar. Dit is de norm met DLL's op Windows en
Met -fzichtbaarheid=verborgen en "__attribute__ ((visibility("default")))" in plaats van
"__declspec(dllexport)" krijg je bijna identieke semantiek met identieke syntaxis.
Dit is een grote zegen voor degenen die met platformonafhankelijke projecten werken.

Voor degenen die zichtbaarheidsondersteuning toevoegen aan bestaande code, vindt u mogelijk "#pragma GCC
zichtbaarheid" van gebruik. Dit werkt door de verklaringen die u wilt instellen bij te voegen
zichtbaarheid voor met (bijvoorbeeld) "#pragma GCC zichtbaarheid push(hidden)" en "#pragma
GCC-zichtbaarheid pop". Houd er rekening mee dat de zichtbaarheid van symbolen moet worden bekeken as deel of
de API interface contract en dus moet alle nieuwe code altijd zichtbaarheid specificeren wanneer:
het is niet de standaard; dat wil zeggen, declaraties die alleen voor gebruik binnen de lokale DNB zijn, moeten:
altijd expliciet worden gemarkeerd als verborgen om PLT-indirectie te voorkomen
overheadkosten --- dit overduidelijk duidelijk maken, bevordert ook de leesbaarheid en zelfdocumentatie
van de code. Merk op dat vanwege de ISO C++-specificatievereisten, "operator nieuw" en
"operator delete" moet altijd standaard zichtbaar zijn.

Houd er rekening mee dat headers van buiten uw project, in het bijzonder systeemheaders en
headers van een andere bibliotheek die u gebruikt, verwacht mogelijk niet te worden gecompileerd met
zichtbaarheid anders dan de standaard. Mogelijk moet u expliciet "#pragma GCC . zeggen
zichtbaarheid push(default)" voordat u dergelijke headers opneemt.

"externe" declaraties worden niet beïnvloed door: -fzichtbaarheid, dus er kan veel code zijn
opnieuw gecompileerd met -fzichtbaarheid=verborgen zonder aanpassingen. Dit betekent echter dat
oproepen naar "externe" functies zonder expliciete zichtbaarheid gebruik de PLT, dus het is meer
effectief om "__attribute ((visibility))" en/of "#pragma GCC visibility" te gebruiken om
de compiler welke "externe" declaraties als verborgen moeten worden behandeld.

Merk op dat -fzichtbaarheid heeft invloed op C ++ vage koppelingsentiteiten. Dit betekent dat voor
een uitzonderingsklasse die tussen DSO's wordt gegenereerd, moet bijvoorbeeld expliciet worden gemarkeerd
met standaard zichtbaarheid zodat de type_info knooppunten zijn verenigd tussen de DNB's.

Een overzicht van deze technieken, hun voordelen en hoe ze te gebruiken is op
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-vluchtige-bitfields
Deze optie moet worden gebruikt als toegang tot vluchtige bitvelden (of een andere structuur)
velden, hoewel de compiler die typen meestal toch respecteert) een single
toegang tot de breedte van het veldtype, indien mogelijk uitgelijnd met een natuurlijke uitlijning.
Bijvoorbeeld, doelen met geheugen-mapped perifere registers kunnen al deze nodig hebben
toegangen moeten 16 bits breed zijn; met deze vlag kun je alle perifere bitvelden declareren
als "unsigned short" (ervan uitgaande dat short 16 bits is op deze doelen) om GCC te dwingen te gebruiken
16-bits toegang in plaats van misschien een efficiëntere 32-bits toegang.

Als deze optie is uitgeschakeld, gebruikt de compiler de meest efficiënte instructie. In de
vorig voorbeeld, dat kan een 32-bits laadinstructie zijn, ook al is dat toegang
bytes die geen enkel deel van het bitveld bevatten, of registers met geheugentoewijzing
niet gerelateerd aan degene die wordt bijgewerkt.

In sommige gevallen, zoals wanneer het attribuut "packed" wordt toegepast op een structuurveld, kan het
is misschien niet mogelijk om toegang te krijgen tot het veld met een enkele lees- of schrijfbewerking die correct is
uitgelijnd voor de doelmachine. In dit geval valt GCC terug op het genereren van meerdere
toegangen in plaats van code die het resultaat tijdens runtime foutief of afkapt.

Opmerking: vanwege beperkingen van het C/C++11-geheugenmodel zijn schrijftoegangen niet toegestaan
om niet-bitveldleden aan te raken. Het wordt daarom aanbevolen om alle bits van de te definiëren
veldtype als bitveldleden.

De standaardwaarde van deze optie wordt bepaald door de binaire toepassingsinterface voor:
de doelprocessor.

-fsync-libcalls
Deze optie bepaalt of een out-of-line instantie van de "__sync" familie van
functies kunnen worden gebruikt om de C++11 "__atomic" familie van functies te implementeren.

De standaardwaarde van deze optie is ingeschakeld, dus de enige bruikbare vorm van de optie
is -fno-sync-libcalls. Deze optie wordt gebruikt bij de implementatie van de libatomische
runtime bibliotheek.

MILIEU


In dit gedeelte worden verschillende omgevingsvariabelen beschreven die van invloed zijn op de werking van GCC. Sommige
van hen werken door mappen of voorvoegsels op te geven die moeten worden gebruikt bij het zoeken naar verschillende soorten
van bestanden. Sommige worden gebruikt om andere aspecten van de compilatieomgeving te specificeren.

Merk op dat u ook plaatsen kunt specificeren om te zoeken met behulp van opties zoals -B, -I en -L.
Deze hebben voorrang op plaatsen die zijn gespecificeerd met behulp van omgevingsvariabelen, die op hun beurt
hebben voorrang op die gespecificeerd door de configuratie van GCC.

TAAL
LC_CTYPE
LC_MESSAGES
LC_ALL
Deze omgevingsvariabelen bepalen de manier waarop GCC lokalisatie-informatie gebruikt
waardoor GCC kan werken met verschillende nationale conventies. GCC inspecteert de locatie
categorieën LC_CTYPE en LC_MESSAGES als het is geconfigureerd om dit te doen. deze locale
categorieën kunnen worden ingesteld op elke waarde die door uw installatie wordt ondersteund. Een typische waarde is
en_GB.UTF-8 voor Engels in het Verenigd Koninkrijk gecodeerd in UTF-8.

De LC_CTYPE omgevingsvariabele specificeert karakterclassificatie. GCC gebruikt het om
bepaal de karaktergrenzen in een string; dit is nodig voor sommige multibyte
coderingen die aanhalingstekens en escapetekens bevatten die anders worden geïnterpreteerd als a
string-end of escape.

De LC_MESSAGES omgevingsvariabele specificeert de taal die moet worden gebruikt bij diagnostiek
berichten.

Indien de LC_ALL omgevingsvariabele is ingesteld, overschrijft deze de waarde van LC_CTYPE en
LC_MESSAGES; anders, LC_CTYPE en LC_MESSAGES standaard ingesteld op de waarde van de TAAL
omgevingsvariabele. Als geen van deze variabelen is ingesteld, wordt GCC standaard ingesteld op traditioneel
C Engels gedrag.

TMPDIR
If TMPDIR is ingesteld, specificeert het de map die moet worden gebruikt voor tijdelijke bestanden. GCC gebruikt
tijdelijke bestanden om de uitvoer van één compilatiestadium te bewaren die moet worden gebruikt als
invoer naar de volgende fase: bijvoorbeeld de uitvoer van de preprocessor, de
invoer naar de eigenlijke compiler.

GCC_COMPARE_DEBUG
omgeving GCC_COMPARE_DEBUG is bijna gelijk aan passeren -fvergelijk-foutopsporing aan de
compiler-stuurprogramma. Zie de documentatie van deze optie voor meer details.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX is ingesteld, specificeert het een voorvoegsel dat moet worden gebruikt in de namen van de
subprogramma's uitgevoerd door de compiler. Er wordt geen schuine streep toegevoegd wanneer dit voorvoegsel wordt gecombineerd
met de naam van een subprogramma, maar u kunt een voorvoegsel opgeven dat eindigt met een schuine streep als
u dat wenst.

If GCC_EXEC_PREFIX niet is ingesteld, probeert GCC een geschikt voorvoegsel te vinden om te gebruiken
op basis van de padnaam waarmee het wordt aangeroepen.

Als GCC het subprogramma met het opgegeven voorvoegsel niet kan vinden, probeert het te zoeken in de
gebruikelijke plaatsen voor het subprogramma.

De standaardwaarde van GCC_EXEC_PREFIX is voorvoegsel/lib/gcc/ WAAR voorvoegsel is het voorvoegsel voor
de geïnstalleerde compiler. Vaak voorvoegsel is de waarde van "prefix" toen je de . uitvoerde
configureer scripts.

Andere voorvoegsels gespecificeerd met -B hebben voorrang op dit voorvoegsel.

Dit voorvoegsel wordt ook gebruikt voor het vinden van bestanden zoals: crt0.o die worden gebruikt om te linken.

Bovendien wordt het voorvoegsel op een ongebruikelijke manier gebruikt bij het vinden van de te doorzoeken mappen
voor header-bestanden. Voor elk van de standaardmappen waarvan de naam normaal begint
Met /usr/local/lib/gcc (meer precies, met de waarde van GCC_INCLUDE_DIR), probeert GCC
dat vervangen dat begint met het opgegeven voorvoegsel om een ​​alternatieve map te produceren
naam. Dus, met -Bfoo/, GCC-zoekopdrachten foe/bar net voordat het de standaard doorzoekt
directory /usr/local/lib/bar. Als een standaarddirectory begint met de geconfigureerde
voorvoegsel dan is de waarde van voorvoegsel is vervangen door GCC_EXEC_PREFIX bij het zoeken naar koptekst
bestanden.

COMPILER_PATH
De waarde van COMPILER_PATH is een door dubbele punten gescheiden lijst van mappen, net als PATH.
GCC probeert de aldus gespecificeerde mappen bij het zoeken naar subprogramma's, als dat niet lukt
vind de subprogramma's met GCC_EXEC_PREFIX.

LIBRARY_PATH
De waarde van LIBRARY_PATH is een door dubbele punten gescheiden lijst van mappen, net als PATH.
Wanneer geconfigureerd als een native compiler, probeert GCC de aldus gespecificeerde mappen wanneer:
zoeken naar speciale linker-bestanden, als het ze niet kan vinden met behulp van GCC_EXEC_PREFIX.
Koppelen met GCC gebruikt deze mappen ook bij het zoeken naar gewone bibliotheken
voor de -l optie (maar mappen gespecificeerd met -L eerst komen).

TAAL
Deze variabele wordt gebruikt om locale-informatie door te geven aan de compiler. Een manier waarop
deze informatie wordt gebruikt om te bepalen welke tekenset moet worden gebruikt wanneer teken
letterlijke, letterlijke tekenreeksen en opmerkingen worden geparseerd in C en C++. Wanneer de compiler is
geconfigureerd om multibyte-tekens toe te staan, de volgende waarden voor: TAAL zijn
erkend:

C-JIS
Herken JIS-tekens.

C-SJIS
Herken SJIS-tekens.

C-EUCJP
Herken EUCJP-tekens.

If TAAL niet is gedefinieerd, of als het een andere waarde heeft, gebruikt de compiler "mblen"
en "mbtowc" zoals gedefinieerd door de standaard locale om multibyte te herkennen en te vertalen
tekens.

Sommige aanvullende omgevingsvariabelen beïnvloeden het gedrag van de preprocessor.

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
De waarde van elke variabele is een lijst met mappen gescheiden door een speciaal teken, veel
als PATH, waarin u naar headerbestanden kunt zoeken. Het bijzondere karakter,
"PATH_SEPARATOR", is doelafhankelijk en wordt bepaald tijdens het bouwen van de GCC. Voor Microsoft
Op Windows gebaseerde doelen is het een puntkomma, en voor bijna alle andere doelen is het een
dikke darm.

CPATH specificeert een lijst met te doorzoeken mappen alsof deze is opgegeven met -I, Maar
na alle paden gegeven met -I opties op de opdrachtregel. Deze omgevingsvariabele
wordt gebruikt, ongeacht welke taal wordt voorbewerkt.

De overige omgevingsvariabelen zijn alleen van toepassing bij het voorbewerken van de specifieke
taal aangegeven. Elk specificeert een lijst met mappen die moeten worden doorzocht alsof
gespecificeerd met -isysteem, maar na alle paden gegeven met -isysteem opties op de
opdrachtregel.

In al deze variabelen instrueert een leeg element de compiler om zijn huidige . te doorzoeken
werkmap. Lege elementen kunnen aan het begin of einde van een pad verschijnen. Voor
bijvoorbeeld, als de waarde van CPATH is ":/special/include", dat hetzelfde effect heeft als
-IK. -Ik/speciaal/omvat.

DEPENDENCIES_OUTPUT
Als deze variabele is ingesteld, specificeert de waarde ervan hoe afhankelijkheden moeten worden uitgevoerd voor Make based
op de niet-systeemheaderbestanden die door de compiler worden verwerkt. Systeemkopbestanden zijn
genegeerd in de afhankelijkheidsuitvoer.

De waarde van DEPENDENCIES_OUTPUT kan gewoon een bestandsnaam zijn, in welk geval de Make-regels
worden naar dat bestand geschreven, waarbij de doelnaam wordt geraden uit de naam van het bronbestand. Of de
waarde kan de vorm hebben filet doel, in welk geval de regels naar het bestand worden geschreven filet
gebruik doel als de doelnaam.

Met andere woorden, deze omgevingsvariabele is gelijk aan het combineren van de opties -MM
en -MF, met een optionele -MT schakelen ook.

SUNPRO_DEPENDENCIES
Deze variabele is hetzelfde als DEPENDENCIES_OUTPUT (zie hierboven), behalve dat systeem
header-bestanden worden niet genegeerd, dus het impliceert: -M dan -MM. Echter, de
afhankelijkheid van het hoofdinvoerbestand wordt weggelaten.

Gebruik mips64-linux-gnuabi64-g++-5 online met onworks.net-services


Gratis servers en werkstations

Windows- en Linux-apps downloaden

  • 1
    DivFix + +
    DivFix + +
    DivFix++ is van jou AVI video reparatie en
    preview-software. Het is ontworpen voor reparatie
    en voorbeeldbestanden die worden gedownload
    van ed2k(emule), torrent, gnutella, ftp...
    DivFix++ downloaden
  • 2
    JBoss-gemeenschap
    JBoss-gemeenschap
    Door de gemeenschap aangestuurde projecten met de
    nieuwste innovaties voor cutting edge
    apps. Ons vlaggenschipproject JBoss AS is
    de toonaangevende Open Source,
    normconform...
    JBoss-community downloaden
  • 3
    Django Filer
    Django Filer
    django Filer is een bestandsbeheerprogramma
    applicatie voor django die maakt
    omgaan met bestanden en afbeeldingen een fluitje van een cent.
    django-filer is een bestandsbeheerprogramma
    aanvraag voor djang...
    Django filer downloaden
  • 4
    xCAT
    xCAT
    Toolkit voor extreem clusterbeheer.
    xCAT is een schaalbaar clusterbeheer
    en inrichtingstool die biedt
    hardwarecontrole, detectie en besturingssysteem
    schijf vol/di...
    XCAT downloaden
  • 5
    Psi
    Psi
    Psi is platformonafhankelijke krachtige XMPP
    client ontworpen voor ervaren gebruikers.
    Er zijn builds beschikbaar voor MS
    Windows, GNU/Linux en macOS.. Publiek:
    Eindgebruikers...
    Psi downloaden
  • 6
    Blobbyvolley 2
    Blobbyvolley 2
    Officiële voortzetting van de beroemde
    Blobby Volley 1.x arcadespel..
    Doelgroep: eindgebruikers/desktop. Gebruiker
    interface: OpenGL, SDL. Programmering
    Taal: C++, Lua. C...
    Blobbyvolley 2 downloaden
  • Meer "

Linux-commando's

Ad