EngelsFransSpaans

Ad


OnWorks-favicon

aarch64-linux-gnu-g++-4.8 - Online in de cloud

Voer aarch64-linux-gnu-g++-4.8 uit in OnWorks gratis hostingprovider via Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

Dit is de opdracht aarch64-linux-gnu-g++-4.8 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 -fopenmp -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 -statistieken
-ftemplate-backtrace-limiet=n -ftemplate-diepte=n -fno-threadsafe-statica
-zekering-cxa-atexit -fno-zwak -nostdinc++ -fno-standaard-inline
-zichtbaarheid-inlijnen-verborgen -zichtbaarheid-ms-compat -fext-numerieke-letters -Wabi
-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 -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]
-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
-Wno-attributen -Wno-ingebouwde-macro-opnieuw gedefinieerd -Wc++-compatibel -Wc++11-compatibel -Wcast-uitlijnen
-Wcast-kwaliteit -Wchar-abonnementen -Wingewikkeld -Wcommentaar -Wconversie -Wdekking-mismatch
-Wno-cpp -Wno-verouderd -Wno-verouderde-declaraties -Wdisabled-optimalisatie
-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-y2k -Wframe-groter-dan=len -Wno-vrij-nonheap-object -Wjump-missers-init
-Wignored-kwalificaties -Wimpliciet -Wimplicit-functie-declaratie -Wimpliciet-int
-Winit-zelf -Winlijn -Wmisschien-niet-geïnitialiseerd -Wno-in-naar-pointer-cast
-Wno-ongeldige-offsetof -Winvalid-pch -Wgroter-dan=len -Wunsafe-loop-optimalisaties
-Wlogische-op -Lang-lang -Wbelangrijk -Wmisschien-niet-geïnitialiseerd -Wmissing-bretels
-Wmissing-veld-initializers -Ontbrekende-include-dirs -Wno-spatlap -Wno-multichar
-Wnonnull -Wno-overloop -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 -Wsign-vergelijk -Wsign-conversie
-Wsizeof-pointer-memtoegang -Wstack-beschermer -Wstack-gebruik=len -Wstrict-aliasing
-Wstrict-aliasing=n -Wstrict-overloop -Wstrict-overloop=n
-Wsuggest-attribuut=[zuiver|const|geen terugkeer|formaat] -Wmissing-formaat-kenmerk -Wschakelaar
-Wswitch-standaard -Wswitch-opsomming -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 -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-doorgang-
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-spatklep[-n]
-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-boom-vrp[-n] -ftree-vectorizer-verbose=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=snaar -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+ -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]

Optimization Opties
-fagressieve-loop-optimalisaties -falign-functies[=n] -falign-sprongen[=n]
-falign-labels[=n] -falign-loops[=n] -Fassociatieve-wiskunde -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 -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-pta -fipa-profiel
-fipa-pure-const -fipa-referentie -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 -vijfpunten -fkeep-inline-functies
-fhoud-statische-consts -floop-blok -floop-uitwisseling -floop-strip-mijn
-floop-nest-optimaliseren -floop-paralleliseer-alles -flto -fto-compressie-niveau
-flto-partitie=alg -flto-rapport -fmerge-alle-constanten -fmerge-constanten
-fmodulo-sched -fmodulo-sched-toestaan-regmoves -fmove-loop-invarianten spatlap
-fmodderlapir -fspatlap -fno-filiaal-tel-reg -fno-standaard-inline -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 -foptimaliseren-register-verplaatsen -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
-freciprocal-wiskunde -vrij -fregverplaatsing -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-insns
-fschema-insns2 -fsectie-ankers -fselectieve planning -fselectieve planning2
-fsel-sched-pijpleidingen -fsel-sched-pipelining-buitenste lussen -fkrimpfolie
-fsignalering-nans -fsingle-precisie-constante -fsplit-ivs-in-uitroller
-fsplit-wide-types -stack-beschermer -fstack-protector-all -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-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
-fvariabele-uitbreiding-in-afroller -fvect-kostenmodel -fvpt -fweb -f hele-programma -fwpa
-zekering-ld=Links -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 -lbibliotheek -nostartbestanden -nodefaultlibs -nostlib -taart -rdynamisch -s
-statisch -statisch-libgcc -statische-libstdc++ -statisch-libasan -statische-libtsan -gedeeld
-gedeelde-libgcc -symbolisch -T script -Wl,optie -Xlinker optie -u symbool

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

Machine Afhankelijk Opties
Arch64 Opties -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 -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

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
-mwords-little-endian -mfloat-abi=naam -mfp16-formaat=naam -mthumb-interactie
-mno-duim-interwork -mcpu=naam -maart=naam -mfpu=naam -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 -mbeperk-het

AVR Opties -mmcu=MCU -maccumuleren-args -mbranch-kosten=kosten -mcall-prologen -mint8
-mno-onderbreekt -montspan -mstrict-X -mtiny-stapel -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 -mbig-schakelaar -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-grote-schakelaar -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

i386 en x86-64 Opties -mtune=CPU-type -maart=CPU-type -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 -maes -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnu -mpopcnt -mabm -mbmi -MTB -mfma4
-mxop -mlzct -mbmi2 -mrtm -mlwp -mthreads -mno-uitlijnen-stringops
-minline-all-stringops -minline-stringops-dynamisch -mstringop-strategie=alg
-mpush-args -bereken-uitgaande-args -m128bit-lang-dubbel -m96bit-lang-dubbel
-mlong-dubbel-64 -mlong-dubbel-80 -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 -mlarge-data-drempel=num -msse2avx -mfentry
-m8bit-idiv -mavx256-gesplitste niet-uitgelijnde belasting -mavx256-split-unaligned-store

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

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 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=abi -mabicbellen -mno-abicalls
-mgedeeld -mno-gedeeld -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-zweven -msoft-zweven -mno-zweven -msingle-float -mdubbele-zwevende -mdsp
-mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -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 -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-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 -mno-crt0

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

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

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 -mcbranchdi
-mcmpeqdi -mfused-gek -mno-gefuseerd-madd -mfsc -mno-fsca -mfsrra -mno-fsrra
-verweer-cmove -mtas

solaris 2 Opties -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 -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

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

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

x86-64 Opties Zie i386- en x86-64-opties.

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
-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.d
D broncode bestand.

filet.di
D-interfacecodebestand.

filet.dd
D documentatie codebestand.

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
d
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. Merk op dat deze standaard nog niet volledig wordt ondersteund; zien
<http://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. Ondersteuning is onvolledig en
experimenteel. De naam c1x is verouderd.

gnu90
gnu89
GNU-dialect van ISO C90 (inclusief enkele C99-functies). Dit is de standaard voor C
code.

gnu99
gnu9x
GNU-dialect van ISO C99. Wanneer ISO C99 volledig is geïmplementeerd in GCC, zal dit:
de standaard worden. De naam gnu9x is verouderd.

gnu11
gnu1x
GNU-dialect van ISO C11. De ondersteuning is onvolledig en experimenteel. 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. Ondersteuning voor C++11 is nog steeds
experimenteel, en kan in toekomstige releases op onverenigbare manieren veranderen. De naam
c++0x is verouderd.

gnu++11
gnu++0x
GNU-dialect van -standaard=c++11. Ondersteuning voor C++11 is nog experimenteel en kan veranderen
op onverenigbare manieren in toekomstige releases. De naam gnu++0x is verouderd.

c++1j
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++1j
GNU-dialect van -std=c++1j. 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.
Deze optie wordt geaccepteerd en genegeerd door GCC-versies 4.1.3 tot, maar niet inclusief
4.3. In GCC-versies 4.3 en later verandert het het gedrag van GCC in C99-modus. Gebruik makend van
deze optie komt ongeveer overeen met het toevoegen van het functieattribuut "gnu_inline" aan all
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 werd voor het eerst ondersteund in GCC 4.3. Deze 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.

-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 v3.0http://www.openmp.org/>. Deze optie
impliceert -pdraad, en wordt dus alleen ondersteund op doelen die ondersteuning hebben voor
-pdraad.

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

-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 "firstClass.C" als volgt compileren:

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

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.

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.

Zie ook -Wabi.

-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 gooien()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, en eerdere versies van G++
4.1 heeft altijd zo gewerkt. Echter, in ISO C++ een vriendfunctie die dat niet is
gedeclareerd in een omsluitende scope kan alleen worden gevonden met behulp van argumentafhankelijke opzoeking.
Deze optie zorgt ervoor dat vrienden worden geïnjecteerd zoals ze waren in eerdere releases.

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 definiëren NDEBUG. Dit geeft geen gebruikerscode toestemming
uitzonderingen te gooien in strijd met de uitzonderingsspecificaties; de compiler nog steeds
optimaliseert 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 ​​toe: draad_lokaal en draadprivé variabelen om te hebben
dynamische (runtime) initialisatie. Om dit te ondersteunen, geldt voor elk gebruik van een dergelijke variabele:
via een wrapper-functie die de nodige initialisatie uitvoert. wanneer het gebruik
en definitie van de variabele zich in dezelfde vertaaleenheid bevinden, deze overhead kan zijn
weg 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 loop 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 uitvoering. Dit veroorzaakt linkerfouten als deze functies niet inline zijn
overal worden ze 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 kenmerken van het type C++ runtime-identificatie (dynamische_cast en typeid). Als je dat niet doet
gebruik die delen van de taal, u kunt wat ruimte besparen door deze vlag te gebruiken. Opmerking
die uitzonderingsbehandeling gebruikt dezelfde informatie, maar G++ genereert deze indien nodig. De
dynamische_cast operator kan nog steeds worden gebruikt voor casts waarvoor geen runtime-type is vereist
informatie, dwz casts naar "void *" of naar ondubbelzinnige basisklassen.

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

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

-fno-standaard-inline
Niet aannemen inline voor functies die zijn gedefinieerd binnen een klassebereik.
Merk op dat deze functies een koppeling hebben zoals inline-functies; dat zijn ze gewoon niet
standaard inline.

-Wabi (alleen C, Objective-C, C++ en Objective-C++)
Waarschuw wanneer G++ code genereert die waarschijnlijk niet compatibel is met de leverancier-neutrale
C++ ABI. Hoewel er is geprobeerd te waarschuwen voor al dergelijke gevallen, zijn er:
waarschijnlijk enkele gevallen waarvoor niet is gewaarschuwd, ook al genereert G++
incompatibele code. Er kunnen ook gevallen zijn waarin waarschuwingen worden afgegeven, hoewel de
gegenereerde code 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.

De bekende onverenigbaarheden in -fabi-versie=2 (de standaard) 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 vastgelegd in -fabi-versie=3.

· SIMD-vectortypen gedeclareerd met "__attribute ((vector_size))" worden 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.

De bekende onverenigbaarheden in -fabi-versie=1 omvatten:

· Onjuiste behandeling van tail-padding voor bit-velden. G++ kan proberen gegevens in te pakken
in dezelfde byte als een basisklasse. Bijvoorbeeld:

struct A { virtuele leegte f (); int f1 : 1; };
struct B: openbaar A {int f2: 1; };

In dit geval plaatst G++ "B::f2" in dezelfde byte als "A::f1"; andere compilers doen
niet. U kunt dit probleem voorkomen door "A" expliciet op te vullen, zodat de grootte a . is
veelvoud van de bytegrootte op uw platform; waardoor G++ en andere compilers
leg "B" op dezelfde manier neer.

· Onjuiste behandeling van tail-padding voor virtuele bases. G++ gebruikt geen staart
opvulling bij het aanleggen van virtuele bases. Bijvoorbeeld:

struct A { virtuele leegte f (); char cl; };
structuur B {B(); char c2; };
struct C : openbare A, openbare virtuele B {};

In dit geval plaatst G++ "B" niet in de staartvulling voor "A"; ander
samenstellers doen. U kunt dit probleem vermijden door "A" expliciet op te vullen, zodat zijn
grootte is een veelvoud van de uitlijning (waarbij virtuele basisklassen worden genegeerd); dat veroorzaakt
G++ en andere compilers om "C" identiek op te maken.

· Onjuiste behandeling van bit-velden met aangegeven breedtes groter dan die van hun
onderliggende typen, wanneer de bitvelden in een unie verschijnen. Bijvoorbeeld:

unie U { int i : 4096; };

Ervan uitgaande dat een "int" geen 4096 bits heeft, maakt G++ de unie te klein door
het aantal bits in een "int".

· Lege klassen kunnen op onjuiste offsets worden geplaatst. Bijvoorbeeld:

structuur A {};

structuur B {
een een;
virtuele leegte f ();
};

struct C : openbaar B, openbaar A {};

G++ plaatst de "A"-basisklasse van "C" op een offset die niet nul is; het moet worden geplaatst op
nul compenseren. G++ gelooft ten onrechte dat het "A"-gegevenslid van "B" al is
bij offset nul.

· Namen van sjabloonfuncties waarvan de typen "typenaam" of sjabloonsjabloon bevatten
parameters kunnen verkeerd worden verminkt.

sjabloon
void f(typenaam Q::X) {}

sjabloon klasse Q>
void f(typenaam Q ::X) {}

Instantiaties van deze sjablonen kunnen onjuist zijn verminkt.

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.

-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++)
Waarschuw wanneer verwijderen wordt gebruikt om een ​​instantie van een klasse met virtuele functies te vernietigen
en niet-virtuele destructor. Het is onveilig om een ​​instantie van een afgeleide klasse te verwijderen
via een aanwijzer 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 (bijv gooien() or nee behalve)
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, in
in welk geval het mogelijk maar onveilig is om een ​​instantie van een afgeleide klasse te verwijderen via
een verwijzing naar de basisklasse. Deze waarschuwing is ook 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 lidinitializers voor: i en j overeenkomen met de verklaring
bevel van de leden, met een waarschuwing in die zin. Deze waarschuwing is mogelijk gemaakt 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++1j. 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 ++, Tweede editie boek:

· Item 11: Definieer een kopieerconstructor en een toewijzingsoperator voor klassen met
dynamisch toegewezen geheugen.

· Item 12: Liever initialisatie dan toewijzing in constructors.

· Item 14: Maak destructors virtueel in basisklassen.

· Item 15: Laat "operator=" een verwijzing naar *this retourneren.

· Item 23: Probeer geen referentie te retourneren wanneer u een object moet retourneren.

Waarschuw ook voor schendingen van de volgende stijlrichtlijnen van Scott Meyers' Meer
effectief C + + boek:

· Item 6: Onderscheid maken tussen prefix en postfix vormen van increment en decrement
exploitanten.

· Item 7: Overbelast "&&", "||", of "," nooit.

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 cast nieuwe stijl (dynamische_cast, statische_cast, herinterpret_cast en const_cast) zijn
minder kwetsbaar voor onbedoelde effecten en veel gemakkelijker 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 "some_class.m" als volgt compileren:

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.

-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. De
standaard is 72 tekens voor g ++ en 0 voor de rest van de front-ends ondersteund door
GCC. Indien n nul is, wordt er geen line-wrapping gedaan; elke foutmelding verschijnt op a
enkele lijn.

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

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

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.

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
Like -Wpedant, behalve dat er fouten worden geproduceerd in plaats van waarschuwingen.

-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 (alleen met -O2) -Wc++11-compatibel -Wchar-abonnementen
-Wenum-vergelijken (in C/ObjC; dit staat standaard aan in C++) -Wimpliciet-int (C en
Alleen Objectief-C) -Wimplicit-functie-declaratie (alleen C en Objective-C) -Wcommentaar
-Wformaat -Wbelangrijk (alleen voor C/ObjC en tenzij -vrijstaand) -Wmisschien-niet-geïnitialiseerd
-Wmissing-bretels (alleen voor C/ObjC) -Wnonnull - 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 registreren.

· (alleen C++) Het adres nemen van een variabele die is gedeclareerd registreren.

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

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- is verdacht. hoofd- zou een functie moeten zijn met extern
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
bijvoorbeeld de initialisatie voor a staat niet volledig tussen haakjes, maar dat 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 is gelijk aan (x<=y ? 1 : 0)
<= z, wat een andere interpretatie is dan die van de 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.

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

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

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

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.

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

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.

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

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

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

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

Om deze waarschuwing te onderdrukken, gebruik de ongebruikt attribuut.

-Wunused-waarde
Waarschuwen wanneer een instructie een resultaat berekent dat expliciet niet wordt gebruikt. Onderdrukken
deze waarschuwing cast de ongebruikte expressie naar komen te vervallen. Dit omvat een expressie-instructie
of de linkerkant van een komma-uitdrukking die geen bijwerkingen bevat. Voor
bijvoorbeeld een uitdrukking als x[i,j] veroorzaakt een waarschuwing, terwijl x[(leegte)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, "abort()" aan te roepen of te vangen. Dit
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.

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

-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 data of code dat tijdens het hardlopen wordt aangemaakt
tijd op de stapel wanneer het adres van een geneste functie wordt genomen, en
wordt gebruikt om de geneste functie indirect aan te roepen. Voor sommige doelen is het
bestaat alleen uit gegevens en vereist dus geen speciale behandeling. Maar,
voor de meeste doelen bestaat het uit code en vereist dus de stapel
uitvoerbaar worden gemaakt 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 hoofdtekst van de macro. 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 . verbergt #pragma niet begrepen door
traditionele C door ze te laten inspringen. Sommige traditionele implementaties niet
herkennen #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.

· Identificatie conflicteert met labels. Traditionele C heeft geen 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 en werd niet ondersteund door GCC-versies vóór GCC 3.0.

-Wundef
Waarschuwen als een niet-gedefinieerde identifier wordt geëvalueerd in een #als Richtlijn.

-Wno-endif-labels
Waarschuw niet wanneer een #anders of #stop als worden gevolgd door tekst.

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

-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 < or >=. Deze waarschuwing wordt ook ingeschakeld door:
-Wextra.

-Wbad-functie-cast (alleen C en Objective-C)
Waarschuw wanneer een functieaanroep wordt gecast naar een niet-overeenkomend type. Waarschuw bijvoorbeeld als
"int malloc()" wordt gegoten naar "anything *".

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

-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 langjmp or vvork. Deze waarschuwing is ook:
ingeschakeld door -Wextra.

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

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

-Weeg lichaam
Waarschuw als er een leeg lichaam voorkomt in een if, anders or do en uitspraak. Deze waarschuwing is:
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.

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

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

-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 zal een overbelasting aangeven in plaats van:
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-prototype 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 };

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.

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

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. Je
zou dit alleen moeten doen als u een ander normalisatieschema gebruikt (zoals "D"),
omdat je anders gemakkelijk bugs kunt maken die letterlijk onmogelijk te zien zijn.

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.

-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 compensatie van macro naar een niet-POD-type. Volgens
de ISO C++-norm uit 1998, van toepassing: compensatie van naar een niet-POD-type is niet gedefinieerd. In
bestaande C++-implementaties, maar compensatie van geeft meestal betekenisvolle resultaten
zelfs wanneer toegepast op bepaalde soorten niet-POD-types (zoals een eenvoudige struct dat
kan alleen geen POD-type zijn vanwege het hebben van een constructor). Deze vlag is voor
gebruikers die zich ervan bewust zijn dat ze niet-overdraagbare code schrijven en die opzettelijk
ervoor gekozen om de waarschuwing erover te negeren.

De beperkingen op compensatie van kan 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 lang lang soort 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
Waarschuw als variadische macro's worden gebruikt in de pedante ISO C90-modus of de alternatieve GNU-syntaxis
in de pedante ISO C99-modus. Dit is standaard. Om de waarschuwingsberichten te 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 eindigen
omhoog in de verplaatst-van-status. Als de verplaatsingstoewijzingsoperator is geschreven om te vermijden:
verplaatsen van een verplaatst-van-object, 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.

-Wno-spatlap
Onderdruk waarschuwingen over constructies die niet kunnen worden geïnstrumenteerd door -fspatlap.

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

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.

-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 of 4 zijn; de standaardversie voor de meeste doelen is 4.

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.

-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, maar geen informatie over lokale variabelen en geen regelnummers.

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
zal worden geïnstrumenteerd om out-of-bounds en use-after-free bugs te detecteren. Zien
<http://code.google.com/p/address-sanitizer/> voor meer details.

-fsanitize=thread
Schakel ThreadSanitizer in, een snelle datarace-detector. Instructies voor geheugentoegang zijn:
geïnstrumenteerd om datarace-bugs te detecteren. Zien
<http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> voor meer details.

-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. Voor
bijvoorbeeld, met -fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" geeft alleen true terug voor eerst
10 aanroepingen.

-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-regmove
Dump na de registerverplaatsingspas.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 en -fdump-rtl-sched2 storten inschakelen na het basisblok
planningspassen.

-fdump-rtl-zie
Dump na eliminatie van tekenuitbreiding.

-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
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 en
-fdump-rtl-split5 schakel dumpen in na vijf instructierondes.

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

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

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

spatlap
Dump elke functie na het toevoegen van spatlapinstrumentatie. De bestandsnaam is gemaakt door
aanhangen .spatklep 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 opties om de dumpdetails te selecteren en
optimalisaties. Indien opties is niet gespecificeerd, het is standaard allen voor details en optaal
voor optimalisatiegroepen. Als de bestandsnaam is niet gespecificeerd, het is standaard stderr​ Notitie
dat de output bestandsnaam worden overschreven in het geval van meerdere vertaaleenheden. Indien
een gecombineerde output van meerdere vertaaleenheden is gewenst, stderr zou gebruikt moeten worden
gebruiken.

De opties kunnen in twee groepen worden verdeeld, 1) opties die de breedsprakigheid van de
dump, en 2) 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 dat
van eventuele conflicten, overschrijven de laatste opties de eerdere opties op de opdrachtregel.
Hoewel meerdere -fopt-info-opties worden geaccepteerd, kan slechts één ervan: =bestandsnaam.
Als er andere bestandsnamen worden opgegeven, worden alle behalve de eerste genegeerd.

De breedsprakigheid van de dump heeft de volgende opties:

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

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

zal informatie afdrukken over gemiste optimalisatiemogelijkheden van vectorisatie
gaat door stderr.

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.

De tweede set opties beschrijft een groep optimalisaties en kan een of
meer van het volgende.

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.

Bijvoorbeeld

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

voert gemist optimalisatierapport uit van alle passen in alles gemist.

Als een ander voorbeeld,

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

geeft informatie over gemiste optimalisaties en geoptimaliseerde locaties van
alle inlining gaat over in inline.txt.

Indien de bestandsnaam is opgegeven, dan zijn de dumps van alle toepasselijke optimalisaties
aaneengeschakeld in de bestandsnaam. Anders wordt de dump uitgevoerd naar stderr. Indien opties
wordt weggelaten, is dit standaard all-optal, wat betekent dat alle beschikbare optimalisaties worden gedumpt
info van alle passen. In het volgende voorbeeld wordt alle optimalisatie-informatie uitgevoerd op
naar stderr.

gcc -O3 -fopt-info

Merk op dat -fopt-info-vec-gemist gedraagt ​​zich hetzelfde als -fopt-info-gemist-vec.

Overweeg als een ander voorbeeld:

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 de vec.miss wordt geproduceerd die cotains
dumpt van de vectorizer over gemiste kansen.

-ftree-vectorizer-verbose=n
Deze optie is verouderd en wordt geïmplementeerd in termen van: -fopt-info. Gebruik alstublieft
-fopt-info-soort vorm in plaats daarvan, waar soort is een van de geldige opt-info-opties. Het
drukt aanvullende optimalisatie-informatie af. Voor n=0 geen diagnostische informatie is
gemeld. Indien n=1 de vectorizer rapporteert elke lus die gevectoriseerd is, en het totaal
aantal lussen dat is gevectoriseerd. Indien n=2 de vectorizer meldt locaties die
niet konden worden gevectoriseerd en de redenen daarvoor. Voor alle hogere breedsprakigheidsniveaus allemaal
de analyse- en transformatie-informatie van de vectorizer wordt gerapporteerd.

Merk op dat de informatie-output door -ftree-vectorizer-uitgebreide optie wordt verzonden naar
stderr. Als de equivalente vorm -fopt-info-opties=bestandsnaam wordt gebruikt, is de uitvoer
verzonden bestandsnaam gebruiken.

-random-seed=snaar
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 snaar 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.

-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 Optimization
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 -fvergelijk-elim -fcprop-registers -fdce -fdefer-pop -fvertraagde-tak
-fdse -fguess-branch-waarschijnlijkheid -fif-conversie2 -fif-conversie -fipa-pure-const
-fipa-profiel -fipa-referentie -fmerge-constanten -fsplit-wide-types -ftree-bit-ccp
-ftree-ingebouwde-aanroep-dce -ftree-ccp -ftree-ch -ftree-kopieernaam -ftree-dce
-ftree-dominator-opteert -ftree-dse -ftree-forwprop - vrij van bomen -ftree-phiprop -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 -fexpensive-optimalisaties -fgcse
-fgcse-lm -hijs-aangrenzende-ladingen -finline-kleine-functies -findirect-inlining
-fipa-sra -foptimize-broer-zus-oproepen -fgedeeltelijke-inlining -fkijkgaatje2 -fregverplaatsing
-freeorder-blokken -freeorder-functies -frerun-cse-na-lus -fsched-interblock
-fsched-specificatie -fschema-insns -fschema-insns2 -fstrict-aliasing -fstrict-overloop
-ftree-switch-conversie -ftree-staart-samenvoegen -ftree-pre -ftree-vrp

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-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-standaard-inline
Maak standaard geen lidfuncties inline alleen omdat ze binnenin zijn gedefinieerd
het klassenbereik (alleen C++). Anders, wanneer u opgeeft -O, lidfuncties gedefinieerd
inside class scope wordt standaard inline gecompileerd; dat wil zeggen, u hoeft niet toe te voegen inline
voor de naam van de lidfunctie.

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

Vanaf GCC versie 4.6 is de standaardinstelling (wanneer niet wordt geoptimaliseerd voor grootte) voor:
32-bit GNU/Linux x86 en 32-bit Darwin x86 doelen zijn gewijzigd in:
-fomit-frame-aanwijzer. De standaard kan worden teruggezet naar: -fno-omit-frame-aanwijzer by
GCC configureren met de --enable-frame-aanwijzer optie configureren.

Ingeschakeld op niveaus -O, -O2, -O3, -Jij.

-foptimize-broer-zus-oproepen
Optimaliseer recursieve oproepen voor broers en zussen.

Ingeschakeld op niveaus -O2, -O3, -Jij.

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

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.

-fspatlap -fspatlap -fmodderlapir
Voor front-ends die dit ondersteunen (C en C++), instrument alle risicovolle pointer/array
dereferentiebewerkingen, sommige standaardbibliotheekreeks-/heapfuncties en enkele andere
geassocieerde constructen met bereik/validiteitstesten. Modules die zo geïnstrumenteerd zouden moeten zijn:
immuun voor bufferoverflows, ongeldig heapgebruik en enkele andere klassen van C/C++
programmeer fouten. De instrumentatie is gebaseerd op een aparte runtime-bibliotheek
(libmudflap), die is gekoppeld aan een programma als -fspatlap wordt gegeven tijdens de koppelingstijd. Loop-
tijdgedrag van het geïnstrumenteerde programma wordt bestuurd door de MUDFLAP_OPTIONS
omgevingsvariabele. Zie "env MUDFLAP_OPTIONS=-help a.out" voor de opties.

Te gebruiken -fspatlap in plaats van -fspatlap te compileren en te linken als uw programma multi-
schroefdraad. Gebruik maken van -fmodderlapirNaast -fspatlap or -fspatlap, als
instrumentatie moet pointer-lezingen negeren. Dit levert minder instrumentatie op (en
daardoor snellere uitvoering) en biedt nog steeds enige bescherming tegen ronduit geheugen
corrupte schrijfbewerkingen, maar staat foutief gelezen gegevens toe om zich binnen een programma te verspreiden.

-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 is, wordt beheerd door "if-conversion2".

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.

-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
op niveaus -O2, -O3, -Jij.

-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 x86 op niveaus -O2, -O3.

-foptimaliseren-register-verplaatsen
-fregverplaatsing
Poging om registernummers opnieuw toe te wijzen in verplaatsingsinstructies en als operanden van andere
eenvoudige instructies om de hoeveelheid registerbinding te maximaliseren. Dit is
vooral handig op machines met twee-operand instructies.

Note -fregverplaatsing en -foptimaliseren-register-verplaatsen zijn dezelfde optimalisatie.

Ingeschakeld op niveaus -O2, -O3, -Jij.

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

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

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

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

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

-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-ppl en --met-cloog naar
de Graphite loop-transformatie-infrastructuur mogelijk maken.

-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-ppl
en --met-cloog om de Graphite Loop-transformatie-infrastructuur mogelijk te 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-ppl
en --met-cloog om de Graphite Loop-transformatie-infrastructuur mogelijk te 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-ppl
en --met-cloog om de Graphite Loop-transformatie-infrastructuur mogelijk te 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 CLooG, 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-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 waren 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, zodat ze meer kans hebben om de verwachte waarden te bevatten in a
debug sessie. Dit was de standaardinstelling in GCC-versies ouder dan 4.7.

-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 lusvectorisatie uit op bomen. Deze vlag is standaard ingeschakeld op -O3.

-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" of "goedkoop". Met het "onbeperkte" model kan de gevectoriseerde code-
pad wordt verondersteld winstgevend te zijn, terwijl met het "dynamische" model een runtime-controle zal
bewaak het gevectoriseerde codepad om het alleen in te schakelen voor iteratietellingen die waarschijnlijk zullen
sneller uitvoeren dan bij het uitvoeren van de oorspronkelijke scalaire lus. Het "goedkope" model zal
schakel vectorisatie van lussen uit waar dit bijvoorbeeld onbetaalbaar zou zijn
vanwege vereiste runtime-controles voor gegevensafhankelijkheid of uitlijning, maar verder is gelijk
naar het "dynamische" model. Het standaardkostenmodel is afhankelijk van andere optimalisatievlaggen
en is ofwel "dynamisch" of "goedkoop".

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

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

-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. Deze optie maakt
code groter, en kan het al dan niet sneller laten werken.

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

-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 __ingebouwd_verwacht, dan de
heuristieken worden gebruikt om vertakkingskansen te raden voor de rest van de controlestroom
grafiek, het nemen van de __ingebouwd_verwacht informatie in acht nemen. De interacties tussen de
heuristieken en __ingebouwd_verwacht kan complex zijn en in sommige gevallen kan het nuttig zijn om
schakel de heuristieken uit zodat de effecten van __ingebouwd_verwacht zijn 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.

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

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 moet worden gespecificeerd tijdens het compileren en tijdens
de laatste koppeling. 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 om link-time optimalisaties mogelijk te maken de
-flto vlag moet worden doorgegeven aan zowel de compileer- als de link-opdracht.

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.

Merk op dat wanneer een bestand is gecompileerd met -flto, het gegenereerde objectbestand is groter dan
een gewoon objectbestand omdat het GIMPLE-bytecodes en de gebruikelijke eindcode bevat.
Dit betekent dat objectbestanden met LTO-informatie als normaal object kunnen worden gekoppeld
bestanden; indien -flto wordt niet doorgegeven aan de linker, er zijn geen interprocedurele optimalisaties
toegepast.

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 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o mijnprog -flto -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 zonder -fltodan mijnprog is niet geoptimaliseerd.

Bij het produceren van het laatste binaire bestand met -flto, GCC past alleen link-time optimalisaties toe
naar die 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. Momenteel zijn de volgende opties:
worden opgeslagen in de GIMPLE bytecode-bestanden: -fPIC, -fgewone en alle -m doel vlaggen.

Bij het koppelen worden deze opties ingelezen en opnieuw toegepast. Merk op dat de huidige
implementatie doet geen poging om tegenstrijdige waarden voor deze opties te herkennen. Indien
verschillende bestanden hebben conflicterende optiewaarden (bijv. één bestand is gecompileerd met -fPIC
en een ander niet), gebruikt de compiler gewoon de laatste waarde die uit de bytecode is gelezen
bestanden. Het wordt daarom aanbevolen dat u alle bestanden compileert die deelnemen aan de
dezelfde link met dezelfde opties.

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.

Een ander kenmerk van LTO is dat het mogelijk is om interprocedurele optimalisaties toe te passen
op bestanden die in verschillende talen zijn geschreven. Dit vereist ondersteuning op het taalfront
einde. Momenteel kunnen de C-, C++- en Fortran-frontends GIMPLE . uitzenden
bytecodes, dus zoiets zou moeten werken:

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; alles wat je hoeft toe te voegen is -flto om alle
compileren en koppelen van opdrachten.

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 de vlag . om deze functie in te schakelen -fuse-linker-plug-in
op linktijd:

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.

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

Deze optie is standaard uitgeschakeld.

-flto-partitie=alg
Geef het partitioneringsalgoritme op dat wordt gebruikt door de linktime-optimizer. De waarde is
ofwel "1op1" om een ​​partitionering te specificeren die de originele bronbestanden spiegelt of
"gebalanceerd" om verdeling in blokken van gelijke grootte te specificeren (indien mogelijk) of
"max" om waar mogelijk voor elk symbool een nieuwe partitie te maken. "Geen" opgeven als
een algoritme schakelt partitionering en streaming volledig uit. De standaardwaarde is
"evenwichtig". Terwijl "1op1" kan worden gebruikt als een tijdelijke oplossing voor het bestellen van verschillende codes
problemen, is de "max"-partitionering alleen bedoeld voor interne tests.

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

-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
"-fwhole-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 -ffat-lto-objecten maar deze standaard is bedoeld om in de toekomst te veranderen
releases wanneer omgevingen met linker plug-in vaker voorkomen.

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

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

-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-arcs", "-fprofile-values", "-fvpt".

If pad is opgegeven, kijkt GCC naar de pad om de profielfeedbackgegevensbestanden te vinden.
Bekijk -fprofile-dir.

-fprofile-gebruik
-fprofile-gebruik=pad
Schakel optimalisaties gericht op profielfeedback in en optimalisaties die over het algemeen winstgevend zijn
alleen met profielfeedback beschikbaar.

De volgende opties zijn ingeschakeld: "-fbranch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer", "-ftree-vectorize",
"ftree-loop-distribute-patterns"

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.

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

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

-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 "gprof" niet op alle systemen gebruiken 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.

OPMERKING: In Ubuntu 6.10 en latere versies is deze optie standaard ingeschakeld voor C, C++,
ObjC, ObjC++, indien geen van -fno-stack-beschermer, -nostlib, ook niet -vrijstaand zijn
gevonden.

-fstack-protector-all
Like -stack-beschermer behalve dat alle functies zijn beveiligd.

-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 30, wat de groei van de eenheden beperkt tot 1.3 keer de oorspronkelijke grootte.

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.

Voor functies die inline zijn gedeclareerd, --param max-inline-insns-recursief wordt opgenomen
rekening. Voor functies die niet inline zijn gedeclareerd, vindt recursieve inlining alleen plaats wanneer:
-finline-functies (inbegrepen -O3) is ingeschakeld en --param max-inline-insns-
recursief-auto is gebruikt. De standaardwaarde is 450.

max-inline-recursieve-diepte
max-inline-recursieve-diepte-auto
Specificeert de maximale recursiediepte die wordt gebruikt voor recursieve inlining.

Voor functies die inline zijn gedeclareerd, --param max-inline-recursieve-diepte wordt opgenomen
rekening. Voor functies die niet inline zijn gedeclareerd, vindt recursieve inlining alleen plaats wanneer:
-finline-functies (inbegrepen -O3) is ingeschakeld en --param max-inline-recursieve-
diepte-auto is gebruikt. 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 10.

max-early-inliner-iteraties
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
comdat-delen-waarschijnlijkheid
Waarschijnlijkheid (in procenten) dat C++ inline-functie met comdatzichtbaarheid is
gedeeld over meerdere compilatie-eenheden. De standaardwaarde is 20.

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.

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 wordt alleen gebruikt wanneer profielfeedback is
beschikbaar. De echte profielen (in tegenstelling tot statisch geschatte) zijn veel
minder gebalanceerd waardoor de drempel groter kan zijn.

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 wordt alleen gebruikt wanneer 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.

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.

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.

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.

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.

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.

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-load-data-races toe
Sta optimizers toe om nieuwe dataraces over belastingen te introduceren. Stel in op 1 om toe te staan,
anders naar 0. Deze optie is standaard ingeschakeld, tenzij impliciet ingesteld door de
-fgeheugenmodel= optie.

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, tenzij impliciet ingesteld door de
-fgeheugenmodel= optie.

sta-verpakt-load-data-races toe
Sta optimizers toe om nieuwe dataraces te introduceren op ingepakte dataladingen. Zet op 1 tot
toestaan, anders op 0. Deze optie is standaard ingeschakeld, tenzij impliciet ingesteld door
de -fgeheugenmodel= optie.

sta-verpakte-store-data-races toe
Sta optimizers toe om nieuwe dataraces te introduceren op ingepakte datastores. Zet op 1 tot
toestaan, anders op 0. Deze optie is standaard ingeschakeld, tenzij impliciet ingesteld door
de -fgeheugenmodel= optie.

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
een basis voor een nieuwe kandidaat voor lineaire sterktevermindering.

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 commando
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
Ontdek 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
Ontdek 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
Ontdek 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 experimenteel; in een
toekomstige versie van GCC, wordt deze standaard ingeschakeld voor C99 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 het commando
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.

-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
als "-static-libgcc" of "-shared-libgcc", worden genegeerd. De standaard opstartbestanden zijn:
normaal gebruikt, 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
specificeren van de koppeling van de systeembibliotheken, zoals "-static-libgcc" of
"-shared-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
__hoofd, 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.

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

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

Opties For Directory Ontdek
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 "filet"; er wordt niet naar gezocht #include <filet>,
anders gewoon leuk -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 de -B verwijst naar een directory, en
indien nodig 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-. Alle mappen die u opgeeft met -I opties voor de
-IK- optie worden alleen gezocht in het geval van #include "filet"; ze worden niet gezocht
For #include <filet>.

Als er extra mappen zijn opgegeven met -I opties na de -IK-Deze
mappen worden doorzocht op alle #include richtlijnen. (Gewoonlijk allen -I directories
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 "filet".
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:

-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 geheugenreferenties 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-bit
integer vermenigvuldigen-accumuleer instructies.

-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 waarde voor boog is armv8-a. De mogelijke 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. Deze optie kan worden gebruikt in combinatie met of in plaats van de -mcpu=
optie.

-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 mogelijk
waarden voor cpu zijn algemeen, Groot. De mogelijke waarden voor kenmerken zijn gedocumenteerd in
onderstaande subsectie.

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.

-mtune=naam
Geef de naam op van de processor waarop u de prestaties wilt afstemmen. De code wordt afgestemd
alsof de doelprocessor van het type is dat in deze optie is gespecificeerd, maar nog steeds gebruik maakt van
instructies die compatibel zijn met de doelprocessor gespecificeerd door a -mcpu= optie. Deze
optie kan niet worden achtervoegd door functiemodifiers.

-maart en -mcpu functie modifiers

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.

ARM Opties

Deze -m opties zijn gedefinieerd voor Advanced RISC Machines (ARM)-architecturen:

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

-kaarten
Dit is een synoniem voor -maps-frame.

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

-mwords-little-endian
Deze optie is alleen van toepassing bij het genereren van code voor big-endian processors. genereren
code voor een little-endian woordvolgorde maar een big-endian bytevolgorde. Dat wil zeggen, een byte
volgorde van het formulier 32107654. Opmerking: deze optie mag alleen worden gebruikt als u dat nodig heeft:
compatibiliteit met code voor big-endian ARM-processors gegenereerd door versies van de
compiler voor 2.8. Deze optie is nu verouderd.

-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 armv8-a, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.

-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-a15, cortex-a53, cortex-r4, cortex-r4f, cortex-r5, cortex-r7, cortex-m4,
cortex-m3, cortex-m1, cortex-m0, cortex-m0plus, wonder-pj4, xschaal, iwmmxt, iwmmxt2,
ep9312, fa526, fa626, fa606te, fa626te, fmp626, fa726te.

-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,
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 kort gesprek attribuut,
functies die binnen het bereik van a . vallen #pragma geen_lange_gesprekken richtlijn, en
functies waarvan de definities al zijn gecompileerd in de huidige compilatie
apparaat worden niet omgezet in lange gesprekken. De uitzonderingen op deze regel zijn zo zwak
functiedefinities, functies met de lang gesprek attribuut of de sectie attribuut,
en functies die binnen de reikwijdte van een #pragma lange_oproepen richtlijn zijn altijd
veranderd 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 a #pragma
lange_gesprekken_uit richtlijn. Merk op dat deze schakelaars geen effect hebben op de manier waarop 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-basis
geval is de standaard R9 als het doel op EABI is gebaseerd of als stapelcontrole is ingeschakeld,
anders is de standaard R10.

-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 zal toegang worden verkregen tot woorden in ingepakte gegevensstructuren
een byte tegelijk.

Het ARM-attribuut "Tag_CPU_unaligned_access" wordt ingesteld in het gegenereerde objectbestand
naar waar of onwaar, afhankelijk van de instelling van deze optie. Indien niet uitgelijnd
toegang is ingeschakeld, zal het preprocessor-symbool "__ARM_FEATURE_UNALIGNED" ook zijn
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.

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

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

"avr3"
"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", "atmega16u2", "atmega32u2",
"atmega8u2", "attiny1634", "attiny167", "at90usb162", "at90usb82".

"avr4"
"Verbeterde" apparaten met maximaal 8@tie{}KiB aan programmageheugen. MCU@tie{}= "ata6285",
"ata6286", "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{}= "ata5790", "ata5790n", "ata5795", "atmega16", "atmega16a",
"atmega16hva", "atmega16hva2", "atmega16hvb", "atmega16hvbrevb", "atmega16m1",
"atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a", "atmega164p",
"atmega164pa", "atmega165", "atmega165a", "atmega165p", "atmega165pa",
"atmega168", "atmega168a", "atmega168p", "atmega168pa", "atmega169", "atmega169a",
"atmega169p", "atmega169pa", "atmega26hvg", "atmega32", "atmega32a", "atmega32c1",
"atmega32hvb", "atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega3250pa",
"atmega328", "atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega3290pa", "atmega406",
"atmega48hvf", "atmega64", "atmega64a", "atmega64c1", "atmega64hve", "atmega64m1",
"atmega64rfa2", "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
"atmega644p", "atmega644pa", "atmega645", "atmega645a", "atmega645p",
"atmega6450", "atmega6450a", "atmega6450p", "atmega649", "atmega649a",
"atmega649p", "atmega6490", "atmega6490a", "atmega6490p", "at90can32",
"at90can64", "at90pwm161", "at90pwm216", "at90pwm316", "at90scr100", "at90usb646",
"at90usb647", "at94k", "m3000".

"avr51"
"Verbeterde" apparaten met 128@tie{}KiB aan programmageheugen. MCU@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega1280", "atmega1281", "atmega1284",
"atmega1284p", "at90can128", "at90usb1286", "at90usb1287".

"avr6"
"Verbeterde" apparaten met 3-byte pc, dwz met meer dan 128@tie{}KiB aan programma
geheugen. MCU@tie{}= "atmega2560", "atmega2561".

"avrxmega2"
"XMEGA"-apparaten met meer dan 8@tie{}KiB en maximaal 64@tie{}KiB aan programmageheugen.
MCU@tie{}= "atmxt112sl", "atmxt224", "atmxt224e", "atmxt336s", "atxmega16a4",
"atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32a4u", "atxmega32c4", "atxmega32d4", "atxmega32e5", "atxmega32x1".

"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{}=
"atmxt540s", "atmxt540sreva", "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".

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

-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. Als u "-mrelax" instelt, voegt u gewoon de optie "--relax" toe aan de
linker-opdrachtregel wanneer de linker wordt aangeroepen.

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.

-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=avr2" of "-mmcu=avr25" het compilerstuurprogramma
zal deze optie toevoegen aan of verwijderen 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" register 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.

-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 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 zal genereren
correct een alle situatie. Zie de compiler-optie "-mrelax" en de linler-optie
"--ontspannen". Er zijn hoekgevallen waarbij de linker stubs zou moeten genereren, maar
afgebroken zonder ontspanning en zonder een nuttige 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 so 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 wordt gelinkt 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, wordt 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 geactiveerd 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, 102, 104, 105, 106, 107

For MCU= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7". Indien MCU
een apparaat specificeert, wordt deze ingebouwde macro dienovereenkomstig ingesteld. Bijvoorbeeld met
"-mmcu=atmega8" de macro wordt gedefinieerd als 4.

"__AVR_Apparaat__"
Instelling "-mmcu=apparaat" definieert deze ingebouwde macro die de naam van het apparaat weerspiegelt.
Bijvoorbeeld, "-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 zal
niet worden 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-stack".

"__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=avr2" en "-mmcu=avr25" 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 opdrachtregeloptie "-mno-interrupts".

"__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_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
"--with-avrlibc" configuratieoptie.

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 .nauwelijks sectie, waarnaar wordt verwezen door
registreer "B14". Zet kleine niet-geïnitialiseerde globale en statische gegevens in de .bss sectie,
die grenst aan de .nauwelijks sectie. Zet kleine alleen-lezen gegevens in de .rodata
sectie. 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 .far sectie. Zet alle constante gegevens in de .const
pagina.

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 standaardinstellingen voor bool zodat groottevan(bool)==1. Standaard groottevan(bool) is 4
bij het compileren voor Darwin/PowerPC en 1 bij het compileren voor Darwin/x86, dus deze 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 van ".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.

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

-mjump-in-vertraging
Vul vertragingsslots van functieaanroepen met onvoorwaardelijke springinstructies door te wijzigen
de retouraanwijzer voor de functieaanroep om het doel van de voorwaardelijke sprong te zijn.

-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,
de variabele instellen en herstellen __xpg4_extended_mask zoals gepast. 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.

Intel 386 en AMD x86-64 Opties

Deze -m opties zijn gedefinieerd voor de i386- en x86-64-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.

kerni7
Intel Core i7 CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 en
Ondersteuning voor SSE4.2-instructieset.

corei7-avx
Intel Core i7 CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Ondersteuning voor SSE4.2, AVX, AES en PCLMUL instructieset.

kern-avx-i
Intel Core CPU met 64-bit extensies, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Ondersteuning voor SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND en F16C instructieset.

kern-avx2
Intel Core CPU met 64-bit extensies, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 en F16C
instructieset ondersteuning.

atoom
Intel Atom CPU met 64-bit extensies, MOVBE, MMX, SSE, SSE2, SSE3 en SSSE3
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, 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, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM en 64-bit instructiesetuitbreidingen.

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 een
extra keuze 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.

-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 de i386-compiler.

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 i386-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. Ondersteunde keuzes zijn: intel or
naar (de standaard). 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 FreeBSD, OpenBSD en NetBSD. Deze optie wordt overschreven wanneer: -maart
geeft aan dat de doel-CPU altijd een FPU heeft en dat de instructie dus geen
emulatie. 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 386 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 binaire toepassing van i386
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
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 voor 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.

-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
functie attribuut cdcl.

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

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

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 Intel x86, 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 worden gecompileerd
met 16 bytes stapeluitlijning (zoals functies uit een standaardbibliotheek) worden aangeroepen
met verkeerd uitgelijnde stapel. In dit geval kunnen SSE-instructies leiden tot verkeerd uitgelijnd geheugen
toegang vallen. Bovendien worden variabele argumenten voor 16 bytes onjuist behandeld
uitgelijnde objecten (inclusief x87 long double en __int128), wat tot verkeerde resultaten leidt.
Je moet alle modules bouwen met -mppreferred-stack-grens=3, inclusief eventuele bibliotheken.
Dit omvat 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
-mno-mmx
-ms
-mno-sse
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-maes
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdrnd
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnu
-mno-3dnu
-mpopcnt
-mno-popcnt
-mabm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzct
-mno-lzcnt
-mrtm
-MTB
-mno-tbm
Deze schakelaars schakelen het gebruik van instructies in de MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT, RTM of 3DNow! uitgebreide instructiesets. Deze
uitbreidingen zijn ook beschikbaar als ingebouwde functies: zie X86 Ingebouwd Functiesvoor
details van de functies die door deze schakelaars zijn ingeschakeld 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.

-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, ontbraken de "LAHF" en "SAHF" instructies die werden 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 een specifieke functie regelen door gebruik te maken van
het functieattribuut ms_abi/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 thread
helper 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.

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

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

Deze -m switches worden naast het bovenstaande ondersteund op x86-64-processors in 64-bit
omgevingen.

-m32
-m64
-mx32
Genereer code voor een 32-bits of 64-bits omgeving. De -m32 optie sets "int", "long",
en pointertypes 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.

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

i386 en x86-64 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 i386 en x86-64 Opties voor standaard opties.

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 in een van gezet .gegevens, .bssof
.rodata (tenzij het kenmerk "sectie" is opgegeven). Dit is de standaardinstelling.

Het kleine gegevensgebied bestaat uit secties .sdata en .sbss. Objecten kunnen expliciet worden
plaats in het kleine gegevensgebied 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_cpu wanneer ColdFire-doel cpu is geselecteerd. Het ook
definieert __mcf_familie_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 "klein", "dichtbij", of . zijn
"ver".

-mclip
Schakelt de instructie "clip" in. Merk op dat "-mclip" niet nuttig is, tenzij u ook
geef "-mminmax" op.

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

-mkop
Schakelt de coprocessor-instructies in. Standaard is dit een 32-bits coprocessor. Opmerking
dat de coprocessor normaal gesproken is ingeschakeld via de optie "-mconfig=".

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

-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, mips64 en mips64r2. 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, achtste, achtste+,
octaon2, Orion, 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 wil zeggen, mips1 For
32-bit 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 gekapitaliseerde waarde van _MIPS_ARCH. Bijvoorbeeld,
-maart=r2000 sets _MIPS_ARCH naar "r2000" en definieert de macro _MIPS_ARCH_R2000.

Merk op dat de _MIPS_ARCH macro gebruikt de hierboven gegeven processornamen. Met andere woorden,
het heeft het volledige voorvoegsel en wordt niet afgekort 000 as k. In het geval van van-abi
macro noemt de opgeloste architectuur (ofwel "mips1" or "mips3"). Het noemt de
standaard architectuur 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 op dezelfde manier werken 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.

-mips32r2
Gelijkwaardig aan -maart=mips32r2.

-mips64
Gelijkwaardig aan -maart=mips64.

-mips64r2
Gelijkwaardig aan -maart=mips64r2.

-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-mips16
-mno-interlink-mips16
Vereisen (niet vereisen) dat niet-MIPS16-code link-compatibel is met MIPS16-code.

Niet-MIPS16-code kan bijvoorbeeld niet rechtstreeks naar MIPS16-code springen; het moet ofwel een gebruiken
call of een indirecte sprong. -minterlink-mips16 schakelt daarom directe sprongen uit, tenzij
GCC weet dat het doel van de sprong niet MIPS16 is.

-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-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, maar alle 64 bits
zijn opgeslagen.

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

-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 die is gecompileerd met "-mno-float" per ongeluk bevat:
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.

-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 om 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. Ook
definieert __mips_dsp_rev om 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.

- mmt
-mno-mt
Gebruik (niet gebruiken) MT Multithreading instructies.

-mmcu
-mno-mcu
Gebruik (niet gebruiken) de MIPS MCU ASE-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.

-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-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 or __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()"
wordt samengesteld.

Deze optie staat standaard op "-mno-synci", maar de standaard kan worden overschreven door te configureren
met "--met-synci".

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 "-mexplicit-relocs" is in
effect. Met "-mno-explicit-relocs" kan deze optimalisatie 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.

-mno-crt0
Maak geen koppeling in het C runtime initialisatieobjectbestand.

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
"none", die softwarevermenigvuldigingsfuncties gebruikt. De optie "g13" 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.

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 zullen intrinsieke elementen zoals "vec_splat", "vec_extract" en "vec_insert" overeenkomen
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". Standaard komen deze overeen met array
elementvolgorde 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". Standaard komen deze overeen met array
elementvolgorde 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.

-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 waarden met drijvende komma 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
Stel op embedded PowerPC-systemen de PPC_EMB bit in de kop van de ELF-vlaggen 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 .sdata2 sectie, waarnaar wordt verwezen door register "r2". klein zetten
geïnitialiseerde niet-"const" globale en statische gegevens in de .sdata sectie, die is gepunt
door register "r13". Zet kleine niet-geïnitialiseerde globale en statische gegevens in de .sbss
gedeelte, dat 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
.sdata sectie, waarnaar wordt verwezen door register "r13". Zet kleine niet-geïnitialiseerde global
en statische gegevens in de .sbss gedeelte, dat 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 wereldwijde gegevens in de .sbss sectie. 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 .gegevens
sectie, en alle niet-geïnitialiseerde gegevens in de .bss pagina.

-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:
"all": schakel alle schattingsinstructies in, "default": schakel de standaardinstructies in,
gelijkwaardig -mrecipe, "none": schakel alle schattingsinstructies uit, gelijk aan
-mno-recept; "div": schakel de wederzijdse benaderingsinstructies in voor beide enkele
en dubbele precisie; "divf": schakel de wederzijdse benadering met enkele precisie in
instructies; "divd": schakel de wederzijdse benadering met dubbele precisie in
instructies; "rsqrt": schakel de instructies voor de wederzijdse vierkantswortelbenadering in
voor zowel enkele als dubbele precisie; "rsqrtf": activeer de single-precision reciprocal
vierkantswortel benadering instructies; "rsqrtd": dubbele precisie inschakelen
wederzijdse vierkantswortel benadering instructies;

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", wat aangeeft dat IBM's
Mathematical Acceleration Subsystem (MASS) bibliotheken voor het vectoriseren van intrinsieke gegevens 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 ketenregister te laden (r11) 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
registreren r2, en statische ketenwaarde die in register moet worden geladen r11. 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 keten als u de . 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.

In deze versie van de compiler, de -mcompat-align-parm is de standaardinstelling, behalve wanneer
met behulp van de Linux ELFv2 ABI.

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

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 en zEC12. Bij het genereren van code met behulp van de instructies die beschikbaar zijn op
z/Architectuur, 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, zal deze optie ook:
gedeeltelijk gebruik maken 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 zal ook compatibel zijn met andere software atomaire modellen
onderbrekings-/uitzonderingsafhandelingssystemen indien uitgevoerd op een SH4A-systeem. Aanvullend
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, hoewel ze
zou compatibel zijn, en zal de compiler atomaire sequenties laten genereren van de
alleen gespecificeerd 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 wordt 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.
Als u dit specificeert voor doelen die geen dynamische schakelinstructies hebben, zal:
standaard ingesteld op "call-div1".

Als er geen divisiestrategie is gespecificeerd, wordt de standaardstrategie geselecteerd
op basis van het huidige doel. Voor SH2A is de standaardstrategie om de "divs" en
"divu" instructies in plaats van bibliotheekfunctie-aanroepen.

-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, zal de compiler proberen de voorkeur te geven aan nul
verplaatsing takcode reeksen. Dit is standaard ingeschakeld bij het genereren van code
voor SH4 en SH4A. Het kan expliciet worden uitgeschakeld door op te geven: -mno-zdcbranch.

-mcbranchdi
Schakel het instructiepatroon "cbranchdi4" in.

-mcmpeqdi
Zend het instructiepatroon "cmpeqdi_t" uit, zelfs wanneer -mcbranchdi van kracht is.

-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 "-mfsca" moet gebruikt worden in combinatie met
"-funsafe-math-optimalisaties". Het is standaard ingeschakeld bij het genereren van code voor:
SH4A. Het gebruik van "-mno-fsca" schakelt sinus- en cosinusbenaderingen uit, zelfs als
"-funsafe-math-optimizations" is van kracht.

-mfsrra
-mno-fsrra
De compiler toestaan ​​of weigeren om de "fsrra"-instructie voor wederkerig vierkant uit te zenden
wortel benaderingen. De optie "-mfsrra" moet gebruikt worden in combinatie met
"-funsafe-math-optimizations" en "-finite-math-only". Het is standaard ingeschakeld wanneer:
genererende code voor SH4A. Het gebruik van "-mno-fsrra" schakelt de wederzijdse vierkantswortel uit
benaderingen, zelfs als "-funsafe-math-optimizations" en "-ffinite-math-only" 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:

-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. De standaard is
-mno-gebruikersmodus.

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

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 preprocessor constanten __v850 en __v851__ zijn altijd gedefinieerd, ongeacht welke
processorvariant is het doelwit.

-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__" wordt gedefinieerd, anders wordt 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 worden 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 voor "doubles" en "long long"-types mogelijk om op 8-byte te worden uitgelijnd
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__" wordt 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.

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-64 Opties

Deze staan ​​vermeld onder

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
Beheers de behandeling van letterlijke pools. De standaard is -mno-tekst-sectie-literals,
die letterlijke waarden in een aparte sectie in het uitvoerbestand plaatst. Hierdoor kan de
letterlijke pool die in een data-RAM / ROM kan worden geplaatst, en het stelt de linker ook in staat om te combineren
letterlijke pools van afzonderlijke objectbestanden om overbodige letterlijke waarden te verwijderen en code te verbeteren
maat. Met -mtext-sectie-literals, de letterlijke termen worden afgewisseld in de tekstsectie
om ze zo dicht mogelijk bij hun referenties te houden. 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, zal waarschijnlijk breken 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 waar_t te kort Ongesigneerd int 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 #identificeren 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 386 heeft zo'n limiet niet.)

Positie-onafhankelijke code vereist speciale ondersteuning en werkt daarom alleen op
bepaalde automaten. Voor de 386 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 je gebruikt extern inline in je C-code, een adresseerbare versie daarvan
functies moeten worden aangeboden. (Normaal gesproken is dit sowieso het geval, maar als je geluk hebt)
en de optimizer breidt de functies altijd inline uit, je bent misschien weggekomen
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
van "-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 "/bits/stl" of . bevatten
"opnemen/sys".

Als u om de een of andere reden de letter ',' wilt opnemen in een van sym, schrijven ','. Voor
bijvoorbeeld "-finstrument-functions-exclude-file-list=',,tmp'" (let op het enkele aanhalingsteken
rond de optie).

-finstrument-functions-exclude-function-list=sym,sym, ...
Dit is vergelijkbaar met "-finstrument-functions-exclude-file-list", maar deze optie stelt
de lijst met functienamen die van instrumentatie moeten worden uitgesloten. De functienaam om
overeenkomen 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 is
als een wedstrijd beschouwd. Voor uitgebreide id's van C99 en C++ is de functienaam
moet worden opgegeven 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 specificeren: "no" betekent geen controle, "generic"
betekent het gebruik van ouderwetse controle forceren, "specifiek" betekent de beste controle gebruiken
methode 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.

Merk op dat stapelcontrole in oude stijl ook de fallback-methode is voor "specifiek" indien 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 i386 en x86_64 back-ends 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
"global-dynamic", "local-dynamic", "initial-exec" of "local-exec".

De standaard zonder -fpic is "initial-exec"; met -fpic de standaard is
"globaal-dynamisch".

-fzichtbaarheid=standaard|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 nomenclatuur betekent "standaard" altijd openbaar; dat wil zeggen, beschikbaar om te worden gekoppeld
tegen van buiten het gedeelde object. "beschermd" en "intern" zijn vrij nutteloos
in real-world gebruik, dus de enige andere veelgebruikte optie is "verborgen". De standaard
if -fzichtbaarheid niet is gespecificeerd is "default", dat wil zeggen, maak elk symbool openbaar --- dit
veroorzaakt hetzelfde gedrag als eerdere versies van GCC.

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://people.redhat.com/~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 misschien: #pragma GCC
zichtbaarheid bruikbaar. Dit werkt door u de aangiften die u wilt instellen bij te voegen
zichtbaarheid voor met (bijvoorbeeld) #pragma GCC zichtbaarheid duwen (verborgen) en #pragma GCC
zichtbaarheid knal. 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 gemarkeerd worden als verborgen om PLT indirecte overheadkosten te vermijden --- waardoor dit
overduidelijk helpt ook de leesbaarheid en zelfdocumentatie van de code. Let daar op
vanwege ISO C++ specificatie-eisen, "operator new" en "operator delete" moeten
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. Misschien moet je expliciet zeggen: #pragma GCC
zichtbaarheid duwen (standaard) voordat u dergelijke koppen opneemt.

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

Als het doel strikte uitlijning vereist, en het respecteren van het veldtype zou vereisen:
bij overtreding van deze uitlijning wordt een waarschuwing afgegeven. Als het veld het kenmerk "packed" heeft,
de toegang wordt gedaan zonder het veldtype te respecteren. Als het veld niet heeft
"packed" attribuut, wordt de toegang gedaan met inachtneming van het veldtype. In beide gevallen, GCC
gaat ervan uit dat de gebruiker iets weet over de doelhardware waarvan hij zich niet bewust is.

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 aarch64-linux-gnu-g++-4.8 online met behulp van onworks.net-services


Gratis servers en werkstations

Windows- en Linux-apps downloaden

  • 1
    VBA-M (gearchiveerd - nu op Github)
    VBA-M (gearchiveerd - nu op Github)
    Project is verplaatst naar
    https://github.com/visualboyadvance-m/visualboyadvance-m
    Functies:Cheat creaties opslaan van statenmulti
    systeem, ondersteunt gba, gbc, gb, sgb,
    sgb2Tu...
    VBA-M downloaden (gearchiveerd - nu op Github)
  • 2
    Stacer
    Stacer
    Linux-systeemoptimalisatie en -bewaking
    Github-opslagplaats:
    https://github.com/oguzhaninan/Stacer.
    Doelgroep: eindgebruikers/desktop. Gebruiker
    interface: Qt. Programmeerla...
    Stacer downloaden
  • 3
    oranjevos
    oranjevos
    Vork van TeamWinRecoveryProject (TWRP)
    met veel extra functies, herontwerp
    en meer Kenmerken: Ondersteunt Treble en
    niet-Treble ROM'sUp-to-date Oreo-kernel,
    gebouwd...
    OrangeFox downloaden
  • 4
    itop - ITSM CMDB OpenSource
    itop - ITSM CMDB OpenSource
    IT Operations Portal: een volledig open
    source, ITIL, webgebaseerde service
    managementtool inclusief een volledig
    aanpasbare CMDB, een helpdesksysteem en
    een documentenman...
    Download itop - ITSM CMDB OpenSource
  • 5
    Clementine
    Clementine
    Clementine is een multi-platform muziek
    speler en bibliotheekorganisator geïnspireerd door
    Amarok 1.4. Het heeft een snelle en
    eenvoudig te gebruiken interface, en stelt u in staat om
    zoek en...
    Clementine downloaden
  • 6
    XISMuS
    XISMuS
    LET OP: Cumulatieve update 2.4.3 heeft
    vrijgelaten!! De update werkt voor iedereen
    vorige 2.xx-versie. Als upgraden
    vanaf versie v1.xx, download en
    i ...
    XISMuS downloaden
  • Meer "

Linux-commando's

Ad