AnglaisFrançaisEspagnol

Ad


Icône de favori OnWorks

g++-4.7 - En ligne dans le Cloud

Exécutez g++-4.7 dans le fournisseur d'hébergement gratuit OnWorks sur Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS

Il s'agit de la commande g++-4.7 qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS

PROGRAMME:

Nom


gcc - compilateur C et C++ du projet GNU

SYNOPSIS


gcc [-c|-S|-E] [-std=Standard]
[-g] [-pg] [-Oniveau]
[-Wprévenir...] [-pédant]
[-Idir...] [-Ldir...]
[-Dmacro[=défn]...] [-Umacro]
[-foption...] [-moption-machine...]
[-o fichier de sortie] [@filet] dans le fichier

Seules les options les plus utiles sont répertoriées ici ; voir ci-dessous pour le reste. g ++ accepte
la plupart du temps les mêmes options que gcc.

DESCRIPTION


Lorsque vous invoquez GCC, il effectue normalement le prétraitement, la compilation, l'assemblage et la liaison.
Les "options globales" vous permettent d'arrêter ce processus à une étape intermédiaire. Pour
par exemple, le -c L'option dit de ne pas exécuter l'éditeur de liens. Ensuite, la sortie se compose de l'objet
fichiers générés par l'assembleur.

D'autres options sont transmises à une étape du traitement. Certaines options contrôlent le
préprocesseur et autres le compilateur lui-même. Pourtant, d'autres options contrôlent l'assembleur et
éditeur de liens ; la plupart d'entre eux ne sont pas documentés ici, car vous avez rarement besoin d'en utiliser.

La plupart des options de ligne de commande que vous pouvez utiliser avec GCC sont utiles pour les programmes C ; lorsque
une option n'est utile qu'avec un autre langage (généralement C++), l'explication le dit
explicitement. Si la description d'une option particulière ne mentionne pas de source
langue, vous pouvez utiliser cette option avec toutes les langues prises en charge.

La gcc programme accepte les options et les noms de fichiers comme opérandes. De nombreuses options ont plusieurs
noms de lettres; par conséquent, plusieurs options à une lettre peuvent ne sauraient être regroupés : -dv est très
différent de -d -v.

Vous pouvez mélanger des options et d'autres arguments. Pour la plupart, l'ordre que vous utilisez ne
question. L'ordre est important lorsque vous utilisez plusieurs options du même type ; par exemple, si
tu précise -L plusieurs fois, les répertoires sont recherchés dans l'ordre spécifié. Aussi,
le placement de la -l option est importante.

De nombreuses options ont des noms longs commençant par -f ou avec -W---par exemple,
-fmove-boucle-invariants, -Wformat etc. La plupart d'entre eux ont à la fois des effets positifs et négatifs
formes; la forme négative de -ffou serait -fno-foo. Ce manuel documente un seul des
ces deux formulaires, celui qui n'est pas celui par défaut.

OPTIONS


Option Résumé
Voici un résumé de toutes les options, regroupées par type. Les explications sont ci-dessous
sections.

En Conclusion: Options
-c -S -E -o filet -no-canonique-prefixes -tuyau -pass-codes-de-sortie -x langue -v
-### --Aidez-moi[=classe[...]] --target-aide --version -emballage @filet -fplugin=filet
-fplugin-arg-prénom=arg -fdump-ad-spec[-svelte] -fdump-go-spec=filet

C Langue Options
-ansi -std=Standard -fgnu89-en ligne -aux-infos nom de fichier
-Fallow-fonctions-variadiques-sans-paramètre -fno-asm -fno-intégré -fno-intégré-fonction
-fhosté -fautoportant -fopenmp -extensions-fms -fplan9-extensions -trigraphes
-pas-de-cpp-intégré -traditionnel -traditionnel-cpp -jachère-simple-précision
-fcond-incompatibilité -lin-vector-conversions -fsigned-bitfields -fsigned-char
-champs de bits signés amusants -caractère-funsigned

C + + Langue Options
-fabi-version=n -fno-contrôle-d'accès -fcheck-nouveau -fconserve-espace
-fconstexpr-profondeur=n -fami-injection -fno-elide-constructeurs -fno-enforce-eh-specs
-ffor-portée -fno-pour-portée -fno-gnu-mots-clés -fno-implicite-templates
-fno-implicites-inline-templates -fno-implémenter-en-lignes -extensions-fms
-fno-nonansi-builtins -fnothrow-opt -fno-noms-opérateurs -fno-optionnel-diags
-fpermissif -fno-jolis-modèles -frepo -fno-rtti -statistiques -fttemplate-depth=n
-fno-threadsafe-statics -fusible-cxa-atexit -fno-faible -nostdinc++ -fno-par défaut-en ligne
-fvisibility-inlines-hiden -fvisibilité-ms-compat -Wabi -Wconversion-null
-Wctor-dtor-privacy -Wdelete-non-virtual-dtor -Wrétrécissement -Wnosauf
-Wnon-virtual-dtor -Wororder -Weffc++ -Wstrict-null-sentinelle
-Wno-non-modèle-ami - Fonte de style Wold -Woverloaded-virtuel -Conversions Wno-pmf
-Wsign-promo

Objective-C ainsi que Objective-C ++ Langue Options
-fconstant-string-class=nom du cours -fgnu-runtime -fnext-runtime -fno-nil-recepteurs
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-envoi-direct -fobjc-exceptions
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -freplace-objc-classes -fzero-lien
-gen-decls -Wassign-interception -Wno-protocole -Wsélecteur -Correspondance du sélecteur strict
-Wundeclared-sélecteur

Langue Independent Options
-fmessage-longueur=n -fdiagnostics-show-location=[une fois|chaque ligne]
-fno-diagnostics-show-option

Options
-fsyntaxe-seulement -fmax-erreurs=n -pédant -pédant-erreurs -w -Wextra -Mur
-Adresse -Waggregate-retour -Warray-limites -Wno-attributs
-Wno-builtin-macro-redéfini -Compatible WC++ -Wc++11-compatible -Wcast-aligner -Qualité Wcast
-Wchar-indices -Wclobbé -Commentaire -Wconversion -Wcouverture-inadéquation -Wno-cpp
-Wno-déprécié -Wno-deprecated-déclarations -Wdisabled-optimisation -Wno-div-par-zéro
-Wdouble-promotion -Wempty-corps -Wenum-comparer -Wno-endif-étiquettes -Werreur -Erreur=*
-Wfatal-erreurs -Wfloat-égal -Wformat -Wformat=2 -Wno-format-contient-nul
-Wno-format-extra-arguments -Wformat-non littéral -Wformat-sécurité -Wformat-y2k
-Wframe-plus grand-que=len -Wno-free-non-heap-object -Wjump-manque-init
-Wignored-qualificatifs -Wimplicite -Wimplicit-fonction-déclaration -Wimplicit-int
-Winit-soi -Winline -Wpeut-être-non-initialisé -Wno-int-to-pointer-cast
-Wno-invalid-offsetof -Winvalid-pch -Wplus grand que=len -Wunsafe-loop-optimisations
-Wlogique-op -long-long -Wmain -Wpeut-être-non-initialisé -Wmissing-bracelets
-Wmissing-field-initialiseurs -Wmissing-format-attribut -Wmissing-include-répertoires
-Wno-bavette -Wno-multichar -Wnon nul -Wno-débordement -Cordes Woverlength -Wpacked
-Wpacked-bitfield-compat -Wrembourré -Parenthèses -Format Wpedantic-ms
-Wno-pédant-format-ms -Wpointeur-arith -Wno-pointeur-vers-int-cast -Wredundant-decls
-Type épave -Wpoint-séquence -Wombre -Wsign-comparer -Wsign-conversion
-Wstack-protecteur -Wstack-utilisation=len -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-débordement -Wstrict-overflow=n -Wsuggest-attribut=[pur|const|non-retour]
-Wswitch -Wswitch-par défaut -Wswitch-énumération -Wsync-nand -Wsystem-en-têtes -Wtrampolines
-Wtrigraphes -Wtype-limites -Wundef -Wuninitialisé -Pragmas-inconnus -Wno-pragmas
-Wunsuffixed-float-constantes -Wunutilisé -Wunused-fonction -Étiquette non utilisée
-Wunused-local-typedefs -Wunused-paramètre -Wno-résultat-inutilisé -Wvaleur non utilisée
-Wvariable-inutilisée -Paramètre non utilisé mais défini -Winutilisé-mais-set-variable
-Wvariadique-macros -Wvecteur-fonctionnement-performance -Wvla -Wvolatile-registre-var
-Wwrite-chaînes -Wzéro-comme-constante-de-pointeur-null

C ainsi que Objectif-C-seulement Options
-Wbad-fonction-cast -Wmissing-déclarations -Type de paramètre manquant
-Wmanquant-prototypes -Wnested-externes -Wold-style-déclaration -Wold-style-définition
-Wstrict-prototypes -Wtraditionnel -Wtraditionnel-conversion
-Wdéclaration-après-déclaration -Wpointer-signe

Débogage Options
-dlettres -dumpspecs -benne -version de vidage -fdbg-cnt-liste -fdbg-cnt=contre
liste de valeurs -fdisable-ipa-nom_passe -fdisable-rtl-nom_passe -fdisable-rtl-passe-
prénom=liste-plage -fdisable-tree-nom_passe -fdisable-tree-nom de passe=liste-plage
-fdump-noaddr -fdump-non numéroté -fdump-liens-non numérotés -fdump-unité-de-traduction[-n]
-fdump-classe-hiérarchie[-n] -fdump-ipa-tout -fdump-ipa-cgraph -fdump-ipa-inline
-fdump-passes -fdump-statistiques -fdump-tree-all -FDump-original[-n]
-fdump-tree-optimisé[-n] -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
-fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n]
-fdump-tree-dce[-n] -fdump-tree-gimple[-cru] -fdump-tree-bavette[-n]
-fdump-tree-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-are-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-évier -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-free[-n]
-fdump-tree-vrp[-n] -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n]
-fdump-final-insns=filet -fcompare-debug[=opte] -fcompare-debug-seconde
-felimate-nain2-dups -felimate-unused-debug-types
-felimate-unused-debug-symbols -femit-class-debug-toujours -fendable-genre-pass
-fendable-genre-pass=liste-plage -fdebug-types-section -fmem-rapport -fpre-ipa-mem-rapport
-fpost-ipa-mem-rapport -fprofile-arcs -graine-frandom=un magnifique -fsched-verbeux=n
-fsel-sched-verbeux -fsel-sched-dump-cfg -fsel-sched-pipelining-verbeux -fstack-utilisation
-ftest-couverture -ftime-rapport -fvar-suivi -fvar-suivi-affectations
-fvar-tracking-assignments-toggle -g -gniveau -gtoggle -gcoff -nain-version -ggdb
-commutateurs-grecord-gcc -gno-record-gcc-commutateurs -gstabs -gstabs+ -gstrict-nain
-gno-strict-nain -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
-fno-nain2-cfi-asm -fdebug-prefix-map=et les sites anciens=neufs -femit-struct-debug-baseonly
-femit-struct-debug-réduit -femit-struct-debug-debuged[=liste-spéc] -p -pg
-print-file-name=bibliothèque -print-libgcc-nom-de-fichier -impression-multi-répertoire
-print-multi-lib -print-multi-os-répertoire -print-nom-prog=Danse
-imprimer-recherche-répertoires -Q -print-sysroot -print-sysroot-headers-suffixe -sauve-temps
-save-temps=cwd -Save-Temps = obj -temps[=filet]

Options
-falign-fonctions[=n] -falign-sauts[=n] -falign-étiquettes[=n] -falign-boucles[=n]
-fassociatif-maths -fauto-inc-dec -fbranche-probabilités -fbranch-target-load-optimize
-fbranch-target-load-optimize2 -fbtr-bb-exclusif -fcaller-sauvegarde -fcheck-data-deps
-fcombine-stack-ajustements -fconserve-pile -fcompare-elim -fcprop-registres
-f saut en croix -fcse-suivre-sauts -fcse-skip-blocs -fcx-fortran-règles
-fcx-gamme-limitée -fdata-sections -fdce -fdelayed-branche -fdelete-null-pointer-checks
-fdévirtualiser -fdse -peur-inliner -fipa-sra -des-optimisations-coûteuses
-ffat-lto-objets -ffast-mathématiques -ffinite-mathématiques-seulement -ffloat-store
-fexcès-précision=Catégorie -fforward-propager -ffp-contrat=Catégorie -ffonction-sections
-fgcse -fgcse-après-rechargement -fgcse-las -fgcse-lm -fgraphite-identité -fgcse-sm
-fif-conversion -fif-conversion2 -findirect-inline -finline-fonctions
-finline-fonctions-appelées-une fois -finline-limite=n -finline-petites-fonctions -fipa-cp
-fipa-cp-clone -fipa-matrice-reorg -fipa-pta -fipa-profil -fipa-pure-const
-fipa-référence -fira-algorithme=algorithme -fira-région=région -fira-boucle-pression
-fno-ira-share-save-slots -fno-ira-share-spill-slots -fira-verbeux=n -cinq points
-fkeep-inline-fonctions -fkeep-statique-const -floop-bloc -floop-aplatir
-floop-échange -floop-strip-mine -floop-parallélise-tout -flto
-niveau de compression flto -flto-partition =alg -flto-rapport -fmerge-toutes-constantes
-fmerge-constantes -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-boucle-invariants
garde-boue -fbavette -fbavette -fno-branche-compte-reg -fno-par défaut-en ligne
-fno-différer-pop -fno-fonction-cse -fno-deviner-branche-probabilité -fno-en ligne
-fno-math-errno -fno-judas -fno-judas2 -fno-sched-interbloc -fno-sched-spec
-fno-signé-zéros -fno-toplevel-réorganisation -fno-piégeage-maths
-fno-zero-initialisé-en-bss -fomit-frame-pointeur -foptimize-register-move
-foptimize-frères-soeurs-appels -fpartial-inline -fpeel-boucles -frrédicatif
-fprefetch-boucles-tableaux -fcorrection-de-profil -fprofile-dir=chemin -fprofile-générer
-fprofile-generate=chemin -fprofil-utilisation -fprofile-use=chemin -fprofile-valeurs
-freciprocal-maths Sans -fregmove -frename-registres -freorder-blocs
-freorder-blocs-et-partition -freorder-fonctions -frun-cse-après-boucle
-freschedule-modulo-boucles-programmées -recherche-maths -fsched2-utiliser-superblocs
-fsched-pression -fsched-spec-load -fsched-spec-charge-dangereux
-fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n] -fsched-groupe-heuristique
-fsched-critical-path-heuristique -fsched-spec-insn-heuristique -fsched-rank-heuristique
-fsched-last-insn-heuristique -fsched-dep-count-heuristique -fschedule-insns
-fschedule-insns2 -fsection-ancres -fprogrammation-sélective -fprogrammation-sélective2
-fsel-sched-pipelining -fsel-sched-pipelining-boucles-extérieures -fshrink-wrap
-fsignaling-nans -fconstante-single-précision -fsplit-ivs-dans-unroller
-fsplit-wide-types -fstack-protecteur -fstack-protecteur-tout -fstrict-aliasing
-fstrict-débordement -fthread-sauts -ftraceur -ftree-bit-ccp -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copie-prop
-ftree-copyrename -ftree-dce -ftree-dominator-opt -ftree-dse -ftree-forwprop
-ftree-free -ftree-loop-if-convert -ftree-loop-if-convert-magasins -ftree-loop-im
-ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-boucle-linéaire -ftree-loop-optimiser -ftree-paralléliser-boucles=n
-ftree-pré -ftree-partial-pre -ftree-PTA -ftree-réassoc -ftree-évier -ftree-sra
-ftree-commutateur-conversion -ftree-tail-fusion -ftre-ter -ftree-vect-loop-version
-ftree-vectoriser -ftree-vrp -funit-a-a-time -funroll-toutes-les-boucles -funroll-boucles
-funsafe-loop-optimisations -funsafe-math-optimisations -funswitch-boucles
-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb -fwhole-programme -fwpa
-fusible-ld=Liens -plugin-fuse-linker --param prénom=Plus-value -O -O0 -O1 -O2 -O3 -Tu
-Ofast

Préprocesseur Options
-Aquestion=répondre -UNE-question[=répondre] -C -dD -dI -dM -dN -Dmacro[=défn] -E -H
-idirafter dir -comprendre filet -imacros filet -ipréfixe filet -iavecpréfixe dir
-iavecpréfixeavant dir -isystème dir -imultilib dir -isysroot dir -M -MM -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-extension -frépertoire-de-travail
-remapper -trigraphes -undef -Umacro -Wp,option -Xpréprocesseur option

Assembleur Option
-Washington,option -Xassembleur option

links Options
nom-fichier-objet -lbibliothèque -nostartfiles -nodefaultlibs -nostdlib -tarte -rdynamique -s
-statique -statique-libgcc -statique-libstdc++ -partagé -shared-libgcc -symbolique -T scénario
-Wl,option -Xlinker option -u symbole

Annuaire Options
-Bpréfixe -Idir -iplugindir=dir -Je citedir -Ldir -spécifications=filet -I- --sysroot=dir

Machine Dépendant Options
AAArch64 Options -mbig-endian -mlittle-endian -mgeneral-regs-uniquement -mcmodel=minuscule
-mcmodel=petit -mcmodel=grand -mstrict-aligner -momit-leaf-frame-pointeur
-mno-omettre-leaf-frame-pointer -mtls-dialect=desc -mtls-dialect=traditionnel -mars=prénom
-mcpu=prénom -mtune=prénom

Adapteva Épiphanie Options -mhal-reg-fichier -mprefer-short-insn-regs -mbranche-coût=num
-mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modifier
-mstack-offset=num -mround-plus proche -mlong-appels -mappels courts -mpetit16 -mode-mfp=mode
-mvect-double -max-vect-align=num -msplit-vecmove-tôt -m1reg-reg

BRAS Options -mapcs-frame -mno-apcs-cadre -mabi=prénom -mapcs-pile-vérifier
-mno-apcs-pile-vérifier -mapcs-flotteur -mno-apcs-flotteur -mapcs-réentrant
-mno-apcs-réentrant -msched-prologue -mno-sched-prologue -mlittle-endian -mbig-endian
-mwords-petit-boutiste -mfloat-abi=prénom -mfpe -format-mfp16=prénom -mthumb-interfonctionnement
-mno-pouce-interwork -mcpu=prénom -mars=prénom -mfpu=prénom -mstructure-taille-limite=n
-mabort-on-norturn -mlong-appels -mno-long-appels -msingle-pic-base
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mcirrus-fix-invalid-insns
-mno-cirrus-fix-invalid-insns -mpoke-nom-de-fonction -mpouce -marm -cadre mtpcs
-mtpcs-feuille-cadre -mcaller-super-interfonctionnement -mcalle-super-interworking -mtp=prénom
-mtls-dialecte=dialecte -mword-relocalisations -mfix-cortex-m3-ldrd -accès munaligné
-mnéon-pour-64bits

AVR Options -mmcu=mcu -maccumulate-args -mbranche-coût=sables moins coûteux -mcall-prologues -menthe8
-mno-interruptions -mrelax -mappels courts -mstrict-X -mtiny-pile

Blackfin Options -mcpu=cpu[-sirévision] -msim -momit-leaf-frame-pointeur
-mno-omettre-leaf-frame-pointer -mspecld-anomalie -mno-specld-anomalie -mcsync-anomalie
-mno-csync-anomalie -mlow-64k -mno-low64k -mstack-check-l1 -mi-bibliothèque-partagée
-mno-id-bibliothèque-partagée -mshared-library-id=n -mleaf-id-bibliothèque-partagée
-mno-leaf-id-bibliothèque-partagée -msep-données -mno-sep-données -mlong-appels -mno-long-appels
-mfast-fp -minline-plt -mmulticœur -mcorea -mcoreb -msdram -micplb

C6X Options -mbig-endian -mlittle-endian -mars=cpu -msim -msdata=type-sdata

CRIS Options -mcpu=cpu -mars=cpu -mtune=cpu -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-effets secondaires
-mstack-aligner -mdata-aligner -mconst-aligner -m32 bits -m16 bits -m8 bits
-mno-prologue-épilogue -mno-gotplt -moi -maout -mélinux -mlinux -sim -sim2
-mmul-bug-solution de contournement -mno-mul-bug-solution de contournement

CR16 Options -mmac -mcr16cplus -mcr16c -msim -menthe32 -mbit-ops -mdata-modèle=modèle

Darwin Options -all_load -client_admissible -cambre -arch_errors_fatal -arch_only
-bind_at_load -paquet -chargeur_bundle -Nom du client -compatibilité_version
-version actuelle -bande_morte -fichier-dépendance -dylib_file -dylinker_nom_installation
-dynamique -liblib dynamique -liste_symboles_exportés -liste de fichiers -flat_espace de noms
-force_cpusubtype_ALL -force_flat_espace de noms -headerpad_max_install_names -iframework
-image_base -initialisation -nom_installation -keep_private_externs -multi_module
-multiplier_défini -multiply_defined_inutilisé -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -noprebind
-noseglinkedit -pagezero_size -préfixer -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -sectalign -sectobjectsymboles -pourquoi charger -seg1addr -sectCreate
-sectobjectsymboles -secteur -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -module_single -statique -sous_bibliothèque -sous_parapluie
-twolevel_namespace -parapluie -indéfini -liste_de_symboles_non exportés
-weak_reference_mismatches -ce qui est chargé -F -guidée -gful -mmacosx-version-min=version
-mkernel -mone-octet-bool

DÉC Alpha Options -mno-fp-regs -msoft-float -malpha-comme -mgaz -mieee
-mieee-avec-inexact -miee-conforme -mfp-trap-mode=mode -mfp-arrondi-mode=mode
-mtrap-précision=mode -mbuild-constantes -mcpu=type de processeur -mtune=type de processeur -mbwx -mmax
-mfix -mcix -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-données -mlarge-données
-mpetit-texte -mlarge-texte -mémoire-latence=fiable

DÉC Alpha/VMS Options -mvms-codes-retour -mdebug-main=préfixe -mmalloc64

FR30 Options -mpetit-modèle -mno-lsim

FRV Options -MGPR-32 -MGPR-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdouble -mno-double -mmédia -mno-média
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -multilib-bibliothèque-pic
-mlinked-fp -mlong-appels -malign-étiquettes -mlibrary-pic -macc-4 -macc-8 -mpack
-mno-pack -mno-drapeaux -mcond-move -mno-cond-move -moptimize-membre
-mno-optimize-membre -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-branche
-mno-vliw-branche -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-niché-cond-exec -statistiques-mtomcat -mTLS -mtls -mcpu=cpu

GNU / Linux Options -mglibc -muclibc -mbionique -mandroïde -tno-android-cc -tno-android-ld

H8 / 300 Options -mrelax -mh -SP -mn -menthe32 -malignité-300

HPPA Options -mars=type d'architecture -mbig-commutateur -mdisable-fpregs
-mdisable-indexation -mfast-appels-indirects -mgaz -mgnu-ld -mhp-ld
-mplage-fixe=registre-plage -mjump-in-delay -mlinker-opt -mlong-appels
-mlong-load-store -mno-gros-switch -mno-disable-fpregs -mno-disable-indexation
-mno-fast-appels-indirects -mno-gaz -mno-saut-en-délai -mno-long-load-store
-mno-portable-runtime -mno-soft-float -mno-espace-regs -msoft-float -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -environnement d'exécution portable -mschedule=type de processeur -mspace-regs
-msio -mwsio -munix=unix-std -nolibdld -statique -films

i386 ainsi que x86-64 Options -mtune=type de processeur -mars=type de processeur -mfpmath=unité -masm=dialecte
-mno-fancy-maths-387 -mno-fp-ret-en-387 -msoft-float -mno-large-multiplier -mrtd
-malin-double -mpreferred-stack-limite=num -mincoming-stack-limite=num -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mrecip -mrecip=opter -mvzeropper -mprefer-avx128 -mmmx
-msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -maes -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnow -mpopcnt -mabm -mbmi -vtt -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mthreads -mno-align-stringops -minline-tous les stringops
-minline-stringops-dynamiquement -mstringop-stratégie=alg -mpush-arguments
-maccumulate-arguments-sortants -m128bit-long-double -m96bit-long-double -mregparm=num
-msseregparm -mveclibabi=type -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointeur -mno-zone-rouge -mno-tls-direct-seg-refs -mcmodèle=code-modèle
-mabi=prénom -maddress-mode=mode -m32 -m64 -mx32 -mlarge-data-threshold=num -msse2avx
-mfentry -m8bit-idiv -Mavx256-Split-Unaligned-charge -mavx256-split-magasin-non-aligné

i386 ainsi que x86-64 Windows Options -mconsole -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -mthread -municode -mwin32 -mfenêtres -fno-set-stack-exécutable

IA-64 Options -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregistre-noms -msdata -mno-sdata -mconstant-gp -mauto-pic
-mfused-mad -minline-float-divide-min-latence -minline-float-divide-max-débit
-mno-inline-float-division -minline-int-divide-min-latence
-minline-int-divide-max-débit -mno-inline-int-division -minline-sqrt-min-latence
-minline-sqrt-max-débit -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits
-mplage-fixe=registre-plage -mtls-taille=tls-taille -mtune=type de processeur -milp32 -mlp64
-msched-br-data-spec -msched-ar-data-spec -MSChed-Control-Spec -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-after-chaque-cycle
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-coût-zéro -msched-max-memory-insns-hard-limite
-msched-max-memory-insns=max-insns

IA-64/VMS Options -mvms-codes-retour -mdebug-main=préfixe -mmalloc64

LM32 Options -mbarrel-shift-activé -mdivide-activé -mmultiplier-activé
-msign-extend-activé -muser-activé

M32R / D Options -m32r2 -m32rx -m32r -mdebug -boucles malignes -mno-align-boucles
-taux d'erreur=nombre -mbranche-coût=nombre -mmodèle=code-taille-modèle-type -msdata=données s-
type -mno-flush-func -mflush-func=prénom -mno-flush-trap -mflush-trap=nombre -G num

M32C Options -mcpu=cpu -msim -memregs=nombre

M680x0 Options -mars=arche -mcpu=cpu -mtune=régler -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -champbit -mno-champ de bits -mc68000 -mc68020 -champ de bits -mrtd -mno-rtd
-mdiv -mno-div -mcourt -mno-court -mhard-float -m68881 -msoft-float -mpcrel
-malign-int -mstrict-aligner -msep-données -mno-sep-données -mshared-library-id=n
-mi-bibliothèque-partagée -mno-id-bibliothèque-partagée -mxgot -mno-xgot

MCore Options -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immédiats
-mno-relax-immédiats -mwide-bitfields -mno-wide-bitfields -m4byte-fonctions
-mno-4byte-fonctions -mcallgraph-données -mno-callgraph-données -mslow-octets
-mno-octets lents -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-incrément

Député Options -mabsdiff -centre commercial -moyenne -mbased=n -mbitops -mc=n -mclip
-mconfig=prénom -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-volatil -ml
-mleadz -mm -mminmax -mmult -mno-opt -mrépéter -SP -msaturé -msdram -msim -msimnovec
-mtf -mtiny=n

Microblaze Options -msoft-float -mhard-float -msmall-divise -mcpu=cpu -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-baril-shift -mxl-pattern-comparer -mxl-pile-vérifier
-mxl-gp-opt -mno-clearbss -mxl-multiplier-haut -mxl-float-convert -mxl-float-sqrt
-mode-mxl-modèle d'application

MIPS Options -LA -EB -mars=arche -mtune=arche -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=abi -appels mabicaux -mno-abicales
-mpartagé -mno-partagé -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float -msingle-flotteur -mdouble-flotteur -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -mfpu=type de processeur -msmartmips -mno-smartmips -simple-altéré
-mno-paire-single -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mllsc
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum -mlocal-sdata
-mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt -données-intégrées
-mno-données-intégrées -muninit-const-in-rodata -mno-uninit-const-dans-rodata
-mcode-lisible=mise -msplit-adresses -mno-split-adresses -mexplicit-relocs
-mno-explicite-relocs -mcheck-division-zéro -mno-check-zéro-division -mdivide-pièges
-mdivide-pauses -mmemcpy -mno-memcpy -mlong-appels -mno-long-appels -mmad -mno-fou
-mfused-mad -mno-fusionné-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=fonction -mno-flush-func -mbranche-coût=num -mbranche-probable
-mno-branche-probable -exceptions-mfp -mno-fp-exceptions -mvr4130-aligner -mno-vr4130-aligner
-msynci -mno-synci -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-adresse

MÉLANGE Options -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnou
-mabi=mmixware -mzero-étendre -mknuthdiv -mtoplevel-symboles -moi -mbranche-prédire
-mno-branche-prédire -mbase-adresses -mno-base-adresses -msortie unique
-mno-simple-sortie

MN10300 Options -mmult-bogue -mno-mult-bogue -mno-am33 -maman33 -maman33-2 -maman34 -mtune=CPU-
type -mreturn-pointeur-sur-d0 -mno-crt0 -mrelax -mliw -msetlb

PDP-11 Options -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopie
-mbcopy-intégré -menthe32 -mno-int16 -menthe16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -mbranche-cher -mbranche-pas cher
-munix-asm -mdec-asm

picoChip Options -mae=ae_type -mvliw-lookahead=N -msymbole-comme-adresse
-mno-inefficace-warnings

PowerPC Options Voir Options RS/6000 et PowerPC.

RL78 Options -msim -mmul=aucun -mmul=g13 -mmul=rl78

RS / 6000 ainsi que PowerPC Options -mcpu=type de processeur -mtune=type de processeur -mcmodèle=code-modèle -mpuissance
-mno-puissance -mpower2 -mno-puissance2 -mpowerpc -mpowerpc64 -mno-powerpc -maltivec
-mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt
-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfprnd
-mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
-mnew-mnémonique -mold-mnémonique -mfull-toc -minimal-toc -mno-fp-en-toc
-mno-somme-en-toc -m64 -m32 -mxl-compat -mno-xl-compat -mpe -malign-pouvoir
-malin-naturel -msoft-float -mhard-float -mmultiple -mno-multiple -msingle-flotteur
-mdouble-flotteur -msimple-fpu -mstring -mno-chaîne - mise à jour -mno-mise à jour
-mavoid-indexed-address -mno-éviter-les-adresses-indexées -mfused-mad -mno-fusionné-madd
-mbit-aligner -mno-bit-aligner -mstrict-aligner -mno-strict-aligner -mrelocalisable
-mno-déplaçable -mrelocalisable-lib -mno-librairie-relocalisable -mtoc -mno-toc -petit
-mlittle-endian -mbig -mbig-endian -mdynamic-pas de photo -maltivec -mswdiv
-msingle-pic-base -prioritize-restricted-insns=priorité
-msched-costly-dep=type_de_dépendance -minsert-sched-nops=programme -mcall-sysv
-mcall-netbsd -maix-struct-retour -msvr4-struct-retour -mabi=type abi -msecure-plt
-mbss-plt -mblock-move-inline-limit=num -misel -mno-isel -misel=oui -misel=non -mspe
-mno-spé -mspe=oui -mspe=non -altéré -mgen-cell-microcode -mwarn-cell-microcode
-mvrsave -Mno-Vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=oui
-mfloat-gprs=non -mfloat-gprs=unique -mfloat-gprs=double -mprototype -mno-prototype
-msim -mmvmoi -les fous -moncouteau -membre -msdata -msdata=opter -mvxworks -G num
-pthread -mrecip -mrecip=opter -mno-recette -mrecip-précision -mno-recip-précision
-mveclibabi=type -mfriz -mno-friz -mpointeurs-vers-fonctions-imbriquées
-mno-pointeurs-vers-fonctions-emboîtées -msave-toc-indirect -mno-save-toc-indirect

RX Options -m64bit-double -m32bit-double -fpu -nofpu -mcpu= -mbig-endian-données
-mlittle-endian-données -msmall-données -msim -mno-sim -mas100-syntaxe -mno-as100-syntaxe
-mrelax -mmax-taille-constante= -mint-registre= -mpid -msave-acc-en-interruptions

S / 390 ainsi que zSérie Options -mtune=type de processeur -mars=type de processeur -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-backchain -mpacked-pile -mno-packed-pile -msmall-exec -mno-petit-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-débogage -mesa -mzarch -mtpf-trace
-mno-tpf-trace -mfused-mad -mno-fusionné-madd -mwarn-framesize -mwarn-pile dynamique
-taille-mstack -mstack-garde

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

SH Options -m1 -m2 -m2e -m2a-nofpu -m2a-unique-uniquement -m2a-simple -m2a -m3 -m3e
-m4-nofpu -m4-unique-uniquement -m4-simple -m4 -m4a-nofpu -m4a-unique-uniquement -m4a-simple
-m4a -m4al -m5-64média -m5-64media-nofpu -m5-32média -m5-32media-nofpu -m5-compact
-m5-compact-nofpu -mb -ml -mdalign -mrelax -mbigtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -mieee -mno-ieee -mbitops -miser -minline-ic_invalidate
-mpadstruct -mespace -mpréfergot -musermode -coût multiple=nombre -mdiv=stratégie
-mdivsi3_libfunc=prénom -mplage-fixe=registre-plage -folle-dérouler
-adressage-mindexé -mggettrcost=nombre -mpt-fixe -maccumulate-arguments-sortants
-minvalid-symboles -msoft-atomique -mbranche-coût=num -mcbranchedi -mcmpeqdi -mfused-mad
-mpretend-cmmove

Solaris 2 Options -texte-mimpure -mno-impur-texte -pthreads -pthread

SPARC Options -mcpu=type de processeur -mtune=type de processeur -mcmodèle=code-modèle -memory-model=mem-
modèle -m32 -m64 -mapp-regs -mno-app-regs -structures mfaster -mno-structures plus rapides
-mplat -mno-plat -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-flotteur -mstack-biais -mno-stack-biais -doubles-munalignés
-mno-doubles-non-alignés -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

SPU Options -mwarn-reloc -Merror-Reloc -msafe-dma -munsafe-dma -mbranche-indices
-mpetit-mem -mlarge-mem -mstdmain -mplage-fixe=registre-plage -mea32 -mea64
-maddress-espace-conversion -mno-conversion-espace-adresse -mcache-taille=taille du cache
-matomic-mises à jour -mno-atomic-mises à jour

Système V Options -Qy -Qn -YP,chemins -Ah,dir

TUILE-Gx Options -mcpu=cpu -m32 -m64

TILEPro Options -mcpu=cpu -m32

V850 Options -mlong-appels -mno-long-appels -mep -mno-ep -mprolog-fonction
-mno-prolog-fonction -mespace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-appel -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-MV850 -mbig-commutateur

VAX Options -mg -mgnu -munix

VxWorks Options -mrtp -non statique -Bstatique -Bdynamique -Xbind-paresseux -Xbind-maintenant

x86-64 Options Voir les options i386 et x86-64.

Xstormy16 Options -msim

Xtensa Options -mconst16 -mno-const16 -mfused-mad -mno-fusionné-madd -mforce-pas de photo
-msérialiser-volatile -mno-sérialiser-volatile -mtext-section-littéraux
-mno-texte-section-littéraux -mtarget-aligner -mno-cible-aligner -mlongappels
-mno-longappels

zSérie Options Voir les options S/390 et zSeries.

Code Génération Options
-fcall-sauvé-reg -fcall-utilisé-reg -fixé-reg -fexceptions -fnon-appel-exceptions
-tables-funwind -fasynchrone-unwind-tables -finhibit-taille-directive
-finstrument-fonctions -finstrument-functions-exclude-function-list=sym,sym...
-finstrument-functions-exclude-file-list=filet,filet... -fno-commun -fno-identifiant
-fpcc-struct-retour -fpic -fPIC -fpie -fPIE -fno-jump-tables -frecord-gcc-commutateurs
-freg-struct-retour -fshort-énumérations -fcourt-double -fshort-wchar -fverbeux-asm
-fpack-struct[=n] -fstack-vérifier -fstack-limit-register=reg -fstack-limite-symbole=sym
-fno-stack-limite -fsplit-pile -fagging-underscore -ftls-modèle=modèle -ftrapv
-fwrapv -fbounds-check -fvisibilité -fstrict-volatile-bitfields

Options Contrôle le Genre of Sortie
La compilation peut impliquer jusqu'à quatre étapes : prétraitement, compilation proprement dite, assemblage et
liaison, toujours dans cet ordre. GCC est capable de prétraiter et de compiler plusieurs
fichiers soit dans plusieurs fichiers d'entrée assembleur, soit dans un fichier d'entrée assembleur ; alors
chaque fichier d'entrée assembleur produit un fichier objet, et la liaison combine tous les objets
(ceux nouvellement compilés et ceux spécifiés en entrée) dans un fichier exécutable.

Pour tout fichier d'entrée donné, le suffixe du nom de fichier détermine quel type de compilation est
terminé:

filet.c
Code source C qui doit être prétraité.

filet.i
Code source C qui ne doit pas être prétraité.

filet.ii
Code source C++ qui ne doit pas être prétraité.

filet.m
Code source Objective-C. Notez que vous devez établir un lien avec le libobjc bibliothèque pour faire un
Travail du programme Objective-C.

filet.mi
Code source Objective-C qui ne doit pas être prétraité.

filet.mm
filet.M
Code source Objective-C++. Notez que vous devez établir un lien avec le libobjc bibliothèque à faire
un travail de programme Objective-C++. Noter que .M fait référence à une majuscule littérale M.

filet.mii
Code source Objective-C++ qui ne doit pas être prétraité.

filet.h
Fichier d'en-tête C, C++, Objective-C ou Objective-C++ à transformer en fichier précompilé
en-tête (par défaut) ou fichier d'en-tête C, C++ à transformer en une spécification Ada (via le
-fdump-ad-spec changer).

filet. Cc
filet.cp
filet.cxx
filet.cpp
filet.cpp
filet.c ++
filet.C
Code source C++ qui doit être prétraité. Notez qu'en .cxx, les deux dernières lettres
doit être à la fois littéralement x. Également, .C fait référence à un C majuscule littéral.

filet.mm
filet.M
Code source Objective-C++ qui doit être prétraité.

filet.mii
Code source Objective-C++ qui ne doit pas être prétraité.

filet.HH
filet.H
filet.hp
filet.hxx
filet.hpp
filet.HPP
filet.h++
filet.tcc
Fichier d'en-tête C++ à transformer en en-tête précompilé ou en spécification Ada.

filet.f
filet.pour
filet.ftn
Code source Fortran de forme fixe qui ne doit pas être prétraité.

filet.F
filet.POUR
filet.fpp
filet.FPP
filet.FTN
Code source Fortran de forme fixe qui doit être prétraité (avec le traditionnel
préprocesseur).

filet.f90
filet.f95
filet.f03
filet.f08
Code source Fortran de forme libre qui ne doit pas être prétraité.

filet.F90
filet.F95
filet.F03
filet.F08
Code source Fortran libre qui doit être prétraité (avec le traditionnel
préprocesseur).

filet.aller
Allez le code source.

filet.les publicités
Fichier de code source Ada qui contient une déclaration d'unité de bibliothèque (une déclaration d'un
package, sous-programme ou générique, ou une instanciation générique), ou une unité de bibliothèque
déclaration de changement de nom (une déclaration de changement de nom de package, générique ou sous-programme). Tel
les fichiers sont aussi appelés spécifications.

filet.adb
Fichier de code source Ada contenant un corps d'unité de bibliothèque (un sous-programme ou un corps de package).
De tels fichiers sont également appelés corps.

filet.s
Code assembleur.

filet.S
filet.sx
Code assembleur qui doit être prétraité.

autre
Un fichier objet à alimenter directement dans la liaison. Tout nom de fichier non reconnu
suffixe est traité de cette façon.

Vous pouvez spécifier la langue d'entrée explicitement avec le -x option:

-x langue
Spécifiez explicitement le langue pour les fichiers d'entrée suivants (plutôt que de laisser le
compilateur choisissez une valeur par défaut en fonction du suffixe du nom de fichier). Cette option s'applique à tous
fichiers d'entrée suivants jusqu'au prochain -x option. Valeurs possibles pour langue sont:

c c-header sortie cpp
c++ c++-en-tête c++-cpp-output
objectif-c objectif-c-en-tête objectif-c-cpp-sortie
objectif-c++ objectif-c++-en-tête objectif-c++-cpp-sortie
assembleur assembleur-avec-cpp
ada
f77 f77-cpp-entrée f95 f95-cpp-entrée
go
Java

-x aucun
Désactivez toute spécification d'une langue, afin que les fichiers suivants soient traités
selon leurs suffixes de nom de fichier (comme ils le sont si -x n'a pas été utilisé du tout).

-pass-codes-de-sortie
Normalement, le gcc le programme se terminera avec le code de 1 si n'importe quelle phase du compilateur
renvoie un code de retour d'échec. Si vous spécifiez -pass-codes-de-sortie, gcc Danse
renverra à la place avec l'erreur numériquement la plus élevée produite par toute phase qui a renvoyé
une indication d'erreur. Les interfaces C, C++ et Fortran renvoient 4, si un
une erreur de compilation est rencontrée.

Si vous ne voulez que certaines des étapes de la compilation, vous pouvez utiliser -x (ou suffixes de nom de fichier)
dire gcc par où commencer, et l'une des options -c, -Sou -E dire où gcc est d'
arrêter. Notez que certaines combinaisons (par exemple, -x sortie cpp -E) instruire gcc faire
rien du tout.

-c Compilez ou assemblez les fichiers sources, mais ne créez pas de lien. L'étape de liaison est simplement
pas fini. Le résultat final se présente sous la forme d'un fichier objet pour chaque fichier source.

Par défaut, le nom du fichier objet pour un fichier source est fait en remplaçant le suffixe .c,
.i, .s, etc., avec .o.

Les fichiers d'entrée non reconnus, ne nécessitant pas de compilation ou d'assemblage, sont ignorés.

-S Arrêt après l'étape de compilation proprement dite ; ne pas assembler. La sortie est dans le
forme d'un fichier de code assembleur pour chaque fichier d'entrée non assembleur spécifié.

Par défaut, le nom de fichier assembleur pour un fichier source est fait en remplaçant le suffixe
.c, .i, etc., avec .s.

Les fichiers d'entrée qui ne nécessitent pas de compilation sont ignorés.

-E Arrêt après l'étape de prétraitement ; n'exécutez pas le compilateur correctement. La sortie est en
sous forme de code source prétraité, qui est envoyé à la sortie standard.

Les fichiers d'entrée qui ne nécessitent pas de prétraitement sont ignorés.

-o filet
Placer la sortie dans un fichier filet. Ceci s'applique quel que soit le type de sortie
en cours de production, qu'il s'agisse d'un fichier exécutable, d'un fichier objet, d'un fichier assembleur ou
code C prétraité.

If -o n'est pas spécifié, la valeur par défaut est de mettre un fichier exécutable dans a.out, L'object
fichier pour source.suffixe in source.o, son fichier assembleur dans sources, un précompilé
fichier d'en-tête dans source.suffixe.gch, et toutes les sources C prétraitées sur la sortie standard.

-v Imprimer (sur la sortie d'erreur standard) les commandes exécutées pour exécuter les étapes de
compilation. Imprimez également le numéro de version du programme pilote du compilateur et du
préprocesseur et le compilateur proprement dit.

-###
Comme -v sauf que les commandes ne sont pas exécutées et les arguments sont entre guillemets à moins qu'ils
contenir uniquement des caractères alphanumériques ou "./-_". Ceci est utile pour les scripts shell pour
capturer les lignes de commande générées par le pilote.

-tuyau
Utilisez des tuyaux plutôt que des fichiers temporaires pour la communication entre les différentes étapes de
compilation. Cela ne fonctionne pas sur certains systèmes où l'assembleur est incapable de lire
d'un tuyau; mais l'assembleur GNU n'a aucun problème.

--Aidez-moi
Imprimer (sur la sortie standard) une description des options de ligne de commande comprises par
gcc. Si l' -v l'option est également spécifiée alors --Aidez-moi sera également transmis au
divers processus invoqués par gcc, afin qu'ils puissent afficher les options de la ligne de commande
ils acceptent. Si la -Wextra option a également été spécifiée (avant la --Aidez-moi
option), puis les options de ligne de commande qui ne sont associées à aucune documentation
sera également affiché.

--target-aide
Imprimer (sur la sortie standard) une description des options de ligne de commande spécifiques à la cible
pour chaque outil. Pour certaines cibles, des informations supplémentaires spécifiques à la cible peuvent également être
imprimé.

--aide={classe|[^]qualificatif}[...]
Imprimer (sur la sortie standard) une description des options de ligne de commande comprises par
le compilateur qui s'intègre dans toutes les classes et qualificatifs spécifiés. Voici les
cours pris en charge :

optimiseurs
Cela affichera toutes les options d'optimisation prises en charge par le compilateur.

avertissements
Cela affichera toutes les options contrôlant les messages d'avertissement produits par le
compilateur.

l'objectif
Cela affichera les options spécifiques à la cible. Contrairement au --target-aide option
cependant, les options spécifiques à la cible de l'éditeur de liens et de l'assembleur ne seront pas
affiché. En effet, ces outils ne prennent actuellement pas en charge l'extension
--aide= syntaxe.

params
Cela affichera les valeurs reconnues par le --param option.

langue
Cela affichera les options prises en charge pour langue, Où langue est le nom
de l'une des langues prises en charge dans cette version de GCC.

commun
Cela affichera les options communes à toutes les langues.

Voici les qualificatifs pris en charge :

sans papiers
Affichez uniquement les options qui ne sont pas documentées.

rejoint
Options d'affichage prenant un argument qui apparaît après un signe égal dans le même
texte continu, tel que : --help=cible.

séparé
Options d'affichage prenant un argument qui apparaît comme un mot séparé après le
option d'origine, telles que : -o fichier de sortie.

Ainsi, par exemple, pour afficher tous les commutateurs spécifiques à la cible non documentés pris en charge par
le compilateur peut être utilisé :

--help=cible,sans-papiers

Le sens d'un qualificatif peut être inversé en le préfixant du ^ caractère, donc pour
exemple pour afficher toutes les options d'avertissement binaires (c'est-à-dire celles qui sont activées ou désactivées
et qui ne prennent pas d'argument) qui ont une description, utilisez :

--help=warnings,^rejoint,^sans-papiers

L'argument pour --aide= ne devrait pas consister uniquement en des qualificatifs inversés.

La combinaison de plusieurs classes est possible, bien que cela limite généralement la sortie en
tellement qu'il n'y a rien à afficher. Un cas où cela fonctionne cependant, c'est quand
l'une des classes est l'objectif. Ainsi par exemple pour afficher tous les
les options d'optimisation suivantes peuvent être utilisées :

--help=cible,optimiseurs

La --aide= L'option peut être répétée sur la ligne de commande. Chaque utilisation successive
afficher sa classe d'options demandée, en ignorant celles qui ont déjà été
affiché.

Si la -Q apparaît sur la ligne de commande avant le --aide= option, puis le
texte descriptif affiché par --aide= est changé. Au lieu de décrire l'affichage
options, une indication est donnée pour savoir si l'option est activée, désactivée ou définie
à une valeur spécifique (en supposant que le compilateur le sache au point où le
--aide= option est utilisée).

Voici un exemple tronqué du port ARM de gcc:

% gcc -Q -mabi=2 --help=cible -c
Les options suivantes sont spécifiques à la cible :
-mabi = 2
-mabort-on-noreturn [désactivé]
-mapcs [désactivé]

La sortie est sensible aux effets des options de ligne de commande précédentes, donc pour
exemple, il est possible de savoir quelles optimisations sont activées à -O2 en utilisant:

-Q -O2 --help=optimiseurs

Vous pouvez également découvrir quelles optimisations binaires sont activées par -O3 en utilisant:

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 activé

-no-canonique-prefixes
Ne développez aucun lien symbolique, résolvez les références à /../ or /./, ou faire le chemin
absolue lors de la génération d'un préfixe relatif.

--version
Affiche le numéro de version et les droits d'auteur du GCC invoqué.

-emballage
Appelez toutes les sous-commandes sous un programme wrapper. Le nom du programme wrapper et
ses paramètres sont passés sous forme de liste séparée par des virgules.

gcc -c tc -wrapper gdb,--args

Cela invoquera tous les sous-programmes de gcc sous gdb --args, ainsi l'invocation de cc1
sera gdb --args cc1 .

-fplugin=prénom.so
Charger le code du plugin dans le fichier prénom.donc, supposé être un objet partagé à déployer par
le compilateur. Le nom de base du fichier objet partagé est utilisé pour identifier le plugin
à des fins d'analyse d'arguments (voir -fplugin-arg-prénom-key=Plus-value au dessous de). Chaque
plugin doit définir les fonctions de rappel spécifiées dans l'API des plugins.

-fplugin-arg-prénom-key=Plus-value
Définir un argument appelé key avec une valeur de Plus-value pour le plugin appelé prénom.

-fdump-ad-spec[-svelte]
Pour les fichiers source et include C et C++, générez les spécifications Ada correspondantes.

-fdump-go-spec=filet
Pour les fichiers d'entrée dans n'importe quelle langue, générez les déclarations Go correspondantes dans filet. Ce
génère des déclarations Go "const", "type", "var" et "func" qui peuvent être un moyen utile
pour commencer à écrire une interface Go pour du code écrit dans un autre langage.

@filet
Lire les options de ligne de commande à partir de filet. Les options lues sont insérées à la place des
original @filet option. Si filet n'existe pas ou ne peut pas être lu, l'option
seront traités littéralement et non supprimés.

options dans filet sont séparés par des espaces. Un caractère d'espacement peut être inclus
dans une option en entourant l'option entière de guillemets simples ou doubles. Tout
caractère (y compris une barre oblique inverse) peut être inclus en préfixant le caractère à être
inclus avec une barre oblique inverse. Les filet peut lui-même contenir des @ supplémentairesfilet options; tout
ces options seront traitées de manière récursive.

Compilation C + + Programmes
Les fichiers source C++ utilisent conventionnellement l'un des suffixes .C, . Cc, .cpp, .cpp, .c ++, .cpou
.cxx; Les fichiers d'en-tête C++ utilisent souvent .HH, .hpp, .H, ou (pour le code de modèle partagé) .tccEt
les fichiers C++ prétraités utilisent le suffixe .ii. GCC reconnaît les fichiers avec ces noms et
les compile en tant que programmes C++ même si vous appelez le compilateur de la même manière que pour la compilation
programmes C (généralement avec le nom gcc).

Cependant, l'utilisation de gcc n'ajoute pas la bibliothèque C++. g ++ est un programme qui appelle GCC et
traite .c, .h ainsi que .i fichiers en tant que fichiers source C++ au lieu de fichiers source C à moins que -x is
utilisé et spécifie automatiquement la liaison avec la bibliothèque C++. Ce programme est également
utile lors de la précompilation d'un fichier d'en-tête C avec un .h extension à utiliser dans les compilations C++.
Sur de nombreux systèmes, g ++ est également installé avec le nom c ++.

Lorsque vous compilez des programmes C++, vous pouvez spécifier plusieurs des mêmes options de ligne de commande que
vous utilisez pour compiler des programmes dans n'importe quelle langue ; ou des options de ligne de commande significatives pour C
et langues apparentées; ou des options qui n'ont de sens que pour les programmes C++.

Options Contrôle C Dialecte
Les options suivantes contrôlent le dialecte du C (ou les langages dérivés du C, tels que C++,
Objective-C et Objective-C++) que le compilateur accepte :

-ansi
En mode C, cela équivaut à -std=c90. En mode C++, cela équivaut à
-std = c ++ 98.

Cela désactive certaines fonctionnalités de GCC qui sont incompatibles avec ISO C90 (lorsque
compilation de code C), ou de C++ standard (lors de la compilation de code C++), comme "asm" et
des mots-clés "typeof" et des macros prédéfinies telles que "unix" et "vax" qui identifient le
type de système que vous utilisez. Il permet également l'ISO indésirable et rarement utilisé
fonction trigraphe. Pour le compilateur C, il désactive la reconnaissance du style C++ //
commentaires ainsi que le mot-clé "inline".

Les mots-clés alternatifs "__asm__", "__extension__", "__inline__" et "__typeof__"
continuer à travailler malgré -ansi. Vous ne voudriez pas les utiliser dans un programme ISO C,
bien sûr, mais il est utile de les mettre dans des fichiers d'en-tête qui pourraient être inclus dans
compilations faites avec -ansi. Des macros prédéfinies alternatives telles que "__unix__" et
"__vax__" sont également disponibles, avec ou sans -ansi.

La -ansi L'option ne provoque pas le rejet gratuit des programmes non ISO. Pour
cette, -pédant est requis en plus de -ansi.

La macro "__STRICT_ANSI__" est prédéfinie lorsque le -ansi option est utilisée. Certains en-tête
fichiers peuvent remarquer cette macro et s'abstenir de déclarer certaines fonctions ou de définir
certaines macros que la norme ISO n'appelle pas ; c'est pour éviter d'interférer
avec tous les programmes qui pourraient utiliser ces noms pour d'autres choses.

Fonctions qui seraient normalement intégrées mais n'ont pas de sémantique définie par ISO C
(comme « alloca » et « ffs ») ne sont pas des fonctions intégrées lorsque -ansi est utilisé.

-std=
Déterminer la norme de langue. Cette option n'est actuellement prise en charge que lorsque
compiler du C ou du C++.

Le compilateur peut accepter plusieurs standards de base, tels que c90 or c ++ 98, et les dialectes GNU
de ces normes, telles que gnu90 or gnou++98. En spécifiant une norme de base, le
le compilateur acceptera tous les programmes suivant cette norme et ceux utilisant GNU
extensions qui ne le contredisent pas. Par exemple, -std=c90 éteint certains
fonctionnalités de GCC incompatibles avec ISO C90, telles que "asm" et "typeof"
mots-clés, mais pas d'autres extensions GNU qui n'ont pas de sens dans ISO C90, telles que
en omettant le moyen terme d'une expression « ? : ». D'autre part, en spécifiant un GNU
dialecte d'une norme, toutes les fonctionnalités prises en charge par le compilateur sont activées, même lorsque celles-ci
les fonctionnalités changent la signification de la norme de base et de certains programmes strictement conformes
peut être rejeté. La norme particulière est utilisée par -pédant pour identifier quel
les fonctionnalités sont des extensions GNU étant donné cette version de la norme. Par exemple -std=gnu90
-pédant mettrait en garde contre le style C++ // commentaires, tandis que -std=gnu99 -pédant pourra
pas.

Une valeur pour cette option doit être fournie ; les valeurs possibles sont

c90
c89
iso9899: 1990
Prend en charge tous les programmes ISO C90 (certaines extensions GNU en conflit avec ISO C90
sont désactivés). Pareil que -ansi pour le code C.

iso9899: 199409
ISO C90 telle que modifiée dans l'amendement 1.

c99
c9x
iso9899: 1999
iso9899:199x
ISO C99. Notez que cette norme n'est pas encore entièrement prise en charge ; voir
<http://gcc.gnu.org/gcc-4.7/c99status.html> pour plus d'informations. Les noms c9x
ainsi que iso9899:199x sont obsolètes.

c11
c1x
iso9899: 2011
ISO C11, la révision 2011 de la norme ISO C. Le support est incomplet et
expérimental. Le nom c1x est obsolète.

gnu90
gnu89
Dialecte GNU de l'ISO C90 (y compris certaines fonctionnalités C99). C'est la valeur par défaut pour C
code.

gnu99
gnu9x
Dialecte GNU de l'ISO C99. Lorsque ISO C99 sera pleinement mis en œuvre dans GCC, cela
devenir la valeur par défaut. Le nom gnu9x est obsolète.

gnu11
gnu1x
Dialecte GNU de l'ISO C11. Le support est incomplet et expérimental. Le nom gnu1x
est obsolète.

c ++ 98
La norme ISO C++ 1998 plus ses amendements. Pareil que -ansi pour le code C++.

gnou++98
dialecte GNU de -std = c ++ 98. C'est la valeur par défaut pour le code C++.

c ++ 11
La norme ISO C++ 2011 plus ses amendements. La prise en charge de C++11 est toujours
expérimental, et peut changer de manière incompatible dans les versions futures.

gnou++11
dialecte GNU de -std = c ++ 11. La prise en charge de C++11 est encore expérimentale et peut changer
de manière incompatible dans les versions futures.

-fgnu89-en ligne
L'option -fgnu89-en ligne dit à GCC d'utiliser la sémantique GNU traditionnelle pour "inline"
fonctionne en mode C99.
Cette option est acceptée et ignorée par les versions GCC 4.1.3 jusqu'à mais non compris
4.3. Dans les versions 4.3 et ultérieures de GCC, cela modifie le comportement de GCC en mode C99. À l'aide de
cette option est à peu près équivalente à l'ajout de l'attribut de fonction "gnu_inline" à tous
fonctions en ligne.

L'option -fno-gnu89-en ligne dit explicitement à GCC d'utiliser la sémantique C99 pour
"inline" en mode C99 ou gnu99 (c'est-à-dire qu'il spécifie le comportement par défaut). Cette
L'option a été prise en charge pour la première fois dans GCC 4.3. Cette option n'est pas prise en charge dans -std=c90 or
-std=gnu90 mode.

Les macros de préprocesseur "__GNUC_GNU_INLINE__" et "__GNUC_STDC_INLINE__" peuvent être utilisées
pour vérifier quelle sémantique est en vigueur pour les fonctions "inline".

-aux-infos nom de fichier
Sortie vers le nom de fichier donné des déclarations prototypées pour toutes les fonctions déclarées et/ou
définis dans une unité de traduction, y compris ceux des fichiers d'en-tête. Cette option est
ignoré en silence dans une langue autre que C.

Outre les déclarations, le fichier indique, en commentaires, l'origine de chaque déclaration
(fichier et ligne source), que la déclaration soit implicite, prototypée ou
non prototype (I, N pour le neuf ou O pour vieux, respectivement, dans le premier caractère après
le numéro de ligne et les deux points), et s'il provient d'une déclaration ou d'une définition
(C or F, respectivement, dans le caractère suivant). En cas de fonction
définitions, une liste d'arguments de style K&R suivie de leurs déclarations est également
fourni, à l'intérieur des commentaires, après la déclaration.

-Fallow-fonctions-variadiques-sans-paramètre
Accepte les fonctions variadiques sans paramètres nommés.

Bien qu'il soit possible de définir une telle fonction, cela n'est pas très utile car il est
impossible de lire les arguments. Ceci n'est pris en charge que pour C car cette construction est
autorisé par C++.

-fno-asm
Ne pas reconnaître "asm", "inline" ou "typeof" comme mot-clé, afin que le code puisse les utiliser
mots comme identifiants. Vous pouvez utiliser les mots-clés "__asm__", "__inline__" et
"__typeof__" à la place. -ansi implique -fno-asm.

En C++, ce commutateur n'affecte que le mot-clé "typeof", puisque "asm" et "inline" sont
mots-clés standards. Vous pouvez utiliser le -fno-gnu-mots-clés drapeau à la place, qui a
le même effet. En mode C99 (-std=c99 or -std=gnu99), ce commutateur n'affecte que le
les mots-clés "asm" et "typeof", car "inline" est un mot-clé standard dans ISO C99.

-fno-intégré
-fno-intégré-fonction
Ne pas reconnaître les fonctions intégrées qui ne commencent pas par __construit_ comme préfixe.

GCC génère normalement un code spécial pour gérer certaines fonctions intégrées plus
efficacement ; par exemple, les appels à "alloca" peuvent devenir des instructions simples qui
ajustez la pile directement, et les appels à "memcpy" peuvent devenir des boucles de copie en ligne. Les
le code résultant est souvent à la fois plus petit et plus rapide, mais comme la fonction n'appelle pas
n'apparaissent plus comme tels, vous ne pouvez pas définir de point d'arrêt sur ces appels, ni modifier
le comportement des fonctions en établissant un lien avec une bibliothèque différente. De plus, lorsque
une fonction est reconnue comme une fonction intégrée, GCC peut utiliser des informations à ce sujet
fonction pour avertir des problèmes avec les appels à cette fonction, ou pour générer plus
code efficace, même si le code résultant contient toujours des appels à cette fonction. Pour
exemple, les avertissements sont donnés avec -Wformat pour les mauvais appels à "printf", lorsque "printf" est
intégré, et "strlen" est connu pour ne pas modifier la mémoire globale.

Avec la -fno-intégré-fonction option uniquement la fonction intégrée fonction est désactivé.
fonction ne doit pas commencer par __construit_. Si une fonction est nommée qui n'est pas intégrée
dans cette version de GCC, cette option est ignorée. Il n'y a pas de correspondant
-fintégré-fonction option; si vous souhaitez activer les fonctions intégrées de manière sélective lorsque
en utilisant -fno-intégré or -fautoportant, vous pouvez définir des macros telles que :

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

-fhosté
Affirmez que la compilation a lieu dans un environnement hébergé. Cela implique -fintégré.
Un environnement hébergé est un environnement dans lequel toute la bibliothèque standard est disponible, et dans
dont "main" a un type de retour "int". Les exemples sont presque tout sauf un
noyau. Ceci équivaut à -fno-autoportant.

-fautoportant
Affirmez que la compilation a lieu dans un environnement autonome. Cela implique
-fno-intégré. Un environnement autonome est un environnement dans lequel la bibliothèque standard peut ne pas
existent, et le démarrage du programme peut ne pas être nécessairement sur "principal". L'exemple le plus évident
est un noyau de système d'exploitation. Ceci équivaut à -fno-hébergé.

-fopenmp
Activer la gestion des directives OpenMP "#pragma omp" en C/C++ et "!$omp" en Fortran.
Quand -fopenmp est spécifié, le compilateur génère du code parallèle selon le
Interface de programme d'application OpenMP v3.0http://www.openmp.org/>. Cette option
implique -pthread, et n'est donc pris en charge que sur les cibles qui prennent en charge
-pthread.

-fgnu-tm
Lorsque l'option -fgnu-tm est spécifié, le compilateur générera du code pour Linux
variante du document de spécification ABI de mémoire transactionnelle actuel d'Intel (révision
1.1, 6 mai 2009). Il s'agit d'une fonctionnalité expérimentale dont l'interface peut changer en
futures versions de GCC, au fur et à mesure que la spécification officielle change. Veuillez noter que non
toutes les architectures sont prises en charge pour cette fonctionnalité.

Pour plus d'informations sur la prise en charge par GCC de la mémoire transactionnelle,

Notez que la fonction de mémoire transactionnelle n'est pas prise en charge avec les exceptions de non-appel
(-fnon-appel-exceptions).

-extensions-fms
Acceptez certaines constructions non standard utilisées dans les fichiers d'en-tête Microsoft.

Dans le code C++, cela permet aux noms de membres dans les structures d'être similaires aux types précédents
déclarations.

typedef int UOW ;
structure ABC {
UOW UOW ;
};

Certains cas de champs sans nom dans les structures et les unions ne sont acceptés qu'avec ce
option.

-fplan9-extensions
Acceptez certaines constructions non standard utilisées dans le code Plan 9.

Cela permet -extensions-fms, permet de passer des pointeurs vers des structures anonymes
des champs aux fonctions qui attendent des pointeurs vers des éléments du type du champ, et
permet de faire référence à des champs anonymes déclarés à l'aide d'un typedef. C'est seulement
pris en charge pour C, pas C++.

-trigraphes
Prend en charge les trigraphes ISO C. Les -ansi option (et -std options pour ISO C strict
conformité) implique -trigraphes.

-pas-de-cpp-intégré
Effectue une compilation en deux étapes : prétraitement et compilation. Cette option permet
un utilisateur a fourni "cc1", "cc1plus" ou "cc1obj" via le -B option. L'utilisateur a fourni
l'étape de compilation peut ensuite ajouter une étape de prétraitement supplémentaire après la normale
prétraitement mais avant la compilation. La valeur par défaut est d'utiliser le cpp intégré
(cpp interne)

La sémantique de cette option changera si "cc1", "cc1plus" et "cc1obj" sont fusionnés.

-traditionnel
-traditionnel-cpp
Auparavant, ces options poussaient GCC à tenter d'émuler un compilateur C pré-standard.
Ils ne sont désormais pris en charge qu'avec le -E changer. Le préprocesseur continue de prendre en charge
un mode pré-standard. Voir le manuel GNU CPP pour plus de détails.

-fcond-incompatibilité
Autorisez les expressions conditionnelles avec des types incompatibles dans les deuxième et troisième arguments.
La valeur d'une telle expression est nulle. Cette option n'est pas prise en charge pour C++.

-lin-vector-conversions
Autoriser les conversions implicites entre vecteurs avec des nombres d'éléments différents et/ou
types d'éléments incompatibles. Cette option ne doit pas être utilisée pour le nouveau code.

-caractère-funsigned
Laissez le type "char" être unsigned, comme "unsigned char".

Chaque type de machine a une valeur par défaut pour ce que "char" devrait être. C'est soit comme
"unsigned char" par défaut ou comme "signed char" par défaut.

Idéalement, un programme portable devrait toujours utiliser "signed char" ou "unsigned char" lorsqu'il
dépend de la signature d'un objet. Mais de nombreux programmes ont été écrits pour utiliser
plain "char" et s'attendre à ce qu'il soit signé, ou s'attendre à ce qu'il ne soit pas signé, selon le
machines pour lesquelles ils ont été écrits. Cette option, et son inverse, vous permet de faire un tel
le programme fonctionne avec la valeur par défaut opposée.

Le type "char" est toujours un type distinct de chacun des "signed char" ou "unsigned
char", même si son comportement est toujours identique à l'un de ces deux.

-fsigned-char
Laissez le type "char" être signé, comme "signed char".

Notez que cela équivaut à -fno-caractère non signé, qui est la forme négative de
-caractère-funsigned. De même, l'option -fno-signed-char équivaut à
-caractère-funsigned.

-fsigned-bitfields
-champs de bits signés amusants
-fno-champs-bits signés
-fno-champs-de-bits-non signés
Ces options contrôlent si un champ de bits est signé ou non signé, lorsque la déclaration
n'utilise ni "signé" ni "non signé". Par défaut, un tel champ de bits est signé,
car c'est cohérent : les types entiers de base tels que "int" sont des types signés.

Options Contrôle C + + Dialecte
Cette section décrit les options de ligne de commande qui n'ont de sens que pour les programmes C++ ;
mais vous pouvez également utiliser la plupart des options du compilateur GNU quelle que soit la langue de votre
est dans le programme. Par exemple, vous pouvez compiler un fichier « firstClass.C » comme celui-ci :

g++ -g -frepo -O -c premièreClasse.C

Dans cet exemple, seulement -frepo est une option destinée uniquement aux programmes C++ ; vous pouvez utiliser le
d'autres options avec n'importe quelle langue prise en charge par GCC.

Voici une liste d'options qui sont uniquement pour compiler des programmes C++ :

-fabi-version=n
Utiliser la version n de l'ABI C++. La version 2 est la version de l'ABI C++ qui
est apparu dans G++ 3.4. La version 1 est la version de l'ABI C++ qui est apparue pour la première fois dans
G++ 3.2. La version 0 sera toujours la version la plus conforme au C++
Spécification ABI. Par conséquent, l'ABI obtenu en utilisant la version 0 changera en ABI
les bugs sont corrigés.

La valeur par défaut est la version 2.

La version 3 corrige une erreur dans la transformation d'une adresse constante en argument de modèle.

La version 4, qui est apparue pour la première fois dans G++ 4.5, implémente une modification standard pour le vecteur
les types.

La version 5, qui est apparue pour la première fois dans G++ 4.6, corrige la modification de l'attribut
const/volatile sur les types de pointeur de fonction, decltype d'une simple decl et l'utilisation d'un
paramètre de fonction dans la déclaration d'un autre paramètre.

La version 6, apparue pour la première fois dans G++ 4.7, corrige le comportement de promotion de C++11
énumérations étendues et modification des packs d'arguments de modèle, const/static_cast, préfixe ++
et --, et une fonction de portée de classe utilisée comme argument de modèle.

Voir aussi -Wabi.

-fno-contrôle-d'accès
Désactivez toutes les vérifications d'accès. Ce commutateur est principalement utile pour contourner les bogues dans
le code de contrôle d'accès.

-fcheck-nouveau
Vérifiez que le pointeur renvoyé par "operator new" n'est pas nul avant d'essayer de
modifier le stockage alloué. Cette vérification est normalement inutile car le C++
la norme spécifie que "operator new" ne retournera 0 que s'il est déclaré jeter(),
auquel cas le compilateur vérifiera toujours la valeur de retour même sans cela
option. Dans tous les autres cas, lorsque "operator new" a une exception non vide
spécification, l'épuisement de la mémoire est signalé en lançant "std::bad_alloc". Voir également
neufs (à côté).

-fconserve-espace
Placez les variables globales non initialisées ou initialisées à l'exécution dans le segment commun, comme
C le fait. Cela économise de l'espace dans l'exécutable au prix de ne pas diagnostiquer les doublons
définitions. Si vous compilez avec ce drapeau et que votre programme plante mystérieusement
une fois "main()" terminé, vous pouvez avoir un objet qui est détruit deux fois
parce que deux définitions ont été fusionnées.

Cette option n'est plus utile sur la plupart des cibles, maintenant que le support a été ajouté pour
mettre des variables dans BSS sans les rendre communes.

-fconstexpr-profondeur=n
Définissez la profondeur d'évaluation imbriquée maximale pour les fonctions constexpr C++11 sur n. Une limite
est nécessaire pour détecter une récursivité sans fin lors de l'évaluation de l'expression constante. Les
le minimum spécifié par la norme est de 512.

-fdeduce-init-list
Activer la déduction d'un paramètre de type de modèle en tant que std::initializer_list à partir d'une accolade-
liste d'initialisation incluse, c'est-à-dire

modèle transfert automatique (T t) -> decltype (realfn (t))
{
renvoie realfn (t);
}

vide f()
{
avant({1,2}); // renvoi d'appel >
}

Cette déduction a été mise en œuvre comme une extension possible de la proposition initiale
sémantique pour la norme C++11, mais ne faisait pas partie de la norme finale, il est donc
désactivé par défaut. Cette option est obsolète et peut être supprimée à l'avenir
version G++.

-fami-injection
Injectez des fonctions d'ami dans l'espace de noms englobant, afin qu'elles soient visibles à l'extérieur
la portée de la classe dans laquelle ils sont déclarés. Les fonctions d'ami ont été documentées
pour fonctionner de cette façon dans l'ancien manuel de référence C++ annoté et les versions de G++ antérieures
4.1 a toujours fonctionné de cette façon. Cependant, dans ISO C++, une fonction amie qui n'est pas
déclaré dans une portée englobante ne peut être trouvé qu'à l'aide d'une recherche dépendante de l'argument.
Cette option provoque l'injection d'amis comme ils l'étaient dans les versions précédentes.

Cette option est pour la compatibilité et peut être supprimée dans une future version de G++.

-fno-elide-constructeurs
La norme C++ permet à une implémentation d'omettre de créer un fichier temporaire qui n'est
utilisé pour initialiser un autre objet du même type. La spécification de cette option désactive
cette optimisation et force G++ à appeler le constructeur de copie dans tous les cas.

-fno-enforce-eh-specs
Ne générez pas de code pour vérifier la violation des spécifications d'exception au moment de l'exécution.
Cette option viole la norme C++, mais peut être utile pour réduire la taille du code dans
les versions de production, tout comme la définition NDEBUG. Cela ne donne pas l'autorisation de code d'utilisateur
lancer des exceptions en violation des spécifications d'exception ; le compilateur va
toujours optimiser en fonction des spécifications, donc lancer une exception inattendue
entraîner un comportement indéfini.

-ffor-portée
-fno-pour-portée
If -ffor-portée est spécifié, la portée des variables déclarées dans un instruction-for-init
est limité à la en boucle elle-même, comme spécifié par la norme C++. Si
-fno-pour-portée est spécifié, la portée des variables déclarées dans un instruction-for-init
s'étend jusqu'à la fin de la portée englobante, comme c'était le cas dans les anciennes versions de G++, et
d'autres implémentations (traditionnelles) de C++.

La valeur par défaut si aucun indicateur n'est donné pour suivre la norme, mais pour autoriser et donner un
avertissement pour le code de style ancien qui serait autrement invalide, ou aurait un code différent
comportement.

-fno-gnu-mots-clés
Ne reconnaissez pas "typeof" comme mot-clé, afin que le code puisse utiliser ce mot comme un
identifiant. Vous pouvez utiliser le mot-clé "__typeof__" à la place. -ansi implique
-fno-gnu-mots-clés.

-fno-implicite-templates
N'émettez jamais de code pour les modèles non-inline qui sont instanciés implicitement (c'est-à-dire par
utilisation); émettre uniquement du code pour les instanciations explicites.

-fno-implicites-inline-templates
N'émettez pas non plus de code pour les instanciations implicites de modèles en ligne. Le défaut
est de gérer les inlines différemment afin que les compilations avec et sans optimisation
besoin du même ensemble d'instanciations explicites.

-fno-implémenter-en-lignes
Pour économiser de l'espace, n'émettez pas de copies hors ligne des fonctions en ligne contrôlées par
#pragma la mise en oeuvre. Cela provoquera des erreurs de l'éditeur de liens si ces fonctions ne sont pas
inline partout où ils sont appelés.

-extensions-fms
Désactivez les avertissements pédants sur les constructions utilisées dans MFC, telles que les entiers implicites et
obtenir un pointeur vers une fonction membre via une syntaxe non standard.

-fno-nonansi-builtins
Désactivez les déclarations intégrées de fonctions qui ne sont pas mandatées par ANSI/ISO C. Ces
inclure "ffs", "alloca", "_exit", "index", "bzero", "conjf", et d'autres
fonctions.

-fnothrow-opt
Traiter une spécification d'exception "throw()" comme s'il s'agissait d'une spécification "noexcept"
pour réduire ou éliminer la surcharge de taille de texte par rapport à une fonction sans exception
spécification. Si la fonction a des variables locales de types non triviaux
destructeurs, la spécification d'exception rendra la fonction plus petite
car les nettoyages EH pour ces variables peuvent être optimisés. La sémantique
effet est qu'une exception levée d'une fonction avec une telle exception
spécification entraînera un appel à "terminer" plutôt qu'à "inattendu".

-fno-noms-opérateurs
Ne pas traiter les mots-clés du nom de l'opérateur "and", "bitand", "bitor", "compl", "not", "or"
et "xor" comme synonymes comme mots-clés.

-fno-optionnel-diags
Désactivez les diagnostics que la norme dit qu'un compilateur n'a pas besoin d'émettre.
Actuellement, le seul diagnostic de ce type émis par G++ est celui d'un nom ayant
sens multiples au sein d'une classe.

-fpermissif
Rétrograder certains diagnostics sur le code non conforme des erreurs aux avertissements. Ainsi,
en utilisant -fpermissif permettra à du code non conforme de se compiler.

-fno-jolis-modèles
Lorsqu'un message d'erreur fait référence à une spécialisation d'un modèle de fonction, le compilateur
imprimera normalement la signature du modèle suivie des arguments du modèle
et tout typedefs ou nom de type dans la signature (par exemple "void f(T) [with T = int]" plutôt
que "void f(int)") afin qu'il soit clair quel modèle est impliqué. Lorsqu'une erreur
message fait référence à une spécialisation d'un modèle de classe, le compilateur omettra tout
arguments de modèle qui correspondent aux arguments de modèle par défaut pour ce modèle. Si
l'un ou l'autre de ces comportements rend plus difficile la compréhension du message d'erreur plutôt que
plus facile, en utilisant -fno-jolis-modèles les désactivera.

-frepo
Activez l'instanciation automatique du modèle au moment de la liaison. Cette option implique également
-fno-implicite-templates.

-fno-rtti
Désactiver la génération d'informations sur chaque classe avec des fonctions virtuelles à utiliser par
les fonctionnalités d'identification de type à l'exécution C++ (diffusion_dynamique ainsi que identifiant de type). Si vous ne
utilisez ces parties de la langue, vous pouvez économiser de l'espace en utilisant ce drapeau. Noter
cette gestion des exceptions utilise les mêmes informations, mais elle les générera selon les besoins.
La diffusion_dynamique L'opérateur peut toujours être utilisé pour les conversions qui ne nécessitent pas d'exécution
informations de type, c'est-à-dire converties en "void *" ou en classes de base non ambiguës.

-statistiques
Émettre des statistiques sur le traitement frontal à la fin de la compilation. Cette
les informations ne sont généralement utiles qu'à l'équipe de développement G++.

-fstrict-énumérations
Autoriser le compilateur à optimiser en supposant qu'une valeur de type énuméré
ne peut être qu'une des valeurs de l'énumération (telle que définie dans la norme C++ ;
fondamentalement, une valeur qui peut être représentée dans le nombre minimum de bits nécessaires pour
représentent tous les recenseurs). Cette hypothèse peut ne pas être valide si le programme utilise
un cast pour convertir une valeur entière arbitraire en type énuméré.

-fttemplate-depth=n
Définissez la profondeur d'instanciation maximale pour les classes de modèles à n. Une limite sur le
la profondeur d'instanciation du modèle est nécessaire pour détecter les récursions sans fin pendant le modèle
instanciation de classe. Les programmes conformes à ANSI/ISO C++ ne doivent pas s'appuyer sur un maximum
profondeur supérieure à 17 (modifiée en 1024 en C++11). La valeur par défaut est 900, car le
le compilateur peut manquer d'espace de pile avant d'atteindre 1024 dans certaines situations.

-fno-threadsafe-statics
N'émettez pas le code supplémentaire pour utiliser les routines spécifiées dans l'ABI C++ pour les threads.
initialisation sûre de la statique locale. Vous pouvez utiliser cette option pour réduire la taille du code
légèrement dans le code qui n'a pas besoin d'être thread-safe.

-fusible-cxa-atexit
Enregistrez les destructeurs pour les objets avec une durée de stockage statique avec le "__cxa_atexit"
plutôt que la fonction "atexit". Cette option est requise pour
gestion conforme aux normes des destructeurs statiques, mais ne fonctionnera que si votre C
la bibliothèque prend en charge "__cxa_atexit".

-fno-use-cxa-get-exception-ptr
N'utilisez pas la routine d'exécution "__cxa_get_exception_ptr". Cela provoquera
"std::uncaught_exception" est incorrect, mais est nécessaire si la routine d'exécution est
pas disponible.

-fvisibility-inlines-hiden
Ce commutateur déclare que l'utilisateur ne tente pas de comparer des pointeurs à inline
fonctions ou méthodes où les adresses des deux fonctions ont été prises dans des
objets partagés.

L'effet de ceci est que GCC peut, effectivement, marquer les méthodes en ligne avec
"__attribute__ ((visibilité ("caché")))" afin qu'ils n'apparaissent pas dans l'export
table d'un DSO et ne nécessitent pas d'indirection PLT lorsqu'ils sont utilisés dans le DSO.
L'activation de cette option peut avoir un effet considérable sur les temps de charge et de liaison d'un DSO car il
réduit massivement la taille de la table d'export dynamique lorsque la bibliothèque fait du lourd
utilisation de modèles.

Le comportement de ce commutateur n'est pas tout à fait le même que de marquer les méthodes comme masquées
directement, car cela n'affecte pas les variables statiques locales à la fonction ou cause
au compilateur d'en déduire que la fonction est définie dans un seul objet partagé.

Vous pouvez marquer une méthode comme ayant une visibilité explicitement pour annuler l'effet de la
passer pour cette méthode. Par exemple, si vous voulez comparer des pointeurs à un
méthode en ligne particulière, vous pouvez la marquer comme ayant une visibilité par défaut. Marquage du
la classe englobante avec une visibilité explicite n'aura aucun effet.

Les méthodes en ligne explicitement instanciées ne sont pas affectées par cette option car leur liaison
pourrait autrement traverser une limite de bibliothèque partagée.

-fvisibilité-ms-compat
Cet indicateur tente d'utiliser les paramètres de visibilité pour créer le modèle de liaison C++ de GCC
compatible avec celui de Microsoft Visual Studio.

Le drapeau apporte ces modifications au modèle de liaison de GCC :

1. Il définit la visibilité par défaut sur "caché", comme -fvisibilité=caché.

2. Les types, mais pas leurs membres, ne sont pas masqués par défaut.

3. La règle de définition unique est assouplie pour les types sans visibilité explicite
spécifications qui sont définies dans plus d'un objet partagé différent : ceux
les déclarations sont autorisées si elles auraient été autorisées lorsque cette option a été
non utilisé.

Dans le nouveau code, il est préférable d'utiliser -fvisibilité=caché et exporter les classes qui sont
destiné à être visible de l'extérieur. Malheureusement, il est possible que le code s'appuie,
peut-être accidentellement, sur le comportement de Visual Studio.

Parmi les conséquences de ces changements figurent les données membres statiques du même type
avec le même nom mais défini dans différents objets partagés sera différent, donc
changer l'un ne changera pas l'autre ; et que les pointeurs vers les membres de la fonction définis
dans différents objets partagés peuvent ne pas être comparables. Lorsque ce drapeau est donné, c'est un
violation de l'ODR pour définir différemment les types portant le même nom.

-fno-faible
N'utilisez pas de support de symboles faibles, même s'il est fourni par l'éditeur de liens. Par défaut, G++
utilisera des symboles faibles s'ils sont disponibles. Cette option n'existe que pour les tests, et
ne doit pas être utilisé par les utilisateurs finaux ; cela se traduira par un code inférieur et n'a aucun avantage.
Cette option pourra être supprimée dans une future version de G++.

-nostdinc++
Ne recherchez pas les fichiers d'en-tête dans les répertoires standard spécifiques au C++, mais
recherchez toujours les autres répertoires standard. (Cette option est utilisée lors de la construction du
bibliothèque C++.)

De plus, ces options d'optimisation, d'avertissement et de génération de code n'ont de signification que
pour les programmes C++ :

-fno-par défaut-en ligne
Ne présume pas en ligne pour les fonctions définies à l'intérieur d'une portée de classe.
Notez que ces fonctions auront des liens comme des fonctions en ligne ; ils ne le feront tout simplement pas
être aligné par défaut.

-Wabi (C, Objective-C, C++ et Objective-C++ uniquement)
Avertir lorsque G++ génère du code qui n'est probablement pas compatible avec le fournisseur indépendant
C++ ABI. Bien qu'un effort ait été fait pour avertir de tous ces cas, il existe
probablement certains cas qui ne sont pas prévenus, même si G++ génère
code incompatible. Il peut également y avoir des cas où des avertissements sont émis même si le
le code généré sera compatible.

Vous devez réécrire votre code pour éviter ces avertissements si vous êtes préoccupé par le
fait que le code généré par G++ peut ne pas être compatible binaire avec le code généré par
autres compilateurs.

Les incompatibilités connues dans -fabi-version=2 (par défaut) incluent :

· Un modèle avec un paramètre de modèle non type de type référence est mutilé
incorrectement:

int externe N;
modèle struct S {};
vide n (S ) {2}

Ceci est corrigé dans -fabi-version=3.

· Les types de vecteurs SIMD déclarés à l'aide de "__attribute ((vector_size))" sont mutilés dans un
manière non standard qui ne permet pas de surcharger les fonctions prenant des vecteurs
de différentes tailles.

La mutilation est changée en -fabi-version=4.

Les incompatibilités connues dans -fabi-version=1 consistent à

· Manipulation incorrecte du bourrage de queue pour les champs de bits. G++ peut tenter de compresser des données
dans le même octet qu'une classe de base. Par exemple:

struct A { virtual void f(); entier f1 : 1 ; } ;
struct B : public A { int f2 : 1; } ;

Dans ce cas, G++ placera "B::f2" dans le même octet que "A::f1" ; autres compilateurs
Ne fera pas. Vous pouvez éviter ce problème en remplissant explicitement "A" afin que sa taille
est un multiple de la taille de l'octet sur votre plate-forme ; qui causera G++ et d'autres
compilateurs à la mise en page "B" de manière identique.

· Manipulation incorrecte du tail-padding pour les bases virtuelles. G++ n'utilise pas de queue
remplissage lors de la mise en place des bases virtuelles. Par exemple:

struct A { virtual void f(); caractère c1 ; } ;
struct B { B(); caractère c2 ; } ;
struct C : public A, public virtuel B {};

Dans ce cas, G++ ne placera pas « B » dans le remplissage de queue pour « A » ; autre
les compilateurs le feront. Vous pouvez éviter ce problème en remplissant explicitement "A" afin que son
size est un multiple de son alignement (ignorant les classes de base virtuelles) ; ça va
faire en sorte que G++ et d'autres compilateurs mettent en page "C" de manière identique.

· Manipulation incorrecte des champs de bits avec des largeurs déclarées supérieures à celle de leur
types sous-jacents, lorsque les champs de bits apparaissent dans une union. Par exemple:

union U { int i : 4096; } ;

En supposant qu'un "int" n'a pas 4096 bits, G++ rendra l'union trop petite
par le nombre de bits dans un "int".

· Les classes vides peuvent être placées à des décalages incorrects. Par exemple:

structure A {} ;

structure B {
Un un ;
vide virtuel f ();
};

structure C : public B, public A {} ;

G++ placera la classe de base "A" de "C" à un décalage différent de zéro ; il doit être placé
au décalage zéro. G++ croit à tort que le membre de données « A » de « B » est
déjà au décalage zéro.

· Noms des fonctions de modèle dont les types impliquent "typename" ou modèle de modèle
les paramètres peuvent être mal modifiés.

modèle
void f (nom de type Q :: X) {}

modèle classe Q>
void f(typename Q ::X) {}

Les instanciations de ces modèles peuvent être malmenées.

Il avertit également des changements liés à psABI. Les changements connus de psABI à ce stade incluent :

· Pour SYSV/x86-64, lors du passage de l'union avec un double long, il est modifié pour passer en
mémoire comme spécifié dans psABI. Par exemple:

syndicat U {
long double ld ;
int i;
};

"union U" sera toujours passé en mémoire.

-Wctor-dtor-privacy (C++ et Objective-C++ uniquement)
Avertir lorsqu'une classe semble inutilisable car tous les constructeurs ou destructeurs de cette
class sont privées et n'ont ni amis ni fonctions membres statiques publiques.

-Wdelete-non-virtual-dtor (C++ et Objective-C++ uniquement)
Avertir quand effacer est utilisé pour détruire une instance d'une classe qui a des fonctions virtuelles
et destructeur non virtuel. Il est dangereux de supprimer une instance d'une classe dérivée
via un pointeur vers une classe de base si la classe de base n'a pas de
destructeur. Cet avertissement est activé par -Mur.

-Wrétrécissement (C++ et Objective-C++ uniquement)
Avertir lorsqu'une conversion restrictive interdite par C++11 se produit dans { }, par exemple

entier i = { 2.2 } ; // erreur : rétrécissement de double à int

Ce drapeau est inclus dans -Mur ainsi que -Wc++11-compatible.

Avec -std=c++11, -Wno-rétrécissement supprime le diagnostic exigé par la norme.
Notez que cela n'affecte pas la signification du code bien formé ; réduire les conversions
sont encore considérés comme mal formés dans le contexte du SFINAE.

-Wnosauf (C++ et Objective-C++ uniquement)
Avertir lorsqu'une expression noexcept est évaluée à false en raison d'un appel à une fonction
qui n'a pas de spécification d'exception de non-lancement (c'est-à-dire jeter() or nonsauf)
mais le compilateur sait qu'il ne lève jamais d'exception.

-Wnon-virtual-dtor (C++ et Objective-C++ uniquement)
Avertir lorsqu'une classe a des fonctions virtuelles et un destructeur non virtuel accessible, dans
auquel cas il serait possible mais dangereux de supprimer une instance d'une classe dérivée
via un pointeur vers la classe de base. Cet avertissement est également activé si -Weffc++ is
spécifié.

-Wororder (C++ et Objective-C++ uniquement)
Avertir lorsque l'ordre des initialiseurs de membres donné dans le code ne correspond pas à l'ordre
dans lequel ils doivent être exécutés. Par exemple:

structure A {
int i;
entier j;
A() : j (0), je (1) { }
};

Le compilateur réorganisera les initialiseurs de membres pour i ainsi que j pour correspondre au
ordre de déclaration des membres, émettant un avertissement à cet effet. Cet avertissement est
activé par -Mur.

-W... les options ne sont pas affectées par -Mur.

-Weffc++ (C++ et Objective-C++ uniquement)
Avertir des violations des directives de style suivantes de Scott Meyers Efficace
C ++, Deuxièmement Édition livre:

· Item 11 : Définir un constructeur de copie et un opérateur d'affectation pour les classes avec
mémoire allouée dynamiquement.

· Item 12 : Préférer l'initialisation à l'affectation dans les constructeurs.

· Item 14 : Rendre les destructeurs virtuels dans les classes de base.

· Item 15 : Demandez à "operator=" de renvoyer une référence à *this.

· Item 23 : N'essayez pas de retourner une référence lorsque vous devez retourner un objet.

Avertissez également des violations des directives de style suivantes de Scott Meyers Plus
Efficace C + + livre:

· Item 6 : Distinguer les formes préfixe et suffixe d'incrément et de décrément
des opérateurs.

· Rubrique 7 : Ne surchargez jamais "&&", "||" ou ",".

Lorsque vous sélectionnez cette option, sachez que les en-têtes de bibliothèque standard n'obéissent pas à tous
de ces lignes directrices ; utilisation grep -v pour filtrer ces avertissements.

-Wstrict-null-sentinelle (C++ et Objective-C++ uniquement)
Avertir également de l'utilisation d'un "NULL" non converti comme sentinelle. Lors de la compilation uniquement avec
GCC c'est une sentinelle valide, car "NULL" est défini sur "__null". Bien que ce soit un nul
pointeur constant n'est pas un pointeur nul, il est garanti qu'il est de la même taille qu'un
aiguille. Mais cette utilisation n'est pas portable sur différents compilateurs.

-Wno-non-modèle-ami (C++ et Objective-C++ uniquement)
Désactivez les avertissements lorsque des fonctions d'ami non modélisées sont déclarées dans un modèle.
Depuis l'avènement de la prise en charge de la spécification explicite des modèles dans G++, si le nom du
ami est un identifiant non qualifié (c'est-à-dire, Ami foo (entier)), la spécification du langage C++
exige que l'ami déclare ou définisse une fonction ordinaire non modèle. (Section
14.5.3). Avant que G++ n'implémente la spécification explicite, les identifiants non qualifiés pouvaient être
interprétée comme une spécialisation particulière d'une fonction modélisée. Car ce
le comportement non conforme n'est plus le comportement par défaut pour G++,
-Wnon-modèle-ami permet au compilateur de vérifier le code existant pour des problèmes potentiels
spots et est activé par défaut. Ce nouveau comportement du compilateur peut être désactivé avec
-Wno-non-modèle-ami, qui conserve le code du compilateur conforme mais désactive le
avertissement utile.

- Fonte de style Wold (C++ et Objective-C++ uniquement)
Avertir si un transtypage de style ancien (style C) en un type non vide est utilisé dans un programme C++.
Les moulages de style nouveau (diffusion_dynamique, statique_cast, reinterpret_castet const_cast) sont
moins vulnérables aux effets indésirables et beaucoup plus faciles à rechercher.

-Woverloaded-virtuel (C++ et Objective-C++ uniquement)
Avertir lorsqu'une déclaration de fonction masque les fonctions virtuelles d'une classe de base. Pour
exemple, dans :

structure A {
vide virtuel f();
};

structure B : public A {
vide f(entier);
};

la version de classe "A" de "f" est cachée dans "B", et un code comme :

B*b;
b->f();

échouera à compiler.

-Conversions Wno-pmf (C++ et Objective-C++ uniquement)
Désactiver le diagnostic pour convertir un pointeur lié en fonction membre en un simple
aiguille.

-Wsign-promo (C++ et Objective-C++ uniquement)
Avertir lorsque la résolution de surcharge choisit une promotion de type non signé ou énuméré à
un type signé, sur une conversion en un type non signé de la même taille. Précédent
les versions de G++ essaieraient de préserver l'absence de signature, mais la norme impose le
comportement actuel.

structure A {
opérateur entier ();
Opérateur A& = (int);
};

principale ()
{
A a, b;
a = b;
}

Dans cet exemple, G++ synthétisera une valeur par défaut A& opérateur = (const UNE&);, tandis que cfront
utilisera le défini par l'utilisateur opérateur =.

Options Contrôle Objective-C ainsi que Objective-C ++ Dialectes
(REMARQUE : ce manuel ne décrit pas les langages Objective-C et Objective-C++
se.

Cette section décrit les options de ligne de commande qui n'ont de sens que pour Objective-C
et Objective-C++, mais vous pouvez également utiliser la plupart des programmes GNU indépendants du langage
options du compilateur. Par exemple, vous pouvez compiler un fichier "some_class.m" comme ceci :

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

Dans cet exemple, -fgnu-runtime est une option destinée uniquement à Objective-C et Objective-C++
programmes; vous pouvez utiliser les autres options avec n'importe quelle langue prise en charge par GCC.

Notez que puisque Objective-C est une extension du langage C, les compilations Objective-C
peut également utiliser des options spécifiques au front-end C (par exemple, -Wtraditionnel). De même,
Les compilations Objective-C++ peuvent utiliser des options spécifiques au C++ (par exemple, -Wabi).

Voici une liste d'options qui sont uniquement pour compiler Objective-C et Objective-C++
programmes:

-fconstant-string-class=nom du cours
Utilisez nom du cours comme nom de la classe à instancier pour chaque chaîne littérale
spécifié avec la syntaxe "@"..."". Le nom de classe par défaut est "NXConstantString" si
le runtime GNU est utilisé, et "NSConstantString" si le runtime NeXT est en cours
utilisé (voir ci-dessous). Les -fconstant-cfstrings l'option, si elle est également présente, remplacera la
-fclasse-chaîne-fconstante paramètre et faire en sorte que les littéraux "@"..."" soient définis comme constants
Chaînes CoreFoundation.

-fgnu-runtime
Générez du code objet compatible avec le runtime GNU Objective-C standard. C'est
la valeur par défaut pour la plupart des types de systèmes.

-fnext-runtime
Générez une sortie compatible avec le runtime NeXT. C'est la valeur par défaut pour NeXT
systèmes, y compris Darwin et Mac OS X. La macro "__NEXT_RUNTIME__" est prédéfinie si
(et seulement si) cette option est utilisée.

-fno-nil-recepteurs
Supposons que tous les messages Objective-C sont envoyés ("[receiver message:arg]") dans ce
unité de traduction s'assurer que le récepteur n'est pas "nil". Cela permet plus
points d'entrée efficaces dans le runtime à utiliser. Cette option n'est disponible que dans
en conjonction avec le runtime NeXT et ABI version 0 ou 1.

-fobjc-abi-version=n
Utiliser la version n de l'ABI Objective-C pour l'environnement d'exécution sélectionné. Cette option est
actuellement pris en charge uniquement pour l'environnement d'exécution NeXT. Dans ce cas, la version 0 est la
ABI traditionnelle (32 bits) sans prise en charge des propriétés et autres Objective-C 2.0
ajouts. La version 1 est l'ABI traditionnelle (32 bits) avec prise en charge des propriétés et
d'autres ajouts à Objective-C 2.0. La version 2 est l'ABI moderne (64 bits). Si rien n'est
spécifié, la valeur par défaut est la version 0 sur les machines cibles 32 bits et la version 2 sur les ordinateurs 64 bits
machines cibles.

-fobjc-call-cxx-cdtors
Pour chaque classe Objective-C, vérifiez si l'une de ses variables d'instance est un objet C++
avec un constructeur par défaut non trivial. Si c'est le cas, synthétisez un "- (id) spécial
.cxx_construct" méthode d'instance qui exécutera des constructeurs par défaut non triviaux sur n'importe quel
ces variables d'instance, dans l'ordre, puis renvoient "self". De même, vérifiez s'il y a
La variable d'instance est un objet C++ avec un destructeur non trivial, et si c'est le cas, synthétisez
une méthode spéciale "- (void) .cxx_destruct" qui exécutera tous ces destructeurs par défaut,
dans le sens inverse.

Les méthodes "- (id) .cxx_construct" et "- (void) .cxx_destruct" ainsi générées seront
n'opérer que sur les variables d'instance déclarées dans la classe Objective-C courante, et non
ceux hérités des superclasses. Il est de la responsabilité de l'Objectif-C
runtime pour appeler toutes ces méthodes dans la hiérarchie d'héritage d'un objet. L identité)
Les méthodes .cxx_construct" seront invoquées par le runtime immédiatement après un nouvel objet
l'instance est allouée ; les méthodes "- (void) .cxx_destruct" seront invoquées
juste avant que le runtime ne désalloue une instance d'objet.

Au moment d'écrire ces lignes, seul l'environnement d'exécution NeXT sur Mac OS X 10.4 et versions ultérieures prend en charge
en invoquant les méthodes "- (id) .cxx_construct" et "- (void) .cxx_destruct".

-fobjc-envoi-direct
Autorisez les sauts rapides vers le répartiteur de messages. Sur Darwin, cela se fait via le
page de communication.

-fobjc-exceptions
Activer la prise en charge syntaxique pour la gestion structurée des exceptions en Objective-C, similaire à
ce qui est offert par C++ et Java. Cette option est requise pour utiliser l'Objective-C
mots-clés @try, @throw, @catch, @finally et @synchronized. Cette option est disponible
avec le runtime GNU et le runtime NeXT (mais non disponible avec
le runtime NeXT sur Mac OS X 10.2 et versions antérieures).

-fobjc-gc
Activez le ramasse-miettes (GC) dans les programmes Objective-C et Objective-C++. Cette option
n'est disponible qu'avec l'environnement d'exécution NeXT ; le runtime GNU a une poubelle différente
implémentation de collection qui ne nécessite pas d'indicateurs de compilateur spéciaux.

-fobjc-nilcheck
Pour l'environnement d'exécution NeXT avec la version 2 de l'ABI, recherchez un récepteur nil dans la méthode
avant d'effectuer l'appel de méthode proprement dit. C'est la valeur par défaut et peut être
désactivé à l'aide -fno-objc-nilcheck. Les méthodes de classe et les super appels ne sont jamais vérifiés
pour nil de cette manière, quelle que soit la valeur de cet indicateur. Actuellement, ce drapeau fait
rien lorsque le runtime GNU, ou une ancienne version de l'ABI runtime NeXT, est utilisé.

-fobjc-std=objc1
Conforme à la syntaxe du langage Objective-C 1.0, le langage reconnu par GCC 4.0.
Cela n'affecte que les ajouts Objective-C au langage C/C++ ; cela n'affecte pas
conformité aux normes C/C++, qui est contrôlée par le dialecte C/C++ séparé
drapeaux d'options. Lorsque cette option est utilisée avec Objective-C ou Objective-C++
compilateur, toute syntaxe Objective-C non reconnue par GCC 4.0 est rejetée. Cette
est utile si vous devez vous assurer que votre code Objective-C peut être compilé avec
anciennes versions de GCC.

-freplace-objc-classes
Émettre un marqueur spécial en instruisant ld(1) ne pas lier statiquement dans l'objet résultant
fichier et autoriser dyld(1) pour le charger au moment de l'exécution à la place. Ceci est utilisé dans
en conjonction avec le mode de débogage Fix-and-Continue, où le fichier objet dans
la question peut être recompilée et rechargée dynamiquement au cours du programme
l'exécution, sans qu'il soit nécessaire de redémarrer le programme lui-même. Actuellement, Fix-and-
La fonctionnalité Continuer n'est disponible qu'avec l'environnement d'exécution NeXT sur Mac
OS X 10.3 et versions ultérieures.

-fzero-lien
Lors de la compilation pour le runtime NeXT, le compilateur remplace généralement les appels à
"objc_getClass("...")" (lorsque le nom de la classe est connu à la compilation) avec
références de classe statiques qui sont initialisées au moment du chargement, ce qui améliore l'exécution
performance. Spécification du -fzero-lien flag supprime ce comportement et provoque
appels à "objc_getClass("...")" à retenir. Ceci est utile dans Zero-Link
mode de débogage, car il permet de modifier les implémentations de classes individuelles
pendant l'exécution du programme. Le runtime GNU conserve actuellement toujours les appels à
"objc_get_class("...")" quelles que soient les options de la ligne de commande.

-gen-decls
Dump des déclarations d'interface pour toutes les classes vues dans le fichier source dans un fichier nommé
nomsource.decl.

-Wassign-interception (Objective-C et Objective-C++ uniquement)
Avertir chaque fois qu'une affectation Objective-C est interceptée par le ramasse-miettes.

-Wno-protocole (Objective-C et Objective-C++ uniquement)
Si une classe est déclarée pour implémenter un protocole, un avertissement est émis pour chaque méthode
dans le protocole qui n'est pas implémenté par la classe. Le comportement par défaut est de
émettre un avertissement pour chaque méthode non explicitement implémentée dans la classe, même si un
l'implémentation de la méthode est héritée de la superclasse. Si vous utilisez le -Wno-protocole
option, alors les méthodes héritées de la superclasse sont considérées comme implémentées,
et aucun avertissement n'est émis pour eux.

-Wsélecteur (Objective-C et Objective-C++ uniquement)
Avertir si plusieurs méthodes de types différents pour le même sélecteur sont trouvées pendant
compilation. Le contrôle est effectué sur la liste des méthodes en phase finale de
compilation. De plus, une vérification est effectuée pour chaque sélecteur apparaissant dans un
expression "@selector(...)", et une méthode correspondante pour ce sélecteur a été
trouvé lors de la compilation. Parce que ces contrôles analysent la table des méthodes uniquement à la fin
de compilation, ces avertissements ne sont pas produits si l'étape finale de compilation est
pas atteint, par exemple parce qu'une erreur est détectée lors de la compilation, ou parce que le
-fsyntaxe-seulement l'option est utilisée.

-Correspondance du sélecteur strict (Objective-C et Objective-C++ uniquement)
Avertir si plusieurs méthodes avec des arguments et/ou des types de retour différents sont trouvées pour un
sélecteur donné lors de la tentative d'envoi d'un message à l'aide de ce sélecteur à un destinataire de
tapez « id » ou « Classe ». Lorsque cet indicateur est désactivé (ce qui est le comportement par défaut), le
le compilateur omettra ces avertissements si les différences trouvées sont confinées aux types qui
partagent la même taille et le même alignement.

-Wundeclared-sélecteur (Objective-C et Objective-C++ uniquement)
Avertir si une expression "@selector(...)" faisant référence à un sélecteur non déclaré est trouvée. UNE
le sélecteur est considéré comme non déclaré si aucune méthode portant ce nom n'a été déclarée auparavant
l'expression "@selector(...)", soit explicitement dans une @interface ou @protocol
déclaration, ou implicitement dans une section @implementation. Cette option exécute toujours
ses vérifications dès qu'une expression "@selector(...)" est trouvée, tandis que -Wsélecteur uniquement
effectue ses vérifications en phase finale de compilation. Cela renforce également le codage
convention de style selon laquelle les méthodes et les sélecteurs doivent être déclarés avant d'être utilisés.

-print-objc-runtime-info
Générez un en-tête C décrivant la plus grande structure transmise par valeur, le cas échéant.

Options à Control Diagnostique Mes Messages formatage
Traditionnellement, les messages de diagnostic ont été formatés indépendamment du périphérique de sortie
aspect (ex. sa largeur, ...). Les options décrites ci-dessous peuvent être utilisées pour contrôler le
algorithme de formatage des messages de diagnostic, par exemple combien de caractères par ligne, à quelle fréquence
les informations sur l'emplacement de la source doivent être signalées. À l'heure actuelle, seul le frontal C++ peut
honorer ces options. Cependant, on s'attend, dans un avenir proche, à ce que le front restant
les extrémités seraient capables de les digérer correctement.

-fmessage-longueur=n
Essayez de formater les messages d'erreur afin qu'ils tiennent sur des lignes d'environ n personnages. le
la valeur par défaut est de 72 caractères pour g ++ et 0 pour le reste des extrémités avant supportées par
CCG. Si n est égal à zéro, alors aucun retour à la ligne ne sera effectué ; chaque message d'erreur apparaîtra
sur une seule ligne.

-fdiagnostics-show-location=une fois
Significatif uniquement en mode de retour à la ligne. Demande au rapporteur des messages de diagnostic de
émettre une fois informations sur l'emplacement de la source ; c'est-à-dire, au cas où le message est trop long pour tenir
sur une seule ligne physique et doit être encapsulé, l'emplacement source ne sera pas émis
(comme préfixe) encore et encore, dans les lignes de continuation suivantes. C'est le
comportement par défaut.

-fdiagnostics-show-location=chaque ligne
Significatif uniquement en mode de retour à la ligne. Demande au rapporteur des messages de diagnostic de
émettre les mêmes informations de localisation source (comme préfixe) pour les lignes physiques qui en résultent
du processus de rupture d'un message trop long pour tenir sur une seule ligne.

-fno-diagnostics-show-option
Par défaut, chaque diagnostic émis comprend un texte indiquant l'option de ligne de commande
qui contrôle directement le diagnostic (si une telle option est connue du diagnostic
machinerie). Spécification du -fno-diagnostics-show-option drapeau supprime que
comportement.

Options à Demande or Supprimer Avertissements
Les avertissements sont des messages de diagnostic qui signalent des constructions qui ne sont pas intrinsèquement
erronées mais qui sont risquées ou suggèrent qu'il peut y avoir eu une erreur.

Les options suivantes, indépendantes de la langue, n'activent pas d'avertissements spécifiques mais contrôlent la
types de diagnostics produits par GCC.

-fsyntaxe-seulement
Vérifiez le code pour les erreurs de syntaxe, mais ne faites rien au-delà.

-fmax-erreurs=n
Limite le nombre maximum de messages d'erreur à n, à quel point GCC renfloue plutôt
que d'essayer de continuer à traiter le code source. Si n est 0 (la valeur par défaut),
il n'y a pas de limite sur le nombre de messages d'erreur produits. Si -Wfatal-erreurs est également
spécifié, alors -Wfatal-erreurs prime sur cette option.

-w Inhiber tous les messages d'avertissement.

-Werreur
Transformez tous les avertissements en erreurs.

-Werreur=
Transformez l'avertissement spécifié en erreur. Le spécificateur d'un avertissement est ajouté,
par exemple -Werror=commutateur transforme les avertissements contrôlés par -Wswitch en erreurs.
Ce commutateur prend une forme négative, à utiliser pour annuler -Werreur pour les avertissements spécifiques,
par exemple -Wno-error=commutateur fait -Wswitch les avertissements ne sont pas des erreurs, même lorsque -Werreur
est en vigueur.

Le message d'avertissement pour chaque avertissement contrôlable comprend l'option qui contrôle
l'avertissement. Cette option peut ensuite être utilisée avec -Werreur= ainsi que -Wno-erreur= comme décrit
dessus. (L'impression de l'option dans le message d'avertissement peut être désactivée à l'aide de la
-fno-diagnostics-show-option drapeau.)

Notez qu'en spécifiant -Werreur=foo implique automatiquement -Wfoo. Toutefois, -Wno-erreur=foo
n'implique rien.

-Wfatal-erreurs
Cette option provoque l'abandon de la compilation par le compilateur à la première erreur survenue
plutôt que d'essayer de continuer et d'imprimer d'autres messages d'erreur.

Vous pouvez demander de nombreux avertissements spécifiques avec des options commençant -W, Par exemple -Wimplicite
pour demander des avertissements sur les déclarations implicites. Chacune de ces options d'avertissement spécifiques a également
a une forme négative commençant -Wnon- pour désactiver les avertissements ; par exemple, -Wno-implicite.
Ce manuel ne répertorie qu'un seul des deux formulaires, celui qui n'est pas celui par défaut. Pour de plus amples,
les options spécifiques à la langue font également référence à C + + Dialecte Options ainsi que Objective-C ainsi que
Objective-C ++ Dialecte Options.

Lorsqu'une option d'avertissement non reconnue est demandée (par exemple, -Wunknown-avertissement), GCC émettra
un diagnostic indiquant que l'option n'est pas reconnue. Cependant, si le -Wnon- la forme est
utilisé, le comportement est légèrement différent : Aucun diagnostic ne sera produit pour
-Wno-inconnu-avertissement à moins que d'autres diagnostics ne soient produits. Cela permet l'utilisation de
neufs -Wnon- options avec les anciens compilateurs, mais si quelque chose ne va pas, le compilateur vous avertira
qu'une option non reconnue a été utilisée.

-pédant
Émettre tous les avertissements exigés par les normes ISO C et ISO C++ strictes ; rejeter tous les programmes qui
utiliser des extensions interdites et d'autres programmes qui ne suivent pas ISO C et ISO
C++. Pour ISO C, suit la version de la norme ISO C spécifiée par tout -std
option utilisée.

Les programmes ISO C et ISO C++ valides doivent compiler correctement avec ou sans cette option
(bien que quelques rares auront besoin -ansi ou -std option spécifiant la version requise
de l'ISO C). Cependant, sans cette option, certaines extensions GNU et C et
Les fonctionnalités C++ sont également prises en charge. Avec cette option, ils sont rejetés.

-pédant ne provoque pas de messages d'avertissement pour l'utilisation des mots-clés alternatifs dont
les noms commencent et se terminent par __. Les avertissements pédants sont également désactivés dans l'expression
qui suit "__extension__". Cependant, seuls les fichiers d'en-tête système doivent utiliser ces
les voies d'évacuation; les programmes d'application devraient les éviter.

Certains utilisateurs essaient d'utiliser -pédant pour vérifier la stricte conformité ISO C des programmes. Ils
découvrent vite qu'il ne fait pas tout à fait ce qu'ils veulent : il trouve des pratiques non-ISO,
mais pas tous --- seulement ceux pour lesquels ISO C a besoin un diagnostic, et quelques autres pour
quels diagnostics ont été ajoutés.

Une fonctionnalité pour signaler tout non-respect de la norme ISO C peut être utile dans certains cas,
mais exigerait un travail supplémentaire considérable et serait tout à fait différent de
-pédant. Nous n'avons pas l'intention de prendre en charge une telle fonctionnalité dans un avenir proche.

Lorsque la norme spécifiée avec -std représente un dialecte étendu GNU de C, tel que
gnu90 or gnu99, il y a un correspondant base Standard, la version de l'ISO C sur laquelle
le dialecte étendu GNU est basé. Avertissements de -pédant sont donnés là où ils sont
requis par la norme de base. (Cela n'aurait aucun sens que de tels avertissements soient donnés
uniquement pour les fonctionnalités qui ne sont pas dans le dialecte GNU C spécifié, puisque par définition le GNU
les dialectes de C incluent toutes les fonctionnalités que le compilateur prend en charge avec l'option donnée, et
il n'y aurait rien à signaler.)

-pédant-erreurs
Comme -pédant, sauf que des erreurs sont générées plutôt que des avertissements.

-Mur
Cela active tous les avertissements sur les constructions que certains utilisateurs considèrent
discutable, et qui sont faciles à éviter (ou à modifier pour empêcher l'avertissement), même dans
en conjonction avec des macros. Cela active également certains avertissements spécifiques à la langue décrits
in C + + Dialecte Options ainsi que Objective-C ainsi que Objective-C ++ Dialecte Options.

-Mur active les drapeaux d'avertissement suivants :

-Adresse -Warray-limites (seulement avec -O2) -Wc++11-compatible -Wchar-indices
-Wenum-comparer (en C/Objc ; activé par défaut en C++) -Wimplicit-int (C et
Objectif-C uniquement) -Wimplicit-fonction-déclaration (C et Objective-C uniquement) -Commentaire
-Wformat -Wmain (uniquement pour C/ObjC et sauf si -fautoportant) -Wpeut-être-non-initialisé
-Wmissing-bracelets -Wnon nul -Parenthèses -Wpointer-signe -Wororder -Type épave
-Wpoint-séquence -Wsign-comparer (uniquement en C++) -Wstrict-aliasing -Wstrict-overflow=1
-Wswitch -Wtrigraphes -Wuninitialisé -Pragmas-inconnus -Wunused-fonction
-Étiquette non utilisée -Wvaleur non utilisée -Wvariable-inutilisée -Wvolatile-registre-var

Notez que certains drapeaux d'avertissement ne sont pas impliqués par -Mur. Certains d'entre eux mettent en garde contre
constructions que les utilisateurs ne jugent généralement pas contestables, mais qui
occasionnellement, vous souhaiterez peut-être vérifier ; d'autres mettent en garde contre les constructions
nécessaire ou difficile à éviter dans certains cas, et il n'y a pas de moyen simple de modifier le
code pour supprimer l'avertissement. Certains d'entre eux sont activés par -Wextra mais beaucoup d'entre eux
doit être activé individuellement.

-Wextra
Cela active certains indicateurs d'avertissement supplémentaires qui ne sont pas activés par -Mur. (Cette option a utilisé
être appelé -W. L'ancien nom est toujours pris en charge, mais le nouveau nom est plus
descriptif.)

-Wclobbé -Wempty-corps -Wignored-qualificatifs -Wmissing-field-initialiseurs
-Type de paramètre manquant (C uniquement) -Wold-style-déclaration (C uniquement) -Woverride-init
-Wsign-comparer -Wtype-limites -Wuninitialisé -Wunused-paramètre (seulement avec -Wunutilisé or
-Mur) -Paramètre non utilisé mais défini (seulement avec -Wunutilisé or -Mur)

L'option -Wextra imprime également des messages d'avertissement pour les cas suivants :

· Un pointeur est comparé à un entier zéro avec <, <=, >ou >=.

· (C++ uniquement) Un énumérateur et un non-énumérateur apparaissent tous deux dans un
expression.

· (C++ uniquement) Bases virtuelles ambiguës.

· (C++ uniquement) Subscripting d'un tableau qui a été déclaré S'inscrire.

· (C++ uniquement) Prendre l'adresse d'une variable qui a été déclarée S'inscrire.

· (C++ uniquement) Une classe de base n'est pas initialisée dans le constructeur de copie d'une classe dérivée.

-Wchar-indices
Avertir si un indice de tableau a le type "char". Il s'agit d'une cause fréquente d'erreur, car
les programmeurs oublient souvent que ce type est signé sur certaines machines. Cet avertissement est
activé par -Mur.

-Commentaire
Avertir chaque fois qu'une séquence de début de commentaire /* apparaît dans un /* commentaire, ou chaque fois qu'un
Backslash-Newline apparaît dans un // commenter. Cet avertissement est activé par -Mur.

-Wno-couverture-incompatibilité
Avertir si les profils de commentaires ne correspondent pas lors de l'utilisation du -fprofil-utilisation option. Si un
le fichier source a été modifié entre -fprofile-gen ainsi que -fprofil-utilisation, les fichiers avec le
les commentaires du profil peuvent ne pas correspondre au fichier source et GCC ne peut pas utiliser le profil
informations de rétroaction. Par défaut, cet avertissement est activé et est traité comme une erreur.
-Wno-couverture-incompatibilité peut être utilisé pour désactiver l'avertissement ou
-Wno-error=couverture-mismatch peut être utilisé pour désactiver l'erreur. Désactiver l'erreur
car cet avertissement peut entraîner un code mal optimisé et n'est utile que dans le cas de
des changements très mineurs tels que des corrections de bogues sur une base de code existante. Désactivant complètement
l'avertissement n'est pas recommandé.

-Wno-cpp
(C, Objective-C, C++, Objective-C++ et Fortran uniquement)

Supprime les messages d'avertissement émis par les directives "#warning".

-Wdouble-promotion (C, C++, Objective-C et Objective-C++ uniquement)
Donne un avertissement lorsqu'une valeur de type "float" est implicitement promue à "double". CPU
avec une unité à virgule flottante "simple précision" 32 bits implémentant "flotter" dans le matériel,
mais émuler "double" dans le logiciel. Sur une telle machine, faire des calculs en utilisant
les valeurs "doubles" sont beaucoup plus chères en raison de la surcharge requise pour le logiciel
émulation.

Il est facile de faire accidentellement des calculs avec "double" car la virgule flottante
les littéraux sont implicitement de type "double". Par exemple, dans :

zone de flottement (rayon de flottement)
{
renvoie 3.14159 * rayon * rayon ;
}

le compilateur effectuera tout le calcul avec "double" car le flottant-
point littéral est un "double".

-Wformat
Vérifiez les appels à "printf" et "scanf", etc., pour vous assurer que les arguments fournis
ont des types appropriés à la chaîne de format spécifiée, et que les conversions
spécifié dans la chaîne de format a du sens. Cela inclut les fonctions standard et
d'autres spécifiés par les attributs de format, dans le "printf", "scanf", "strftime" et
"strfmon" (une extension X/Open, pas dans le standard C) (ou autre cible-
familles spécifiques). Quelles fonctions sont vérifiées sans que les attributs de format aient été
spécifié dépend de la version standard sélectionnée, et ces contrôles de fonctions
sans l'attribut spécifié sont désactivés par -fautoportant or -fno-intégré.

Les formats sont vérifiés par rapport aux fonctionnalités de format prises en charge par GNU libc version 2.2.
Celles-ci incluent toutes les fonctionnalités ISO C90 et C99, ainsi que les fonctionnalités de Single Unix
Spécification et quelques extensions BSD et GNU. D'autres implémentations de bibliothèque peuvent ne pas
prendre en charge toutes ces fonctionnalités ; GCC ne prend pas en charge les avertissements concernant les fonctionnalités qui vont au-delà
les limites d'une bibliothèque particulière. Toutefois, si -pédant s'utilise avec -Wformat,
des avertissements seront donnés sur les fonctionnalités de format qui ne sont pas dans la version standard sélectionnée (mais
pas pour les formats "strfmon", car ceux-ci ne sont dans aucune version du standard C).

Depuis que -Wformat vérifie également les arguments de format nul pour plusieurs fonctions, -Wformat
implique également -Wnon nul.

-Wformat est inclus dans -Mur. Pour plus de contrôle sur certains aspects de la vérification du format,
les options -Wformat-y2k, -Wno-format-extra-arguments, -Wno-format-zéro-longueur,
-Wformat-non littéral, -Wformat-sécuritéet -Wformat=2 sont disponibles, mais ne sont pas
inclus dans -Mur.

REMARQUE : dans Ubuntu 8.10 et les versions ultérieures, cette option est activée par défaut pour C, C++,
ObjC, ObjC++. Pour désactiver, utilisez -Wformat=0.

-Wformat-y2k
If -Wformat est spécifié, avertit également des formats "strftime" qui peuvent ne donner qu'un
année à deux chiffres.

-Wno-format-contient-nul
If -Wformat est spécifié, ne pas avertir des chaînes de format qui contiennent des octets NUL.

-Wno-format-extra-arguments
If -Wformat est spécifié, ne pas avertir des excès d'arguments à un "printf" ou "scanf"
fonction de formatage. La norme C spécifie que de tels arguments sont ignorés.

Où les arguments inutilisés se situent entre les arguments utilisés qui sont spécifiés avec $
spécifications de numéro d'opérande, normalement des avertissements sont toujours donnés, car le
l'implémentation n'a pas pu savoir quel type passer à "va_arg" pour ignorer les inutilisés
arguments. Cependant, dans le cas des formats "scanf", cette option supprimera le
avertissement si les arguments inutilisés sont tous des pointeurs, puisque la spécification Single Unix
dit que de tels arguments inutilisés sont autorisés.

-Wno-format-zéro-longueur
If -Wformat est spécifié, ne pas avertir des formats de longueur nulle. La norme C
spécifie que les formats de longueur nulle sont autorisés.

-Wformat-non littéral
If -Wformat est spécifié, avertit également si la chaîne de format n'est pas un littéral de chaîne et
ne peut donc pas être vérifié, sauf si la fonction format prend ses arguments de format comme un
"va_list".

-Wformat-sécurité
If -Wformat est spécifié, avertit également des utilisations des fonctions de format qui représentent
problèmes de sécurité possibles. À l'heure actuelle, cela met en garde contre les appels à "printf" et
fonctions "scanf" où la chaîne de format n'est pas un littéral de chaîne et il n'y a pas
arguments de format, comme dans "printf (foo);". Cela peut être une faille de sécurité si le format
la chaîne provient d'une entrée non fiable et contient %n. (Ceci est actuellement un sous-ensemble de ce que
-Wformat-non littéral avertit, mais à l'avenir des avertissements peuvent être ajoutés à
-Wformat-sécurité qui ne sont pas inclus dans -Wformat-non littéral.)

REMARQUE : dans Ubuntu 8.10 et les versions ultérieures, cette option est activée par défaut pour C, C++,
ObjC, ObjC++. Pour désactiver, utilisez -Wno-format-sécurité, ou désactiver tous les avertissements de format
avec -Wformat=0. Pour rendre les avertissements de sécurité de format fatals, spécifiez
-Werror=format-sécurité.

-Wformat=2
Activer -Wformat plus contrôles de format non inclus dans -Wformat. Actuellement équivalent à
-Wformat -Wformat-non littéral -Wformat-sécurité -Wformat-y2k.

-Wnon nul
Avertir de la transmission d'un pointeur nul pour les arguments marqués comme nécessitant une valeur non nulle
par l'attribut de fonction "non null".

-Wnon nul est inclus dans -Mur ainsi que -Wformat. Il peut être désactivé avec le -Wno-non nul
option.

-Winit-soi (C, C++, Objective-C et Objective-C++ uniquement)
Avertir des variables non initialisées qui sont initialisées avec elles-mêmes. Notez ceci
l'option ne peut être utilisée qu'avec le -Wuninitialisé option.

Par exemple, GCC avertira que "i" n'est pas initialisé dans l'extrait suivant uniquement
quand -Winit-soi a été précisé :

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

-Wimplicit-int (C et Objective-C uniquement)
Avertir lorsqu'une déclaration ne spécifie pas de type. Cet avertissement est activé par -Mur.

-Wimplicit-fonction-déclaration (C et Objective-C uniquement)
Donne un avertissement chaque fois qu'une fonction est utilisée avant d'être déclarée. En mode C99
(-std=c99 or -std=gnu99), cet avertissement est activé par défaut et il est transformé en un
erreur par -pédant-erreurs. Cet avertissement est également activé par -Mur.

-Wimplicite (C et Objective-C uniquement)
Pareil que -Wimplicit-int ainsi que -Wimplicit-fonction-déclaration. Cet avertissement est activé
by -Mur.

-Wignored-qualificatifs (C et C++ uniquement)
Avertir si le type de retour d'une fonction a un qualificateur de type tel que "const". Pour ISO C
un tel qualificatif de type n'a aucun effet, puisque la valeur renvoyée par une fonction n'est pas un
lvaleur. Pour le C++, l'avertissement n'est émis que pour les types scalaires ou "void". ISO C
interdit les types de retour qualifiés « void » sur les définitions de fonction, donc de tels types de retour
recevez toujours un avertissement même sans cette option.

Cet avertissement est également activé par -Wextra.

-Wmain
Avertir si le type de principal est suspect. principal devrait être une fonction avec externe
liaison, retournant un entier, prenant soit zéro argument, soit deux ou trois arguments de
types appropriés. Cet avertissement est activé par défaut en C++ et est activé soit par
-Mur or -pédant.

-Wmissing-bracelets
Avertir si un initialiseur d'agrégat ou d'union n'est pas entièrement encadré. Dans ce qui suit
exemple, l'initialiseur pour a n'est pas entièrement entre crochets, mais que pour b est pleinement
entre crochets.

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

Cet avertissement est activé par -Mur.

-Wmissing-include-répertoires (C, C++, Objective-C et Objective-C++ uniquement)
Avertir si un répertoire d'inclusion fourni par l'utilisateur n'existe pas.

-Parenthèses
Avertir si les parenthèses sont omises dans certains contextes, comme lorsqu'il y a un
affectation dans un contexte où une valeur de vérité est attendue, ou lorsque les opérateurs sont imbriqués
dont les gens sont souvent confus au sujet de la préséance.

Avertir également si une comparaison comme x<=y<=z apparaît ; cela équivaut à (x<=y ? 1 : 0)
<= z, qui est une interprétation différente de celle de la notation mathématique ordinaire.

Avertissez également des constructions où il peut y avoir une confusion quant à l'énoncé "if" d'un
La branche "autre" appartient. Voici un exemple d'un tel cas :

{
si un)
si (b)
foto ();
d'autre
bar ();
}

En C/C++, chaque branche "else" appartient à l'instruction "if" la plus interne possible, qui
dans cet exemple est "si (b)". Ce n'est souvent pas ce que le programmeur attendait, car
illustré dans l'exemple ci-dessus par l'indentation choisie par le programmeur. Quand il y a
le potentiel de cette confusion, GCC émettra un avertissement lorsque ce drapeau est
spécifié. Pour éliminer l'avertissement, ajoutez des accolades explicites autour du "si" le plus interne
déclaration, il n'y a donc aucun moyen que le "autre" puisse appartenir au "si" englobant. Les
le code résultant ressemblerait à ceci :

{
si un)
{
si (b)
foto ();
d'autre
bar ();
}
}

Avertir également pour les utilisations dangereuses du ?: avec l'extension GNU de l'opérande central omis. Lorsque
la condition dans l'opérateur ?: est une expression booléenne la valeur omise sera
toujours 1. Souvent, l'utilisateur s'attend à ce qu'il s'agisse d'une valeur calculée à l'intérieur du conditionnel
expression à la place.

Cet avertissement est activé par -Mur.

-Wpoint-séquence
Avertir du code qui peut avoir une sémantique indéfinie en raison de violations de séquence
règles de points dans les normes C et C++.

Les normes C et C++ définissent l'ordre dans lequel les expressions d'un programme C/C++ sont
évalué en termes de séquence des notes bonus, qui représentent un ordre partiel entre les
l'exécution de parties du programme : celles exécutées avant le point de séquence, et celles
exécuté après. Ceux-ci se produisent après l'évaluation d'une expression complète (qui
ne fait pas partie d'une expression plus large), après l'évaluation du premier opérande d'un
Opérateur "&&", "||", "? :" ou "," (virgule), avant l'appel d'une fonction (mais après le
évaluation de ses arguments et de l'expression désignant la fonction appelée), et en
certains autres endroits. Sauf comme indiqué par les règles de point de séquence, l'ordre
d'évaluation des sous-expressions d'une expression n'est pas spécifié. Toutes ces règles
ne décrivez qu'une commande partielle plutôt qu'une commande totale, puisque, par exemple, si deux
les fonctions sont appelées dans une expression sans point de séquence entre elles, le
l'ordre dans lequel les fonctions sont appelées n'est pas spécifié. Cependant, les normes
comité ont décidé que les appels de fonction ne se chevauchent pas.

Il n'est pas précisé quand entre les points de séquence des modifications des valeurs de
les objets prennent effet. Les programmes dont le comportement en dépend ont un comportement indéfini ;
les normes C et C++ spécifient que "Entre la séquence précédente et suivante point un
objet doit avoir sa valeur stockée modifiée au plus une fois par l'évaluation d'un
expression. De plus, la valeur précédente doit être lue uniquement pour déterminer la valeur à
être stocké.". Si un programme enfreint ces règles, les résultats sur n'importe quel
la mise en œuvre sont totalement imprévisibles.

Des exemples de code avec un comportement indéfini sont "a = a++;", "a[n] = b[n++]" et "a[i++] =
i;". Certains cas plus compliqués ne sont pas diagnostiqués par cette option, et cela peut donner un
résultat faux positif occasionnel, mais en général, il s'est avéré assez efficace à
détecter ce genre de problème dans les programmes.

La norme est formulée de manière confuse, il y a donc un débat sur la précision
signification des règles de point de séquence dans les cas subtils. Liens vers les discussions de la
problème, y compris les définitions formelles proposées, peuvent être trouvés sur la page des lectures GCC,
àhttp://gcc.gnu.org/readings.html>.

Cet avertissement est activé par -Mur pour C et C++.

-Type épave
Avertir chaque fois qu'une fonction est définie avec un type de retour qui est par défaut "int". Aussi
avertir de toute instruction "return" sans valeur de retour dans une fonction dont le type de retour
n'est pas « void » (le fait de tomber à la fin du corps de la fonction est considéré comme un retour
sans valeur) et à propos d'une instruction "return" avec une expression dans une fonction
dont le type de retour est "void".

Pour C++, une fonction sans type de retour produit toujours un message de diagnostic, même
quand -Type sans retour est spécifié. Les seules exceptions sont principal et fonctions
défini dans les en-têtes du système.

Cet avertissement est activé par -Mur.

-Wswitch
Avertir chaque fois qu'une instruction "switch" a un index de type énuméré et n'a pas de "case"
pour un ou plusieurs des codes nommés de cette énumération. (La présence d'un "défaut"
label empêche cet avertissement.) les étiquettes "case" en dehors de la plage d'énumération
provoquer des avertissements lorsque cette option est utilisée (même s'il existe un libellé "par défaut"). Cette
l'avertissement est activé par -Mur.

-Wswitch-par défaut
Avertir chaque fois qu'une instruction « switch » n'a pas de casse « par défaut ».

-Wswitch-énumération
Avertir chaque fois qu'une instruction "switch" a un index de type énuméré et n'a pas de "case"
pour un ou plusieurs des codes nommés de cette énumération. étiquettes « cas » en dehors du
la plage d'énumération provoque également des avertissements lorsque cette option est utilisée. La seule différence
jusqu'à XNUMX fois -Wswitch et cette option est que cette option donne un avertissement sur un omis
code d'énumération même s'il y a une étiquette "par défaut".

-Wsync-nand (C et C++ uniquement)
Avertir lorsque les fonctions intégrées "__sync_fetch_and_nand" et "__sync_nand_and_fetch" sont
utilisé. Ces fonctions ont changé la sémantique dans GCC 4.4.

-Wtrigraphes
Avertir si des trigraphes sont rencontrés qui pourraient changer le sens du programme
(les trigraphes dans les commentaires ne sont pas avertis). Cet avertissement est activé par -Mur.

-Paramètre non utilisé mais défini
Avertir chaque fois qu'un paramètre de fonction est affecté à, mais autrement inutilisé (à part
sa déclaration).

Pour supprimer cet avertissement, utilisez le inutilisé attribuer.

Cet avertissement est également activé par -Wunutilisé avec -Wextra.

-Winutilisé-mais-set-variable
Avertir chaque fois qu'une variable locale est affectée à, mais autrement inutilisée (à part son
déclaration). Cet avertissement est activé par -Mur.

Pour supprimer cet avertissement, utilisez le inutilisé attribuer.

Cet avertissement est également activé par -Wunutilisé, qui est activé par -Mur.

-Wunused-fonction
Avertir chaque fois qu'une fonction statique est déclarée mais non définie ou qu'une fonction statique n'est pas en ligne
la fonction n'est pas utilisée. Cet avertissement est activé par -Mur.

-Étiquette non utilisée
Avertir chaque fois qu'une étiquette est déclarée mais non utilisée. Cet avertissement est activé par -Mur.

Pour supprimer cet avertissement, utilisez le inutilisé attribuer.

-Wunused-local-typedefs (C, Objective-C, C++ et Objective-C++ uniquement)
Avertir lorsqu'un typedef défini localement dans une fonction n'est pas utilisé.

-Wunused-paramètre
Avertir chaque fois qu'un paramètre de fonction n'est pas utilisé en dehors de sa déclaration.

Pour supprimer cet avertissement, utilisez le inutilisé attribuer.

-Wno-résultat-inutilisé
Ne pas avertir si un appelant d'une fonction marquée avec l'attribut "warn_unused_result" le fait
pas utiliser sa valeur de retour. La valeur par défaut est -Wrésultat-inutilisé.

-Wvariable-inutilisée
Avertir chaque fois qu'une variable locale ou une variable statique non constante est inutilisée en dehors de
sa déclaration. Cet avertissement est activé par -Mur.

Pour supprimer cet avertissement, utilisez le inutilisé attribuer.

-Wvaleur non utilisée
Avertir chaque fois qu'une instruction calcule un résultat qui n'est explicitement pas utilisé. Supprimer
cet avertissement convertit l'expression inutilisée en annuler. Cela inclut une déclaration d'expression
ou le côté gauche d'une expression virgule qui ne contient aucun effet secondaire. Pour
exemple, une expression telle que x[je,j] provoquera un avertissement, tandis que x[(vide)i,j] sera
pas.

Cet avertissement est activé par -Mur.

-Wunutilisé
Tout ce qui précède -Wunutilisé options combinées.

Afin d'obtenir un avertissement concernant un paramètre de fonction inutilisé, vous devez soit spécifier
-Wextra -Wunutilisé (Notez que -Mur implique -Wunutilisé), ou spécifiez séparément
-Wunused-paramètre.

-Wuninitialisé
Avertir si une variable automatique est utilisée sans être initialisée au préalable ou si une variable
peut être écrasé par un appel "setjmp". En C++, avertir si une référence non statique ou non
statique const membre apparaît dans une classe sans constructeurs.

Si vous souhaitez avertir du code qui utilise la valeur non initialisée de la variable dans
son propre initialiseur, utilisez le -Winit-soi option.

Ces avertissements se produisent pour des éléments de structure individuels non initialisés ou tronqués,
les variables d'union ou de tableau ainsi que pour les variables non initialisées ou écrasées
dans son ensemble. Ils ne se produisent pas pour les variables ou les éléments déclarés "volatils". Parce que
ces avertissements dépendent de l'optimisation, des variables ou éléments exacts pour lesquels il
Ces avertissements dépendront des options d'optimisation précises et de la version de GCC utilisée.

Notez qu'il peut n'y avoir aucun avertissement concernant une variable qui est utilisée uniquement pour calculer un
valeur qui elle-même n'est jamais utilisée, car de tels calculs peuvent être supprimés par le flux de données
analyse avant l'impression des avertissements.

-Wpeut-être-non-initialisé
Pour une variable automatique, s'il existe un chemin de l'entrée de la fonction à une utilisation de
la variable qui est initialisée, mais il existe d'autres chemins que la variable n'est pas
initialisé, le compilateur émettra un avertissement s'il ne peut pas prouver le non initialisé
les chemins ne se produisent pas au moment de l'exécution. Ces avertissements sont rendus facultatifs car GCC n'est pas
assez intelligent pour voir toutes les raisons pour lesquelles le code pourrait être correct même s'il semble
avoir une erreur. Voici un exemple de la façon dont cela peut se produire :

{
int x;
interrupteur (y)
{
cas 1 : x = 1 ;
break;
cas 2 : x = 4 ;
break;
cas 3 : x = 5 ;
}
foo (x);
}

Si la valeur de "y" est toujours 1, 2 ou 3, alors "x" est toujours initialisé, mais GCC
ne le sait pas. Pour supprimer l'avertissement, l'utilisateur doit fournir un cas par défaut
avec affirmer(0) ou un code similaire.

Cette option avertit également lorsqu'une variable automatique non volatile peut être modifiée par un
appel à "longjmp". Ces avertissements ne sont également possibles qu'en optimisant
compilation.

Le compilateur ne voit que les appels à "setjmp". Il ne peut pas savoir où sera "longjmp"
appelé; en fait, un gestionnaire de signal pourrait l'appeler à n'importe quel point du code. Comme un
résultat, vous pouvez recevoir un avertissement même s'il n'y a en fait aucun problème car "longjmp"
ne peut en effet être appelé à l'endroit qui poserait problème.

Certains avertissements fallacieux peuvent être évités si vous déclarez toutes les fonctions que vous utilisez
ne revient jamais en tant que "noreturn".

Cet avertissement est activé par -Mur or -Wextra.

-Pragmas-inconnus
Avertir lorsqu'une directive "#pragma" est rencontrée qui n'est pas comprise par GCC. Si ce
l'option de ligne de commande est utilisée, des avertissements seront même émis pour des pragmas inconnus dans
fichiers d'en-tête du système. Ce n'est pas le cas si les avertissements n'ont été activés que par le
-Mur option de ligne de commande.

-Wno-pragmas
Ne pas avertir des abus de pragmas, tels que des paramètres incorrects, une syntaxe invalide ou
conflits entre les pragmas. Voir également -Pragmas-inconnus.

-Wstrict-aliasing
Cette option n'est active que lorsque -fstrict-aliasing c'est actif. Il met en garde contre le code qui
peut enfreindre les règles d'alias strictes que le compilateur utilise pour l'optimisation.
L'avertissement ne détecte pas tous les cas, mais tente de détecter les cas les plus courants.
pièges. Il est inclus dans -Mur. C'est équivalent à -Wstrict-aliasing=3

-Wstrict-aliasing=n
Cette option n'est active que lorsque -fstrict-aliasing c'est actif. Il met en garde contre le code qui
peut enfreindre les règles d'alias strictes que le compilateur utilise pour l'optimisation.
Des niveaux plus élevés correspondent à une précision plus élevée (moins de faux positifs). Niveaux plus élevés
correspondent également à plus d'effort, similaire à la façon dont -O fonctionne. -Wstrict-aliasing is
équivalente à -Wstrict-aliasing=n, avec n=3.

Niveau 1 : le plus agressif, le plus rapide, le moins précis. Peut-être utile lorsque les niveaux supérieurs
ne pas avertir mais -fstrict-aliasing casse toujours le code, car il a très peu de faux
négatifs. Cependant, il contient de nombreux faux positifs. Avertit pour toutes les conversions de pointeur
entre des types éventuellement incompatibles, même s'ils ne sont jamais déréférencés. Fonctionne à l'avant
fin seulement.

Niveau 2 : Agressif, rapide, pas trop précis. Peut encore avoir de nombreux faux positifs (pas
autant que le niveau 1 cependant), et peu de faux négatifs (mais peut-être plus que le niveau 1).
Contrairement au niveau 1, il avertit uniquement lorsqu'une adresse est prise. Avertit des types incomplets.
Fonctionne uniquement à l'avant.

Niveau 3 (par défaut pour -Wstrict-aliasing) : Devrait avoir très peu de faux positifs et peu
faux négatifs. Légèrement plus lent que les niveaux 1 ou 2 lorsque l'optimisation est activée.
Prend en charge le modèle commun de jeu de mots + déréférencement dans le front-end :
"*(int*)&some_float". Si l'optimisation est activée, elle s'exécute également dans le back-end, où
il traite plusieurs cas d'instructions en utilisant des informations de point de départ sensibles au flux.
Avertit uniquement lorsque le pointeur converti est déréférencé. N'avertit pas d'incomplet
les types.

-Wstrict-débordement
-Wstrict-overflow=n
Cette option n'est active que lorsque -fstrict-débordement c'est actif. Il met en garde contre les cas
où le compilateur optimise en se basant sur l'hypothèse que le débordement signé ne
se produire. Notez qu'il ne prévient pas de tous les cas où le code pourrait déborder : il
avertit uniquement des cas où le compilateur implémente une optimisation. Ainsi ce
L'avertissement dépend du niveau d'optimisation.

Une optimisation qui suppose que le débordement signé ne se produit pas est parfaitement sûre si
les valeurs des variables impliquées sont telles que le débordement ne fait jamais, en fait,
se produire. Par conséquent, cet avertissement peut facilement donner un faux positif : un avertissement concernant le code
ce n'est pas vraiment un problème. Pour aider à se concentrer sur des questions importantes, plusieurs avertissements
les niveaux sont définis. Aucun avertissement n'est émis pour l'utilisation d'un débordement signé non défini
lors de l'estimation du nombre d'itérations nécessaires à une boucle, en particulier lorsque
déterminer si une boucle sera exécutée.

-Wstrict-overflow=1
Avertissez des cas qui sont à la fois discutables et faciles à éviter. Par exemple : "x +
1 > x" ; avec -fstrict-débordement, le compilateur simplifiera cela à 1. Ce niveau
of -Wstrict-débordement est activé par -Mur; les niveaux supérieurs ne le sont pas et doivent être
explicitement demandé.

-Wstrict-overflow=2
Avertissez également des autres cas où une comparaison est simplifiée en une constante. Pour
exemple : "abs (x) >= 0". Cela ne peut être simplifié que lorsque -fstrict-débordement est en
effet, car "abs (INT_MIN)" déborde sur "INT_MIN", qui est inférieur à zéro.
-Wstrict-débordement (sans niveau) est le même que -Wstrict-overflow=2.

-Wstrict-overflow=3
Avertissez également des autres cas où une comparaison est simplifiée. Par exemple : "x + 1
> 1" sera simplifié en "x > 0".

-Wstrict-overflow=4
Avertir également des autres simplifications non couvertes par les cas ci-dessus. Pour
exemple : "(x * 10) / 5" sera simplifié en "x * 2".

-Wstrict-overflow=5
Avertir également des cas où le compilateur réduit l'amplitude d'une constante
impliqué dans une comparaison. Par exemple : "x + 2 > y" sera simplifié en "x + 1
>= y". Ceci n'est signalé qu'au niveau d'avertissement le plus élevé car ce
la simplification s'applique à de nombreuses comparaisons, donc ce niveau d'avertissement donnera un très
grand nombre de faux positifs.

-Wsuggest-attribut=[pur|const|non-retour]
Avertir des cas où l'ajout d'un attribut peut être bénéfique. Les attributs actuellement
pris en charge sont répertoriés ci-dessous.

-Wsuggest-attribute=pur
-Wsuggest-attribute=const
-Wsuggest-attribute=sans retour
Avertir des fonctions qui pourraient être candidates pour les attributs « pure », « const » ou
"non-retour". Le compilateur n'avertit que pour les fonctions visibles dans d'autres compilations
unités ou (dans le cas de "pure" et "const") s'il ne peut pas prouver que la fonction
revient normalement. Une fonction retourne normalement si elle ne contient pas un infini
boucle ni renvoie anormalement en lançant, en appelant "abort()" ou en piégeant. Cette
l'analyse nécessite une option -fipa-pure-const, qui est activé par défaut à -O ainsi que
plus haut. Des niveaux d'optimisation plus élevés améliorent la précision de l'analyse.

-Warray-limites
Cette option n'est active que lorsque -ftree-vrp est actif (par défaut pour -O2 et ci-dessus). Ce
avertit des indices de tableaux qui sont toujours hors limites. Cet avertissement est
activé par -Mur.

-Wno-div-par-zéro
Ne pas avertir de la division d'entiers à la compilation par zéro. Division à virgule flottante par
zéro n'est pas prévenu, car cela peut être un moyen légitime d'obtenir des infinis et
NaN.

-Wsystem-en-têtes
Affiche des messages d'avertissement pour les constructions trouvées dans les fichiers d'en-tête du système. Avertissements de
les en-têtes système sont normalement supprimés, en supposant qu'ils ne
indiquer de vrais problèmes et ne ferait que rendre la sortie du compilateur plus difficile à lire. À l'aide de
cette option de ligne de commande indique à GCC d'émettre des avertissements à partir des en-têtes système comme s'ils
s'est produit dans le code utilisateur. Cependant, notez qu'en utilisant -Mur en conjonction avec cette option
sera ne sauraient avertir des pragmas inconnus dans les en-têtes système --- pour cela, -Pragmas-inconnus
doit également être utilisé.

-Wtrampolines
Avertir des trampolines générés pour les pointeurs vers des fonctions imbriquées.

Un trampoline est un petit morceau de données ou de code qui est créé lors de l'exécution
temps sur la pile lorsque l'adresse d'une fonction imbriquée est prise, et
est utilisé pour appeler indirectement la fonction imbriquée. Pour certaines cibles, il
est composé uniquement de données et ne nécessite donc aucun traitement particulier. Mais,
pour la plupart des cibles, il est constitué de code et nécessite donc la pile
être rendu exécutable pour que le programme fonctionne correctement.

-Wfloat-égal
Avertir si des valeurs à virgule flottante sont utilisées dans les comparaisons d'égalité.

L'idée derrière cela est qu'il est parfois pratique (pour le programmeur) de
considérer les valeurs à virgule flottante comme des approximations de nombres réels infiniment précis.
Si vous faites cela, alors vous devez calculer (en analysant le code, ou dans certains
autrement) l'erreur maximale ou maximale probable que le calcul introduit, et
permettez-le lors de l'exécution des comparaisons (et lors de la production de sortie, mais c'est un
problème différent). En particulier, au lieu de tester l'égalité, vous vérifieriez
pour voir si les deux valeurs ont des plages qui se chevauchent ; et cela se fait avec le
opérateurs relationnels, de sorte que les comparaisons d'égalité sont probablement erronées.

-Wtraditionnel (C et Objective-C uniquement)
Avertir de certaines constructions qui se comportent différemment en traditionnel et en ISO C. Aussi
avertir des constructions ISO C qui n'ont pas d'équivalent en C traditionnel, et/ou problématiques
constructions à éviter.

· Paramètres de macro qui apparaissent dans les littéraux de chaîne dans le corps de la macro. Dans
le remplacement de macro C traditionnel a lieu dans les littéraux de chaîne, mais ne
dans l'ISO C.

· En C traditionnel, certaines directives de préprocesseur n'existaient pas. Traditionnel
les préprocesseurs ne considéreraient une ligne comme une directive que si le # paru dans
colonne 1 sur la ligne. Par conséquent -Wtraditionnel met en garde contre les directives qui
le C traditionnel comprend mais ignorerait parce que le # n'apparaît pas comme le
premier caractère de la ligne. Il vous suggère également de masquer des directives telles que #pragma
pas compris par le C traditionnel en les indentant. Certains traditionnels
les implémentations ne reconnaîtraient pas #elif, il suggère donc de l'éviter complètement.

· Une macro de type fonction qui apparaît sans arguments.

· L'opérateur unaire plus.

· Le U suffixe de constante entière, ou le F or L suffixes constants à virgule flottante.
(Le C traditionnel prend en charge le L suffixe sur les constantes entières.) Notez que ces
les suffixes apparaissent dans les macros définies dans les en-têtes système de la plupart des systèmes modernes,
par exemple le _MIN/_MAX macro dans " ". L'utilisation de ces macros dans le code utilisateur peut
normalement conduire à des avertissements parasites, cependant le préprocesseur intégré de GCC a
suffisamment de contexte pour éviter un avertissement dans ces cas.

· Une fonction déclarée externe dans un bloc puis utilisée après la fin du
bloque.

· Une instruction "switch" a un opérande de type "long".

· Une déclaration de fonction non "statique" suit une déclaration "statique". Cette construction n'est pas
accepté par certains compilateurs C traditionnels.

· Le type ISO d'une constante entière a une largeur ou une signature différente de son
genre traditionnel. Cet avertissement n'est émis que si la base de la constante est dix.
C'est-à-dire que les valeurs hexadécimales ou octales, qui représentent généralement des modèles de bits, ne sont pas
prévenu.

· L'utilisation de la concaténation de chaînes ISO est détectée.

· Initialisation des agrégats automatiques.

· L'identifiant est en conflit avec les étiquettes. Le C traditionnel n'a pas d'espace de noms séparé pour
Étiquettes.

· Initialisation des unions. Si l'initialiseur est zéro, l'avertissement est omis.
Ceci est fait en supposant que l'initialiseur zéro dans le code utilisateur apparaît
conditionné par exemple par "__STDC__" pour éviter de manquer les avertissements d'initialisation et s'appuie sur
initialisation par défaut à zéro dans le cas C traditionnel.

· Conversions par prototypes entre valeurs fixes/virgules flottantes et vice versa. Les
l'absence de ces prototypes lors de la compilation avec le C traditionnel entraînerait de graves
problèmes. Ceci est un sous-ensemble des avertissements de conversion possibles, pour l'ensemble complet
utilisé -Wtraditionnel-conversion.

· Utilisation des définitions de fonction de style ISO C. Cet avertissement est intentionnellement ne sauraient émis
pour les déclarations de prototypes ou les fonctions variadiques car ces fonctionnalités ISO C
apparaissent dans votre code lorsque vous utilisez les macros de compatibilité C traditionnelles de Libberty,
"PARAMS" et "VPARAMS". Cet avertissement est également ignoré pour les fonctions imbriquées
car cette fonctionnalité est déjà une extension de GCC et n'est donc pas pertinente pour
compatibilité C traditionnelle.

-Wtraditionnel-conversion (C et Objective-C uniquement)
Avertir si un prototype provoque une conversion de type différente de ce qui se produirait
au même argument en l'absence de prototype. Cela inclut les conversions de
virgule fixe en flottant et vice versa, et conversions changeant la largeur ou
signature d'un argument à virgule fixe, sauf lorsqu'il est identique à la promotion par défaut.

-Wdéclaration-après-déclaration (C et Objective-C uniquement)
Avertir lorsqu'une déclaration est trouvée après une déclaration dans un bloc. Cette construction, connue
de C++, a été introduit avec ISO C99 et est autorisé par défaut dans GCC. Ce n'est pas
pris en charge par ISO C90 et n'était pas pris en charge par les versions GCC antérieures à GCC 3.0.

-Wundef
Avertir si un identifiant non défini est évalué dans un #si Directive.

-Wno-endif-étiquettes
Ne pas avertir chaque fois qu'un #else ou d’une #endif sont suivis de texte.

-Wombre
Avertir chaque fois qu'une variable locale ou une déclaration de type masque une autre variable,
paramètre, type ou membre de classe (en C++), ou chaque fois qu'une fonction intégrée est
ombragé. Notez qu'en C++, le compilateur n'avertit pas si une variable locale masque un
struct/class/enum, mais avertira s'il masque un typedef explicite.

-Wplus grand que=len
Avertir chaque fois qu'un objet de plus de len octets est défini.

-Wframe-plus grand-que=len
Avertir si la taille d'un cadre de fonction est supérieure à len octets. Le calcul fait
pour déterminer la taille du cadre de pile est approximative et non conservatrice. L'actuel
les exigences peuvent être légèrement supérieures à len même si vous ne recevez pas d'avertissement. Dans
De plus, tout espace alloué via "alloca", des tableaux de longueur variable ou des
n'est pas inclus par le compilateur lorsqu'il détermine s'il faut ou non émettre un
Attention.

-Wno-free-non-heap-object
Ne pas avertir lors d'une tentative de libération d'un objet qui n'a pas été alloué sur le tas.

-Wstack-utilisation=len
Avertir si l'utilisation de la pile d'une fonction peut être supérieure à len octets. Le calcul
fait pour déterminer l'utilisation de la pile est prudent. Tout espace alloué via "alloca",
les tableaux de longueur variable ou les constructions associées sont inclus par le compilateur lorsque
déterminer s'il faut ou non émettre un avertissement.

Le message est conforme à la sortie de -fstack-utilisation.

· Si l'utilisation de la pile est entièrement statique mais dépasse le montant spécifié, c'est :

avertissement : l'utilisation de la pile est de 1120 octets

· Si l'utilisation de la pile est (en partie) dynamique mais limitée, c'est :

avertissement : l'utilisation de la pile peut être de 1648 octets

· Si l'utilisation de la pile est (partiellement) dynamique et non bornée, c'est :

avertissement : l'utilisation de la pile peut être illimitée

-Wunsafe-loop-optimisations
Avertir si la boucle ne peut pas être optimisée car le compilateur ne peut rien supposer sur
les limites des indices de boucle. Avec -funsafe-loop-optimisations avertir si le compilateur
fait de telles hypothèses.

-Wno-pédant-format-ms (cibles MinGW uniquement)
Désactive les avertissements concernant les spécificateurs de largeur de format non ISO "printf" / "scanf" "I32",
"I64" et "I" utilisés sur les cibles Windows en fonction du runtime MS, lorsque vous utilisez
les options -Wformat ainsi que -pédant sans extensions gnu.

-Wpointeur-arith
Avertir de tout ce qui dépend de la "taille d'un" type de fonction ou d'un "vide". GNU C
attribue à ces types une taille de 1, pour plus de commodité dans les calculs avec "void *"
pointeurs et pointeurs vers des fonctions. En C++, avertir également lorsqu'une opération arithmétique
implique "NULL". Cet avertissement est également activé par -pédant.

-Wtype-limites
Avertir si une comparaison est toujours vraie ou toujours fausse en raison de la plage limitée du
type de données, mais n'avertit pas pour les expressions constantes. Par exemple, avertir si un message non signé
variable est comparée à zéro avec < or >=. Cet avertissement est également activé par
-Wextra.

-Wbad-fonction-cast (C et Objective-C uniquement)
Avertir chaque fois qu'un appel de fonction est transtypé vers un type non correspondant. Par exemple, avertir si
"int malloc()" est converti en "n'importe quoi *".

-Compatible WC++ (C et Objective-C uniquement)
Avertir sur les constructions ISO C qui sont en dehors du sous-ensemble commun de ISO C et ISO
C++, par exemple demande de conversion implicite de "void *" en un pointeur vers non-"void"
type.

-Wc++11-compatible (C++ et Objective-C++ uniquement)
Avertir des constructions C++ dont la signification diffère entre ISO C++ 1998 et ISO C++ 2011,
par exemple, les identifiants dans ISO C++ 1998 qui sont des mots-clés dans ISO C++ 2011. Cet avertissement
allume -Wrétrécissement et est activé par -Mur.

-Qualité Wcast
Avertir chaque fois qu'un pointeur est transtypé afin de supprimer un qualificateur de type du type cible.
Par exemple, avertir si un "const char *" est converti en un "char *" ordinaire.

Avertir également lors de la réalisation d'un transtypage qui introduit un qualificateur de type d'une manière dangereuse. Pour
exemple, la conversion de "char **" en "const char **" n'est pas sûre, comme dans cet exemple :

/* p est la valeur car **. */
caractère const **q = (car const **) p;
/* L'affectation de la chaîne en lecture seule à const char * est OK. */
*q = "chaîne" ;
/* Maintenant, le pointeur char** pointe vers la mémoire en lecture seule. */
**p = « b » ;

-Wcast-aligner
Avertir chaque fois qu'un pointeur est lancé de telle sorte que l'alignement requis de la cible est
augmenté. Par exemple, avertir si un "char *" est converti en "int *" sur les machines où
les entiers ne sont accessibles qu'aux limites de deux ou quatre octets.

-Wwrite-chaînes
Lors de la compilation C, donnez aux constantes de chaîne le type "const char[longueur]" pour que la copie
l'adresse de un dans un pointeur non "const" "char *" recevra un avertissement. Ces
les avertissements vous aideront à trouver au moment de la compilation le code qui peut essayer d'écrire dans une chaîne
constant, mais seulement si vous avez fait très attention à l'utilisation de "const" dans les déclarations
et prototypes. Sinon, ce sera juste une nuisance. C'est pourquoi nous n'avons pas fait
-Mur demander ces avertissements.

Lors de la compilation C++, avertir de la conversion obsolète des littéraux de chaîne en "char
*". Cet avertissement est activé par défaut pour les programmes C++.

-Wclobbé
Avertir des variables qui pourraient être modifiées par longjmp or fourche. Cet avertissement est également
activé par -Wextra.

-Wconversion
Avertir des conversions implicites susceptibles de modifier une valeur. Cela inclut les conversions
entre réel et entier, comme « abs (x) » lorsque « x » est « double » ; conversions entre
signé et non signé, comme "unsigned ui = -1" ; et les conversions vers des types plus petits, comme
"sqrtf (M_PI)". Ne pas avertir pour les casts explicites comme "abs ((int) x)" et "ui =
(unsigned) -1", ou si la valeur n'est pas modifiée par la conversion comme dans "abs (2.0)".
Les avertissements concernant les conversions entre les entiers signés et non signés peuvent être désactivés en
en utilisant -Wno-sign-conversion.

Pour C++, avertissez également de la confusion de la résolution de surcharge pour les conversions définies par l'utilisateur ; et
conversions qui n'utiliseront jamais un opérateur de conversion de type : conversions en "void", le
même type, une classe de base ou une référence à eux. Avertissements concernant les conversions entre
les entiers signés et non signés sont désactivés par défaut en C++ sauf si -Wsign-conversion
est explicitement activé.

-Wno-conversion-null (C++ et Objective-C++ uniquement)
Ne pas avertir des conversions entre les types "NULL" et non pointeurs. -Wconversion-null is
activé par défaut.

-Wzéro-comme-constante-de-pointeur-null (C++ et Objective-C++ uniquement)
Avertir lorsqu'un littéral '0' est utilisé comme constante de pointeur nul. Cela peut être utile pour
faciliter la conversion en "nullptr" en C++11.

-Wempty-corps
Avertir si un corps vide se produit dans un if, d'autre or do tout en déclaration. Cet avertissement est
également activé par -Wextra.

-Wenum-comparer
Avertir d'une comparaison entre des valeurs de différents types énumérés. En énumération C++
les incohérences dans les expressions conditionnelles sont également diagnostiquées et l'avertissement est activé par
défaut. En C, cet avertissement est activé par -Mur.

-Wjump-manque-init (C, Objective-C uniquement)
Avertir si une instruction "goto" ou une instruction "switch" saute vers l'avant à travers le
initialisation d'une variable, ou saute en arrière à une étiquette après que la variable a été
initialisé. Cela avertit uniquement des variables qui sont initialisées lorsqu'elles sont
déclaré. Cet avertissement n'est pris en charge que pour C et Objective-C ; en C++ ce genre de
branche est une erreur dans tous les cas.

-Wjump-manque-init est inclus dans -Compatible WC++. Il peut être désactivé avec le
-Wno-jump-misse-init option.

-Wsign-comparer
Avertir lorsqu'une comparaison entre des valeurs signées et non signées pourrait produire une erreur
résultat lorsque la valeur signée est convertie en non signée. Cet avertissement est également activé
by -Wextra; pour obtenir les autres avertissements de -Wextra sans cet avertissement, utilisez -Wextra
-Wno-sign-comparer.

-Wsign-conversion
Avertir des conversions implicites qui peuvent changer le signe d'une valeur entière, comme
affecter une expression entière signée à une variable entière non signée. Un explicite
Cast fait taire l'avertissement. En C, cette option est également activée par -Wconversion.

-Adresse
Avertir des utilisations suspectes des adresses mémoire. Il s'agit notamment d'utiliser l'adresse d'un
fonction dans une expression conditionnelle, telle que "void func(void); if (func)", et
comparaisons avec l'adresse mémoire d'un littéral de chaîne, comme "if (x == "abc")".
De telles utilisations indiquent généralement une erreur du programmeur : l'adresse d'une fonction est toujours
évalue à vrai, donc leur utilisation dans un conditionnel indique généralement que le programmeur
oublié les parenthèses dans un appel de fonction ; et comparaisons avec des chaînes littérales
entraînent un comportement non spécifié et ne sont pas portables en C, ils indiquent donc généralement
que le programmeur avait l'intention d'utiliser "strcmp". Cet avertissement est activé par -Mur.

-Wlogique-op
Avertir des utilisations suspectes d'opérateurs logiques dans les expressions. Cela inclut l'utilisation
opérateurs logiques dans des contextes où un opérateur au niveau du bit est susceptible d'être attendu.

-Waggregate-retour
Avertir si des fonctions qui renvoient des structures ou des unions sont définies ou appelées. (Dans
langues où vous pouvez retourner un tableau, cela déclenche également un avertissement.)

-Wno-attributs
Ne pas avertir si un "__attribute__" inattendu est utilisé, comme des attributs non reconnus,
attributs de fonction appliqués aux variables, etc. Cela n'arrêtera pas les erreurs pour
utilisation incorrecte des attributs pris en charge.

-Wno-builtin-macro-redéfini
Ne pas avertir si certaines macros intégrées sont redéfinies. Cela supprime les avertissements pour
redéfinition de "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", et
"__BASE_FILE__".

-Wstrict-prototypes (C et Objective-C uniquement)
Avertir si une fonction est déclarée ou définie sans spécifier les types d'arguments. (Un
la définition de fonction à l'ancienne est autorisée sans avertissement si elle est précédée d'un
déclaration qui spécifie les types d'arguments.)

-Wold-style-déclaration (C et Objective-C uniquement)
Avertir des usages obsolètes, selon la norme C, dans une déclaration. Pour
par exemple, avertir si les spécificateurs de classe de stockage comme "static" ne sont pas les premières choses dans un
déclaration. Cet avertissement est également activé par -Wextra.

-Wold-style-définition (C et Objective-C uniquement)
Avertir si une définition de fonction à l'ancienne est utilisée. Un avertissement est donné même s'il y a
un prototype précédent.

-Type de paramètre manquant (C et Objective-C uniquement)
Un paramètre de fonction est déclaré sans spécificateur de type dans les fonctions de style K&R :

vide foo(bar) { }

Cet avertissement est également activé par -Wextra.

-Wmanquant-prototypes (C et Objective-C uniquement)
Avertir si une fonction globale est définie sans déclaration de prototype précédente. Cette
un avertissement est émis même si la définition elle-même fournit un prototype. Le but est de
détecter les fonctions globales qui ne sont pas déclarées dans les fichiers d'en-tête.

-Wmissing-déclarations
Avertir si une fonction globale est définie sans déclaration préalable. Faites-le même si
la définition elle-même fournit un prototype. Utilisez cette option pour détecter global
fonctions qui ne sont pas déclarées dans les fichiers d'en-tête. En C++, aucun avertissement n'est émis pour
modèles de fonction, ou pour les fonctions en ligne, ou pour les fonctions dans les espaces de noms anonymes.

-Wmissing-field-initialiseurs
Avertir si l'initialiseur d'une structure a des champs manquants. Par exemple, ce qui suit
code provoquerait un tel avertissement, car "xh" est implicitement zéro :

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

Cette option n'avertit pas des initialiseurs désignés, donc la modification suivante
ne déclencherait pas d'avertissement :

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

Cet avertissement est inclus dans -Wextra. Pour obtenir d'autres -Wextra avertissements sans celui-ci,
utilisé -Wextra -Wno-missing-field-initializers.

-Wmissing-format-attribut
Avertir des pointeurs de fonction qui pourraient être des candidats pour les attributs "format". Noter
ce ne sont que des candidats possibles, pas des candidats absolus. GCC devinera cette fonction
pointeurs avec des attributs "format" qui sont utilisés dans l'affectation, l'initialisation,
les instructions de passage ou de retour de paramètre doivent avoir un attribut "format" correspondant
dans le type résultant. C'est-à-dire la partie gauche de l'affectation ou de l'initialisation,
le type de la variable paramètre, ou le type de retour de la fonction conteneur
devraient également avoir un attribut "format" pour éviter l'avertissement.

GCC mettra également en garde contre les définitions de fonctions qui pourraient être candidates au "format"
les attributs. Encore une fois, ce ne sont que des candidats possibles. GCC devinera ce "format"
les attributs peuvent être appropriés pour toute fonction qui appelle une fonction comme "vprintf"
ou "vscanf", mais ce n'est pas toujours le cas, et certaines fonctions pour lesquelles
les attributs "format" sont appropriés peuvent ne pas être détectés.

-Wno-multichar
Ne pas avertir si une constante à plusieurs caractères ('FOOF') est utilisé. Ils indiquent généralement un
faute de frappe dans le code de l'utilisateur, car elles ont des valeurs définies par l'implémentation et ne doivent pas être
utilisé dans le code portable.

-Wnormalisé=
Dans ISO C et ISO C++, deux identifiants sont différents s'il s'agit de séquences différentes de
personnages. Cependant, parfois, lorsque des caractères en dehors du jeu de caractères ASCII de base
sont utilisés, vous pouvez avoir deux séquences de caractères différentes qui se ressemblent. Éviter
confusion, la norme ISO 10646 énonce certaines normalisation qui, une fois appliqué
assurez-vous que deux séquences qui se ressemblent sont transformées en la même séquence. CCG
peut vous avertir si vous utilisez des identifiants non normalisés ; cette option
contrôle cet avertissement.

Il existe quatre niveaux d'avertissement pris en charge par GCC. La valeur par défaut est -Wnormalisé=nfc,
qui avertit de tout identifiant qui n'est pas sous la forme normalisée ISO 10646 "C",
NFC. NFC est la forme recommandée pour la plupart des utilisations.

Malheureusement, certains caractères sont autorisés dans les identifiants par ISO C et ISO C++
qui, une fois transformés en NFC, ne sont pas autorisés dans les identifiants. C'est-à-dire qu'il n'y a aucun moyen
d'utiliser ces symboles en ISO C ou C++ portable et d'avoir tous vos identifiants en NFC.
-Wnormalisé=id supprime l'avertissement pour ces caractères. On espère que l'avenir
versions des normes concernées corrigeront cela, c'est pourquoi cette option n'est pas
le défaut.

Vous pouvez désactiver l'avertissement pour tous les caractères en écrivant -Wnormalisé=aucun. Vous
ne voudriez le faire que si vous utilisiez un autre schéma de normalisation (comme
"D"), car sinon vous pouvez facilement créer des bogues qui sont littéralement impossibles à
voir.

Certains caractères de la norme ISO 10646 ont des significations distinctes mais semblent identiques dans certaines polices
ou des méthodologies d'affichage, en particulier une fois le formatage appliqué. Par exemple
"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N", s'affichera comme un "n" normal
qui a été placé dans un exposant. ISO 10646 définit la NFCC normalisation
système pour convertir tous ces éléments sous une forme standard également, et GCC vous avertira si votre
le code n'est pas dans NFKC si vous utilisez -Wnormalisé=nfkc. Cet avertissement est comparable à
avertissement sur chaque identifiant qui contient la lettre O car il pourrait être confondu
avec le chiffre 0, et n'est donc pas la valeur par défaut, mais peut être utile comme codage local
convention si l'environnement de programmation ne peut pas être fixé pour afficher ces
caractères distinctement.

-Wno-déprécié
Ne pas avertir de l'utilisation de fonctionnalités obsolètes.

-Wno-deprecated-déclarations
Ne pas avertir des utilisations des fonctions, variables et types marqués comme obsolètes par
en utilisant l'attribut "obsolète".

-Wno-débordement
Ne pas avertir du dépassement de temps de compilation dans les expressions constantes.

-Woverride-init (C et Objective-C uniquement)
Avertir si un champ initialisé sans effets secondaires est remplacé lors de l'utilisation de
initialiseurs.

Cet avertissement est inclus dans -Wextra. Pour obtenir d'autres -Wextra avertissements sans celui-ci,
utilisé -Wextra -Wno-Override-init.

-Wpacked
Avertir si une structure reçoit l'attribut emballé, mais que l'attribut emballé n'a pas
effet sur la disposition ou la taille de la structure. De telles structures peuvent être mal alignées pour
peu d'avantage. Par exemple, dans ce code, la variable "fx" dans "struct bar" sera
être mal aligné même si "struct bar" n'a pas lui-même l'attribut packé :

structure foo {
int x;
caractère a, b, c, d ;
} __attribute __ ((emballé));
barre de structure {
caractère z;
structure foo f;
};

-Wpacked-bitfield-compat
Les séries 4.1, 4.2 et 4.3 de GCC ignorent l'attribut "packed" sur les champs de bits de type
"carboniser". Cela a été corrigé dans GCC 4.4, mais le changement peut entraîner des différences dans le
disposition de la structure. GCC vous informe lorsque le décalage d'un tel champ a changé dans GCC
4.4. Par exemple, il n'y a plus de remplissage de 4 bits entre les champs "a" et "b" dans ce
structure:

structure foo
{
caractère a : 4 ;
caractère b:8 ;
} __attribut__ ((emballé));

Cet avertissement est activé par défaut. Utilisation -Wno-packed-bitfield-compat pour désactiver cela
Attention.

-Wrembourré
Avertir si un rembourrage est inclus dans une structure, soit pour aligner un élément du
structure ou pour aligner l'ensemble de la structure. Parfois, lorsque cela se produit, il est possible
réorganiser les champs de la structure pour réduire le rembourrage et ainsi rendre le
structure plus petite.

-Wredundant-decls
Avertir si quelque chose est déclaré plus d'une fois dans le même périmètre, même dans les cas où
la déclaration multiple est valide et ne change rien.

-Wnested-externes (C et Objective-C uniquement)
Avertir si une déclaration "extern" est rencontrée dans une fonction.

-Winline
Avertir si une fonction ne peut pas être inline et qu'elle a été déclarée comme inline. Même avec ça
option, le compilateur n'avertit pas des échecs des fonctions en ligne déclarées dans
en-têtes système.

Le compilateur utilise une variété d'heuristiques pour déterminer s'il faut ou non intégrer un
fonction. Par exemple, le compilateur prend en compte la taille de la fonction à
inlined et la quantité d'inlining qui a déjà été effectuée dans la fonction actuelle.
Par conséquent, des changements apparemment insignifiants dans le programme source peuvent
avertissements produits par -Winline d'apparaître ou de disparaître.

-Wno-invalid-offsetof (C++ et Objective-C++ uniquement)
Supprimer les avertissements de l'application du décalage de macro à un type non POD. Selon
la norme ISO C++ 1998, appliquant décalage de à un type non POD n'est pas défini. Dans
les implémentations C++ existantes, cependant, décalage de donne généralement des résultats significatifs
même lorsqu'il est appliqué à certains types de types non POD. (Comme un simple struct qui
ne parvient pas à être un type POD uniquement en raison d'avoir un constructeur.) Ce drapeau est pour
utilisateurs qui savent qu'ils écrivent du code non portable et qui ont délibérément
choisi d'ignorer l'avertissement à ce sujet.

Les restrictions sur décalage de peut être assouplie dans une future version du standard C++.

-Wno-int-to-pointer-cast
Supprime les avertissements des transtypages vers le type de pointeur d'un entier de taille différente. Dans
C++, la conversion en un type de pointeur de plus petite taille est une erreur. Wit-to-pointer-cast is
activé par défaut.

-Wno-pointeur-vers-int-cast (C et Objective-C uniquement)
Supprime les avertissements des transtypages d'un pointeur vers un type entier de taille différente.

-Winvalid-pch
Avertir si un en-tête précompilé est trouvé dans le chemin de recherche mais ne peut pas être utilisé.

-long-long
Avertir si Long Long type est utilisé. Ceci est activé soit par -pédant or -Wtraditionnel
en modes ISO C90 et C++98. Pour inhiber les messages d'avertissement, utilisez -Wpas-long-long.

-Wvariadique-macros
Avertir si des macros variadiques sont utilisées en mode ISO C90 pédant, ou la syntaxe alternative GNU
en mode pédant ISO C99. C'est par défaut. Pour inhiber les messages d'avertissement, utilisez
-Wno-variadique-macros.

-Wvecteur-fonctionnement-performance
Avertir si l'opération vectorielle n'est pas implémentée via les capacités SIMD de l'architecture.
Principalement utile pour le réglage des performances. L'opération vectorielle peut être mise en œuvre
"par morceaux", ce qui signifie que l'opération scalaire est effectuée sur chaque vecteur
élément; "en parallèle", ce qui signifie que l'opération vectorielle est implémentée en utilisant
des scalaires de type plus large, ce qui est normalement plus efficace en termes de performances ; et "en tant que célibataire
scalaire", ce qui signifie que le vecteur s'intègre dans un type scalaire.

-Wvla
Avertir si un tableau de longueur variable est utilisé dans le code. -Wno-vla empêchera la
-pédant avertissement du tableau de longueur variable.

-Wvolatile-registre-var
Avertir si une variable de registre est déclarée volatile. Le modificateur volatil ne
inhiber toutes les optimisations susceptibles d'éliminer les lectures et/ou les écritures dans le registre
variables. Cet avertissement est activé par -Mur.

-Wdisabled-optimisation
Avertir si une passe d'optimisation demandée est désactivée. Cet avertissement n'est généralement pas
indiquer qu'il y a quelque chose qui ne va pas avec votre code ; il indique simplement que GCC
les optimiseurs étaient incapables de gérer le code efficacement. Souvent, le problème est que
votre code est trop gros ou trop complexe ; GCC refusera d'optimiser les programmes lorsque le
l'optimisation elle-même est susceptible de prendre un temps démesuré.

-Wpointer-signe (C et Objective-C uniquement)
Avertir en cas de passage d'argument de pointeur ou d'affectation avec une signature différente. Cette
L'option n'est prise en charge que pour C et Objective-C. Il est impliqué par -Mur et par
-pédant, qui peut être désactivé avec -Wno-pointer-signe.

-Wstack-protecteur
Cette option n'est active que lorsque -fstack-protecteur c'est actif. Il met en garde contre les fonctions
qui ne sera pas protégé contre l'écrasement de la pile.

-Wno-bavette
Supprimer les avertissements concernant les constructions qui ne peuvent pas être instrumentées par -fbavette.

-Cordes Woverlength
Avertir des constantes de chaîne qui sont plus longues que la longueur "minimum maximum"
spécifié dans la norme C. Les compilateurs modernes autorisent généralement les constantes de chaîne qui
sont beaucoup plus longs que la limite minimale de la norme, mais les programmes très portables devraient
évitez d'utiliser des chaînes plus longues.

La limite s'applique après chaîne de concaténation constante et ne compte pas la fin
NUL. En C90, la limite était de 509 caractères ; en C99, il a été augmenté à 4095. C++98 ne
ne spécifie pas un minimum normatif maximum, nous ne diagnostiquons donc pas les chaînes de longueur excessive dans
C ++.

Cette option est impliquée par -pédant, et peut être désactivé avec -Wno-overlength-strings.

-Wunsuffixed-float-constantes (C et Objective-C uniquement)
GCC émettra un avertissement pour toute constante flottante qui n'a pas de suffixe. Lorsque
utilisé avec -Wsystem-en-têtes il avertira de ces constantes dans l'en-tête du système
des dossiers. Cela peut être utile lors de la préparation du code à utiliser avec le "FLOAT_CONST_DECIMAL64"
pragma de l'extension décimale à virgule flottante à C99.

Options en Débogage Votre Programme or GCC
GCC a diverses options spéciales qui sont utilisées pour le débogage de votre programme ou de GCC :

-g Produire des informations de débogage dans le format natif du système d'exploitation (stabs, COFF,
XCOFF, ou NAIN 2). GDB peut travailler avec ces informations de débogage.

Sur la plupart des systèmes qui utilisent le format stabs, -g permet l'utilisation d'informations de débogage supplémentaires
que seul GDB peut utiliser ; ces informations supplémentaires améliorent le débogage dans GDB, mais
fera probablement planter les autres débogueurs ou refusera de lire le programme. Si tu veux
pour contrôler avec certitude s'il faut générer les informations supplémentaires, utilisez -gstabs+,
-gstabs, -gxcoff+, -gxcoffou -gvms (voir ci-dessous).

GCC vous permet d'utiliser -g avec -O. Les raccourcis pris par le code optimisé peuvent
produisent parfois des résultats surprenants : certaines variables que vous avez déclarées peuvent ne pas exister à
tous; le flux de contrôle peut se déplacer brièvement là où vous ne vous y attendiez pas ; certaines déclarations peuvent
pas être exécutés car ils calculent des résultats constants ou leurs valeurs étaient déjà à
main; certaines instructions peuvent s'exécuter à différents endroits car elles ont été déplacées hors de
boucles.

Néanmoins, il s'avère possible de déboguer une sortie optimisée. Cela rend raisonnable
d'utiliser l'optimiseur pour les programmes qui pourraient avoir des bogues.

Les options suivantes sont utiles lorsque GCC est généré avec la capacité de plus
qu'un format de débogage.

-ggdb
Produire des informations de débogage à utiliser par GDB. Cela signifie utiliser le plus expressif
format disponible (DWARF 2, stabs ou le format natif si aucun de ceux-ci n'est
pris en charge), y compris les extensions GDB si possible.

-gstabs
Produire des informations de débogage au format stabs (si cela est pris en charge), sans GDB
prolongements. C'est le format utilisé par DBX sur la plupart des systèmes BSD. Sur MIPS, Alpha et
Systèmes System V Release 4, cette option produit une sortie de débogage qui n'est pas
compris par DBX ou SDB. Sur les systèmes System V Release 4, cette option nécessite le GNU
assembleur.

-felimate-unused-debug-symbols
Produire des informations de débogage au format stabs (si cela est pris en charge), pour les symboles uniquement
qui sont réellement utilisés.

-femit-class-debug-toujours
Au lieu d'émettre des informations de débogage pour une classe C++ dans un seul fichier objet,
l'émettre dans tous les fichiers objets utilisant la classe. Cette option doit être utilisée uniquement avec
débogueurs incapables de gérer la façon dont GCC émet normalement des informations de débogage
pour les classes car l'utilisation de cette option augmentera la taille des informations de débogage
jusqu'à un facteur de deux.

-fno-debug-types-section
Par défaut, lors de l'utilisation de DWARF v4 ou d'un type supérieur, les DIE seront placés dans leur propre
.debug_types au lieu de les intégrer à la section .debug_info. Il est
plus efficace de les mettre dans des sections séparées de comdat puisque l'éditeur de liens sera alors
capable de supprimer les doublons. Mais tous les consommateurs DWARF ne prennent pas en charge les sections .debug_types
encore.

-gstabs+
Produire des informations de débogage au format stabs (si cela est pris en charge), en utilisant GNU
extensions comprises uniquement par le débogueur GNU (GDB). L'utilisation de ces extensions est
susceptible de faire planter d'autres débogueurs ou de refuser de lire le programme.

-gcoff
Produire des informations de débogage au format COFF (s'il est pris en charge). C'est le
format utilisé par SDB sur la plupart des systèmes System V antérieurs à System V Release 4.

-gxcoff
Produire des informations de débogage au format XCOFF (s'il est pris en charge). C'est le
format utilisé par le débogueur DBX sur les systèmes IBM RS/6000.

-gxcoff+
Produire des informations de débogage au format XCOFF (s'il est pris en charge), en utilisant GNU
extensions comprises uniquement par le débogueur GNU (GDB). L'utilisation de ces extensions est
susceptible de faire planter d'autres débogueurs ou de refuser de lire le programme, et peut provoquer
assembleurs autres que l'assembleur GNU (GAS) échouent avec une erreur.

-nain-version
Produisez des informations de débogage au format DWARF (s'il est pris en charge). C'est le
format utilisé par DBX sur IRIX 6. La valeur de version peut être 2, 3 ou 4 ; les
la version par défaut est 2.

Notez qu'avec DWARF version 2, certains ports nécessitent et utiliseront toujours des
extensions DWARF 3 en conflit dans les tables de déroulement.

La version 4 peut nécessiter GDB 7.0 et -fvar-suivi-affectations pour un bénéfice maximum.

-commutateurs-grecord-gcc
Ce commutateur provoque les options de ligne de commande utilisées pour appeler le compilateur qui peut
affecter la génération de code à ajouter à l'attribut DW_AT_producer dans DWARF
informations de débogage. Les options sont concaténées avec des espaces les séparant de
entre eux et à partir de la version du compilateur. Voir également -frecord-gcc-commutateurs pour un autre
moyen de stocker les options du compilateur dans le fichier objet.

-gno-record-gcc-commutateurs
Interdire l'ajout d'options de ligne de commande à l'attribut DW_AT_producer dans DWARF
informations de débogage. C'est la valeur par défaut.

-gstrict-nain
Interdire l'utilisation d'extensions de version standard DWARF ultérieure à celle sélectionnée avec
-nain-version. Sur la plupart des cibles utilisant des extensions DWARF non conflictuelles ultérieures
les versions standard sont autorisées.

-gno-strict-nain
Autoriser l'utilisation d'extensions de version standard DWARF ultérieure à celle sélectionnée avec
-nain-version.

-gvms
Produisez des informations de débogage au format de débogage VMS (s'il est pris en charge). C'est le
format utilisé par DEBUG sur les systèmes VMS.

-gniveau
-ggdbniveau
-gstabsniveau
-gcoffniveau
-gxcoffniveau
-gvmsniveau
Demandez des informations de débogage et utilisez également niveau pour spécifier la quantité d'informations. Les
le niveau par défaut est 2.

Le niveau 0 ne produit aucune information de débogage. Ainsi, -g0 annule -g.

Le niveau 1 produit un minimum d'informations, suffisant pour effectuer des backtraces dans certaines parties du
programme que vous ne prévoyez pas de déboguer. Cela comprend les descriptions des fonctions et
variables externes, mais aucune information sur les variables locales et aucun numéro de ligne.

Le niveau 3 comprend des informations supplémentaires, telles que toutes les définitions de macros présentes dans le
programme. Certains débogueurs prennent en charge l'expansion des macros lorsque vous utilisez -g3.

-gdwarf-2 n'accepte pas de niveau de débogage concaténé, car GCC prenait en charge un
option -gnain cela signifiait générer des informations de débogage dans la version 1 du DWARF
format (qui est très différent de la version 2), et cela aurait été trop déroutant.
Ce format de débogage est obsolète depuis longtemps, mais l'option ne peut pas être modifiée maintenant. Utilisez plutôt
un montant supplémentaire de -gniveau option pour changer le niveau de débogage pour DWARF.

-gtoggle
Désactivez la génération d'informations de débogage, si l'omission de cette option l'aurait générée,
ou allumez-le au niveau 2 sinon. La position de cet argument dans la ligne de commande
n'a pas d'importance, il prend effet après le traitement de toutes les autres options, et il le fait
une seule fois, quel que soit le nombre de fois qu'il est donné. Ceci est principalement destiné à être utilisé
avec -fcompare-debug.

-fdump-final-insns[=filet]
Videz la représentation interne finale (RTL) dans filet. Si l'argument optionnel est
omis (ou si filet est "."), le nom du fichier de vidage sera déterminé en ajoutant
".gkd" au nom du fichier de sortie de compilation.

-fcompare-debug[=opte]
Si aucune erreur ne se produit lors de la compilation, exécutez le compilateur une deuxième fois, en ajoutant opte ainsi que
-fcompare-debug-seconde aux arguments passés à la deuxième compilation. Jetez le
représentation interne finale dans les deux compilations, et afficher une erreur si elles diffèrent.

Si le signe égal est omis, la valeur par défaut -gtoggle est utilisé.

La variable d'environnement GCC_COMPARE_DEBUG, si défini, non vide et non nul,
active implicitement -fcompare-debug. Si GCC_COMPARE_DEBUG est défini sur une chaîne
commençant par un tiret, puis il est utilisé pour opte, sinon la valeur par défaut -gtoggle is
utilisé.

-fcompare-debug=, avec le signe égal mais sans opte, est équivalent à
-fno-comparer-debug, ce qui désactive le dumping de la représentation finale et le
deuxième compilation, empêchant même GCC_COMPARE_DEBUG de prendre effet.

Pour vérifier la couverture complète pendant -fcompare-debug tester, définir GCC_COMPARE_DEBUG dire
-fcompare-debug-not-overridden, que GCC rejettera comme une option invalide dans n'importe quel
compilation réelle (plutôt que prétraitement, assemblage ou liaison). Pour obtenir juste un
avertissement, réglage GCC_COMPARE_DEBUG à -w%n-fcompare-debug ne sauraient remplacé ça ira.

-fcompare-debug-seconde
Cette option est implicitement passée au compilateur pour la deuxième compilation demandée
by -fcompare-debug, ainsi que des options pour désactiver les avertissements et en omettant d'autres options
cela entraînerait des effets secondaires des sorties du compilateur vers des fichiers ou vers la sortie standard.
Les fichiers de vidage et les fichiers temporaires conservés sont renommés de manière à contenir le ".gk"
extension supplémentaire lors de la deuxième compilation, pour éviter d'écraser ceux
généré par le premier.

Lorsque cette option est transmise au pilote du compilateur, cela provoque le premier compilation à
être ignoré, ce qui le rend utile pour rien d'autre que le débogage du compilateur proprement dit.

-felimate-nain2-dups
Compresser les informations de débogage DWARF2 en éliminant les informations dupliquées sur chaque
symbole. Cette option n'a de sens que lors de la génération d'informations de débogage DWARF2
avec -gdwarf-2.

-femit-struct-debug-baseonly
N'émettez des informations de débogage pour les types de type struct que lorsque le nom de base du
Le fichier source de compilation correspond au nom de base du fichier dans lequel la structure a été définie.

Cette option réduit considérablement la taille des informations de débogage, mais à
perte potentielle significative d'informations de type pour le débogueur. Voir
-femit-struct-debug-réduit pour une option moins agressive. Voir
-femit-struct-debug-debuged pour un contrôle plus détaillé.

Cette option ne fonctionne qu'avec DWARF 2.

-femit-struct-debug-réduit
N'émettez des informations de débogage pour les types de type struct que lorsque le nom de base du
le fichier source de compilation correspond au nom de base du fichier dans lequel le type a été défini,
sauf si la structure est un modèle ou définie dans un en-tête système.

Cette option réduit considérablement la taille des informations de débogage, certaines
perte potentielle d'informations de type pour le débogueur. Voir -femit-struct-debug-baseonly
pour une option plus agressive. Voir -femit-struct-debug-debuged pour plus de détails
.

Cette option ne fonctionne qu'avec DWARF 2.

-femit-struct-debug-debuged[=liste-spéc]
Spécifiez les types de type struct pour lesquels le compilateur générera des informations de débogage.
L'intention est de réduire les informations de débogage de structure en double entre différents objets
fichiers dans le même programme.

Cette option est une version détaillée de -femit-struct-debug-réduit ainsi que
-femit-struct-debug-baseonly, qui servira pour la plupart des besoins.

Une spécification a la syntaxe[rép :|Indiana:][ordre :|genre:](tous|sys|base|aucun)

Le premier mot facultatif limite la spécification aux structures qui sont utilisées directement
(rép :) ou utilisé indirectement (Indiana:). Un type struct est utilisé directement lorsqu'il s'agit du type
d'une variable, membre. Les utilisations indirectes surviennent via des pointeurs vers des structures. C'est-à-dire,
lorsque l'utilisation d'une structure incomplète serait légale, l'utilisation est indirecte. Un exemple est
struct UN direct; struct deux * indirect;.

Le deuxième mot facultatif limite la spécification aux structures ordinaires (ordre :) ou
structures génériques (genre:). Les structures génériques sont un peu compliquées à expliquer. Pour le C++,
ce sont des spécialisations non explicites de classes modèles, ou des classes non modèles
au sein de ce qui précède. D'autres langages de programmation ont des génériques, mais
-femit-struct-debug-debuged ne les met pas encore en œuvre.

Le troisième mot spécifie les fichiers source des structures pour lesquelles le compilateur
émettra des informations de débogage. Les valeurs aucun ainsi que tous avoir le sens normal. Les
Plus-value base signifie que la base de nom du fichier dans lequel la déclaration de type
apparaît doit correspondre à la base du nom du fichier de compilation principal. En pratique,
cela signifie que les types déclarés dans foo.c ainsi que foo.h aura des informations de débogage, mais
les types déclarés dans un autre en-tête ne le seront pas. La valeur sys désigne les types satisfaisant
base ou déclaré dans les en-têtes du système ou du compilateur.

Vous devrez peut-être expérimenter pour déterminer les meilleurs paramètres pour votre application.

La valeur par défaut est -femit-struct-debug-detailed=tout.

Cette option ne fonctionne qu'avec DWARF 2.

-fno-merge-debug-strings
Dirigez l'éditeur de liens pour ne pas fusionner les chaînes dans les informations de débogage qui sont
identiques dans différents fichiers objets. La fusion n'est pas prise en charge par tous les assembleurs ou
liens. La fusion diminue la taille des informations de débogage dans le fichier de sortie à
le coût de l'augmentation du temps de traitement des liens. La fusion est activée par défaut.

-fdebug-prefix-map=et les sites anciens=neufs
Lors de la compilation de fichiers dans le répertoire et les sites anciens, enregistrez les informations de débogage les décrivant comme
in neufs à la place.

-fno-nain2-cfi-asm
Émettre les informations de déroulement de DWARF 2 en tant que section ".eh_frame" générée par le compilateur au lieu d'utiliser
Directives GAS ".cfi_*".

-p Générer du code supplémentaire pour écrire des informations de profil adaptées au programme d'analyse
prof. Vous devez utiliser cette option lors de la compilation des fichiers sources sur lesquels vous souhaitez des données,
et vous devez également l'utiliser lors de la liaison.

-pg Générer du code supplémentaire pour écrire des informations de profil adaptées au programme d'analyse
gprof. Vous devez utiliser cette option lors de la compilation des fichiers sources sur lesquels vous souhaitez des données,
et vous devez également l'utiliser lors de la liaison.

-Q Fait en sorte que le compilateur imprime chaque nom de fonction au fur et à mesure qu'il est compilé, et en imprime
statistiques sur chaque passe lorsqu'elle se termine.

-ftime-rapport
Fait en sorte que le compilateur imprime des statistiques sur le temps consommé par chaque passe lorsqu'il
se termine.

-fmem-rapport
Fait en sorte que le compilateur imprime des statistiques sur l'allocation de mémoire permanente lorsqu'il
se termine.

-fpre-ipa-mem-rapport
-fpost-ipa-mem-rapport
Le compilateur imprime des statistiques sur l'allocation de mémoire permanente avant ou
après optimisation interprocédurale.

-fstack-utilisation
Rend les informations d'utilisation de la pile de sortie du compilateur pour le programme, sur une fonction par fonction
base. Le nom de fichier pour le dump est fait en ajoutant .swf à la nomaux. nomaux is
généré à partir du nom du fichier de sortie, s'il est explicitement spécifié et qu'il ne s'agit pas d'un
exécutable, sinon c'est le nom de base du fichier source. Une entrée est composée de
trois champs :

· Le nom de la fonction.

· Un certain nombre d'octets.

· Un ou plusieurs qualificatifs : « statique », « dynamique », « borné ».

Le qualificatif « statique » signifie que la fonction manipule la pile de manière statique :
nombre fixe d'octets sont alloués à la trame lors de l'entrée de la fonction et libérés sur
sortie de la fonction ; aucun ajustement de pile n'est effectué par ailleurs dans la fonction. La deuxième
est ce nombre fixe d'octets.

Le qualificatif "dynamique" signifie que la fonction manipule la pile dynamiquement : dans
en plus de l'allocation statique décrite ci-dessus, des ajustements de pile sont effectués dans le
corps de la fonction, par exemple pour pousser/pop des arguments autour des appels de fonction. Si la
le qualificatif « borné » est également présent, le montant de ces ajustements est borné à
temps de compilation et le deuxième champ est une limite supérieure de la quantité totale de pile utilisée
par la fonction. S'il n'est pas présent, le montant de ces régularisations n'est pas borné
au moment de la compilation et le deuxième champ ne représente que la partie délimitée.

-fprofile-arcs
Ajouter du code pour que le programme se déroule arcs sont instrumentés. Pendant l'exécution du programme
enregistre combien de fois chaque branche et chaque appel est exécuté et combien de fois il est pris
ou des retours. Lorsque le programme compilé se termine, il enregistre ces données dans un fichier appelé
auxname.gcda pour chaque fichier source. Les données peuvent être utilisées à des fins de profil
optimisations (-fbranche-probabilités), ou pour l'analyse de couverture de test
(-ftest-couverture). Chaque fichier objet nomaux est généré à partir du nom du
fichier de sortie, s'il est explicitement spécifié et qu'il ne s'agit pas de l'exécutable final, sinon il
est le nom de base du fichier source. Dans les deux cas, tout suffixe est supprimé (par exemple
foo.gcda pour le fichier d'entrée rép/foo.cou rép/foo.gcda pour le fichier de sortie spécifié comme -o
dir/foo.o).

--couverture
Cette option est utilisée pour compiler et lier le code instrumenté pour l'analyse de couverture. Les
option est synonyme de -fprofile-arcs -ftest-couverture (lors de la compilation) et -lgcov
(lors de la liaison). Consultez la documentation de ces options pour plus de détails.

· Compilez les fichiers sources avec -fprofile-arcs plus optimisation et génération de code
option. Pour l'analyse de couverture de test, utilisez le -ftest-couverture option.
Vous n'avez pas besoin de profiler chaque fichier source dans un programme.

· Liez vos fichiers objets avec -lgcov or -fprofile-arcs (ce dernier implique la
ancien).

· Exécuter le programme sur une charge de travail représentative pour générer le profil d'arc
informations. Cela peut être répété un certain nombre de fois. Vous pouvez exécuter simultanément
instances de votre programme, et à condition que le système de fichiers prenne en charge le verrouillage, le
les fichiers de données seront correctement mis à jour. Les appels « fork » sont également détectés et
correctement géré (le double comptage ne se produira pas).

· Pour les optimisations dirigées par profil, compilez à nouveau les fichiers source avec le même
options d'optimisation et de génération de code plus -fbranche-probabilités.

· Pour l'analyse de couverture de test, utilisez gcov produire des informations lisibles par l'homme à partir de
le .gcno ainsi que .gcda des dossiers. Se référer au gcov documentation pour plus
</br>L’Information.

Avec -fprofile-arcs, pour chaque fonction de votre programme, GCC crée un flux de programme
graphique, puis trouve un arbre couvrant pour le graphique. Seuls les arcs qui ne sont pas sur le
spanning tree doit être instrumenté : le compilateur ajoute du code pour compter le nombre de
fois que ces arcs sont exécutés. Lorsqu'un arc est la seule sortie ou la seule entrée
un bloc, le code d'instrumentation peut être ajouté au bloc ; sinon, une nouvelle base
doit être créé pour contenir le code d'instrumentation.

-ftest-couverture
Produire un fichier de notes que le gcov l'utilitaire de couverture de code peut utiliser pour afficher le programme
couverture. Le fichier de notes de chaque fichier source est appelé auxname.gcno. Se référer au
-fprofile-arcs option ci-dessus pour une description de nomaux et des instructions sur la façon de
générer des données de couverture de test. Les données de couverture correspondront plus étroitement aux fichiers sources,
si vous n'optimisez pas.

-fdbg-cnt-liste
Imprimez le nom et la limite supérieure du compteur pour tous les compteurs de débogage.

-fdbg-cnt=liste de contre-valeurs
Définissez la limite supérieure du compteur de débogage interne. liste de contre-valeurs est une virgule séparée
liste des prénom:Plus-value paires qui définissent la limite supérieure de chaque compteur de débogage prénom à
Plus-value. Tous les compteurs de débogage ont la limite supérieure initiale de UINT_MAX, Ainsi dbg_cnt()
renvoie toujours vrai sauf si la limite supérieure est définie par cette option. par exemple avec
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) ne retournera vrai que pour les 10 premiers
appels

-fendable-genre-pass
-fdésactiver-genre-pass=liste-plage
Il s'agit d'un ensemble d'options de débogage qui sont utilisées pour explicitement désactiver/activer
l'optimisation passe. Pour les utilisateurs du compilateur, options régulières pour activer/désactiver les passes
devrait être utilisé à la place.

*<-fdisable-ipa-pass>
Désactiver le pass ipa pass. pass est le nom du passe. Si la même passe est statique
invoqué plusieurs fois dans le compilateur, le nom de passe doit être suivi d'un
numéro séquentiel à partir de 1.

*<-fdisable-rtl-pass>
*<-fdisable-rtl-pass=liste-plage>
Désactiver le pass rtl pass. pass est le nom du passe. Si la même passe est statique
invoqué plusieurs fois dans le compilateur, le nom de passe doit être suivi d'un
numéro séquentiel à partir de 1. liste-plage est une liste séparée par des virgules de
des plages de fonctions ou des noms d'assembleur. Chaque plage est une paire de nombres séparés par un
côlon. La gamme est inclusive aux deux extrémités. Si la plage est triviale, le nombre
paire peut être simplifiée en un seul nombre. Si le nœud cgraph de la fonction uid is
compris dans l'une des plages spécifiées, le pass est désactivé pour cela
fonction. le uid est affiché dans l'en-tête de fonction d'un fichier de vidage, et le pass
les noms peuvent être vidés en utilisant l'option -fdump-passes.

*<-fdisable-tree-pass>
*<-fdisable-tree-pass=liste-plage>
Désactiver l'arborescence pass. Voir -fdisable-rtl pour la description de l'option
arguments.

*<-fenable-ipa-pass>
Activer le pass ipa pass. pass est le nom du passe. Si la même passe est statique
invoqué plusieurs fois dans le compilateur, le nom de passe doit être suivi d'un
numéro séquentiel à partir de 1.

*<-fenable-rtl-pass>
*<-fenable-rtl-pass=liste-plage>
Activer le pass rtl pass. Voir -fdisable-rtl pour la description de l'argument d'option et
exemples.

*<-fenable-tree-pass>
*<-fenable-tree-pass=liste-plage>
Activer l'arborescence pass. Voir -fdisable-rtl pour la description des arguments d'option.

# désactiver ccp1 pour toutes les fonctions
-fdisable-tree-ccp1
# désactiver le déroulement complet pour la fonction dont l'UID du nœud cgraph est 1
-fenable-tree-cunroll=1
# désactiver gcse2 pour les fonctions aux plages suivantes [1,1],
# [300,400 400,1000] et [XNUMX XNUMX]
# désactiver gcse2 pour les fonctions foo et foo2
-fdisable-rtl-gcse2=foo,foo2
# désactiver l'inline précoce
-fdisable-tree-einline
# désactiver l'inlining ipa
-fdisable-ipa-inline
# activer le déroulement complet de l'arbre
-fenable-tree-dérouler

-dlettres
-fdump-rtl-pass
Dit de faire des vidages de débogage pendant la compilation aux moments spécifiés par lettres. Ce
est utilisé pour déboguer les passes basées sur RTL du compilateur. Les noms de fichiers pour la plupart
des vidages sont effectués en ajoutant un numéro de passe et un mot au nom de vidage, et le
les fichiers sont créés dans le répertoire du fichier de sortie. Notez que le numéro de passe est
calculé de manière statique au fur et à mesure que les passes sont enregistrées dans le gestionnaire de passes. Ainsi, le
la numérotation n'est pas liée à l'ordre dynamique d'exécution des passes. En particulier,
un pass installé par un plugin peut avoir un nombre supérieur à 200 même s'il s'exécute assez
début. nom de vidage est généré à partir du nom du fichier de sortie, s'il est explicitement
spécifié et ce n'est pas un exécutable, sinon c'est le nom de base de la source
déposer. Ces commutateurs peuvent avoir des effets différents lorsque -E est utilisé pour le prétraitement.

Les vidages de débogage peuvent être activés avec un -fdump-rtl commutateur ou certains -d option lettres. Ici
sont les lettres possibles à utiliser dans pass ainsi que lettres, et leurs significations :

-fdump-rtl-alignements
Vidage après que les alignements de branches ont été calculés.

-fdump-rtl-asmcons
Vider après avoir corrigé les instructions rtl qui ont des contraintes d'entrée/sortie insatisfaites.

-fdump-rtl-auto_inc_dec
Vidage après la découverte auto-inc-dec. Ce pass n'est exécuté que sur les architectures qui
avoir des instructions d'augmentation automatique ou de décroissance automatique.

-fdump-rtl-barrières
Jeter après avoir nettoyé les instructions de la barrière.

-fdump-rtl-bbpart
Vidage après partitionnement des blocs de base chauds et froids.

-fdump-rtl-bbro
Vidage après réorganisation des blocs.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 ainsi que -fdump-rtl-btl2 activer le dumping après la cible à deux branches
optimisation de charge passe.

-fdump-rtl-contourner
Vidage après saut et optimisations de flux de contrôle.

-fdump-rtl-combiner
Vidage après le passage de la combinaison d'instructions RTL.

-fdump-rtl-compgotos
Dump après avoir dupliqué les gotos calculés.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2et -fdump-rtl-ce3 permettre le dumping après les trois
si la conversion réussit.

-fdump-rtl-cprop_hardreg
Vidage après propagation de la copie du registre papier.

-fdump-rtl-csa
Videz après avoir combiné les ajustements de pile.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 ainsi que -fdump-rtl-cse2 activer le dumping après les deux sous-
l'élimination d'expression passe.

-fdump-rtl-dce
Videz après l'élimination du code mort autonome.

-fdump-rtl-dbr
Vidage après la planification de branche retardée.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 ainsi que -fdump-rtl-dce2 activer le dumping après les deux magasins morts
l'élimination passe.

-fdump-rtl-eh
Vidage après finalisation du code de gestion EH.

-fdump-rtl-eh_ranges
Vidage après conversion des régions de plage de traitement EH.

-fdump-rtl-expand
Vidage après génération RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 ainsi que -fdump-rtl-fwprop2 activer le dumping après les deux avant
passe de propagation.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 ainsi que -fdump-rtl-gcse2 autoriser le dumping après la mise en commun globale
élimination de sous-expression.

-fdump-rtl-init-regs
Dump après l'initialisation des registres.

-fdump-rtl-initiales
Vidage après le calcul des ensembles de valeurs initiales.

-fdump-rtl-into_cfglayout
Vider après la conversion en mode cfglayout.

-fdump-rtl-ira
Vidage après l'allocation de registre itérée.

-fdump-rtl-saut
Dump après l'optimisation du deuxième saut.

-fdump-rtl-loop2
-fdump-rtl-loop2 active le vidage après le passage de l'optimisation de la boucle rtl.

-fdump-rtl-mach
Vider après avoir effectué la passe de réorganisation dépendante de la machine, si cette passe
existe.

-fdump-rtl-mode_sw
Vidage après suppression des commutateurs de mode redondants.

-fdump-rtl-rnreg
Vidage après renumérotation des registres.

-fdump-rtl-outof_cfglayout
Vider après la conversion depuis le mode cfglayout.

-fdump-rtl-judas2
Dump après le judas.

-fdump-rtl-postrechargement
Vidage après les optimisations post-rechargement.

-fdump-rtl-pro_and_epilogue
Dump après avoir généré les prologues et épilogues de fonction.

-fdump-rtl-regmove
Vider après la passe de mouvement de registre.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 ainsi que -fdump-rtl-sched2 activer le dumping après le bloc de base
les passes de planification.

-fdump-rtl-voir
Vidage après élimination de l'extension de signe.

-fdump-rtl-seqabstr
Vidage après la découverte de séquence commune.

-fdump-rtl-raccourcir
Jeter après avoir raccourci les branches.

-fdump-rtl-frère
Vidage après les optimisations d'appels frères et sœurs.

-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 ainsi que
-fdump-rtl-split5 activer le dumping après cinq tours de fractionnement d'instructions.

-fdump-rtl-sms
Vidage après la planification modulo. Ce pass n'est exécuté que sur certaines architectures.

-fdump-rtl-pile
Vidage après conversion des registres "flat register file" de GCC vers les x87
registres en forme de pile. Ce pass n'est exécuté que sur les variantes x86.

-fdump-rtl-sous-reg1
-fdump-rtl-sous-reg2
-fdump-rtl-sous-reg1 ainsi que -fdump-rtl-sous-reg2 activer le dumping après les deux sous-reg
l'expansion passe.

-fdump-rtl-unshare
Vider après que tout rtl n'a pas été partagé.

-fdump-rtl-vartrack
Vidage après suivi variable.

-fdump-rtl-vregs
Vidage après conversion des registres virtuels en registres durs.

-fdump-rtl-web
Vidage après division de la plage en direct.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-définition
-fdump-rtl-dfinish
Ces dumps sont définis mais produisent toujours des fichiers vides.

-Dans
-fdump-rtl-all
Produisez toutes les décharges répertoriées ci-dessus.

-dA Annotez la sortie de l'assembleur avec diverses informations de débogage.

-dD Vider toutes les définitions de macro, à la fin du prétraitement, en plus de la normale
sortie.

-dH Produire un vidage de mémoire chaque fois qu'une erreur se produit.

-dp Annotez la sortie de l'assembleur avec un commentaire indiquant quel modèle et
alternative a été utilisée. La longueur de chaque instruction est également imprimée.

-dP Videz la RTL dans la sortie de l'assembleur sous forme de commentaire avant chaque instruction. Aussi
allume -dp annotation.

-dv Pour chacun des autres fichiers de vidage indiqués (-fdump-rtl-pass), vider un
représentation du graphique de flux de contrôle adapté à la visualisation avec VCG pour
fichier.pass.vcg.

-dx Générez simplement du RTL pour une fonction au lieu de la compiler. Généralement utilisé avec
-fdump-rtl-expand.

-fdump-noaddr
Lors des vidages de débogage, supprimez la sortie d'adresse. Cela rend plus possible de
utiliser diff sur les vidages de débogage pour les invocations du compilateur avec différents binaires du compilateur
et/ou différents emplacements de début text / bss / data / heap / stack / dso.

-fdump-non numéroté
Lors des vidages de débogage, supprimez les numéros d'instruction et la sortie d'adresse. Cette
rend plus possible l'utilisation de diff sur les vidages de débogage pour les invocations du compilateur avec
différentes options, notamment avec et sans -g.

-fdump-liens-non numérotés
Lorsque vous effectuez des vidages de débogage (voir -d option ci-dessus), supprimez les numéros d'instruction pour le
liens vers les instructions précédentes et suivantes dans une séquence.

-fdump-unité-de-traduction (C++ uniquement)
-fdump-unité-de-traduction-Options (C++ uniquement)
Transférez une représentation de l'arborescence de l'ensemble de l'unité de traduction dans un fichier.
Le nom du fichier est fait en ajoutant .toi au nom du fichier source, et le fichier est
créé dans le même répertoire que le fichier de sortie. Si la -Options le formulaire est utilisé,
Options contrôle les détails du vidage comme décrit pour le -fdump-arbre options.

-fdump-classe-hiérarchie (C++ uniquement)
-fdump-classe-hiérarchie-Options (C++ uniquement)
Transférez une représentation de la hiérarchie de chaque classe et de la disposition de la table de fonction virtuelle dans un
déposer. Le nom du fichier est fait en ajoutant .classe au nom du fichier source, et le fichier
est créé dans le même répertoire que le fichier de sortie. Si la -Options le formulaire est utilisé,
Options contrôle les détails du vidage comme décrit pour le -fdump-arbre options.

-fdump-ipa-interrupteur
Contrôler le dumping à différentes étapes de l'arbre de langage d'analyse inter-procédurale vers un
déposer. Le nom du fichier est généré en ajoutant un suffixe spécifique au commutateur à la source
nom de fichier et le fichier est créé dans le même répertoire que le fichier de sortie. Les
les vidages suivants sont possibles :

TOUTE Active tous les vidages d'analyse inter-procédurale.

graphique
Vide les informations sur l'optimisation du graphe d'appels, la suppression des fonctions inutilisées et
aligner les décisions.

en ligne
Vidage après l'incorporation de la fonction.

-fdump-passes
Videz la liste des passes d'optimisation qui sont activées et désactivées par le
options de ligne de commande.

-fdump-statistiques-option
Activez et contrôlez le vidage des statistiques de réussite dans un fichier séparé. Le nom du fichier est
généré en ajoutant un suffixe se terminant par .statistiques au nom du fichier source, et le
est créé dans le même répertoire que le fichier de sortie. Si la -option la forme est
utilisé, -Statistiques entraînera la somme des compteurs sur l'ensemble de l'unité de compilation tandis que
-détails videra chaque événement au fur et à mesure que les passes les génèrent. La valeur par défaut sans
L'option consiste à additionner les compteurs pour chaque fonction compilée.

-fdump-tree-interrupteur
-fdump-tree-interrupteur-Options
Contrôler le dumping à différentes étapes du traitement de l'arbre de langue intermédiaire pour
un fichier. Le nom du fichier est généré en ajoutant un suffixe spécifique au commutateur au
nom du fichier source et le fichier est créé dans le même répertoire que le fichier de sortie.
Si la -Options le formulaire est utilisé, Options est une liste de - options séparées qui contrôlent
les détails de la décharge. Toutes les options ne sont pas applicables à tous les vidages ; ceux qui sont
non significatif sera ignoré. Les options suivantes sont disponibles

propos
Imprimez l'adresse de chaque nœud. Habituellement, cela n'a pas de sens car cela change
selon l'environnement et le fichier source. Son utilisation principale est d'attacher un
dump avec un environnement de débogage.

nomasm
Si "DECL_ASSEMBLER_NAME" a été défini pour une decl donnée, utilisez-la dans le vidage
au lieu de "DECL_NAME". Son utilisation principale est la facilité d'utilisation en travaillant en arrière à partir de
noms mutilés dans le fichier d'assemblage.

svelte
Empêcher le dumping des membres d'une portée ou d'un corps de fonction simplement parce que
portée a été atteinte. Ne jetez ces articles que lorsqu'ils sont directement accessibles par
un autre chemin. Lors du vidage d'arbres joliment imprimés, cette option empêche le vidage
les organes des structures de contrôle.

brut Imprimez une représentation brute de l'arbre. Par défaut, les arbres sont joliment imprimés dans
une représentation de type C.

détails
Activer des vidages plus détaillés (non pris en compte par chaque option de vidage).

stats
Activer le vidage de diverses statistiques sur le pass (non honoré par chaque vidage
option).

blocs
Activer l'affichage des limites des blocs de base (désactivé dans les vidages bruts).

vps
Activez l'affichage des opérandes virtuels pour chaque instruction.

lin
Activez l'affichage des numéros de ligne pour les relevés.

uid Activer l'affichage de l'ID unique ("DECL_UID") pour chaque variable.

verbeux
Activez l'affichage du vidage de l'arborescence pour chaque instruction.

eh Activez l'affichage du numéro de région EH contenant chaque instruction.

scev
Activer l'affichage des détails de l'analyse de l'évolution scalaire.

TOUTE Activez toutes les options, sauf brut, svelte, verbeux ainsi que lin.

Les sauvegardes d'arbres suivantes sont possibles :

original
Dump avant toute optimisation basée sur l'arborescence, pour fichier.original.

optimisé
Vider après toutes les optimisations basées sur l'arborescence, pour fichier.optimisé.

rigoler
Videz chaque fonction avant et après le passage de la gimplification dans un fichier. Le fichier
le nom est fait en ajoutant .gimple au nom du fichier source.

cfg Videz le graphique de flux de contrôle de chaque fonction dans un fichier. Le nom du fichier est fait par
ajouter .cfg au nom du fichier source.

VCG Videz le graphique de flux de contrôle de chaque fonction dans un fichier au format VCG. Le fichier
le nom est fait en ajoutant .vcg au nom du fichier source. Notez que si le fichier
contient plus d'une fonction, le fichier généré ne peut pas être utilisé directement par
VCG. Vous devrez couper et coller le graphique de chaque fonction dans son propre
fichier en premier.

ch Videz chaque fonction après avoir copié les en-têtes de boucle. Le nom du fichier est fait en ajoutant
. Ch. au nom du fichier source.

ssa Videz les informations relatives à la SSA dans un fichier. Le nom du fichier est fait en ajoutant . Ssa
au nom du fichier source.

alias
Videz les informations d'alias pour chaque fonction. Le nom du fichier est fait en ajoutant
.alias au nom du fichier source.

ccp Videz chaque fonction après CCP. Le nom du fichier est fait en ajoutant .ccp à la
nom du fichier source.

magasinccp
Videz chaque fonction après STORE-CCP. Le nom du fichier est fait en ajoutant .storeccp
au nom du fichier source.

pré Vider les arbres après l'élimination partielle de la redondance. Le nom du fichier est fait par
ajouter .pré au nom du fichier source.

fre Videz les arbres après l'élimination complète de la redondance. Le nom du fichier est fait en ajoutant
.fre au nom du fichier source.

copieur
Videz les arbres après la propagation de la copie. Le nom du fichier est fait en ajoutant .copieprop
au nom du fichier source.

store_copyprop
Vider les arbres après la propagation de la copie en magasin. Le nom du fichier est fait en ajoutant
.store_copyprop au nom du fichier source.

dce Videz chaque fonction après l'élimination du code mort. Le nom du fichier est fait par
ajouter .dce au nom du fichier source.

garde-boue
Videz chaque fonction après avoir ajouté l'instrumentation de garde-boue. Le nom du fichier est fait par
ajouter .bavette au nom du fichier source.

sra Videz chaque fonction après avoir effectué le remplacement scalaire des agrégats. Le fichier
le nom est fait en ajoutant .sra au nom du fichier source.

lavabo
Videz chaque fonction après avoir effectué la capture de code. Le nom du fichier est fait par
ajouter .évier au nom du fichier source.

dom Videz chaque fonction après avoir appliqué les optimisations de l'arbre dominant. Le nom du fichier est
fait en ajoutant .dom au nom du fichier source.

dse Videz chaque fonction après avoir appliqué l'élimination de la mémoire morte. Le nom du fichier est fait
en ajoutant .dse au nom du fichier source.

phiopt
Videz chaque fonction après avoir optimisé les nœuds PHI dans un code linéaire. Le fichier
le nom est fait en ajoutant .phiopt au nom du fichier source.

étai avant
Videz chaque fonction après avoir propagé vers l'avant les variables à usage unique. Le nom du fichier
est fait en ajoutant .forwprop au nom du fichier source.

nom de copie
Videz chaque fonction après avoir appliqué l'optimisation de renommage de copie. Le nom du fichier est
fait en ajoutant .copyrename au nom du fichier source.

VNR Videz chaque fonction après avoir appliqué l'optimisation de la valeur de retour nommée sur générique
des arbres. Le nom du fichier est fait en ajoutant .nrv au nom du fichier source.

vecteur
Videz chaque fonction après avoir appliqué la vectorisation des boucles. Le nom du fichier est fait
en ajoutant .vect au nom du fichier source.

SLP Videz chaque fonction après avoir appliqué la vectorisation des blocs de base. Le nom du fichier est
fait en ajoutant .slp au nom du fichier source.

VRP Videz chaque fonction après la propagation de la plage de valeurs (VRP). Le nom du fichier est fait par
ajouter .vrp au nom du fichier source.

TOUTE Activez tous les vidages d'arborescence disponibles avec les indicateurs fournis dans cette option.

-ftree-vectorizer-verbose=n
Cette option contrôle la quantité de sortie de débogage que le vectoriseur imprime. Cette
les informations sont écrites avec l'erreur standard, à moins que -fdump-tree-all or -fdump-tree-vect
est spécifié, auquel cas il est sorti dans le fichier de liste de vidage habituel, .vect. For
n=0 aucune information de diagnostic n'est signalée. Si n=1 le vectoriseur rapporte chaque boucle
qui ont été vectorisées, et le nombre total de boucles qui ont été vectorisées. Si n=2 le
vectorizer signale également les boucles non vectorisées qui ont passé la première phase d'analyse
(vect_analyze_loop_form) - c'est-à-dire dénombrable, le plus interne, un seul bb, une seule entrée/sortie
boucles. C'est le même niveau de verbosité que -fdump-tree-vect-stats les usages. Plus haut
les niveaux de verbosité signifient soit plus d'informations vidées pour chaque boucle signalée, soit les mêmes
quantité d'informations rapportées pour plus de boucles : si n=3, modèle de coût du vectoriseur
les informations sont rapportées. Si n=4, les informations relatives à l'alignement sont ajoutées au
rapports. Si n=5, informations liées aux références de données (par exemple, les dépendances de la mémoire, la mémoire
access-patterns) est ajouté aux rapports. Si n=6, le vectoriseur rapporte également non-
les boucles les plus internes vectorisées qui n'ont pas passé la première phase d'analyse (c'est-à-dire qui peuvent ne pas
être dénombrable, ou peut avoir un flux de contrôle compliqué). Si n=7, le vectoriseur rapporte
également des boucles imbriquées non vectorisées. Si n=8, les informations relatives au SLP sont ajoutées au
rapports. Pour n=9, toutes les informations que le vectoriseur génère lors de son analyse
et la transformation est signalée. C'est le même niveau de verbosité que
-fdump-tree-vect-détails les usages.

-graine-frandom=un magnifique
Cette option fournit une graine que GCC utilise alors qu'il utiliserait autrement des nombres aléatoires.
Il est utilisé pour générer certains noms de symboles qui doivent être différents dans chaque
fichier compilé. Il est également utilisé pour placer des timbres uniques dans les fichiers de données de couverture et le
les fichiers objets qui les produisent. Vous pouvez utiliser le -Frandom-graine possibilité de produire
fichiers objets identiques de manière reproductible.

La un magnifique devrait être différent pour chaque fichier que vous compilez.

-fsched-verbeux=n
Sur les cibles qui utilisent l'ordonnancement des instructions, cette option contrôle la quantité de
le débogage affiche les impressions du planificateur. Ces informations sont écrites en erreur standard,
à moins que -fdump-rtl-sched1 or -fdump-rtl-sched2 est spécifié, auquel cas il est affiché
au fichier de liste de vidage habituel, .sched1 or .sched2 respectivement. Cependant pour n
supérieur à neuf, la sortie est toujours imprimée avec l'erreur standard.

Pour n supérieur à zéro, -fsched-verbeux produit les mêmes informations que
-fdump-rtl-sched1 ainsi que -fdump-rtl-sched2. For n supérieur à un, il a également une sortie de base
probabilités de bloc, informations détaillées sur la liste des prêts et informations sur l'unité/l'insn. Pour n
supérieur à deux, il inclut RTL au point d'abandon, le flux de contrôle et les informations sur les régions. Et
en n plus de quatre, -fsched-verbeux comprend également des informations sur la dépendance.

-sauve-temps
-save-temps=cwd
Stocker en permanence les fichiers intermédiaires "temporaires" habituels ; placez-les dans le courant
répertoire et nommez-les en fonction du fichier source. Ainsi, la compilation foo.c avec -c
-sauve-temps produirait des fichiers foo.je ainsi que foo.s, aussi bien que foo.o. Cela crée un
prétraité foo.je fichier de sortie même si le compilateur utilise maintenant normalement un
préprocesseur intégré.

Lorsqu'il est utilisé en combinaison avec le -x option de ligne de commande, -sauve-temps est raisonnable
suffisant pour éviter d'écraser un fichier source d'entrée avec la même extension qu'un
fichier intermédiaire. Le fichier intermédiaire correspondant peut être obtenu en renommant
le fichier source avant d'utiliser -sauve-temps.

Si vous invoquez GCC en parallèle, compiler plusieurs fichiers sources différents qui partagent un
nom de base commun dans différents sous-répertoires ou le même fichier source compilé pour
plusieurs destinations de sortie, il est probable que les différents compilateurs parallèles
interférer les uns avec les autres et écraser les fichiers temporaires. Par exemple:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

peut entraîner foo.je ainsi que foo.o écrites simultanément par les deux compilateurs.

-Save-Temps = obj
Stockez en permanence les fichiers intermédiaires "temporaires" habituels. Si la -o l'option est utilisée,
les fichiers temporaires sont basés sur le fichier objet. Si la -o l'option n'est pas utilisée, la
-Save-Temps = obj l'interrupteur se comporte comme -sauve-temps.

Par exemple :

gcc -save-temps=obj -c truc.c
gcc -save-temps=obj -c bar.c -o répertoire/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar

créerait foo.je, foo.s, rép/xbar.i, rép/xbar.s, rép2/yfoobar.i, rép2/yfoobar.set
rép2/yfoobar.o.

-temps[=filet]
Indiquez le temps CPU pris par chaque sous-processus dans la séquence de compilation. Pour C
fichiers source, c'est le compilateur proprement dit et l'assembleur (plus l'éditeur de liens si la liaison est
terminé).

Sans la spécification d'un fichier de sortie, la sortie ressemble à ceci :

# cc1 0.12 0.01
# comme 0.00 0.01

Le premier chiffre sur chaque ligne est le "temps utilisateur", c'est-à-dire le temps passé à exécuter le
programme lui-même. Le deuxième nombre est "temps système", temps passé à exécuter l'exploitation
routines système au nom du programme. Les deux nombres sont en secondes.

Avec la spécification d'un fichier de sortie, la sortie est ajoutée au fichier nommé,
et ça ressemble à ça :

0.12 0.01 cc1
0.00 0.01 comme

L'"heure utilisateur" et l'"heure système" sont déplacées avant le nom du programme, et le
les options passées au programme sont affichées, afin que l'on puisse dire plus tard quel fichier a été
en cours de compilation, et avec quelles options.

-fvar-suivi
Exécuter la passe de suivi variable. Il calcule où les variables sont stockées à chaque position
dans du code. De meilleures informations de débogage sont alors générées (si les informations de débogage
format prend en charge ces informations).

Il est activé par défaut lors de la compilation avec optimisation (-Tu, -O, -O2, ...),
informations de débogage (-g) et le format d'informations de débogage le prend en charge.

-fvar-suivi-affectations
Annotez les affectations aux variables utilisateur au début de la compilation et essayez d'effectuer
les annotations tout au long de la compilation jusqu'à la fin, dans une tentative
pour améliorer les informations de débogage tout en optimisant. Utilisation de -gdwarf-4 est recommandé avec
avec elle.

Il peut être activé même si var-tracking est désactivé, auquel cas les annotations seront
créé et maintenu, mais rejeté à la fin.

-fvar-tracking-assignments-toggle
cabillot -fvar-suivi-affectations, de la même manière que -gtoggle Bascule -g.

-print-file-name=bibliothèque
Imprimer le nom absolu complet du fichier de bibliothèque bibliothèque qui serait utilisé quand
lien --- et ne faites rien d'autre. Avec cette option, GCC ne compile ni ne lie
n'importe quoi; il imprime juste le nom du fichier.

-impression-multi-répertoire
Imprimer le nom du répertoire correspondant à la multilib sélectionnée par tout autre commutateur
présent dans la ligne de commande. Ce répertoire est censé exister dans GCC_EXEC_PREFIX.

-print-multi-lib
Imprimez le mappage des noms de répertoire multilib aux commutateurs du compilateur qui les activent.
Le nom du répertoire est séparé des commutateurs par ;, et chaque commutateur commence par un
@ à la place du -, sans espaces entre plusieurs commutateurs. Ceci est censé
faciliter le traitement du shell.

-print-multi-os-répertoire
Imprimer le chemin d'accès aux bibliothèques du système d'exploitation pour la multilib sélectionnée, par rapport à certains lib
sous-répertoire. Si des bibliothèques du système d'exploitation sont présentes dans le lib sous-répertoire et pas de multilibs
sont utilisés, c'est généralement juste ., si les bibliothèques du système d'exploitation sont présentes dans libsuffixe enfant de mêmes parents
répertoires imprimés, par exemple ../lib64, ../ lib or ../lib32, ou si les bibliothèques du système d'exploitation sont
présenter à lib/sous-répertoire sous-répertoires qu'il imprime, par exemple amd64, sparv9 or ev6.

-print-multiarch
Imprimer le chemin d'accès aux bibliothèques du système d'exploitation pour le multiarch sélectionné, par rapport à certains lib
sous-répertoire.

-print-nom-prog=Danse
Comme -print-nom-du-fichier, mais recherche un programme tel que cpp.

-print-libgcc-nom-de-fichier
Pareil que -print-file-name=libgcc.a.

Ceci est utile lorsque vous utilisez -nostdlib or -nodefaultlibs mais vous voulez créer un lien avec
libgcc.a. Tu peux faire

gcc -nostdlib ... `gcc -print-libgcc-nom-de-fichier`

-imprimer-recherche-répertoires
Imprimer le nom du répertoire d'installation configuré et une liste des programmes et
répertoires de la bibliothèque gcc cherchera --- et ne fera rien d'autre.

Ceci est utile lorsque gcc imprime le message d'erreur installation problème, ne peut pas exec
cpp0 : Non tel filet or annuaire. Pour résoudre ce problème, vous devez soit mettre cpp0 et par
d'autres composants du compilateur où gcc s'attend à les trouver, ou vous pouvez définir le
variable d'environnement GCC_EXEC_PREFIX dans le répertoire où vous les avez installés. Ne pas
oublie la traîne /.

-print-sysroot
Imprimez le répertoire sysroot cible qui sera utilisé lors de la compilation. C'est le
racine système cible spécifiée soit au moment de la configuration, soit à l'aide de la --sysroot option,
éventuellement avec un suffixe supplémentaire qui dépend des options de compilation. Si pas de cible
sysroot est spécifié, l'option n'affiche rien.

-print-sysroot-headers-suffixe
Imprimez le suffixe ajouté à la racine système cible lors de la recherche d'en-têtes, ou donnez un
erreur si le compilateur n'est pas configuré avec un tel suffixe --- et ne faites rien
autre.

-benne
Imprimer la machine cible du compilateur (par exemple, i686-pc-linux-gnu) --- et ne le faites pas
rien d'autre.

-version de vidage
Imprimer la version du compilateur (par exemple, 3.0) --- et ne faites rien d'autre.

-dumpspecs
Affichez les spécifications intégrées du compilateur --- et ne faites rien d'autre. (Ceci est utilisé lorsque
GCC lui-même est en cours de construction.)

-felimate-unused-debug-types
Normalement, lors de la production de la sortie DWARF2, GCC émettra des informations de débogage pour tous
types déclarés dans une unité de compilation, qu'ils soient ou non
utilisé dans cette unité de compilation. Parfois, cela est utile, comme si, dans le débogueur,
vous voulez convertir une valeur en un type qui n'est pas réellement utilisé dans votre programme (mais qui est
déclaré). Le plus souvent, cependant, cela se traduit par une quantité importante d'espace perdu.
Avec cette option, GCC évitera de produire une sortie de symbole de débogage pour les types qui sont
nulle part utilisé dans le fichier source en cours de compilation.

Options Ceci Control
Ces options contrôlent différentes sortes d'optimisations.

Sans aucune option d'optimisation, le but du compilateur est de réduire le coût de compilation
et faire en sorte que le débogage produise les résultats attendus. Les déclarations sont indépendantes : si vous
arrêter le programme avec un point d'arrêt entre les instructions, vous pouvez alors affecter une nouvelle valeur à
n'importe quelle variable ou changez le compteur du programme en n'importe quelle autre instruction dans la fonction et obtenez
exactement les résultats que vous attendez du code source.

L'activation des indicateurs d'optimisation oblige le compilateur à tenter d'améliorer les performances et/ou
la taille du code au détriment du temps de compilation et éventuellement de la possibilité de déboguer le
.

Le compilateur effectue une optimisation basée sur la connaissance qu'il a du programme.
La compilation de plusieurs fichiers à la fois en un seul mode de fichier de sortie permet au compilateur d'utiliser
informations obtenues à partir de tous les fichiers lors de la compilation de chacun d'eux.

Toutes les optimisations ne sont pas contrôlées directement par un indicateur. Seules les optimisations qui ont un
flag sont répertoriés dans cette section.

La plupart des optimisations ne sont activées que si un -O le niveau est défini sur la ligne de commande. Autrement
ils sont désactivés, même si des indicateurs d'optimisation individuels sont spécifiés.

Selon la cible et la façon dont GCC a été configuré, un ensemble légèrement différent de
des optimisations peuvent être activées à chaque -O niveau que ceux énumérés ici. Vous pouvez invoquer GCC
avec -Q --help=optimiseurs pour connaître l'ensemble exact des optimisations qui sont activées à
chaque niveau.

-O
-O1 Optimiser. L'optimisation de la compilation prend un peu plus de temps et beaucoup plus de mémoire pour
une grande fonction.

Avec -O, le compilateur essaie de réduire la taille du code et le temps d'exécution, sans effectuer
toutes les optimisations qui prennent beaucoup de temps de compilation.

-O active les indicateurs d'optimisation suivants :

-fauto-inc-dec -fcompare-elim -fcprop-registres -fdce -fdefer-pop -fdelayed-branche
-fdse -fguess-branche-probabilité -fif-conversion2 -fif-conversion -fipa-pure-const
-fipa-profil -fipa-référence -fmerge-constantes -fsplit-wide-types -ftree-bit-ccp
-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-ftree-dominator-opt -ftree-dse -ftree-forwprop -ftree-free -ftree-phiprop -ftree-sra
-ftree-PTA -ftre-ter -funit-a-a-time

-O s'allume aussi -fomit-frame-pointeur sur des machines où cela n'interfère pas
avec débogage.

-O2 Optimisez encore plus. GCC effectue presque toutes les optimisations prises en charge qui ne
impliquent un compromis espace-vitesse. Par rapport à -O, cette option augmente à la fois
temps de compilation et les performances du code généré.

-O2 active tous les indicateurs d'optimisation spécifiés par -O. Il active également les éléments suivants
indicateurs d'optimisation : -fthread-sauts -falign-fonctions -falign-sauts -falign-boucles
-falign-étiquettes -fcaller-sauvegarde -f saut en croix -fcse-suivre-sauts -fcse-skip-blocs
-fdelete-null-pointer-checks -fdévirtualiser -des-optimisations-coûteuses -fgcse
-fgcse-lm -finline-petites-fonctions -findirect-inline -fipa-sra
-foptimize-frères-soeurs-appels -fpartial-inline -f judas2 -fregmove -freorder-blocs
-freorder-fonctions -frun-cse-après-boucle -fsched-interbloc -spécification-fsched
-fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-débordement
-ftree-commutateur-conversion -ftree-tail-fusion -ftree-pré -ftree-vrp

Veuillez noter l'avertissement sous -fgcse à propos de l'invocation -O2 sur les programmes qui utilisent calculé
aller à S.

REMARQUE : dans Ubuntu 8.10 et les versions ultérieures, -D_FORTIFY_SOURCE=2 est défini par défaut et est
activé lorsque -O est réglé sur 2 ou plus. Cela permet un temps de compilation supplémentaire et
vérifie à l'exécution plusieurs fonctions de la libc. Pour désactiver, spécifiez soit
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 Optimisez encore plus. -O3 active toutes les optimisations spécifiées par -O2 et s'allume aussi
le -finline-fonctions, -funswitch-boucles, -frrédicatif, -fgcse-après-rechargement,
-ftree-vectoriser, -ftree-partial-pre ainsi que -fipa-cp-clone options.

-O0 Réduisez le temps de compilation et faites en sorte que le débogage produise les résultats attendus. C'est le
défaut.

-Tu Optimiser pour la taille. -Tu permet à tout -O2 optimisations qui n'augmentent généralement pas
taille du code. Il effectue également d'autres optimisations conçues pour réduire la taille du code.

-Tu désactive les indicateurs d'optimisation suivants : -falign-fonctions -falign-sauts
-falign-boucles -falign-étiquettes -freorder-blocs -freorder-blocs-et-partition
-fprefetch-boucles-tableaux -ftree-vect-loop-version

-Ofast
Ne pas respecter le strict respect des normes. -Ofast permet à tout -O3 optimisations. Ça aussi
permet des optimisations qui ne sont pas valables pour tous les programmes conformes aux normes. Ce
allume -ffast-mathématiques et le Fortran spécifique -fno-protect-parens ainsi que -fstack-tableaux.

Si vous utilisez plusieurs -O options, avec ou sans numéros de niveau, la dernière de ces options est
celui qui est efficace.

Options du formulaire -fdrapeau spécifier des indicateurs indépendants de la machine. La plupart des drapeaux ont les deux
formes positives et négatives; la forme négative de -ffou serait -fno-foo. Dans la table
ci-dessous, un seul des formulaires est répertorié --- celui que vous utiliserez généralement. Vous pouvez comprendre
l'autre forme en supprimant no- ou en l'ajoutant.

Les options suivantes contrôlent des optimisations spécifiques. Ils sont soit activés par -O
options ou sont liées à celles qui le sont. Vous pouvez utiliser les drapeaux suivants dans les rares cas
cas où un "réglage fin" des optimisations à effectuer est souhaité.

-fno-par défaut-en ligne
Ne rendez pas les fonctions membres en ligne par défaut simplement parce qu'elles sont définies à l'intérieur
la portée de la classe (C++ uniquement). Sinon, lorsque vous spécifiez -O, fonctions membres définies
à l'intérieur de la portée de la classe sont compilés en ligne par défaut ; c'est-à-dire que vous n'avez pas besoin d'ajouter en ligne
devant le nom de la fonction membre.

-fno-différer-pop
Affichez toujours les arguments de chaque appel de fonction dès que cette fonction revient. Pour
machines qui doivent faire apparaître des arguments après un appel de fonction, le compilateur laisse normalement
les arguments s'accumulent sur la pile pour plusieurs appels de fonction et les affiche tous à
une fois que.

Désactivé aux niveaux -O, -O2, -O3, -Tu.

-fforward-propager
Effectuez une passe de propagation vers l'avant sur RTL. Le pass essaie de combiner deux instructions
et vérifie si le résultat peut être simplifié. Si le déroulement en boucle est actif, deux passages
sont effectuées et la seconde est programmée après le déroulement de la boucle.

Cette option est activée par défaut aux niveaux d'optimisation -O, -O2, -O3, -Tu.

-ffp-contrat=Catégorie
-ffp-contrat=off désactive la contraction d'expression à virgule flottante. -ffp-contrat=rapide
permet la contraction d'expression à virgule flottante telle que la formation de fusions multiplication-addition
opérations si la cible les prend en charge nativement. -ffp-contrat=on permet
contraction d'expression à virgule flottante si la norme de langage le permet. C'est
actuellement pas mis en œuvre et traité sur un pied d'égalité -ffp-contrat=off.

La valeur par défaut est -ffp-contrat=rapide.

-fomit-frame-pointeur
Ne gardez pas le pointeur de cadre dans un registre pour les fonctions qui n'en ont pas besoin. Cette
évite les instructions pour enregistrer, configurer et restaurer les pointeurs de trame ; cela fait aussi un
registre supplémentaire disponible dans de nombreuses fonctions. It aussi fait débogage impossible on
quelques les machines.

Sur certaines machines, comme le VAX, ce drapeau n'a aucun effet, car le standard
la séquence d'appel gère automatiquement le pointeur de trame et rien n'est enregistré par
prétendre que ça n'existe pas. La macro de description de machine "FRAME_POINTER_REQUIRED"
contrôle si une machine cible prend en charge cet indicateur.

À partir de la version 4.6 de GCC, le paramètre par défaut (lorsqu'il n'est pas optimisé pour la taille) pour
Les cibles Linux x32 86 bits et Darwin x32 86 bits ont été modifiées en
-fomit-frame-pointeur. La valeur par défaut peut être rétablie à -fno-omettre-pointeur-de-cadre by
configuration de GCC avec le --enable-frame-pointeur option de configuration.

Activé aux niveaux -O, -O2, -O3, -Tu.

-foptimize-frères-soeurs-appels
Optimisez les appels récursifs entre frères et queue.

Activé aux niveaux -O2, -O3, -Tu.

-fno-en ligne
Ne développez aucune fonction en ligne en dehors de celles marquées avec le "always_inline"
attribut. Il s'agit de la valeur par défaut lorsqu'il n'est pas optimisé.

Les fonctions individuelles peuvent être exemptées de l'inlining en les marquant avec le "noinline"
attribuer.

-finline-petites-fonctions
Intégrer des fonctions à leurs appelants lorsque leur corps est plus petit que prévu
code d'appel de fonction (ainsi la taille globale du programme devient plus petite). Le compilateur
décide heuristiquement quelles fonctions sont suffisamment simples pour mériter d'être intégrées dans
Par ici. Cette mise en ligne s'applique à toutes les fonctions, même celles qui ne sont pas déclarées en ligne.

Activé au niveau -O2.

-findirect-inline
Inline également des appels indirects qui sont découverts comme connus au moment de la compilation grâce à
incorporation précédente. Cette option n'a d'effet que lorsque l'incorporation elle-même est activée
par The -finline-fonctions or -finline-petites-fonctions options.

Activé au niveau -O2.

-finline-fonctions
Considérez toutes les fonctions pour l'inline, même si elles ne sont pas déclarées inline. Les
le compilateur décide heuristiquement quelles fonctions méritent d'être intégrées de cette manière.

Si tous les appels à une fonction donnée sont intégrés et que la fonction est déclarée
"statique", alors la fonction n'est normalement pas sortie en tant que code assembleur à part entière.

Activé au niveau -O3.

-finline-fonctions-appelées-une fois
Considérez toutes les fonctions "statiques" appelées une fois pour l'incorporation dans leur appelant même si
ils ne sont pas marqués "inline". Si un appel à une fonction donnée est intégré, alors le
La fonction n'est pas sortie en tant que code assembleur à part entière.

Activé aux niveaux -O1, -O2, -O3 ainsi que -Tu.

-peur-inliner
Fonctions en ligne marquées par "always_inline" et fonctions dont le corps semble plus petit que
le surcoût d'appel de fonction avant de faire -fprofile-générer instrumentation et
véritable passe en ligne. Cela rend le profilage nettement moins cher et généralement
intégration plus rapide sur les programmes ayant de grandes chaînes de fonctions wrapper imbriquées.

Activé par défaut.

-fipa-sra
Effectuer le remplacement scalaire interprocédural des agrégats, la suppression des paramètres inutilisés
et remplacement des paramètres passés par référence par des paramètres passés par valeur.

Activé aux niveaux -O2, -O3 ainsi que -Tu.

-finline-limite=n
Par défaut, GCC limite la taille des fonctions pouvant être intégrées. Ce drapeau permet
contrôle grossier de cette limite. n est la taille des fonctions qui peuvent être incorporées dans
nombre de pseudo-instructions.

L'incorporation est en fait contrôlée par un certain nombre de paramètres, qui peuvent être spécifiés
individuellement en utilisant --param prénom=Plus-valueL’ -finline-limite=n l'option définit certains des
ces paramètres comme suit :

max-inline-insns-single
est fixé à n/ 2.

max-inline-insns-auto
est fixé à n/ 2.

Voir ci-dessous pour une documentation des paramètres individuels contrôlant l'inlining et
pour les valeurs par défaut de ces paramètres.

Remarque: il peut n'y avoir aucune valeur à -limite-finline qui entraîne un comportement par défaut.

Remarque: la pseudo-instruction représente, dans ce contexte particulier, un résumé
mesure de la taille de la fonction. Cela ne représente en aucun cas un décompte de l'assemblée
instructions et en tant que tel, sa signification exacte peut changer d'une version à une
un autre.

-fno-keep-inline-dllexport
Il s'agit d'une version plus fine de -fkeep-inline-fonctions, qui ne s'applique qu'aux
fonctions déclarées à l'aide de l'attribut "dllexport" ou declspec

-fkeep-inline-fonctions
En C, émettre des fonctions "statiques" qui sont déclarées "en ligne" dans le fichier objet, même si
la fonction a été intégrée à tous ses appelants. Ce commutateur n'affecte pas
fonctions utilisant l'extension "extern inline" dans GNU C90. En C++, émettez tout et n'importe quoi
fonctions en ligne dans le fichier objet.

-fkeep-statique-const
Emettre des variables déclarées "static const" lorsque l'optimisation n'est pas activée, même si le
les variables ne sont pas référencées.

GCC active cette option par défaut. Si vous voulez forcer le compilateur à vérifier si le
variable a été référencée, que l'optimisation soit activée ou non, utilisez
le -fno-keep-static-const option.

-fmerge-constantes
Tenter de fusionner des constantes identiques (constantes de chaîne et constantes à virgule flottante)
à travers les unités de compilation.

Cette option est la valeur par défaut pour une compilation optimisée si l'assembleur et l'éditeur de liens
soutiens le. Utilisation -fno-merge-constantes pour inhiber ce comportement.

Activé aux niveaux -O, -O2, -O3, -Tu.

-fmerge-toutes-constantes
Essayez de fusionner des constantes identiques et des variables identiques.

Cette option implique -fmerge-constantes. En plus de -fmerge-constantes this
considère par exemple même les tableaux initialisés constants ou les variables constantes initialisées avec
types entiers ou à virgule flottante. Les langages comme C ou C++ nécessitent chaque variable,
inclure plusieurs instances de la même variable dans les appels récursifs, pour avoir des
emplacements, donc l'utilisation de cette option entraînera un comportement non conforme.

-fmodulo-sched
Effectuez la programmation swing modulo juste avant la première passe de programmation. Cette
pass examine les boucles les plus internes et réorganise leurs instructions en chevauchant différentes
itérations.

-fmodulo-sched-allow-regmoves
Effectuez une planification modulo basée sur des SMS plus agressive avec des mouvements de registre autorisés. Par
en définissant ce drapeau, certains fronts d'anti-dépendances seront supprimés ce qui déclenchera
la génération de mouvements réguliers sur la base de l'analyse de la durée de vie. Cette option est
efficace uniquement avec -fmodulo-sched activée.

-fno-branche-compte-reg
N'utilisez pas d'instructions "décrémenter et brancher" sur un registre de comptage, mais à la place
générer une séquence d'instructions qui décrémente un registre, le comparer à
zéro, puis branche en fonction du résultat. Cette option n'a de sens que sur
architectures qui prennent en charge de telles instructions, qui incluent x86, PowerPC, IA-64 et
S / 390.

La valeur par défaut est -fbranch-count-reg.

-fno-fonction-cse
Ne mettez pas d'adresses de fonction dans les registres ; faire chaque instruction qui appelle un
La fonction constante contient explicitement l'adresse de la fonction.

Cette option se traduit par un code moins efficace, mais quelques hacks étranges qui modifient le
la sortie de l'assembleur peut être confuse par les optimisations effectuées lorsque cette option est
non utilisé.

La valeur par défaut est -ffonction-cse

-fno-zero-initialisé-en-bss
Si la cible supporte une section BSS, GCC met par défaut les variables qui sont
initialisé à zéro dans BSS. Cela peut économiser de l'espace dans le code résultant.

Cette option désactive ce comportement car certains programmes reposent explicitement sur des variables
aller à la section des données. Par exemple, pour que l'exécutable résultant puisse trouver le
début de cette section et/ou faire des hypothèses sur cette base.

La valeur par défaut est -fzero-initialisé-dans-bss.

-fbavette -fbavette -fbavette
Pour les frontaux qui le prennent en charge (C et C++), instrumentez tous les pointeurs/tableaux risqués
opérations de déréférencement, certaines fonctions de chaîne/tas de bibliothèque standard et d'autres
constructions associées avec des tests de plage/validité. Les modules ainsi instrumentés doivent être
immunisé contre les débordements de tampon, l'utilisation de tas non valide et certaines autres classes de C/C++
erreurs de programmation. L'instrumentation repose sur une bibliothèque d'exécution distincte
(libmudflap), qui sera lié à un programme si -fbavette est donné au moment de la liaison.
Le comportement à l'exécution du programme instrumenté est contrôlé par le GARDE-BOUE_OPTIONS
variable d'environnement. Voir "env MUDFLAP_OPTIONS=-help a.out" pour ses options.

Utilisez -fbavette au lieu de -fbavette à compiler et à lier si votre programme est multi-
fileté. Utilisation -fbavette, En plus d' -fbavette or -fbavette, Si
l'instrumentation doit ignorer les lectures de pointeur. Cela produit moins d'instrumentation (et
donc exécution plus rapide) et offre toujours une certaine protection contre la mémoire pure et simple
corrompre les écritures, mais permet aux données lues par erreur de se propager dans un programme.

-fthread-sauts
Effectuez des optimisations où nous vérifions si un saut se branche à un endroit où
on trouve une autre comparaison subsumée par la première. Si c'est le cas, la première branche est
redirigé vers la destination de la deuxième branche ou un point immédiatement
suivant, selon que la condition est connue pour être vraie ou fausse.

Activé aux niveaux -O2, -O3, -Tu.

-fsplit-wide-types
Lors de l'utilisation d'un type qui occupe plusieurs registres, comme "long long" sur un 32 bits
système, séparer les registres et les allouer indépendamment. Ceci normalement
génère un meilleur code pour ces types, mais peut rendre le débogage plus difficile.

Activé aux niveaux -O, -O2, -O3, -Tu.

-fcse-suivre-sauts
Dans l'élimination de sous-expression commune (CSE), parcourez les instructions de saut lorsque le
la cible du saut n'est atteinte par aucun autre chemin. Par exemple, lorsque le CST rencontre
une déclaration "if" avec une clause "else", CSE suivra le saut lorsque la condition
testé est faux.

Activé aux niveaux -O2, -O3, -Tu.

-fcse-skip-blocs
Ceci est similaire à -fcse-suivre-sauts, mais oblige le CSE à suivre des sauts qui
sauter conditionnellement les blocs. Lorsque le CSE rencontre une simple instruction « if » sans
clause d'autre, -fcse-skip-blocs oblige le CSE à suivre le saut autour du corps du
"si".

Activé aux niveaux -O2, -O3, -Tu.

-frun-cse-après-boucle
Réexécutez l'élimination des sous-expressions communes une fois que les optimisations de boucle ont été effectuées.

Activé aux niveaux -O2, -O3, -Tu.

-fgcse
Effectuez une passe d'élimination de sous-expression commune globale. Ce pass effectue également
constante globale et propagation de copie.

Remarque: Lors de la compilation d'un programme à l'aide de gotos calculés, une extension GCC, vous pouvez obtenir
de meilleures performances d'exécution si vous désactivez l'élimination globale des sous-expressions communes
passer en ajoutant -fno-gcse à la ligne de commande.

Activé aux niveaux -O2, -O3, -Tu.

-fgcse-lm
Quand -fgcse-lm est activé, l'élimination globale de la sous-expression commune tentera de
déplacer des charges qui ne sont tuées que par les magasins vers eux-mêmes. Cela permet une boucle
contenant une séquence de chargement/stockage à changer en une charge en dehors de la boucle, et un
copier/stocker dans la boucle.

Activé par défaut lorsque gcse est activé.

-fgcse-sm
Quand -fgcse-sm est activé, une passe de mouvement de magasin est exécutée après le commun global
élimination de sous-expression. Cette passe tentera de déplacer les magasins hors des boucles. Lorsque
utilisé en conjonction avec -fgcse-lm, les boucles contenant une séquence de chargement/stockage peuvent être
changé en un chargement avant la boucle et un magasin après la boucle.

Non activé à aucun niveau d'optimisation.

-fgcse-las
Quand -fgcse-las est activé, la passe d'élimination de la sous-expression commune globale
élimine les charges redondantes qui surviennent après les stockages dans le même emplacement mémoire (les deux
licenciements partiels et complets).

Non activé à aucun niveau d'optimisation.

-fgcse-après-rechargement
Quand -fgcse-après-rechargement est activé, une passe d'élimination de charge redondante est effectuée
après rechargement. Le but de ce laissez-passer est de nettoyer les déversements redondants.

-funsafe-loop-optimisations
Si donné, l'optimiseur de boucle supposera que les indices de boucle ne débordent pas, et que
les boucles avec condition de sortie non triviale ne sont pas infinies. Cela permet une gamme plus large
des optimisations de boucle même si l'optimiseur de boucle lui-même ne peut pas prouver que ces
les hypothèses sont valables. À l'aide de -Wunsafe-loop-optimisations, le compilateur vous avertira
s'il trouve ce genre de boucle.

-f saut en croix
Effectuez une transformation par sauts croisés. Cette transformation unifie le code équivalent et
enregistrer la taille du code. Le code résultant peut ou non fonctionner mieux que sans croix-
sauter.

Activé aux niveaux -O2, -O3, -Tu.

-fauto-inc-dec
Combinez des incréments ou des décréments d'adresses avec des accès mémoire. Ce laissez-passer est
toujours ignoré sur les architectures qui n'ont pas d'instructions pour prendre en charge cela.
Activé par défaut à -O et plus sur les architectures qui prennent en charge cela.

-fdce
Effectuez l'élimination du code mort (DCE) sur RTL. Activé par défaut à -O Et plus élevé.

-fdse
Effectuez l'élimination des magasins morts (DSE) sur RTL. Activé par défaut à -O Et plus élevé.

-fif-conversion
Essayez de transformer les sauts conditionnels en équivalents sans branche. Cela inclut l'utilisation
de mouvements conditionnels, min, max, définir des drapeaux et des instructions abs, et quelques astuces réalisables
par l'arithmétique standard. L'utilisation de l'exécution conditionnelle sur les puces où elle est
disponible est contrôlé par "if-conversion2".

Activé aux niveaux -O, -O2, -O3, -Tu.

-fif-conversion2
Utilisez l'exécution conditionnelle (le cas échéant) pour transformer les sauts conditionnels en
équivalents sans branche.

Activé aux niveaux -O, -O2, -O3, -Tu.

-fdelete-null-pointer-checks
Supposons que les programmes ne peuvent pas déréférencer en toute sécurité les pointeurs nuls et qu'aucun code ou donnée
l'élément y réside. Cela permet des optimisations de pliage constant simples à tous
niveaux d'optimisation. De plus, d'autres passes d'optimisation dans GCC utilisent ce drapeau pour
contrôler les analyses globales de flux de données qui éliminent les vérifications inutiles des pointeurs nuls ;
ceux-ci supposent que si un pointeur est vérifié après avoir déjà été déréférencé, il
ne peut pas être nulle.

Notez cependant que dans certains environnements, cette hypothèse n'est pas vraie. Utilisation
-fno-delete-null-pointer-checks pour désactiver cette optimisation pour les programmes qui dépendent
sur ce comportement.

Certaines cibles, en particulier celles intégrées, désactivent cette option à tous les niveaux. Autrement
il est activé à tous les niveaux : -O0, -O1, -O2, -O3, -Tu. Les laissez-passer qui utilisent les informations
sont activés indépendamment à différents niveaux d'optimisation.

-fdévirtualiser
Essayez de convertir les appels de fonctions virtuelles en appels directs. Cela se fait à la fois
au sein d'une procédure et en interprocédure dans le cadre de l'inlining indirect
("-findirect-inlining") et propagation constante interprocédurale (-fipa-cp). Activée
aux niveaux -O2, -O3, -Tu.

-des-optimisations-coûteuses
Effectuez un certain nombre d'optimisations mineures qui sont relativement coûteuses.

Activé aux niveaux -O2, -O3, -Tu.

Sans
Essayez de supprimer les instructions d'extension redondantes. Ceci est particulièrement utile pour
l'architecture x86-64 qui s'étend implicitement à zéro dans les registres 64 bits après
en écrivant sur leur moitié inférieure de 32 bits.

Activé pour x86 aux niveaux -O2, -O3.

-foptimize-register-move
-fregmove
Tenter de réaffecter des numéros de registre dans les instructions de déplacement et en tant qu'opérandes d'autres
instructions simples afin de maximiser le nombre de registres liés. C'est
particulièrement utile sur les machines avec des instructions à deux opérandes.

Notes -fregmove ainsi que -foptimize-register-move sont la même optimisation.

Activé aux niveaux -O2, -O3, -Tu.

-fira-algorithme=algorithme
Utilisez l'algorithme de coloration spécifié pour l'allocateur de registre intégré. Les
algorithme l'argument peut être priorité, qui spécifie la coloration prioritaire de Chow, ou CB,
qui spécifie la coloration Chaitin-Briggs. La coloration Chaitin-Briggs n'est pas implémentée
pour toutes les architectures, mais pour les cibles qui le prennent en charge, c'est la valeur par défaut
car il génère un meilleur code.

-fira-région=région
Utilisez des régions spécifiées pour l'allocateur de registre intégré. Les région argument
doit être l'un des suivants :

TOUTE Utilisez toutes les boucles comme régions d'allocation de registre. Cela peut donner les meilleurs résultats pour
machines avec un jeu de registres petit et/ou irrégulier.

mixte
Utilisez toutes les boucles à l'exception des boucles avec une faible pression de registre comme régions. Cette
valeur donne généralement les meilleurs résultats dans la plupart des cas et pour la plupart des architectures, et
est activé par défaut lors de la compilation avec optimisation de la vitesse (-O, -O2, ...).

UN Utilisez toutes les fonctions comme une seule région. Cela se traduit généralement par le plus petit code
taille, et est activé par défaut pour -Tu or -O0.

-fira-boucle-pression
Utilisez IRA pour évaluer la pression de registre dans les boucles pour les décisions de déplacer les invariants de boucle.
Cette option entraîne généralement la génération de code plus rapide et plus petit sur les machines avec
fichiers de registre volumineux (>= 32 registres), mais cela peut ralentir le compilateur.

Cette option est activée au niveau -O3 pour certaines cibles.

-fno-ira-share-save-slots
Désactiver le partage des emplacements de pile utilisés pour enregistrer les registres durs utilisés par les appels
un appel. Chaque registre matériel obtient un emplacement de pile distinct et, par conséquent, une pile de fonctions
les cadres sont plus grands.

-fno-ira-share-spill-slots
Désactivez le partage des emplacements de pile alloués pour les pseudo-registres. Chaque pseudo-registre
qui n'obtient pas de registre dur obtient un emplacement de pile séparé, et par conséquent la fonction
les cadres de pile sont plus grands.

-fira-verbeux=n
Contrôlez la verbosité du fichier de vidage pour l'allocateur de registre intégré. Les
la valeur par défaut est 5. Si la valeur n est supérieur ou égal à 10, la sortie de vidage est envoyée
à stderr en utilisant le même format que n moins 10.

-fdelayed-branche
Si pris en charge pour la machine cible, essayez de réorganiser les instructions pour exploiter
créneaux d'instructions disponibles après les instructions de branchement retardées.

Activé aux niveaux -O, -O2, -O3, -Tu.

-fschedule-insns
Si pris en charge pour la machine cible, essayez de réorganiser les instructions pour éliminer
l'exécution est bloquée en raison de l'indisponibilité des données requises. Cela aide les machines qui
avoir des instructions à virgule flottante ou de chargement de mémoire lentes en permettant à d'autres instructions de
être émis jusqu'à ce que le résultat de l'instruction de chargement ou à virgule flottante soit requis.

Activé aux niveaux -O2, -O3.

-fschedule-insns2
Similaire à -fschedule-insns, mais demande une passe supplémentaire de planification d'instructions
une fois l'attribution des registres effectuée. Ceci est particulièrement utile sur les machines avec un
relativement petit nombre de registres et où les instructions de chargement de la mémoire prennent plus de
un cycle.

Activé aux niveaux -O2, -O3, -Tu.

-fno-sched-interbloc
Ne programmez pas d'instructions sur des blocs de base. Ceci est normalement activé par défaut
lors de la programmation avant l'attribution des registres, c'est-à-dire avec -fschedule-insns ou au -O2 or
ultérieure.

-fno-sched-spec
N'autorisez pas le mouvement spéculatif des instructions de non-chargement. Ceci est normalement activé par
par défaut lors de la planification avant l'allocation des registres, c'est-à-dire avec -fschedule-insns ou au
-O2 ou plus.

-fsched-pression
Activer la programmation insn sensible à la pression du registre avant l'allocation du registre.
Cela n'a de sens que lors de la planification avant l'activation de l'allocation des registres, c'est-à-dire avec
-fschedule-insns ou au -O2 ou plus. L'utilisation de cette option peut améliorer le
code et diminuer sa taille en empêchant l'augmentation de la pression du registre au-dessus du nombre
de registres durs disponibles et par conséquent le registre déborde dans le registre
allocation.

-fsched-spec-load
Autoriser le mouvement spéculatif de certaines instructions de chargement. Cela n'a de sens que lorsque
ordonnancement avant l'attribution des registres, c'est-à-dire avec -fschedule-insns ou au -O2 ou plus.

-fsched-spec-charge-dangereux
Autoriser le mouvement spéculatif de plus d'instructions de chargement. Cela n'a de sens que lorsque
ordonnancement avant l'attribution des registres, c'est-à-dire avec -fschedule-insns ou au -O2 ou plus.

-fsched-stalled-insns
-fsched-stalled-insns=n
Définir combien d'insns (le cas échéant) peuvent être déplacés prématurément de la file d'attente
insns dans la liste des prêts, lors de la deuxième passe de programmation.
-fno-sched-stalled-insns signifie qu'aucune auberge ne sera déplacée prématurément,
-fsched-stalled-insns=0 signifie qu'il n'y a pas de limite sur le nombre d'insns en file d'attente pouvant être déplacés
prématurément. -fsched-stalled-insns sans valeur équivaut à
-fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
Définir combien de groupes insn (cycles) seront examinés pour une dépendance sur un décroché
insn qui est candidat à un retrait prématuré de la file d'attente des insns bloqués. Cette
n'a d'effet que lors de la deuxième passe de programmation, et seulement si
-fsched-stalled-insns est utilisé. -fno-sched-bloqué-insns-dep équivaut à
-fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep sans valeur est équivalent
à -fsched-stalled-insns-dep=1.

-fsched2-utiliser-superblocs
Lors de la planification après l'allocation des registres, utilisez l'algorithme de planification de superbloc.
La planification des superblocs permet un mouvement à travers les limites des blocs de base, ce qui accélère
des horaires. Cette option est expérimentale, car toutes les descriptions de machines utilisées par GCC
modéliser le processeur suffisamment près pour éviter des résultats non fiables de l'algorithme.

Cela n'a de sens que lors de la planification après l'allocation des registres, c'est-à-dire avec
-fschedule-insns2 ou au -O2 ou plus.

-fsched-groupe-heuristique
Activez l'heuristique de groupe dans le planificateur. Cette heuristique favorise l'instruction
qui appartient à un groupe de planification. Ceci est activé par défaut lorsque la planification est
activé, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2 ou plus.

-fsched-critical-path-heuristique
Activez l'heuristique de chemin critique dans le planificateur. Cette heuristique favorise
instructions sur le chemin critique. Ceci est activé par défaut lorsque la planification est
activé, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2 ou plus.

-fsched-spec-insn-heuristique
Activez l'heuristique d'instruction spéculative dans le planificateur. Cette heuristique favorise
instructions spéculatives avec une plus grande faiblesse de dépendance. c'est activé par défault
lorsque la planification est activée, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2
ou plus.

-fsched-rank-heuristique
Activez l'heuristique de classement dans le planificateur. Cette heuristique favorise l'instruction
appartenant à un bloc de base de plus grande taille ou fréquence. c'est activé par défault
lorsque la planification est activée, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2
ou plus.

-fsched-last-insn-heuristique
Activez l'heuristique de la dernière instruction dans le planificateur. Cette heuristique favorise la
instruction qui est moins dépendante de la dernière instruction programmée. Ceci est activé
par défaut lorsque la planification est activée, c'est-à-dire avec -fschedule-insns or -fschedule-insns2
ou au -O2 ou plus.

-fsched-dep-count-heuristique
Activez l'heuristique de nombre de personnes dépendantes dans le planificateur. Cette heuristique favorise la
instruction qui a plus d'instructions en fonction. c'est activé par défault
lorsque la planification est activée, c'est-à-dire avec -fschedule-insns or -fschedule-insns2 ou au -O2
ou plus.

-freschedule-modulo-boucles-programmées
L'ordonnancement modulo précède l'ordonnancement traditionnel, si une boucle était modulo
planifié, nous pouvons vouloir empêcher les passes de planification ultérieures de changer son
calendrier, nous utilisons cette option pour contrôler cela.

-fprogrammation-sélective
Planifiez des instructions à l'aide d'un algorithme de planification sélective. Exécutions de planification sélective
au lieu du premier pass du programmateur.

-fprogrammation-sélective2
Planifiez des instructions à l'aide d'un algorithme de planification sélective. Exécutions de planification sélective
au lieu du deuxième pass du programmateur.

-fsel-sched-pipelining
Activez le pipeline logiciel des boucles les plus internes lors de la planification sélective. Cette
option n'a aucun effet jusqu'à ce que l'un des -fprogrammation-sélective or -fprogrammation-sélective2 is
allumé.

-fsel-sched-pipelining-boucles-extérieures
Lors du pipeline de boucles pendant la planification sélective, pipelinez également les boucles externes. Cette
l'option n'a aucun effet jusqu'à ce que -fsel-sched-pipelining Est allumé.

-fshrink-wrap
N'émettez des prologues de fonction qu'avant les parties de la fonction qui en ont besoin, plutôt qu'à
le haut de la fonction. Ce drapeau est activé par défaut à -O Et plus élevé.

-fcaller-sauvegarde
Permettre l'allocation de valeurs dans des registres qui seront écrasés par les appels de fonction,
en émettant des instructions supplémentaires pour sauvegarder et restaurer les registres autour de ces appels.
Une telle allocation n'est effectuée que lorsqu'elle semble aboutir à un meilleur code que ne le ferait
sinon être produit.

Cette option est toujours activée par défaut sur certaines machines, généralement celles qui ont
aucun registre d'appel préservé à utiliser à la place.

Activé aux niveaux -O2, -O3, -Tu.

-fcombine-stack-ajustements
Suit les ajustements de pile (poussées et pops) et les références de mémoire de pile, puis essaie
pour trouver des façons de les combiner.

Activé par défaut à -O1 Et plus élevé.

-fconserve-pile
Essayez de minimiser l'utilisation de la pile. Le compilateur tentera d'utiliser moins d'espace de pile,
même si cela ralentit le programme. Cette option implique de définir le grande pile-
cadre paramètre à 100 et le grand-stack-frame-croissance paramètre à 400.

-ftree-réassoc
Effectuez la réassociation sur les arbres. Ce drapeau est activé par défaut à -O Et plus élevé.

-ftree-pré
Effectuez l'élimination partielle de la redondance (PRE) sur les arbres. Ce drapeau est activé par
par défaut à -O2 ainsi que -O3.

-ftree-partial-pre
Rendre l'élimination partielle de la redondance (PRE) plus agressive. Ce drapeau est activé par
par défaut à -O3.

-ftree-forwprop
Effectuez une propagation vers l'avant sur les arbres. Ce drapeau est activé par défaut à -O ainsi que
ultérieure.

-ftree-free
Effectuez l'élimination complète de la redondance (FRE) sur les arbres. La différence entre FRE et
PRE est que FRE ne considère que les expressions qui sont calculées sur tous les chemins menant à
le calcul redondant. Cette analyse est plus rapide que PRE, bien qu'elle expose moins
licenciements. Ce drapeau est activé par défaut à -O Et plus élevé.

-ftree-phiprop
Effectuer le levage de charges à partir de pointeurs conditionnels sur les arbres. Ce pass est activé par
par défaut à -O Et plus élevé.

-ftree-copie-prop
Effectuer la propagation de copie sur les arbres. Cette passe élimine les opérations de copie inutiles.
Ce drapeau est activé par défaut à -O Et plus élevé.

-fipa-pure-const
Découvrez quelles fonctions sont pures ou constantes. Activé par défaut à -O Et plus élevé.

-fipa-référence
Découvrez quelles variables statiques ne s'échappent pas ne peuvent pas échapper à l'unité de compilation.
Activé par défaut à -O Et plus élevé.

-fipa-pta
Effectuer une analyse de pointeur interprocédural et une modification interprocédurale et
analyse de référence. Cette option peut entraîner une utilisation excessive de la mémoire et du temps de compilation sur
grandes unités de compilation. Il n'est activé par défaut à aucun niveau d'optimisation.

-fipa-profil
Effectuer une propagation de profil interprocédural. Les fonctions appelées uniquement à froid
les fonctions sont marquées comme froides. Aussi les fonctions exécutées une fois (comme "à froid",
"noreturn", constructeurs ou destructeurs statiques) sont identifiés. Fonctions froides et
les parties en boucle moins des fonctions exécutées une fois sont alors optimisées pour la taille. Activé par
par défaut à -O Et plus élevé.

-fipa-cp
Effectuer une propagation constante interprocédurale. Cette optimisation analyse le programme
pour déterminer quand les valeurs transmises aux fonctions sont des constantes, puis optimise
par conséquent. Cette optimisation peut augmenter considérablement les performances si le
l'application a des constantes passées aux fonctions. Ce drapeau est activé par défaut à
-O2, -Tu ainsi que -O3.

-fipa-cp-clone
Effectuez un clonage de fonction pour renforcer la propagation constante interprocédurale. Lorsque
activée, la propagation constante interprocédurale effectuera un clonage de fonction lorsque
La fonction visible de l'extérieur peut être appelée avec des arguments constants. Car ce
l'optimisation peut créer plusieurs copies de fonctions, elle peut augmenter considérablement
taille du code (voir --param ipcp-unit-croissance=Plus-value). Ce drapeau est activé par défaut à
-O3.

-fipa-matrice-reorg
Effectuez l'aplatissement et la transposition de la matrice. L'aplatissement matriciel tente de remplacer un
matrice m-dimensionnelle avec sa matrice n-dimensionnelle équivalente, où n < m. Cette
réduit le niveau d'indirection nécessaire pour accéder aux éléments de la matrice. Les
la deuxième optimisation est la transposition matricielle, qui tente de changer l'ordre des
les dimensions de la matrice afin d'améliorer la localisation du cache. Les deux optimisations nécessitent la
-fwhole-programme drapeau. La transposition n'est activée que si les informations de profilage sont
disponible.

-ftree-évier
Effectuez un mouvement de magasinage vers l'avant sur les arbres. Ce drapeau est activé par défaut à -O ainsi que
ultérieure.

-ftree-bit-ccp
Effectuer une propagation constante de bits conditionnelle clairsemée sur les arbres et propager le pointeur
informations d'alignement. Cette passe ne fonctionne que sur les variables scalaires locales et est
activé par défaut à -O et plus haut. Cela exige que -ftree-ccp est autorisé.

-ftree-ccp
Effectuez une propagation constante conditionnelle clairsemée (CCP) sur les arbres. Ce pass uniquement
fonctionne sur des variables scalaires locales et est activé par défaut à -O Et plus élevé.

-ftree-commutateur-conversion
Effectuer la conversion d'initialisations simples dans un commutateur en initialisations à partir d'un
tableau scalaire. Ce drapeau est activé par défaut à -O2 Et plus élevé.

-ftree-tail-fusion
Recherchez des séquences de codes identiques. Une fois trouvé, remplacez l'un par un saut à l'autre.
Cette optimisation est connue sous le nom de fusion de queue ou de saut croisé. Ce drapeau est activé par
par défaut à -O2 et plus haut. Le temps de compilation dans cette passe peut être limité en utilisant
max-tail-merge-comparaisons paramètre et max-tail-merge-itérations paramètre.

-ftree-dce
Effectuez l'élimination du code mort (DCE) sur les arbres. Ce drapeau est activé par défaut à -O
Et plus élevé.

-ftree-builtin-call-dce
Effectuez l'élimination conditionnelle du code mort (DCE) pour les appels aux fonctions intégrées qui
peuvent définir "errno" mais sont sinon sans effets secondaires. Ce drapeau est activé par défaut
at -O2 et plus si -Tu n'est pas non plus précisé.

-ftree-dominator-opt
Effectuez une variété de nettoyages scalaires simples (propagation constante/copie, redondance
élimination, propagation de la plage et simplification de l'expression) basée sur un dominant
traversée d'arbres. Cela exécute également le threading de saut (pour réduire les sauts aux sauts). Cette
l'indicateur est activé par défaut à -O Et plus élevé.

-ftree-dse
Effectuez l'élimination des dépôts morts (DSE) sur les arbres. Un magasin mort est un magasin dans une mémoire
emplacement qui est ensuite écrasé par un autre magasin sans aucune charge intermédiaire. Dans
dans ce cas, le magasin antérieur peut être supprimé. Ce drapeau est activé par défaut à -O ainsi que
ultérieure.

-ftree-ch
Effectuez une copie d'en-tête de boucle sur les arbres. Ceci est bénéfique car il augmente
l'efficacité des optimisations de mouvement de code. Cela permet également d'économiser un saut. Ce drapeau est
activé par défaut à -O et plus haut. Il n'est pas activé pour -Tu, puisqu'il est généralement
augmente la taille du code.

-ftree-loop-optimiser
Effectuez des optimisations de boucle sur les arbres. Ce drapeau est activé par défaut à -O ainsi que
ultérieure.

-ftree-boucle-linéaire
Effectuer des transformations d'échange de boucle sur l'arborescence. Pareil que -floop-échange. Utiliser
cette transformation de code, GCC doit être configuré avec --avec-ppl ainsi que --avec-cloog à
activer l'infrastructure de transformation de la boucle Graphite.

-floop-échange
Effectuez des transformations d'échange de boucles sur les boucles. Interchanger deux boucles imbriquées
commute les boucles intérieures et extérieures. Par exemple, étant donné une boucle comme :

FAIRE J = 1, M
JE = 1, N
A(J, je) = A(J, je) * C
Endo
Endo

loop interchange transformera la boucle comme si l'utilisateur avait écrit :

JE = 1, N
FAIRE J = 1, M
A(J, je) = A(J, je) * C
Endo
Endo

ce qui peut être bénéfique lorsque "N" est plus grand que les caches, car en Fortran, le
les éléments d'un tableau sont stockés en mémoire de manière contiguë par colonne, et l'original
loop itère sur les lignes, créant potentiellement à chaque accès un cache miss. Cette
l'optimisation s'applique à toutes les langues prises en charge par GCC et ne se limite pas à
Fortran. Pour utiliser cette transformation de code, GCC doit être configuré avec --avec-ppl
ainsi que --avec-cloog pour activer l'infrastructure de transformation de la boucle Graphite.

-floop-strip-mine
Effectuez des transformations de minage en boucle sur des boucles. L'extraction à ciel ouvert divise une boucle en
deux boucles imbriquées. La boucle extérieure a des foulées égales à la taille de la bande et la boucle intérieure
boucle a des pas de la boucle d'origine dans une bande. La longueur de la bande peut être modifiée
utilisant l' boucle-bloc-tuile-taille paramètre. Par exemple, étant donné une boucle comme :

JE = 1, N
A(je) = A(je) + C
Endo

loop strip mining transformera la boucle comme si l'utilisateur avait écrit :

FAIRE II = 1, N, 51
FAIRE I = II, min (II + 50, N)
A(je) = A(je) + C
Endo
Endo

Cette optimisation s'applique à toutes les langues prises en charge par GCC et ne se limite pas à
Fortran. Pour utiliser cette transformation de code, GCC doit être configuré avec --avec-ppl
ainsi que --avec-cloog pour activer l'infrastructure de transformation de la boucle Graphite.

-floop-bloc
Effectuez des transformations de blocage de boucle sur les boucles. Bloquer les mines à ciel ouvert à chaque boucle du
nid de boucle de telle sorte que les accès mémoire des boucles d'éléments tiennent dans les caches. Les
la longueur de la bande peut être modifiée à l'aide du boucle-bloc-tuile-taille paramètre. Par exemple,
étant donné une boucle comme :

JE = 1, N
FAIRE J = 1, M
A(J, je) = B(je) + C(J)
Endo
Endo

le blocage de boucle transformera la boucle comme si l'utilisateur avait écrit :

FAIRE II = 1, N, 51
FAIRE JJ = 1, M, 51
FAIRE I = II, min (II + 50, N)
FAIRE J = JJ, min (JJ + 50, M)
A(J, je) = B(je) + C(J)
Endo
Endo
Endo
Endo

ce qui peut être bénéfique lorsque "M" est plus grand que les caches, car la boucle la plus interne
itérera sur une plus petite quantité de données qui peuvent être conservées dans les caches. Cette
l'optimisation s'applique à toutes les langues prises en charge par GCC et ne se limite pas à
Fortran. Pour utiliser cette transformation de code, GCC doit être configuré avec --avec-ppl
ainsi que --avec-cloog pour activer l'infrastructure de transformation de la boucle Graphite.

-fgraphite-identité
Activer la transformation d'identité pour le graphite. Pour chaque SCoP, nous générons le
représentation polyédrique et la retransformer en gimple. À l'aide de -fgraphite-identité
nous pouvons vérifier les coûts ou les avantages de la transformation GIMPLE -> GRAPHITE -> GIMPLE.
Certaines optimisations minimales sont également effectuées par le générateur de code CLooG, comme index
fractionnement et élimination du code mort dans les boucles.

-floop-aplatir
Supprime la structure d'imbrication des boucles : transforme l'imbrication des boucles en une seule boucle. Cette
La transformation peut être utile en tant que transformation d'activation pour la vectorisation et
parallélisation. Cette fonctionnalité est expérimentale. Pour utiliser cette transformation de code, GCC
doit être configuré avec --avec-ppl ainsi que --avec-cloog pour activer la boucle Graphite
infrastructures de transformation.

-floop-parallélise-tout
Utilisez l'analyse de dépendance des données Graphite pour identifier les boucles qui peuvent être parallélisées.
Paralléliser toutes les boucles pouvant être analysées pour ne pas contenir de dépendances portées par les boucles
sans vérifier qu'il est rentable de paralléliser les boucles.

-fcheck-data-deps
Comparez les résultats de plusieurs analyseurs de dépendance des données. Cette option est utilisée pour
débogage des analyseurs de dépendance des données.

-ftree-loop-if-convert
Tenter de transformer les sauts conditionnels dans les boucles les plus internes en sans branche
équivalents. L'intention est de supprimer le flux de contrôle des boucles les plus internes afin
pour améliorer la capacité de la passe de vectorisation à gérer ces boucles. C'est
activé par défaut si la vectorisation est activée.

-ftree-loop-if-convert-magasins
Essayez de convertir également les sauts conditionnels contenant des écritures en mémoire. Cette
la transformation peut être dangereuse pour les programmes multithreads car elle transforme les conditions
la mémoire écrit dans les écritures inconditionnelles de la mémoire. Par exemple,

pour (i = 0; i < N; i++)
si (cond)
A[i] = expr ;

serait transformé en

pour (i = 0; i < N; i++)
A[i] = cond ? expr : A[je];

produisant potentiellement des courses de données.

-ftree-loop-distribution
Effectuer la distribution en boucle. Ce drapeau peut améliorer les performances du cache sur les gros corps de boucle
et permettre d'autres optimisations de boucle, comme la parallélisation ou la vectorisation,
endroit. Par exemple, la boucle

JE = 1, N
A(je) = B(je) + C
D(I) = E(I) *F
Endo

se transforme en

JE = 1, N
A(je) = B(je) + C
Endo
JE = 1, N
D(I) = E(I) *F
Endo

-ftree-loop-distribute-patterns
Effectuer une distribution en boucle de modèles pouvant être générés par du code avec des appels à un
une bibliothèque. Ce drapeau est activé par défaut à -O3.

Cette passe distribue les boucles d'initialisation et génère un appel à memset zero.
Par exemple, la boucle

JE = 1, N
UNE(Je) = 0
B(je) = A(je) + je
Endo

se transforme en

JE = 1, N
UNE(Je) = 0
Endo
JE = 1, N
B(je) = A(je) + je
Endo

et la boucle d'initialisation est transformée en un appel à memset zero.

-ftree-loop-im
Effectuez un mouvement invariant en boucle sur les arbres. Cette passe ne déplace que les invariants qui seraient
difficile à gérer au niveau RTL (appels de fonction, opérations qui s'étendent à non triviales
séquences d'insns). Avec -funswitch-boucles il déplace également les opérandes des conditions qui
sont invariants hors de la boucle, de sorte que nous pouvons utiliser uniquement une analyse d'invariance triviale
en boucle désenclenchement. Le pass comprend également le mouvement du magasin.

-ftree-loop-ivcanon
Créer un compteur canonique pour le nombre d'itérations dans les boucles pour lesquelles déterminer
nombre d'itérations nécessite une analyse compliquée. Des optimisations ultérieures peuvent alors
déterminer le nombre facilement. Utile surtout en rapport avec le déroulement.

-cinq points
Effectuer des optimisations de variables d'induction (réduction de force, variable d'induction
fusion et élimination des variables d'induction) sur les arbres.

-ftree-paralléliser-boucles=n
Paralléliser les boucles, c'est-à-dire diviser leur espace d'itération pour s'exécuter dans n threads. C'est
possible uniquement pour les boucles dont les itérations sont indépendantes et peuvent être arbitrairement
réorganisé. L'optimisation n'est rentable que sur les machines multiprocesseurs, pour les boucles
qui sont gourmands en CPU, plutôt que limités, par exemple par la bande passante mémoire. Cette option
implique -pthread, et n'est donc pris en charge que sur les cibles qui prennent en charge
-pthread.

-ftree-PTA
Effectuez une analyse des points de fonction locaux sur les arbres. Ce drapeau est activé par défaut
at -O Et plus élevé.

-ftree-sra
Effectuer le remplacement scalaire des agrégats. Ce pass remplace les références de structure
avec des scalaires pour éviter de mémoriser des structures trop tôt. Ce drapeau est
activé par défaut à -O Et plus élevé.

-ftree-copyrename
Effectuer un renommage de copie sur les arbres. Cette passe tente de renommer les temporaires du compilateur en
d'autres variables aux emplacements de copie, résultant généralement en des noms de variables qui plus
ressemblent beaucoup aux variables d'origine. Ce drapeau est activé par défaut à -O ainsi que
ultérieure.

-ftree-coalesce-inline-vars
Dites au copyrename pass (voir -ftree-copyrename) pour tenter de combiner petit utilisateur-
des variables définies aussi, mais seulement si elles étaient incorporées à d'autres fonctions. C'est un
forme plus limitée de -ftree-coalesce-vars. Cela peut endommager les informations de débogage de tels
inlined-into, mais il gardera les variables de la fonction inlined-into à part
entre eux, de sorte qu'ils sont plus susceptibles de contenir les valeurs attendues dans un
session de débogage. C'était la valeur par défaut dans les versions de GCC antérieures à la 4.7.

-ftree-coalesce-vars
Dites au copyrename pass (voir -ftree-copyrename) pour tenter de combiner petit utilisateur-
variables définies aussi, au lieu de simplement temporaires du compilateur. Cela peut fortement limiter
la possibilité de déboguer un programme optimisé compilé avec -fno-var-tracking-assignations.
Dans la forme niée, cet indicateur empêche la fusion SSA des variables utilisateur, y compris
ceux alignés. Cette option est activée par défaut.

-ftre-ter
Effectuez le remplacement temporaire de l'expression pendant la phase SSA->normale. Seul
les temporaires use/single def sont remplacés à leur emplacement d'utilisation par leur définition
expression. Cela donne un code non GIMPLE, mais donne aux expandeurs beaucoup plus
des arbres complexes sur lesquels travailler pour une meilleure génération de RTL. Ceci est activé par
par défaut à -O Et plus élevé.

-ftree-vectoriser
Effectuer une vectorisation en boucle sur les arbres. Ce drapeau est activé par défaut à -O3.

-ftree-slp-vectoriser
Effectuez la vectorisation de blocs de base sur les arbres. Ce drapeau est activé par défaut à -O3 ainsi que
quand -ftree-vectoriser est autorisé.

-ftree-vect-loop-version
Effectuez la gestion des versions de boucle lors de la vectorisation de boucle sur des arbres. Quand une boucle apparaît
être vectorisable sauf que l'alignement des données ou la dépendance des données ne peut pas être déterminé
au moment de la compilation, puis les versions vectorisées et non vectorisées de la boucle sont générées
ainsi que des vérifications à l'exécution pour l'alignement ou la dépendance pour contrôler quelle version est
réalisé. Cette option est activée par défaut sauf au niveau -Tu où il est désactivé.

-fvect-cost-model
Activer le modèle de coût pour la vectorisation.

-ftree-vrp
Effectuez la propagation de la plage de valeurs sur les arbres. Ceci est similaire à la propagation constante
pass, mais au lieu de valeurs, des plages de valeurs sont propagées. Cela permet au
optimiseurs pour supprimer les vérifications de plage inutiles telles que les vérifications liées aux tableaux et le pointeur nul
chèques. Ceci est activé par défaut à -O2 et plus haut. Élimination de la vérification du pointeur nul
n'est fait que si -fdelete-null-pointer-checks est autorisé.

-ftraceur
Effectuez une duplication de la queue pour agrandir la taille du superbloc. Cette transformation simplifie
le flux de contrôle de la fonction permettant à d'autres optimisations de faire un meilleur travail.

-funroll-boucles
Dérouler des boucles dont le nombre d'itérations peut être déterminé au moment de la compilation ou lors de
entrée dans la boucle. -funroll-boucles implique -frun-cse-après-boucle. Cette option fait
code plus volumineux et peut ou non le faire s'exécuter plus rapidement.

-funroll-toutes-les-boucles
Déroulez toutes les boucles, même si leur nombre d'itérations est incertain lorsque la boucle est
entré. Cela ralentit généralement l'exécution des programmes. -funroll-toutes-les-boucles implique le
mêmes options que -funroll-boucles,

-fsplit-ivs-dans-unroller
Permet d'exprimer les valeurs des variables d'induction dans les itérations ultérieures du
boucle déroulée en utilisant la valeur de la première itération. Cela rompt la longue dépendance
chaînes, améliorant ainsi l'efficacité des passes d'ordonnancement.

Combinaison de -fweb et le CSE est souvent suffisant pour obtenir le même effet. toutefois
dans les cas où le corps de la boucle est plus compliqué qu'un seul bloc de base, ce n'est pas
fiable. Il ne fonctionne pas non plus du tout sur certaines architectures en raison de
restrictions dans le laissez-passer CSE.

Cette optimisation est activée par défaut.

-fvariable-expansion-in-unroller
Avec cette option, le compilateur créera plusieurs copies de certaines variables locales
lors du déroulement d'une boucle qui peut aboutir à un code supérieur.

-fpartial-inline
Inline parties de fonctions. Cette option n'a d'effet que lorsque l'inline est elle-même
allumé par le -finline-fonctions or -finline-petites-fonctions options.

Activé au niveau -O2.

-frrédicatif
Effectuer une optimisation prédictive de mise en commun, c'est-à-dire réutiliser les calculs (en particulier
chargements et stockages de la mémoire) effectués dans les itérations précédentes des boucles.

Cette option est activée au niveau -O3.

-fprefetch-boucles-tableaux
Si pris en charge par la machine cible, générez des instructions pour extraire la mémoire à
améliorer les performances des boucles qui accèdent à de grands tableaux.

Cette option peut générer un code meilleur ou pire ; les résultats dépendent fortement de la
structure de boucles dans le code source.

Désactivé au niveau -Tu.

-fno-judas
-fno-judas2
Désactivez toutes les optimisations de judas spécifiques à la machine. La différence entre
-fno-judas ainsi que -fno-judas2 est dans la façon dont ils sont implémentés dans le compilateur ; certains
les cibles utilisent l'une, certaines utilisent l'autre, quelques-unes utilisent les deux.

-f judas est activé par défaut. -f judas2 activé aux niveaux -O2, -O3, -Tu.

-fno-deviner-branche-probabilité
Ne devinez pas les probabilités de branchement à l'aide d'heuristiques.

GCC utilisera des heuristiques pour deviner les probabilités de branchement si elles ne sont pas fournies par
commentaires de profilage (-fprofile-arcs). Ces heuristiques sont basées sur le flux de contrôle
graphique. Si certaines probabilités de branchement sont spécifiées par __builtin_expect, puis le
des heuristiques seront utilisées pour deviner les probabilités de branchement pour le reste du flux de contrôle
graphique, en prenant le __builtin_expect informations en compte. Les interactions entre les
heuristique et __builtin_expect peut être complexe et, dans certains cas, il peut être utile de
désactiver l'heuristique pour que les effets de __builtin_expect sont plus faciles à
comprendre.

La valeur par défaut est -fguess-branche-probabilité aux niveaux -O, -O2, -O3, -Tu.

-freorder-blocs
Réorganiser les blocs de base dans la fonction compilée afin de réduire le nombre de prises
branches et améliorer la localisation du code.

Activé aux niveaux -O2, -O3.

-freorder-blocs-et-partition
Outre la réorganisation des blocs de base dans la fonction compilée, afin de réduire
nombre de branches prises, partitionne les blocs de base chauds et froids en sections séparées
des fichiers assembly et .o, pour améliorer les performances de la localité de pagination et de cache.

Cette optimisation est automatiquement désactivée en présence de gestion des exceptions,
pour les sections linkonce, pour les fonctions avec un attribut de section défini par l'utilisateur et sur n'importe quel
architecture qui ne prend pas en charge les sections nommées.

-freorder-fonctions
Réorganiser les fonctions dans le fichier objet afin d'améliorer la localité du code. C'est
implémenté en utilisant des sous-sections spéciales ".text.hot" pour les plus fréquemment exécutées
fonctions et ".text.unlikely" pour les fonctions exécutées improbables. La réorganisation est effectuée par
l'éditeur de liens donc le format de fichier objet doit prendre en charge les sections nommées et l'éditeur de liens doit placer
eux d'une manière raisonnable.

De plus, les commentaires de profil doivent être disponibles pour que cette option soit efficace. Voir
-fprofile-arcs pour en savoir plus.

Activé aux niveaux -O2, -O3, -Tu.

-fstrict-aliasing
Autoriser le compilateur à assumer les règles d'alias les plus strictes applicables au langage
en cours de compilation. Pour C (et C++), cela active des optimisations basées sur le type de
expressions. En particulier, un objet d'un type est supposé ne jamais résider au
même adresse qu'un objet d'un type différent, à moins que les types soient presque les mêmes.
Par exemple, un « int non signé » peut être un alias « int », mais pas un « void* » ou un « double ». UNE
type de caractère peut alias n'importe quel autre type.

Portez une attention particulière au code comme celui-ci:

union a_union {
int i;
double d ;
};

entier f() {
union a_union t ;
td = 3.0 ;
retour ti;
}

La pratique de la lecture d'un membre du syndicat différent de celui le plus récemment
écrit à (appelé "type-punning") est commun. Même avec -fstrict-aliasing, taper-
le jeu de mots est autorisé, à condition que la mémoire soit accessible via le type union. Alors le
le code ci-dessus fonctionnera comme prévu. Cependant, ce code peut ne pas :

entier f() {
union a_union t ;
int* ip ;
td = 3.0 ;
ip = &t.i;
retourner *ip;
}

De même, l'accès en prenant l'adresse, en lançant le pointeur résultant et en
le déréférencement du résultat a un comportement indéfini, même si le cast utilise un type union,
par exemple:

entier f() {
double d = 3.0 ;
return ((union a_union *) &d)->i;
}

La -fstrict-aliasing l'option est activée aux niveaux -O2, -O3, -Tu.

-fstrict-débordement
Autoriser le compilateur à assumer des règles de débordement signées strictes, en fonction de la langue
en cours de compilation. Pour C (et C++), cela signifie que le débordement lors de l'arithmétique avec
les nombres signés sont indéfinis, ce qui signifie que le compilateur peut supposer qu'il ne
arriver. Cela permet diverses optimisations. Par exemple, le compilateur supposera
qu'une expression comme "i + 10 > i" sera toujours vraie pour le "i" signé. Cette
l'hypothèse n'est valide que si le débordement signé n'est pas défini, car l'expression est fausse
si "i + 10" déborde lors de l'utilisation de l'arithmétique du complément à deux. Lorsque cette option est en
effectuer toute tentative pour déterminer si une opération sur des nombres signés débordera
doit être rédigé avec soin pour ne pas entraîner de débordement.

Cette option permet également au compilateur d'assumer une sémantique de pointeur stricte : étant donné un
pointeur vers un objet, si l'ajout d'un décalage à ce pointeur ne produit pas de pointeur
au même objet, l'addition est indéfinie. Cela permet au compilateur de conclure
que "p + u > p" est toujours vrai pour un pointeur "p" et un entier non signé "u". Cette
l'hypothèse n'est valide que parce que le bouclage du pointeur n'est pas défini, car l'expression est
false si "p + u" déborde en utilisant l'arithmétique du complément à deux.

Voir aussi -fwrapv option. En utilisant -fwrapv signifie que le débordement d'entier signé est
complètement défini : il enveloppe. Lorsque -fwrapv est utilisé, il n'y a pas de différence entre
-fstrict-débordement ainsi que -fno-strict-débordement pour les entiers. Avec -fwrapv certains types
de débordement sont autorisés. Par exemple, si le compilateur obtient un débordement en faisant
arithmétique sur les constantes, la valeur dépassée peut toujours être utilisée avec -fwrapv, Mais pas
autrement.

La -fstrict-débordement l'option est activée aux niveaux -O2, -O3, -Tu.

-falign-fonctions
-falign-fonctions=n
Alignez le début des fonctions sur la prochaine puissance de deux supérieure à n, en sautant jusqu'à n
octets. Par exemple, -falign-fonctions=32 aligne les fonctions sur les 32 octets suivants
frontière, mais -falign-fonctions=24 ne s'alignerait sur la prochaine limite de 32 octets que si
cela peut être fait en sautant 23 octets ou moins.

-fno-align-fonctions ainsi que -falign-fonctions=1 sont équivalentes et signifient que les fonctions
ne sera pas aligné.

Certains assembleurs ne prennent en charge cet indicateur que lorsque n est une puissance de deux ; dans ce cas, c'est
arrondi.

If n n'est pas spécifié ou vaut zéro, utilisez une valeur par défaut dépendant de la machine.

Activé aux niveaux -O2, -O3.

-falign-étiquettes
-falign-étiquettes=n
Alignez toutes les cibles de branche sur une limite de puissance de deux, en sautant jusqu'à n octets comme
-falign-fonctions. Cette option peut facilement ralentir le code, car elle doit insérer
opérations factices lorsque la cible de branche est atteinte dans le flux habituel du code.

-fno-align-étiquettes ainsi que -falign-étiquettes=1 sont équivalents et signifient que les étiquettes ne seront pas
aligné.

If -falign-boucles or -falign-sauts sont applicables et sont supérieures à cette valeur, alors
leurs valeurs sont utilisées à la place.

If n n'est pas spécifié ou vaut zéro, utilisez une valeur par défaut dépendant de la machine, ce qui est très probable
être 1, ce qui signifie pas d'alignement.

Activé aux niveaux -O2, -O3.

-falign-boucles
-falign-boucles=n
Alignez les boucles sur une limite de puissance de deux, en sautant jusqu'à n octets comme -falign-fonctions.
L'espoir est que la boucle sera exécutée plusieurs fois, ce qui compensera tout
l'exécution des opérations fictives.

-fno-align-boucles ainsi que -falign-boucles=1 sont équivalents et signifient que les boucles ne seront pas
aligné.

If n n'est pas spécifié ou vaut zéro, utilisez une valeur par défaut dépendant de la machine.

Activé aux niveaux -O2, -O3.

-falign-sauts
-falign-sauts=n
Alignez les cibles de branche sur une limite de puissance de deux, pour les cibles de branche où les cibles
ne peut être atteint qu'en sautant, en sautant jusqu'à n octets comme -falign-fonctions. En
dans ce cas, aucune opération fictive n'a besoin d'être exécutée.

-fno-align-sauts ainsi que -falign-sauts=1 sont équivalents et signifient que les boucles ne seront pas
aligné.

If n n'est pas spécifié ou vaut zéro, utilisez une valeur par défaut dépendant de la machine.

Activé aux niveaux -O2, -O3.

-funit-a-a-time
Cette option est laissée pour des raisons de compatibilité. -funit-a-a-time n'a aucun effet, tandis que
-fno-unité-à-la-fois implique -fno-toplevel-réorganisation ainsi que -fno-section-ancres.

Activé par défaut.

-fno-toplevel-réorganisation
Ne réorganisez pas les fonctions de niveau supérieur, les variables et les instructions « asm ». Sortez-les dans
le même ordre qu'ils apparaissent dans le fichier d'entrée. Lorsque cette option est utilisée,
les variables statiques non référencées ne seront pas supprimées. Cette option est destinée à prendre en charge
code existant qui repose sur un ordre particulier. Pour un nouveau code, il est préférable d'utiliser
attributs.

Activé au niveau -O0. Lorsqu'elle est désactivée explicitement, cela implique également -fno-section-ancres,
qui est autrement activé à -O0 sur certaines cibles.

-fweb
Construit des sites Web couramment utilisés à des fins d'allocation de registres et attribue chaque site Web
pseudo-registre individuel. Cela permet à la passe d'attribution de registre de fonctionner sur
pseudos directement, mais renforce également plusieurs autres passes d'optimisation, telles que CSE,
optimiseur de boucle et solvant de code mort trivial. Il peut cependant rendre le débogage
impossible, puisque les variables ne resteront plus dans un "registre d'origine".

Activé par défaut avec -funroll-boucles.

-fwhole-programme
Supposons que l'unité de compilation actuelle représente l'ensemble du programme en cours de compilation.
Toutes les fonctions et variables publiques à l'exception de "main" et celles fusionnées par
l'attribut "externally_visible" devient des fonctions statiques et sont en effet optimisés
plus agressivement par les optimiseurs interprocéduraux. Si or est utilisé comme plug-in de l'éditeur de liens,
Les attributs "externally_visible" sont automatiquement ajoutés aux fonctions (pas encore variable
en raison d'un courant or issue) qui sont accessibles en dehors des objets LTO selon
fichier de résolution produit par or. Pour les autres éditeurs de liens qui ne peuvent pas générer de résolution
fichier, les attributs explicites "externally_visible" sont toujours nécessaires. Alors que cette option
équivaut à une utilisation correcte du mot-clé "static" pour les programmes consistant en un
fichier unique, en combinaison avec l'option -flto ce drapeau peut être utilisé pour compiler de nombreux
programmes à plus petite échelle puisque les fonctions et les variables deviennent locales pour l'ensemble
unité de compilation combinée, pas pour le fichier source unique lui-même.

Cette option implique -ffichier entier pour les programmes Fortran.

-flto[=n]
Cette option exécute l'optimiseur de temps de liaison standard. Lorsqu'il est invoqué avec le code source, il
génère GIMPLE (une des représentations internes de GCC) et l'écrit dans un ELF spécial
sections dans le fichier objet. Lorsque les fichiers objets sont liés entre eux, tous les
les corps de fonction sont lus à partir de ces sections ELF et instanciés comme s'ils avaient été
partie de la même unité de traduction.

Pour utiliser l'optimiseur de temps de liaison, -flto doit être spécifié au moment de la compilation et pendant
le dernier lien. Par exemple:

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

Les deux premières invocations à GCC enregistrent une représentation de bytecode de GIMPLE dans un
Sections ELF à l'intérieur foo.o ainsi que bar.o. L'invocation finale lit le bytecode GIMPLE
de foo.o ainsi que bar.o, fusionne les deux fichiers en une seule image interne et compile
le résultat comme d'habitude. Puisque les deux foo.o ainsi que bar.o sont fusionnés en une seule image, ce
fait en sorte que toutes les analyses et optimisations interprocédurales dans GCC fonctionnent à travers le
deux fichiers comme s'il s'agissait d'un seul. Cela signifie, par exemple, que l'inliner est
capable d'intégrer des fonctions dans bar.o en fonctions dans foo.o et vice versa.

Une autre façon (plus simple) d'activer l'optimisation du temps de liaison est :

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

Ce qui précède génère un bytecode pour foo.c ainsi que bar.c, les fusionne en un seul
représentation GIMPLE et les optimise comme d'habitude pour produire monprog.

La seule chose importante à garder à l'esprit est que pour permettre l'optimisation du temps de liaison, le
-flto flag doit être passé à la fois aux commandes de compilation et de liaison.

Pour que l'optimisation de l'ensemble du programme soit efficace, il est nécessaire de s'assurer que l'ensemble
hypothèses du programme. Le compilateur doit savoir quelles fonctions et variables peuvent être
accessible par les bibliothèques et l'environnement d'exécution en dehors de l'unité optimisée en temps de liaison. Lorsque
supporté par l'éditeur de liens, le plugin de l'éditeur de liens (voir -plugin-fuse-linker) passe
informations au compilateur sur les symboles utilisés et visibles de l'extérieur. Quand le
le plugin de l'éditeur de liens n'est pas disponible, -fwhole-programme doit être utilisé pour permettre au compilateur
faire ces hypothèses, ce qui conduit à des décisions d'optimisation plus agressives.

Notez que lorsqu'un fichier est compilé avec -flto, le fichier objet généré est plus grand que
un fichier objet normal car il contient les bytecodes GIMPLE et le code final habituel.
Cela signifie que les fichiers d'objet avec des informations LTO peuvent être liés en tant qu'objet normal
des dossiers; si -flto n'est pas transmis à l'éditeur de liens, aucune optimisation interprocédurale n'est
appliqué.

De plus, les indicateurs d'optimisation utilisés pour compiler des fichiers individuels ne sont pas
nécessairement liés à ceux utilisés au moment de la liaison. Par exemple,

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o monprog -flto -O3 foo.o bar.o

Cela produit des fichiers objets individuels avec du code assembleur non optimisé, mais le
binaire résultant monprog est optimisé à -O3. Si, à la place, le binaire final est
généré sans -flto, puis monprog n'est pas optimisé.

Lors de la production du binaire final avec -flto, GCC applique uniquement les optimisations de temps de liaison
aux fichiers qui contiennent du bytecode. Par conséquent, vous pouvez mélanger et assortir des fichiers objets
et les bibliothèques avec les bytecodes GIMPLE et le code objet final. GCC sélectionne automatiquement
quels fichiers optimiser en mode LTO et quels fichiers lier sans plus
traitement.

Il existe des drapeaux de génération de code conservés par GCC lors de la génération de bytecodes, comme
ils doivent être utilisés lors de l'étape de liaison finale. Actuellement, les options suivantes
sont enregistrés dans les fichiers de bytecode GIMPLE : -fPIC, -fcommun et tous les -m drapeaux cibles.

Au moment de la liaison, ces options sont lues et réappliquées. A noter que le courant
la mise en œuvre n'essaie pas de reconnaître les valeurs contradictoires de ces options. Si
différents fichiers ont des valeurs d'option en conflit (par exemple, un fichier est compilé avec -fPIC
et un autre ne l'est pas), le compilateur utilise simplement la dernière valeur lue à partir du bytecode
des dossiers. Il est alors recommandé de compiler tous les fichiers participant à la
même lien avec les mêmes options.

Si LTO rencontre des objets avec une liaison C déclarée avec des types incompatibles dans des
unités de traduction à relier entre elles (comportement non défini selon ISO C99
6.2.7), un diagnostic non fatal peut être émis. Le comportement n'est toujours pas défini à l'exécution
le temps.

Une autre caractéristique de LTO est qu'il est possible d'appliquer des optimisations interprocédurales
sur des fichiers écrits dans différentes langues. Cela nécessite un soutien sur le front de la langue
finir. Actuellement, les frontaux C, C++ et Fortran sont capables d'émettre GIMPLE
bytecodes, donc quelque chose comme ceci devrait fonctionner :

gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o monprog -flto -O3 foo.o bar.o baz.o -lgfortran

Notez que le lien final est fait avec g ++ pour obtenir les bibliothèques d'exécution C++ et
-lgfortran est ajouté pour obtenir les bibliothèques d'exécution Fortran. En général, lors du mélange
langues en mode LTO, vous devez utiliser les mêmes options de commande de lien que lors du mixage
langues dans une compilation régulière (non LTO) ; tout ce que vous devez ajouter est -flto à tous les
compiler et lier les commandes.

Si les fichiers objets contenant le bytecode GIMPLE sont stockés dans une archive de bibliothèque, dites
libfoo.a, il est possible de les extraire et de les utiliser dans un lien LTO si vous utilisez un
éditeur de liens avec prise en charge des plugins. Pour activer cette fonctionnalité, utilisez le drapeau -plugin-fuse-linker
au moment de la liaison :

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

Lorsque le plugin de l'éditeur de liens est activé, l'éditeur de liens extrait les fichiers GIMPLE nécessaires de
libfoo.a et les transmet au GCC en cours pour qu'ils fassent partie de l'agrégat
Image GIMPLE à optimiser.

Si vous n'utilisez pas d'éditeur de liens avec prise en charge des plugins et/ou n'activez pas l'éditeur de liens
plugin, puis les objets à l'intérieur libfoo.a sont extraits et liés comme d'habitude, mais ils
ne participez pas au processus d'optimisation LTO.

Les optimisations de temps de liaison ne nécessitent pas la présence de tout le programme pour fonctionner.
Si le programme ne nécessite pas l'exportation de symboles, il est possible de combiner
-flto ainsi que -fwhole-programme pour permettre aux optimiseurs interprocéduraux d'utiliser plus
hypothèses agressives qui peuvent conduire à de meilleures opportunités d'optimisation. Utilisation de
-fwhole-programme n'est pas nécessaire lorsque le plugin de l'éditeur de liens est actif (voir -plugin-fuse-linker).

L'implémentation actuelle de LTO n'essaie pas de générer un bytecode qui soit
portable entre différents types d'hôtes. Les fichiers de bytecode sont versionnés et il
est une vérification de version stricte, donc les fichiers de bytecode générés dans une version de GCC ne seront pas
fonctionne avec une version plus ancienne/plus récente de GCC.

L'optimisation du temps de liaison ne fonctionne pas bien avec la génération d'informations de débogage.
La combinaison -flto avec -g est actuellement expérimental et devrait produire de mauvais
résultats.

Si vous spécifiez l'optionnel n, l'optimisation et la génération de code effectuées au moment du lien
est exécuté en parallèle à l'aide n travaux parallèles en utilisant un faire .
La variable d'environnement FAITES peut être utilisé pour remplacer le programme utilisé. Le défaut
la valeur pour n est 1.

Vous pouvez également spécifier -flto=jobservateur utiliser le mode serveur de travail de GNU make pour déterminer
le nombre d'emplois parallèles. Ceci est utile lorsque le Makefile appelant GCC est déjà
s'exécutant en parallèle. Vous devez ajouter un + à la recette de commande dans le parent
Makefile pour que cela fonctionne. Cette option ne fonctionne probablement que si FAITES est GNU make.

Cette option est désactivée par défaut

-flto-partition =alg
Spécifiez l'algorithme de partitionnement utilisé par l'optimiseur de temps de liaison. La valeur est
soit "1to1" pour spécifier un partitionnement reflétant les fichiers sources originaux ou
"balanced" pour spécifier le partitionnement en morceaux de taille égale (dans la mesure du possible).
Spécifier "aucun" comme algorithme désactive complètement le partitionnement et la diffusion en continu. Les
la valeur par défaut est "équilibrée".

-flto-niveau-de-compression=n
Cette option spécifie le niveau de compression utilisé pour le langage intermédiaire écrit
aux fichiers objets LTO, et n'a de sens qu'en conjonction avec le mode LTO (-flto).
Les valeurs valides vont de 0 (pas de compression) à 9 (compression maximale). Valeurs en dehors de cela
sont limités à 0 ou à 9. Si l'option n'est pas donnée, une valeur équilibrée par défaut
le paramètre de compression est utilisé.

-flto-rapport
Imprime un rapport avec des détails internes sur le fonctionnement de l'optimiseur de temps de liaison. Les
le contenu de ce rapport varie d'une version à l'autre. Il est censé être utile à GCC
développeurs lors du traitement des fichiers objets en mode LTO (via -flto).

Désactivé par défaut

-plugin-fuse-linker
Permet l'utilisation d'un plugin d'éditeur de liens lors de l'optimisation du temps de liaison. Cette option repose
sur le support des plugins dans l'éditeur de liens, qui est disponible en gold ou en GNU ld 2.21 ou
plus récent.

Cette option permet l'extraction des fichiers objets avec le bytecode GIMPLE hors de la bibliothèque
les archives. Cela améliore la qualité de l'optimisation en exposant plus de code au lien-
optimiseur de temps. Ces informations spécifient quels symboles sont accessibles de l'extérieur
(par objet non LTO ou lors d'une liaison dynamique). Améliorations de la qualité du code résultantes sur
les binaires (et les bibliothèques partagées qui utilisent la visibilité cachée) sont similaires à
"-fwhole-programme". Voir -flto pour une description de l'effet de ce drapeau et comment
utilise le.

Cette option est activée par défaut lorsque la prise en charge de LTO dans GCC est activée et que GCC a été
configuré pour être utilisé avec un éditeur de liens prenant en charge les plugins (GNU ld 2.21 ou plus récent ou gold).

-ffat-lto-objets
Les objets Fat LTO sont des fichiers objets qui contiennent à la fois le langage intermédiaire et le
code objet. Cela les rend utilisables à la fois pour la liaison LTO et la liaison normale. Cette
l'option n'est effective que lors de la compilation avec -flto et est ignoré au moment de la liaison.

-fno-fat-lto-objets améliore le temps de compilation par rapport au LTO simple, mais nécessite le
chaîne d'outils complète pour être au courant de LTO. Il nécessite un éditeur de liens avec prise en charge du plug-in de l'éditeur de liens
pour les fonctionnalités de base. De plus, nm, ar et ranlib doivent prendre en charge l'éditeur de liens
plugins pour permettre un environnement de construction complet (capable de construire des
bibliothèques, etc.).

La valeur par défaut est -ffat-lto-objets mais cette valeur par défaut est destinée à changer à l'avenir
versions lorsque les environnements activés par le plug-in de l'éditeur de liens deviennent plus courants.

-fcompare-elim
Après la répartition des instructions d'allocation de registre et d'allocation de post-enregistrement, identifiez
instructions arithmétiques qui calculent des indicateurs de processeur similaires à une opération de comparaison
sur la base de cette arithmétique. Si possible, éliminez l'opération de comparaison explicite.

Ce laissez-passer s'applique uniquement à certaines cibles qui ne peuvent pas représenter explicitement le
opération de comparaison avant la fin de l'allocation des registres.

Activé aux niveaux -O, -O2, -O3, -Tu.

-fuse-ld=or
Utilisez l'option or l'éditeur de liens au lieu de l'éditeur de liens par défaut.

-fusible-ld=bfd
Utilisez l'option ld.bfd l'éditeur de liens au lieu de l'éditeur de liens par défaut.

-fcprop-registres
Après la séparation des instructions d'allocation de registre et d'allocation de post-registre, nous
effectuer une passe de propagation de copie pour essayer de réduire les dépendances de planification et
éliminer occasionnellement la copie.

Activé aux niveaux -O, -O2, -O3, -Tu.

-fcorrection-de-profil
Les profils collectés à l'aide d'un binaire instrumenté pour les programmes multithreads peuvent être
incohérent en raison de mises à jour de compteur manquées. Lorsque cette option est spécifiée, GCC
utiliser des heuristiques pour corriger ou aplanir de telles incohérences. Par défaut, GCC
émettre un message d'erreur lorsqu'un profil incohérent est détecté.

-fprofile-dir=chemin
Définissez le répertoire dans lequel rechercher les fichiers de données de profil sur chemin. Cette option
affecte uniquement les données de profil générées par -fprofile-générer, -ftest-couverture,
-fprofile-arcs et utilisé par -fprofil-utilisation ainsi que -fbranche-probabilités et ses apparentés
option. Les chemins absolus et relatifs peuvent être utilisés. Par défaut, GCC utilisera le
répertoire courant en tant que chemin, ainsi le fichier de données de profil apparaîtra dans le même
répertoire comme fichier objet.

-fprofile-générer
-fprofile-generate=chemin
Activer les options généralement utilisées pour instrumenter l'application afin de produire un profil utile
pour une recompilation ultérieure avec une optimisation basée sur les commentaires de profil. Tu dois utiliser
-fprofile-générer à la fois lors de la compilation et lors de la liaison de votre programme.

Les options suivantes sont activées : "-fprofile-arcs", "-fprofile-values", "-fvpt".

If chemin est spécifié, GCC examinera le chemin pour trouver les données de retour de profil
des dossiers. Voir -fprofile-dir.

-fprofil-utilisation
-fprofile-use=chemin
Activer les optimisations dirigées par les commentaires de profil et les optimisations généralement rentables
uniquement avec les commentaires de profil disponibles.

Les options suivantes sont activées : "-fbranch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"

Par défaut, GCC émet un message d'erreur si les profils de retour ne correspondent pas aux
code source. Cette erreur peut être transformée en avertissement en utilisant -Wcouverture-inadéquation.
Notez que cela peut entraîner un code mal optimisé.

If chemin est spécifié, GCC examinera le chemin pour trouver les données de retour de profil
des dossiers. Voir -fprofile-dir.

Les options suivantes contrôlent le comportement du compilateur concernant l'arithmétique à virgule flottante.
Ces options font le compromis entre vitesse et exactitude. Tous doivent être spécifiquement activés.

-ffloat-store
Ne stockez pas de variables à virgule flottante dans des registres et inhibez d'autres options qui
peut changer si une valeur à virgule flottante est extraite d'un registre ou d'une mémoire.

Cette option évite un excès de précision indésirable sur des machines telles que le 68000 où
les registres flottants (du 68881) gardent plus de précision qu'un "double" est supposé
pour avoir. De même pour l'architecture x86. Pour la plupart des programmes, l'excès de précision
ne fait que du bien, mais quelques programmes s'appuient sur la définition précise de l'IEEE flottant
point. Utilisation -ffloat-store pour de tels programmes, après les avoir modifiés pour stocker tous
calculs intermédiaires pertinents en variables.

-fexcès-précision=Catégorie
Cette option permet un contrôle supplémentaire sur l'excès de précision sur les machines où le flottement-
les registres ponctuels ont plus de précision que les types IEEE "float" et "double" et le
le processeur ne prend pas en charge les opérations d'arrondi à ces types. Par défaut,
-fexcess-precision=rapide est en vigueur ; cela signifie que les opérations sont effectuées dans
la précision des registres et qu'elle est imprévisible lors de l'arrondi aux types
spécifié dans le code source a lieu. Lors de la compilation C, si
-fexcess-precision=standard est spécifié, l'excès de précision suivra les règles
spécifié dans l'ISO C99 ; en particulier, les conversions et les affectations entraînent des valeurs
arrondis à leurs types sémantiques (alors que -ffloat-store n'affecte que les affectations).
Cette option est activée par défaut pour C si une option de conformité stricte telle que
-std=c99 est utilisé.

-fexcess-precision=standard n'est pas implémenté pour les langages autres que C, et n'a pas
effet si -funsafe-math-optimisations or -ffast-mathématiques est spécifié. Sur le x86, il
n'a pas non plus d'effet si -mfpmath=sse or -mfpmath=sse+387 est spécifié; dans l'ancien
cas, la sémantique IEEE s'applique sans excès de précision, et dans ce dernier cas, l'arrondi est
imprévisible.

-ffast-mathématiques
Sets -fno-math-errno, -funsafe-math-optimisations, -ffinite-mathématiques-seulement,
-fno-arrondir-math, -fno-signalisation-nans ainsi que -fcx-gamme-limitée.

Cette option provoque la définition de la macro de préprocesseur "__FAST_MATH__".

Cette option n'est activée par aucun -O option en plus -Ofast car cela peut entraîner
sortie incorrecte pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques. Il peut, cependant, produire un code plus rapide pour
programmes qui ne nécessitent pas les garanties de ces spécifications.

-fno-math-errno
Ne définissez pas ERRNO après avoir appelé des fonctions mathématiques exécutées avec un seul
instruction, par exemple, sqrt. Un programme qui s'appuie sur les exceptions IEEE pour les erreurs mathématiques
la gestion peut vouloir utiliser ce drapeau pour la vitesse tout en maintenant l'arithmétique IEEE
compatibilité.

Cette option n'est activée par aucun -O option car cela peut entraîner une sortie incorrecte
pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques. Il peut, cependant, produire un code plus rapide pour
programmes qui ne nécessitent pas les garanties de ces spécifications.

La valeur par défaut est -fmath-errno.

Sur les systèmes Darwin, la bibliothèque mathématique ne définit jamais "errno". Il n'y a donc aucune raison
pour le compilateur d'envisager la possibilité que cela puisse, et -fno-math-errno est
défaut.

-funsafe-math-optimisations
Autoriser les optimisations pour l'arithmétique à virgule flottante qui (a) supposent que les arguments et
les résultats sont valides et (b) peuvent enfreindre les normes IEEE ou ANSI. Lorsqu'il est utilisé au moment de la liaison,
il peut inclure des bibliothèques ou des fichiers de démarrage qui modifient le mot de contrôle FPU par défaut ou
d'autres optimisations similaires.

Cette option n'est activée par aucun -O option car cela peut entraîner une sortie incorrecte
pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques. Il peut, cependant, produire un code plus rapide pour
programmes qui ne nécessitent pas les garanties de ces spécifications. Permet
-fno-signé-zéros, -fno-piégeage-maths, -fassociatif-maths ainsi que -freciprocal-maths.

La valeur par défaut est -fno-unsafe-math-optimisations.

-fassociatif-maths
Autoriser la réassociation d'opérandes dans une série d'opérations à virgule flottante. Cette
viole la norme de langage ISO C et C++ en modifiant éventuellement le résultat du calcul.
REMARQUE : la réorganisation peut changer le signe de zéro ainsi qu'ignorer les NaN et inhiber ou
créer un débordement ou un débordement (et ne peut donc pas être utilisé sur du code qui repose sur l'arrondi
comportement comme "(x + 2**52) - 2**52". Peut également réorganiser les comparaisons à virgule flottante et
ne peut donc pas être utilisé lorsque des comparaisons ordonnées sont requises. Cette option nécessite que
tous les deux -fno-signé-zéros ainsi que -fno-piégeage-maths être en vigueur. De plus, cela ne fait pas
beaucoup de sens avec -recherche-maths. Pour Fortran, l'option est automatiquement activée lorsque
tous les deux -fno-signé-zéros ainsi que -fno-piégeage-maths sont en vigueur.

La valeur par défaut est -fno-associatif-maths.

-freciprocal-maths
Autoriser l'inverse d'une valeur à être utilisé au lieu de diviser par la valeur si cela
permet des optimisations. Par exemple "x / y" peut être remplacé par "x * (1/y)", qui est
utile si "(1/y)" est soumis à une élimination de sous-expression commune. Notez que ce
perd en précision et augmente le nombre de flops opérant sur la valeur.

La valeur par défaut est -fno-réciproque-maths.

-ffinite-mathématiques-seulement
Autoriser les optimisations pour l'arithmétique à virgule flottante qui supposent que les arguments et
les résultats ne sont pas des NaNs ou des +-Infs.

Cette option n'est activée par aucun -O option car cela peut entraîner une sortie incorrecte
pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques. Il peut, cependant, produire un code plus rapide pour
programmes qui ne nécessitent pas les garanties de ces spécifications.

La valeur par défaut est -fno-fini-mathématiques-seulement.

-fno-signé-zéros
Autoriser les optimisations pour l'arithmétique à virgule flottante qui ignorent la signature de zéro.
L'arithmétique IEEE spécifie le comportement des valeurs distinctes +0.0 et -0.0, qui
interdit la simplification d'expressions telles que x+0.0 ou 0.0*x (même avec
-ffinite-mathématiques-seulement). Cette option implique que le signe d'un résultat nul n'est pas
important.

La valeur par défaut est -fsigned-zéros.

-fno-piégeage-maths
Compiler le code en supposant que les opérations à virgule flottante ne peuvent pas générer de visibilité par l'utilisateur
pièges. Ces pièges incluent la division par zéro, le débordement, le débordement, le résultat inexact et
opération invalide. Cette option nécessite que -fno-signalisation-nans être en vigueur.
La définition de cette option peut permettre un code plus rapide si l'on s'appuie sur l'arithmétique IEEE "non-stop",
par exemple.

Cette option ne doit jamais être activée par aucun -O option car cela peut entraîner
sortie incorrecte pour les programmes qui dépendent d'une implémentation exacte de IEEE ou ISO
règles/spécifications pour les fonctions mathématiques.

La valeur par défaut est -ftrapping-maths.

-recherche-maths
Désactiver les transformations et les optimisations qui supposent l'arrondi à virgule flottante par défaut
comportement. Il s'agit d'un arrondi à zéro pour toutes les conversions de virgule flottante en nombre entier, et
arrondir au plus près pour toutes les autres troncatures arithmétiques. Cette option devrait être
spécifié pour les programmes qui modifient le mode d'arrondi FP de manière dynamique, ou qui peuvent être
exécuté avec un mode d'arrondi différent de celui par défaut. Cette option désactive le pliage constant de
expressions à virgule flottante au moment de la compilation (qui peuvent être affectées par le mode d'arrondi)
et les transformations arithmétiques qui ne sont pas sûres en présence de
modes d'arrondi.

La valeur par défaut est -fno-arrondir-math.

Cette option est expérimentale et ne garantit actuellement pas de désactiver tous les GCC
optimisations affectées par le mode d'arrondi. Les futures versions de GCC peuvent fournir
contrôle plus fin de ce paramètre en utilisant le pragma "FENV_ACCESS" de C99. Cette ligne de commande
sera utilisée pour spécifier l'état par défaut de "FENV_ACCESS".

-fsignaling-nans
Compilez le code en supposant que les NaN de signalisation IEEE peuvent générer des pièges visibles par l'utilisateur pendant
opérations à virgule flottante. La définition de cette option désactive les optimisations qui peuvent changer
le nombre d'exceptions visibles avec les NaN de signalisation. Cette option implique
-ftrapping-maths.

Cette option provoque la définition de la macro de préprocesseur "__SUPPORT_SNAN__".

La valeur par défaut est -fno-signalisation-nans.

Cette option est expérimentale et ne garantit actuellement pas de désactiver tous les GCC
optimisations qui affectent le comportement de signalisation NaN.

-fconstante-single-précision
Traiter les constantes à virgule flottante comme une simple précision au lieu de les convertir implicitement
les constantes en double précision.

-fcx-gamme-limitée
Lorsqu'elle est activée, cette option indique qu'une étape de réduction de plage n'est pas nécessaire lorsque
effectuer une division complexe. De plus, il n'est pas possible de vérifier si le résultat d'un
la multiplication ou la division complexe est "NaN + I*NaN", avec une tentative de sauver le
situation dans ce cas. La valeur par défaut est -fno-cx-gamme-limitée, mais est activé par
-ffast-mathématiques.

Cette option contrôle le paramétrage par défaut du pragma ISO C99 "CX_LIMITED_RANGE".
Néanmoins, l'option s'applique à toutes les langues.

-fcx-fortran-règles
La multiplication et la division complexes suivent les règles Fortran. La réduction de la portée se fait comme
partie d'une division complexe, mais il n'est pas possible de vérifier si le résultat d'une division complexe
la multiplication ou la division est "NaN + I*NaN", avec une tentative de sauver la situation
dans ce cas.

La valeur par défaut est -fno-cx-fortran-règles.

Les options suivantes contrôlent les optimisations qui peuvent améliorer les performances, mais ne sont pas
activé par n'importe quel -O option. Cette section comprend des options expérimentales qui peuvent produire
code cassé.

-fbranche-probabilités
Après avoir exécuté un programme compilé avec -fprofile-arcs, vous pouvez le compiler une seconde fois
en utilisant -fbranche-probabilités, pour améliorer les optimisations en fonction du nombre de fois
chaque branche a été prise. Lorsque le programme compilé avec -fprofile-arcs quitte il enregistre
l'exécution de l'arc compte dans un fichier appelé nomsource.gcda pour chaque fichier source. Les
les informations contenues dans ce fichier de données sont très dépendantes de la structure du fichier généré
code, vous devez donc utiliser le même code source et les mêmes options d'optimisation pour les deux
compilations.

Avec -fbranche-probabilités, GCC met un REG_BR_PROB note sur chaque JUMP_INSN ainsi que
APPEL_INSN. Ceux-ci peuvent être utilisés pour améliorer l'optimisation. Actuellement, ils ne sont utilisés que
en un seul endroit : dans reorg.c, au lieu de deviner quel chemin une branche est le plus susceptible d'emprunter
prendre la REG_BR_PROB les valeurs sont utilisées pour déterminer exactement quel chemin est pris plus
souvent.

-fprofile-valeurs
Si combiné avec -fprofile-arcs, il ajoute du code pour que certaines données sur les valeurs de
expressions dans le programme sont rassemblées.

Avec -fbranche-probabilités, il relit les données recueillies à partir des valeurs de profilage de
expressions à utiliser dans les optimisations.

Activé avec -fprofile-générer ainsi que -fprofil-utilisation.

-fvpt
Si combiné avec -fprofile-arcs, il demande au compilateur d'ajouter un code pour rassembler
informations sur les valeurs des expressions.

Avec -fbranche-probabilités, il relit les données recueillies et effectue effectivement le
optimisations basées sur eux. Actuellement, les optimisations incluent la spécialisation de
opération de division en utilisant la connaissance de la valeur du dénominateur.

-frename-registres
Tenter d'éviter les fausses dépendances dans le code planifié en utilisant les registres laissés
après l'attribution du registre. Cette optimisation profitera le plus aux processeurs avec
beaucoup de registres. Selon le format des informations de débogage adopté par la cible,
cependant, cela peut rendre le débogage impossible, car les variables ne resteront plus dans un
« registre à domicile ».

Activé par défaut avec -funroll-boucles ainsi que -fpeel-boucles.

-ftraceur
Effectuez une duplication de la queue pour agrandir la taille du superbloc. Cette transformation simplifie
le flux de contrôle de la fonction permettant à d'autres optimisations de faire un meilleur travail.

Activé avec -fprofil-utilisation.

-funroll-boucles
Dérouler des boucles dont le nombre d'itérations peut être déterminé au moment de la compilation ou lors de
entrée dans la boucle. -funroll-boucles implique -frun-cse-après-boucle, -fweb ainsi que
-frename-registres. Il active également le pelage complet de la boucle (c'est-à-dire l'élimination complète de
boucles avec un petit nombre constant d'itérations). Cette option agrandit le code et
peut ou non le faire fonctionner plus rapidement.

Activé avec -fprofil-utilisation.

-funroll-toutes-les-boucles
Déroulez toutes les boucles, même si leur nombre d'itérations est incertain lorsque la boucle est
entré. Cela ralentit généralement l'exécution des programmes. -funroll-toutes-les-boucles implique le
mêmes options que -funroll-boucles.

-fpeel-boucles
Pele les boucles pour lesquelles il y a suffisamment d'informations pour qu'elles ne roulent pas beaucoup (de
commentaires de profil). Il active également le pelage complet de la boucle (c'est-à-dire l'élimination complète de
boucles avec un petit nombre constant d'itérations).

Activé avec -fprofil-utilisation.

-fmove-boucle-invariants
Active la passe de mouvement invariant de boucle dans l'optimiseur de boucle RTL. Activé au niveau
-O1

-funswitch-boucles
Déplacer les branches avec des conditions invariantes de boucle hors de la boucle, avec des doublons du
boucle sur les deux branches (modifiée en fonction du résultat de la condition).

-ffonction-sections
-fdata-sections
Placez chaque fonction ou élément de données dans sa propre section dans le fichier de sortie si la cible
prend en charge les sections arbitraires. Le nom de la fonction ou le nom de la donnée
détermine le nom de la section dans le fichier de sortie.

Utilisez ces options sur les systèmes où l'éditeur de liens peut effectuer des optimisations pour améliorer
localité de référence dans l'espace d'instruction. La plupart des systèmes utilisant l'objet ELF
format et les processeurs SPARC exécutant Solaris 2 ont des linkers avec de telles optimisations.
AIX peut avoir ces optimisations à l'avenir.

N'utilisez ces options que lorsqu'il y a des avantages significatifs à le faire. Lorsque vous
spécifiez ces options, l'assembleur et l'éditeur de liens créeront un objet plus grand et
fichiers exécutables et sera également plus lent. Vous ne pourrez pas utiliser "gprof" sur tous
systèmes si vous spécifiez cette option et vous pouvez avoir des problèmes de débogage si vous
spécifiez à la fois cette option et -g.

-fbranch-target-load-optimize
Effectuez l'optimisation de la charge du registre cible de la branche avant le threading du prologue/épilogue.
L'utilisation de registres cibles ne peut généralement être exposée que pendant le rechargement, soulevant ainsi
charge hors des boucles et la planification inter-blocs nécessite une optimisation distincte
passer.

-fbranch-target-load-optimize2
Effectuez l'optimisation de la charge du registre cible de la branche après le threading prologue / épilogue.

-fbtr-bb-exclusif
Lors de l'optimisation de la charge du registre de la cible de branche, ne réutilisez pas la cible de branche
s'enregistre dans n'importe quel bloc de base.

-fstack-protecteur
Émettez du code supplémentaire pour vérifier les débordements de tampon, tels que les attaques par écrasement de pile. Cette
se fait en ajoutant une variable de garde aux fonctions avec des objets vulnérables. Cette
inclut des fonctions qui appellent alloca et des fonctions avec des tampons supérieurs à 8 octets.
Les gardes sont initialisées lorsqu'une fonction est saisie puis vérifiées lorsque le
la fonction sort. Si un contrôle de garde échoue, un message d'erreur est imprimé et le programme
sorties.

REMARQUE : dans Ubuntu 6.10 et les versions ultérieures, cette option est activée par défaut pour C, C++,
ObjC, ObjC++, si aucun des -fno-pile-protecteur, -nostdlib, ni -fautoportant
trouvé.

-fstack-protecteur-tout
Comme -fstack-protecteur sauf que toutes les fonctions sont protégées.

-fsection-ancres
Essayez de réduire le nombre de calculs d'adresses symboliques en utilisant une "ancre" partagée
symboles pour adresser les objets à proximité. Cette transformation peut aider à réduire le nombre
des entrées GOT et des accès GOT sur certaines cibles.

Par exemple, l'implémentation de la fonction suivante "foo":

statique int a, b, c;
int foo (vide) { retourne a + b + c; }

calculerait généralement les adresses des trois variables, mais si vous le compilez
avec -fsection-ancres, il accédera aux variables à partir d'un point d'ancrage commun
au lieu. L'effet est similaire au pseudocode suivant (qui n'est pas un C valide) :

int foo (vide)
{
registre entier *xr = &x;
renvoie xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Toutes les cibles ne prennent pas en charge cette option.

--param prénom=Plus-value
À certains endroits, GCC utilise diverses constantes pour contrôler la quantité d'optimisation qui
est fait. Par exemple, GCC n'intégrera pas les fonctions contenant plus d'un certain
nombre d'instructions. Vous pouvez contrôler certaines de ces constantes sur la ligne de commande
utilisant l' --param option.

Les noms de paramètres spécifiques et la signification des valeurs sont liés au
internes du compilateur, et sont sujets à changement sans préavis à l'avenir
Communiqués.

Dans chaque cas, le Plus-value est un entier. Les choix autorisés pour prénom sont donnés en
le tableau suivant :

résultat-prévisible-de-branche
Lorsqu'il est prévu que la branche soit prise avec une probabilité inférieure à ce seuil
(en pourcentage), alors il est considéré comme bien prévisible. La valeur par défaut est 10.

max-crossjump-bords
Le nombre maximum de fronts entrants à prendre en compte pour les sauts croisés. L'algorithme
utilisé par -f saut en croix est O(N^2) dans le nombre d'arêtes entrant dans chaque bloc.
Des valeurs croissantes signifient une optimisation plus agressive, ce qui rend le temps de compilation
augmenter avec probablement une petite amélioration de la taille de l'exécutable.

min-crossjump-insns
Le nombre minimum d'instructions qui doivent être mises en correspondance à la fin de deux blocs
avant que des sauts croisés ne soient effectués sur eux. Cette valeur est ignorée dans le cas
où toutes les instructions du bloc à partir desquelles le saut croisé est effectué sont mises en correspondance. Les
la valeur par défaut est 5.

max-grow-copy-bb-insns
Le facteur d'expansion de taille de code maximum lors de la copie de blocs de base au lieu de
sauter. L'expansion est relative à une instruction de saut. La valeur par défaut est
8.

max-goto-duplication-insns
Le nombre maximum d'instructions à dupliquer dans un bloc qui saute à un
goto calculé. Pour éviter le comportement O(N^2) dans un certain nombre de passes, les facteurs GCC
gotos calculés au début du processus de compilation, et les défactorise aussi tard que
possible. Seuls les sauts calculés à la fin d'un bloc de base avec pas plus de max-
goto-duplication-insns ne sont pas factorisés. La valeur par défaut est 8.

max-delay-slot-insn-recherche
Le nombre maximum d'instructions à prendre en compte lors de la recherche d'une instruction à
remplir un créneau de délai. Si plus que ce nombre arbitraire d'instructions est
recherché, le gain de temps en remplissant le créneau de délai sera minime, alors arrêtez
recherche. Des valeurs croissantes signifient une optimisation plus agressive, ce qui rend le
augmentation du temps de compilation avec probablement une petite amélioration du temps d'exécution.

max-delay-slot-live-recherche
Lorsque vous essayez de remplir des créneaux de retard, le nombre maximum d'instructions à prendre en compte
lors de la recherche d'un bloc avec des informations de registre en direct valides. Augmenter ce
valeur choisie arbitrairement signifie une optimisation plus agressive, augmentant la
temps de compilation. Ce paramètre doit être supprimé lorsque le code d'intervalle de retard est
réécrit pour maintenir le graphe de contrôle de flux.

mémoire-max-gcse
La quantité maximale approximative de mémoire qui sera allouée pour
effectuer l'optimisation globale de l'élimination des sous-expressions communes. Si plus de mémoire
que spécifié est requis, l'optimisation ne sera pas effectuée.

rapport-d'insertion-max-gcse
Si le rapport des insertions d'expression aux suppressions est supérieur à cette valeur pour
n'importe quelle expression, alors RTL PRE insérera ou supprimera l'expression et laissera ainsi
calculs partiellement redondants dans le flux d'instructions. La valeur par défaut est
20.

longueur-max-liste-en attente
Le nombre maximal de dépendances en attente que la planification autorisera avant le vidage
l'état actuel et recommencer. Grandes fonctions avec peu de branches ou d'appels
peut créer des listes excessivement volumineuses qui consomment inutilement de la mémoire et des ressources.

max-modulo-backtrack-tentatives
Le nombre maximum de tentatives de retour en arrière que le planificateur doit effectuer lorsque modulo
planifier une boucle. Des valeurs plus élevées peuvent augmenter de façon exponentielle le temps de compilation.

max-inline-insns-single
Plusieurs paramètres contrôlent l'inliner d'arbre utilisé dans gcc. Ce nombre définit le
nombre maximum d'instructions (comptées dans la représentation interne de GCC) dans un
fonction unique que l'inliner d'arbre prendra en compte pour l'inline. Ceci seulement
affecte les fonctions déclarées en ligne et les méthodes implémentées dans une déclaration de classe
(C++). La valeur par défaut est 400.

max-inline-insns-auto
Lorsque vous utilisez -finline-fonctions (inclus dans -O3), beaucoup de fonctions qui
dans le cas contraire, ne pas être pris en compte pour l'inline par le compilateur fera l'objet d'une enquête. À
ces fonctions, une limite différente (plus restrictive) par rapport aux fonctions
déclaré en ligne peut être appliqué. La valeur par défaut est 40.

grand-fonction-insns
La limite spécifiant des fonctions vraiment volumineuses. Pour les fonctions supérieures à cette limite
après l'incorporation, l'incorporation est limitée par --param grand-fonction-croissance. Ce
Le paramètre est utile principalement pour éviter un temps de compilation extrême causé par des
algorithmes linéaires utilisés par le back-end. La valeur par défaut est 2700.

grand-fonction-croissance
Spécifie la croissance maximale d'une grande fonction causée par l'incorporation en pourcentages. Les
la valeur par défaut est 100, ce qui limite la croissance des fonctions importantes à 2.0 fois l'original
Taille.

auberges-grandes-unités
La limite spécifiant une grande unité de traduction. Croissance causée par l'enlignement des unités
supérieure à cette limite est limitée par --param croissance unitaire en ligne. Pour les petites unités
cela pourrait être trop serré (considérez l'unité constituée de la fonction A qui est en ligne et
B qui appelle juste A trois fois. Si B est petit par rapport à A, la croissance de l'unité
est de 300\% et pourtant une telle incorporation est très sensée. Pour les très grandes unités composées de
petites fonctions inlineables, cependant la limite de croissance unitaire globale est nécessaire pour
éviter l'explosion exponentielle de la taille du code. Ainsi, pour les unités plus petites, la taille est
augmentée à --param auberges-grandes-unités avant d'appliquer --param croissance unitaire en ligne.
La valeur par défaut est 10000

croissance unitaire en ligne
Spécifie la croissance globale maximale de l'unité de compilation causée par l'incorporation. Les
la valeur par défaut est 30, ce qui limite la croissance des unités à 1.3 fois la taille d'origine.

ipcp-unité-croissance
Spécifie la croissance globale maximale de l'unité de compilation causée par interprocédurale
propagation constante. La valeur par défaut est 10, ce qui limite la croissance des unités à 1.1
fois la taille d'origine.

cadre à grande pile
La limite spécifiant de grands cadres de pile. Lors de l'inline, l'algorithme essaie
de ne pas trop dépasser cette limite. La valeur par défaut est de 256 octets.

grand-stack-frame-croissance
Spécifie la croissance maximale des grandes images de pile causée par l'incorporation en pourcentages.
La valeur par défaut est 1000, ce qui limite la croissance des grandes trames de pile à 11 fois la
format original.

max-inline-insns-récursif
max-inline-insns-récursif-auto
Spécifie le nombre maximum d'instructions copie hors ligne de l'auto-récursive en ligne
fonction peut se développer en effectuant l'inline récursive.

Pour les fonctions déclarées en ligne --param max-inline-insns-récursif est pris en
Compte. Pour la fonction non déclarée en ligne, l'incorporation récursive se produit uniquement lorsque
-finline-fonctions (inclus dans -O3) est activé et --param max-inline-insns-
récursif-auto est utilisé. La valeur par défaut est 450.

max-inline-récursive-profondeur
max-inline-récursive-profondeur-auto
Spécifie la profondeur de récursivité maximale utilisée par l'incorporation récursive.

Pour les fonctions déclarées en ligne --param max-inline-récursive-profondeur est pris en
Compte. Pour la fonction non déclarée en ligne, l'incorporation récursive se produit uniquement lorsque
-finline-fonctions (inclus dans -O3) est activé et --param max-inline-récursif-
profondeur-auto est utilisé. La valeur par défaut est 8.

min-inline-récursive-probabilité
L'incorporation récursive n'est rentable que pour la fonction ayant une récursivité profonde dans
moyenne et peut nuire à la fonction ayant peu de profondeur de récursivité en augmentant le
la taille du prologue ou la complexité du corps de la fonction à d'autres optimiseurs.

Lorsque les commentaires de profil sont disponibles (voir -fprofile-générer) la récursivité réelle
la profondeur peut être devinée à partir de la probabilité que la fonction se reproduise via un appel donné
expression. Ce paramètre limite l'inline uniquement à l'expression d'appel dont
la probabilité dépasse le seuil donné (en pourcentage). La valeur par défaut est 10.

auberges-early-inlining
Spécifiez la croissance que l'inliner précoce peut produire. En effet, il augmente la quantité de
inlining pour le code ayant une grande pénalité d'abstraction. La valeur par défaut est 10.

max-early-inliner-itérations
max-early-inliner-itérations
Limite d'itérations de l'inliner précoce. Cela limite essentiellement le nombre de
les appels indirects précoces peuvent être résolus. Les chaînes plus profondes sont toujours gérées par des retardataires
entoilage.

comdat-partage-probabilité
comdat-partage-probabilité
Probabilité (en pourcentage) que la fonction en ligne C++ avec visibilité comdat sera
partagé entre plusieurs unités de compilation. La valeur par défaut est 20.

min-vect-loop-lié
Le nombre minimum d'itérations sous lequel une boucle ne sera pas vectorisée lorsque
-ftree-vectoriser est utilisé. Le nombre d'itérations après la vectorisation doit être
être supérieure à la valeur spécifiée par cette option pour permettre la vectorisation. Les
la valeur par défaut est 0.

rapport-distance-coût-gcse
Facteur d'échelle dans le calcul de la distance maximale par laquelle une expression peut être déplacée
Optimisations GCSE. Ceci n'est actuellement pris en charge que dans la passe de levage de code.
Plus le rapport est grand, plus le levage de code sera agressif avec de simples
expressions, c'est-à-dire les expressions qui ont coûté moins de gcse-sans restriction-
sables moins coûteux. La spécification de 0 désactivera le levage d'expressions simples. Le défaut
la valeur est 10.

gcse-coût-non restreint
Coût, approximativement mesuré comme le coût d'une seule instruction machine type, à
quelles optimisations GCSE ne limiteront pas la distance qu'une expression peut parcourir.
Ceci n'est actuellement pris en charge que dans la passe de levage de code. Moins le coût,
le levage de code le plus agressif sera. Spécifier 0 permettra à tous
expressions pour parcourir des distances illimitées. La valeur par défaut est 3.

max-levage-profondeur
La profondeur de recherche dans l'arbre dominant pour les expressions à hisser. Ceci est utilisé
pour éviter un comportement quadratique dans l'algorithme de levage. La valeur 0 évitera
limitant la recherche, mais peut ralentir la compilation de fonctions énormes. Le défaut
la valeur est 30.

max-tail-merge-comparaisons
Le nombre maximum de billes similaires avec lesquelles comparer un bille. Ceci est utilisé pour éviter
comportement quadratique dans la fusion de la queue des arbres. La valeur par défaut est 10.

max-tail-merge-itérations
Le nombre maximal d'itérations de la passe sur la fonction. Ceci est utilisé pour
limiter le temps de compilation dans la fusion de queue d'arbre. La valeur par défaut est 2.

max-unrolled-insns
Le nombre maximum d'instructions qu'une boucle devrait avoir si cette boucle est
déroulé, et si la boucle est déroulée, il détermine combien de fois le code de boucle
est déroulé.

max-moyenne-déroulée-insns
Le nombre maximum d'instructions biaisées par les probabilités de leur exécution qui
une boucle devrait avoir si cette boucle est déroulée, et si la boucle est déroulée, elle
détermine combien de fois le code de boucle est déroulé.

temps de déroulement maximum
Le nombre maximum de déroulements d'une même boucle.

max-peled-insns
Le nombre maximum d'instructions qu'une boucle devrait avoir si cette boucle est épluchée,
et si la boucle est épluchée, il détermine combien de fois le code de boucle est épluché.

temps de pelage maximum
Le nombre maximum de peelings d'une seule boucle.

max-complètement-peeled-insns
Le nombre maximum d'insns d'une boucle complètement décollée.

max-complètement-peel-times
Le nombre maximum d'itérations d'une boucle pour convenir à un peeling complet.

max-complètement-peler-boucle-nid-profondeur
La profondeur maximale d'un nid de boucle adapté à un pelage complet.

max-unswitch-insns
Le nombre maximum d'insns d'une boucle non commutée.

niveau de déconnexion maximum
Le nombre maximum de branches non commutées dans une seule boucle.

cher
Le coût minimum d'une expression coûteuse dans le mouvement invariant de boucle.

iv-considérer-tous-les-candidats-liés
Limité sur le nombre de candidats pour les variables d'induction inférieur à celui de tous les candidats
sont considérés pour chaque utilisation dans les optimisations de variables d'induction. Seul le plus
les candidats pertinents sont pris en considération s'il y a plus de candidats, pour éviter
complexité en temps quadratique.

iv-max-utilisations-considérées
Les optimisations des variables d'induction abandonnent les boucles qui contiennent plus d'induction
usages variables.

iv-toujours-élaguer-cand-set-bound
Si le nombre de candidats dans l'ensemble est inférieur à cette valeur, nous essayons toujours de
supprimer les iv inutiles de l'ensemble lors de son optimisation lorsqu'un nouveau iv est ajouté
à l'ensemble.

scev-max-expr-taille
Lié à la taille des expressions utilisées dans l'analyseur d'évolutions scalaires. Grand
les expressions ralentissent l'analyseur.

scev-max-expr-complexité
Lié à la complexité des expressions dans l'analyseur d'évolutions scalaires.
Les expressions complexes ralentissent l'analyseur.

oméga-max-vars
Le nombre maximum de variables dans un système de contraintes Omega. La valeur par défaut
est 128.

oméga-max-geqs
Le nombre maximum d'inégalités dans un système de contraintes Omega. Le défaut
la valeur est 256.

oméga-max-eqs
Le nombre maximum d'égalités dans un système de contraintes Omega. La valeur par défaut
est 128.

oméga-max-wild-cards
Le nombre maximum de variables génériques que le solveur Omega pourra
insérer. La valeur par défaut est 18.

taille de la table de hachage oméga
La taille de la table de hachage dans le solveur Omega. La valeur par défaut est 550.

touches-omega-max
Le nombre maximal de clés utilisées par le solveur Omega. La valeur par défaut est 500.

omega-élimine-les-contraintes-redondants
Lorsqu'il est défini sur 1, utilisez des méthodes coûteuses pour éliminer toutes les contraintes redondantes. Les
la valeur par défaut est 0.

vect-max-version-pour-vérifications-d'alignement
Le nombre maximum de vérifications d'exécution pouvant être effectuées lors de l'exécution d'une boucle
versionnage pour l'alignement dans le vectoriseur. Voir l'option ftree-vect-loop-version
pour plus d'information.

vect-max-version-pour-les-vérifications-d'alias
Le nombre maximum de vérifications d'exécution pouvant être effectuées lors de l'exécution d'une boucle
versionnage pour alias dans le vectoriseur. Voir l'option ftree-vect-loop-version pour
pour en savoir davantage.

max-itérations-à-suivre
Le nombre maximum d'itérations d'une boucle l'algorithme de force brute pour l'analyse
du nombre d'itérations de la boucle tente d'évaluer.

fraction-de-compte-bb-chaud
Sélectionnez la fraction du nombre maximal de répétitions du bloc de base dans le programme
un bloc de base donné doit être considéré comme chaud.

fraction de fréquence-bb-chaude
Sélectionnez la fraction du bloc d'entrée fréquence des exécutions du bloc de base dans
fonction donnée bloc de base doit être considérée comme chaude.

itérations-max-prédites
Le nombre maximum d'itérations de boucle que nous prédisons statiquement. Ceci est utile dans
cas où la fonction contient une seule boucle avec une limite connue et une autre boucle avec
inconnu. Nous prédisons correctement le nombre connu d'itérations, tandis que l'inconnu
nombre d'itérations en moyenne à environ 10. Cela signifie que la boucle sans
les bornes apparaîtraient artificiellement froides par rapport à l'autre.

aligner-seuil
Sélectionnez la fraction de la fréquence maximale d'exécutions du bloc de base en fonction
un bloc de base donné sera aligné.

itérations-de-boucle-align
Une boucle censée s'itérer au moins que le nombre d'itérations sélectionné n'obtienne
aligné.

traceur-couverture-dynamique
traceur-couverture-dynamique-rétroaction
Cette valeur est utilisée pour limiter la formation de superblocs une fois que le pourcentage donné de
les instructions exécutées sont couvertes. Cela limite l'expansion inutile de la taille du code.

La traceur-couverture-dynamique-rétroaction est utilisé uniquement lorsque les commentaires de profil sont
disponible. Les profils réels (par opposition à ceux estimés statiquement) sont beaucoup
moins équilibré permettant au seuil d'être une valeur plus grande.

traceur-max-code-croissance
Arrêtez la duplication de la queue une fois que la croissance du code a atteint un pourcentage donné. C'est
argument plutôt hokey, car la plupart des doublons seront éliminés plus tard dans cross
sautant, il peut donc être défini sur des valeurs beaucoup plus élevées que la croissance de code souhaitée.

traceur-min-branche-ratio
Arrêter la croissance inverse lorsque la probabilité inverse du meilleur avantage est inférieure à cela
seuil (en pourcentage).

traceur-min-branche-ratio
traceur-min-branche-ratio-feedback
Arrêtez la croissance en avant si le meilleur avantage a une probabilité inférieure à celle-ci
seuil.

Similaire à traceur-couverture-dynamique deux valeurs sont présentes, une pour la compilation
pour les commentaires de profil et un pour la compilation sans. La valeur pour la compilation
avec la rétroaction de profil doit être plus conservatrice (plus élevée) afin de faire
traceur efficace.

max-cse-chemin-longueur
Nombre maximal de blocs de base sur le chemin que cse prend en compte. La valeur par défaut est 10.

max-cse-insns
Le processus maximum d'instructions CSE avant le rinçage. La valeur par défaut est 1000.

ggc-min-développer
GCC utilise un ramasse-miettes pour gérer sa propre allocation de mémoire. Ce paramètre
spécifie le pourcentage minimum par lequel le tas du ramasse-miettes doit être
autorisé à s'étendre entre les collections. Le réglage peut améliorer la vitesse de compilation ;
il n'a aucun effet sur la génération de code.

La valeur par défaut est 30 % + 70 % * (RAM/1 Go) avec une limite supérieure de 100 % lorsque RAM >= 1 Go.
Si "getrlimit" est disponible, la notion de "RAM" est la plus petite de la RAM réelle et
"RLIMIT_DATA" ou "RLIMIT_AS". Si GCC n'est pas en mesure de calculer la RAM sur un
plate-forme, la limite inférieure de 30 % est utilisée. Régler ce paramètre et ggc-min-
tas à zéro provoque une collecte complète à chaque occasion. C'est
extrêmement lent, mais peut être utile pour le débogage.

ggc-min-taille-tas
Taille minimale du tas du ramasse-miettes avant qu'il ne commence à s'embêter à collecter
des ordures. La première collecte se produit après l'expansion du tas de ggc-min-développer%
dans tous ggc-min-taille-tas. Encore une fois, le réglage peut améliorer la vitesse de compilation, et
n'a aucun effet sur la génération de code.

La valeur par défaut est la plus petite de RAM/8, RLIMIT_RSS ou une limite qui essaie de garantir
que RLIMIT_DATA ou RLIMIT_AS ne sont pas dépassés, mais avec une limite inférieure de 4096
(quatre mégaoctets) et une limite supérieure de 131072 (128 mégaoctets). Si GCC n'est pas en mesure
pour calculer la RAM sur une plate-forme particulière, la limite inférieure est utilisée. Définir ce
paramètre très grand désactive efficacement le ramasse-miettes. Définir ce
paramètre et ggc-min-développer à zéro provoque une collecte complète à chaque
occasion.

max-reload-search-insns
Le nombre maximum de rechargement d'instructions doit rechercher l'équivalent
S'inscrire. Des valeurs croissantes signifient une optimisation plus agressive, ce qui rend le
le temps de compilation augmente avec des performances probablement légèrement meilleures. Le défaut
la valeur est 100.

emplacements-mémoire max-cselib
Le nombre maximum d'emplacements mémoire que cselib doit prendre en compte.
Des valeurs croissantes signifient une optimisation plus agressive, ce qui rend le temps de compilation
augmenter avec des performances probablement légèrement meilleures. La valeur par défaut est 500.

réorganiser-blocs-dupliquer
réorganiser-blocs-dupliquer-rétroaction
Utilisé par la passe de réorganisation des blocs de base pour décider s'il faut utiliser la branche inconditionnelle
ou dupliquer le code sur sa destination. Le code est dupliqué lorsqu'il est estimé
la taille est inférieure à cette valeur multipliée par la taille estimée de l'inconditionnel
sauter dans les points chauds du programme.

La Réorganiser-Bloquer-Dupliquer-Commentaires est utilisé uniquement lorsque les commentaires de profil sont
disponible et peut être réglé sur des valeurs plus élevées que réorganiser-bloc-dupliquer depuis
les informations sur les points chauds sont plus précises.

max-sched-ready-insns
Le nombre maximum d'instructions prêtes à être émises que l'ordonnanceur doit
considérer à tout moment au cours de la première passe de programmation. Valeurs croissantes
signifie des recherches plus approfondies, ce qui augmente le temps de compilation avec probablement
peu d'avantage. La valeur par défaut est 100.

blocs de régions max-sched
Le nombre maximum de blocs dans une région à considérer pour l'interbloc
Planification. La valeur par défaut est 10.

blocs-régions-max-pipeline
Le nombre maximum de blocs dans une région à considérer pour le pipeline dans le
programmateur sélectif. La valeur par défaut est 15.

max-sched-region-insns
Le nombre maximum d'insns dans une région à considérer pour l'interbloc
Planification. La valeur par défaut est 100.

max-pipeline-région-insns
Le nombre maximum d'insns dans une région à considérer pour le pipeline dans le
programmateur sélectif. La valeur par défaut est 200.

min-spec-prob
La probabilité minimale (en pourcentage) d'atteindre un bloc source pour l'interbloc
programmation spéculative. La valeur par défaut est 40.

max-sched-étendre-régions-iters
Le nombre maximal d'itérations via CFG pour étendre les régions. 0 - désactiver
extension de région, N - faire au plus N itérations. La valeur par défaut est 0.

délai-de-conflit-max-sched-insn
Le délai de conflit maximal pour qu'un insn soit pris en compte pour un mouvement spéculatif.
La valeur par défaut est 3.

sched-spec-prob-cutoff
La probabilité minimale de succès de la spéculation (en pourcentage), de sorte que la spéculation
insn sera programmé. La valeur par défaut est 40.

sched-mem-vrai-dep-coût
Distance minimale (en cycles CPU) entre le stockage et la charge ciblant la même mémoire
Emplacements. La valeur par défaut est 1.

selsched-max-anticipation
La taille maximale de la fenêtre d'anticipation de la planification sélective. C'est une profondeur
de recherche des instructions disponibles. La valeur par défaut est 50.

selsched-max-sched-times
Le nombre maximum de fois qu'une instruction sera programmée pendant la sélection
Planification. Il s'agit de la limite du nombre d'itérations par lesquelles le
l'instruction peut être pipeline. La valeur par défaut est 2.

selsched-max-insns-à-renommer
Le nombre maximum de meilleures instructions dans la liste prête qui sont prises en compte pour
renommer dans le planificateur sélectif. La valeur par défaut est 2.

sms-min-sc
La valeur minimale du nombre d'étapes que le planificateur de swing modulo générera. Les
la valeur par défaut est 2.

max-dernière-valeur-rtl
La taille maximale mesurée en nombre de RTL pouvant être enregistrés dans une expression
en combineur pour un pseudo-registre comme dernière valeur connue de ce registre. Les
la valeur par défaut est 10000.

nombre entier-partage-limite
Les petites constantes entières peuvent utiliser une structure de données partagée, ce qui réduit la charge du compilateur
l'utilisation de la mémoire et l'augmentation de sa vitesse. Ceci définit la valeur maximale d'un partage
constante entière. La valeur par défaut est 256.

min-virtuels-mappings
Spécifie le nombre minimum de mappages virtuels dans le programme de mise à jour SSA incrémentiel
qui doit être enregistré pour déclencher l'heuristique de mappages virtuels définie par
rapport de mappages virtuels. La valeur par défaut est 100.

rapport de mappages virtuels
Si le nombre de mappages virtuels est virtual-mappings-ratio supérieur au nombre
de symboles virtuels à mettre à jour, le programme de mise à jour incrémental SSA bascule vers un
mise à jour complète pour ces symboles. Le rapport par défaut est 3.

ssp-taille-du-tampon
La taille minimale des tampons (c'est-à-dire des tableaux) qui recevront un écrasement de pile
protection quand -fstack-protection est utilisé.

Cette valeur par défaut avant Ubuntu 10.10 était "8". Actuellement, c'est "4", pour augmenter le
nombre de fonctions protégées par le protecteur de pile.

max-jump-thread-duplication-stmts
Nombre maximum d'instructions autorisées dans un bloc qui doit être dupliqué lorsque
sauts d'enfilage.

max-fields-for-field-sensible
Nombre maximum de champs dans une structure que nous traiterons de manière sensible aux champs
lors de l'analyse du pointeur. La valeur par défaut est zéro pour -O0, et -O1 et 100 pour -Os,
-O2 et -O3.

prélecture-latence
Estimer le nombre moyen d'instructions exécutées avant la lecture anticipée
finitions. La distance que nous prélevons à l'avance est proportionnelle à cette constante.
L'augmentation de ce nombre peut également entraîner une diminution du nombre de flux préchargés (voir
prélectures-simultanées).

prélectures-simultanées
Nombre maximal de prélectures pouvant être exécutées en même temps.

l1-cache-ligne-taille
La taille de la ligne de cache dans le cache L1, en octets.

l1-taille-cache
La taille du cache L1, en kilo-octets.

l2-taille-cache
La taille du cache L2, en kilo-octets.

ratio min-insn-to-prefetch
Le rapport minimum entre le nombre d'instructions et le nombre de prélectures
pour activer la prélecture dans une boucle.

rapport prélecture-min-insn-to-mem
Le rapport minimum entre le nombre d'instructions et le nombre de mémoire
références pour activer la prélecture dans une boucle.

utiliser-types-canoniques
Si le compilateur doit utiliser le système de type "canonique". Par défaut, ce
doit toujours être égal à 1, ce qui utilise un mécanisme interne plus efficace pour comparer
types en C++ et Objective-C++. Cependant, si des bogues dans le système de type canonique sont
provoquant des échecs de compilation, définissez cette valeur sur 0 pour désactiver les types canoniques.

commutateur-conversion-max-branche-ratio
La conversion d'initialisation du commutateur refusera de créer des tableaux plus grands que
commutateur-conversion-max-branche-ratio fois le nombre de branches dans le commutateur.

longueur-antique-partielle-maximale
Longueur maximale de l'ensemble d'antic partiel calculé lors du partiel d'arbre
optimisation de l'élimination des redondances (-ftree-pré) lors de l'optimisation à -O3 et ci-dessus.
Pour certains types de code source, l'élimination améliorée de la redondance partielle
l'optimisation peut s'emballer, consommant toute la mémoire disponible sur l'hôte
machine. Ce paramètre fixe une limite sur la longueur des ensembles qui sont calculés,
ce qui empêche le comportement d'emballement. La définition d'une valeur de 0 pour ce paramètre
permettre une longueur de jeu illimitée.

sccvn-max-taille-scc
Taille maximale d'un composant fortement connecté (SCC) pendant le traitement SCCVN. Si
cette limite est atteinte, le traitement SCCVN pour l'ensemble de la fonction ne sera pas effectué et
les optimisations qui en dépendent seront désactivées. La taille SCC maximale par défaut est
10000.

ira-max-boucles-num
IRA utilise l'allocation de registre régional par défaut. Si une fonction contient plus
boucles que le nombre donné par ce paramètre, seulement au plus le nombre donné de
les boucles les plus fréquemment exécutées forment des régions pour l'attribution des registres régionaux.
La valeur par défaut du paramètre est 100.

ira-max-conflict-table-size
Bien qu'IRA utilise un algorithme sophistiqué pour compresser la table des conflits, le
table peut encore nécessiter des quantités excessives de mémoire pour des fonctions énormes. Si la
la table des conflits pour une fonction peut être supérieure à la taille en Mo donnée par cette
paramètre, l'allocateur de registre utilise à la place un plus rapide, plus simple et plus bas-
algorithme de qualité qui ne nécessite pas de construire une table de conflits de pseudo-registres.
La valeur par défaut du paramètre est 2000.

ira-boucle-réservé-regs
L'IRA peut être utilisé pour évaluer une pression de registre plus précise dans les boucles pour les décisions
pour déplacer les invariants de boucle (voir -O3). Le nombre de registres disponibles réservés à
d'autres objectifs sont donnés par ce paramètre. La valeur par défaut du
paramètre est 2, qui est le nombre minimal de registres nécessaires par typique
instructions. Cette valeur est la meilleure trouvée à partir de nombreuses expériences.

boucle-invariant-max-bbs-in-loop
Le mouvement invariant de boucle peut être très coûteux, à la fois en temps de compilation et en
quantité de mémoire nécessaire à la compilation, avec de très grandes boucles. Boucles avec plus
les blocs de base que ce paramètre n'auront pas d'optimisation de mouvement invariante en boucle
effectué sur eux. La valeur par défaut du paramètre est 1000 pour -O1 et 10000
pour -O2 et plus.

loop-max-datarefs-pour-datadeps
La création de dépendances de données est coûteuse pour les très grandes boucles. Ce paramètre
limite le nombre de références de données dans les boucles qui sont prises en compte pour les données
analyse de dépendance. Ces grandes boucles ne seront alors pas traitées par le
optimisations à l'aide de dépendances de données de boucle. La valeur par défaut est 1000.

taille-vartrack-max
Définit un nombre maximal d'emplacements de table de hachage à utiliser pendant le flux de données de suivi variable
analyse de n'importe quelle fonction. Si cette limite est dépassée avec un suivi variable à
affectations activées, l'analyse pour cette fonction est retentée sans elle, après
en supprimant tous les insns de débogage de la fonction. Si la limite est dépassée même sans
debug insns, l'analyse de suivi var est complètement désactivée pour la fonction.
Mettre le paramètre à zéro le rend illimité.

max-vartrack-expr-profondeur
Définit un nombre maximum de niveaux de récursivité lors d'une tentative de mappage de noms de variables ou
déboguer les temporaires pour valoriser les expressions. Cela échange le temps de compilation pour plus
informations de débogage complètes. Si ce paramètre est défini trop bas, les expressions de valeur qui sont
disponible et pouvant être représenté dans les informations de débogage peut finir par ne pas être utilisé ;
un réglage plus élevé peut permettre au compilateur de trouver un débogage plus complexe
expressions, mais le temps de compilation et l'utilisation de la mémoire peuvent augmenter. La valeur par défaut est 12.

min-nondebug-insn-uid
Utilisez des uid commençant à ce paramètre pour les insns non de débogage. La plage en dessous de la
Le paramètre est réservé exclusivement aux insns de débogage créés par
-fvar-suivi-affectations, mais les insns de débogage peuvent obtenir des uid (qui ne se chevauchent pas) ci-dessus
si la plage réservée est épuisée.

facteur de croissance ipa-sra-ptr
IPA-SRA remplacera un pointeur vers un agrégat par un ou plusieurs nouveaux paramètres
que lorsque leur taille cumulée est inférieure ou égale à facteur de croissance ipa-sra-ptr
fois la taille du paramètre de pointeur d'origine.

tm-max-agrégat-taille
Lors de la copie de variables locales de thread dans une transaction, ce paramètre
spécifie la taille en octets après laquelle les variables seront enregistrées avec la journalisation
par opposition aux paires de séquences de codes de sauvegarde/restauration. Cette option seulement
s'applique lors de l'utilisation -fgnu-tm.

graphite-max-nb-scop-params
Pour éviter les effets exponentiels dans les transformations de boucle Graphite, le nombre de
les paramètres d'une pièce de contrôle statique (SCoP) sont délimités. La valeur par défaut est 10
paramètres. Une variable dont la valeur est inconnue à la compilation et définie
en dehors d'une SCoP est un paramètre de la SCoP.

graphite-max-bbs-par-fonction
Pour éviter les effets exponentiels dans la détection des SCoPs, la taille des fonctions
analysé par Graphite est borné. La valeur par défaut est de 100 blocs de base.

boucle-bloc-tuile-taille
Blocage de boucle ou transformations d'extraction à ciel ouvert, activés avec -floop-bloc or
-floop-strip-mine, dépouiller chaque boucle du nid de boucles d'un nombre donné de
itérations. La longueur de la bande peut être modifiée à l'aide du boucle-bloc-tuile-taille
paramètre. La valeur par défaut est de 51 itérations.

ipa-cp-value-list-size
IPA-CP tente de suivre toutes les valeurs et tous les types possibles transmis à une fonction
paramètre afin de les propager et d'effectuer la dévirtualisation. valeur-ipa-cp-
liste-taille est le nombre maximum de valeurs et de types qu'il stocke par un formel
paramètre d'une fonction.

partitions lto
Spécifiez le nombre souhaité de partitions produites lors de la compilation WHOPR. Les
le nombre de partitions doit dépasser le nombre de processeurs utilisés pour la compilation. Les
la valeur par défaut est 32.

partition lto-min
Taille de la partition minimale pour WHOPR (dans les instructions estimées). Cela empêche
frais de division de très petits programmes en trop de partitions.

cxx-max-espaces-de-noms-pour-aide-au-diagnostic
Le nombre maximum d'espaces de noms à consulter pour des suggestions lors de la recherche de noms C++
échoue pour un identifiant. La valeur par défaut est 1000.

seuil de fréquence de chute
La fréquence d'exécution relative maximale (en pourcentage) du bloc cible
par rapport au bloc d'origine d'une instruction pour permettre l'immersion d'une instruction
déclaration. Des nombres plus importants entraînent un naufrage de déclaration plus agressif. Les
la valeur par défaut est 75. Un petit ajustement positif est appliqué pour les déclarations avec
opérandes de mémoire car ceux-ci sont encore plus rentables, alors coulez.

max-magasins-à-évier
Le nombre maximal de paires de magasins conditionnels pouvant être coulés. Mettre à 0 si
soit la vectorisation (-ftree-vectoriser) ou si-conversion (-ftree-loop-if-convert)
est désactivé. La valeur par défaut est 2.

autoriser-charge-données-races
Permettre aux optimiseurs d'introduire de nouvelles courses de données sur les charges. Mettre à 1 pour autoriser,
sinon à 0. Cette option est activée par défaut à moins qu'elle ne soit implicitement définie par le
-fmemory-model= option.

autoriser les courses de données
Permettre aux optimiseurs d'introduire de nouvelles courses de données sur les magasins. Mettre à 1 pour autoriser,
sinon à 0. Cette option est activée par défaut à moins qu'elle ne soit implicitement définie par le
-fmemory-model= option.

autoriser-packed-load-data-races
Autoriser les optimiseurs à introduire de nouvelles courses de données sur des charges de données compressées. Réglez sur 1 pour
allow, sinon à 0. Cette option est activée par défaut à moins qu'elle ne soit implicitement définie par
le -fmemory-model= option.

autoriser-packed-store-data-races
Autoriser les optimiseurs à introduire de nouvelles courses de données sur les magasins de données emballés. Réglez sur 1 pour
allow, sinon à 0. Cette option est activée par défaut à moins qu'elle ne soit implicitement définie par
le -fmemory-model= option.

cas-valeurs-seuil
Le plus petit nombre de valeurs différentes pour lesquelles il est préférable d'utiliser une table de saut
au lieu d'un arbre de branches conditionnelles. Si la valeur est 0, utilisez la valeur par défaut pour
la machine. La valeur par défaut est 0.

arbre-reassoc-largeur
Définit le nombre maximum d'instructions exécutées en parallèle dans l'arbre réassocié.
Ce paramètre remplace les heuristiques dépendantes de la cible utilisées par défaut s'il n'a pas
valeur zéro.

Options Contrôle le Préprocesseur
Ces options contrôlent le préprocesseur C, qui est exécuté sur chaque fichier source C avant
compilation.

Si vous utilisez le -E option, rien n'est fait à l'exception du prétraitement. Certaines de ces options
n'a de sens qu'avec -E car ils provoquent la sortie du préprocesseur
inadapté à la compilation réelle.

-Wp,option
Vous pouvez utiliser -Wp,option pour contourner le pilote du compilateur et passer option directement par
au préprocesseur. Si option contient des virgules, il est divisé en plusieurs options à
les virgules. Cependant, de nombreuses options sont modifiées, traduites ou interprétées par le
pilote du compilateur avant d'être passé au préprocesseur, et -Wp contourne de force
cette phase. L'interface directe du préprocesseur est non documentée et soumise à
changer, donc autant que possible vous devriez éviter d'utiliser -Wp et laissez le conducteur gérer le
options à la place.

-Xpréprocesseur option
Passé option en option au préprocesseur. Vous pouvez l'utiliser pour fournir le système-
des options de préprocesseur spécifiques que GCC ne sait pas reconnaître.

Si vous voulez passer une option qui prend un argument, vous devez utiliser -Xpréprocesseur
deux fois, une fois pour l'option et une fois pour l'argument.

-D prénom
Prédéfinir prénom en tant que macro, avec la définition 1.

-D prénom=définition
Le contenu de définition sont tokenisés et traités comme s'ils étaient apparus pendant
traduction phase trois dans un #define directif. En particulier, la définition sera
tronqué par des caractères de nouvelle ligne intégrés.

Si vous appelez le préprocesseur à partir d'un shell ou d'un programme similaire, vous aurez peut-être besoin
d'utiliser la syntaxe des guillemets du shell pour protéger les caractères tels que les espaces qui ont un
sens dans la syntaxe du shell.

Si vous souhaitez définir une macro de type fonction sur la ligne de commande, écrivez son argument
liste entourée de parenthèses avant le signe égal (le cas échéant). Les parenthèses sont
significatif pour la plupart des shells, vous devrez donc citer l'option. Avec sh ainsi que csh,
-RÉ'prénom(arguments...)=définition' œuvres.

-D ainsi que -U les options sont traitées dans l'ordre dans lequel elles sont données sur la ligne de commande. Tous
-imacros filet ainsi que -comprendre filet les options sont traitées après tout -D ainsi que -U options.

-U prénom
Annuler toute définition précédente de prénom, soit intégré, soit pourvu d'un -D option.

-undef
Ne prédéfinissez aucune macro spécifique au système ou à GCC. La norme prédéfinie
les macros restent définies.

-I dir
Ajouter le répertoire dir à la liste des répertoires dans lesquels rechercher les fichiers d'en-tête.
Répertoires nommés par -I sont recherchés avant que le système standard n'inclue les répertoires.
Si le répertoire dir est un répertoire d'inclusion système standard, l'option est ignorée pour
s'assurer que l'ordre de recherche par défaut des répertoires système et le traitement spécial
des en-têtes système ne sont pas vaincus. Si dir commence par "=", alors le "=" sera
remplacé par le préfixe sysroot ; voir --sysroot ainsi que -isysroot.

-o filet
Écrire la sortie dans filet. C'est la même chose que de spécifier filet comme deuxième non-option
argument cpp. gcc a une interprétation différente d'un deuxième argument non optionnel,
donc tu dois utiliser -o pour spécifier le fichier de sortie.

-Mur
Active tous les avertissements facultatifs qui sont souhaitables pour le code normal. A l'heure actuelle cette
is -Commentaire, -Wtrigraphes, -Wmulticar et un avertissement concernant la promotion d'entiers provoquant un
changement de signe dans les expressions "#if". Notez que de nombreux avertissements du préprocesseur
sont activés par défaut et n'ont aucune option pour les contrôler.

-Commentaire
-Wcommentaires
Avertir chaque fois qu'une séquence de début de commentaire /* apparaît dans un /* commentaire, ou chaque fois qu'un
backslash-newline apparaît dans un // commenter. (Les deux formes ont le même effet.)

-Wtrigraphes
La plupart des trigraphes dans les commentaires ne peuvent pas affecter le sens du programme. Cependant, un
trigraphe qui formerait une nouvelle ligne échappée (??/ à la fin d'une ligne) peut, en
changer où le commentaire commence ou se termine. Par conséquent, seuls les trigraphes qui formeraient
Les sauts de ligne échappés produisent des avertissements dans un commentaire.

Cette option est impliquée par -Mur. Si -Mur n'est pas donné, cette option est toujours activée
sauf si les trigraphes sont activés. Pour obtenir une conversion de trigraphe sans avertissements, mais obtenez
L'autre -Mur avertissements, utiliser -trigraphes -Mur -Wno-trigraphes.

-Wtraditionnel
Avertir de certaines constructions qui se comportent différemment en traditionnel et en ISO C. Aussi
avertir des constructions ISO C qui n'ont pas d'équivalent en C traditionnel et problématiques
constructions à éviter.

-Wundef
Avertir chaque fois qu'un identifiant qui n'est pas une macro est rencontré dans un #si directif,
à l'extérieur du défini. Ces identifiants sont remplacés par zéro.

-Winutilisé-macros
Avertir des macros définies dans le fichier principal qui ne sont pas utilisées. Une macro est d'utiliser Si c'est
étendu ou testé pour l'existence au moins une fois. Le préprocesseur avertira également si
la macro n'a pas été utilisée au moment où elle est redéfinie ou indéfinie.

Macros intégrées, macros définies sur la ligne de commande et macros définies dans include
les fichiers ne sont pas avertis.

Remarque: Si une macro est réellement utilisée, mais uniquement dans les blocs conditionnels ignorés, alors
Le RPC le déclarera comme inutilisé. Pour éviter l'avertissement dans un tel cas, vous pouvez améliorer
la portée de la définition de la macro, par exemple en la déplaçant dans le premier sauté
bloquer. Alternativement, vous pouvez fournir une utilisation fictive avec quelque chose comme :

#if défini la_macro_causant_l'avertissement
#endif

-Wendif-étiquettes
Avertir chaque fois qu'un #else ou d’une #endif sont suivis de texte. Cela se produit généralement dans
code du formulaire

#si FOO

#autre FOO

#endif FOO

Les deuxième et troisième « FOO » devraient être dans les commentaires, mais ne le sont souvent pas dans les anciens programmes.
Cet avertissement est activé par défaut.

-Werreur
Transformez tous les avertissements en erreurs matérielles. Le code source qui déclenche les avertissements sera
rejeté.

-Wsystem-en-têtes
Émettre des avertissements pour le code dans les en-têtes système. Ceux-ci sont normalement inutiles pour trouver
bugs dans votre propre code, donc supprimés. Si vous êtes responsable du système
bibliothèque, vous voudrez peut-être les voir.

-w Supprimez tous les avertissements, y compris ceux émis par défaut par GNU CPP.

-pédant
Émettez tous les diagnostics obligatoires répertoriés dans la norme C. Certains d'entre eux sont laissés
par défaut, car ils se déclenchent fréquemment sur du code inoffensif.

-pédant-erreurs
Émettez tous les diagnostics obligatoires et transformez tous les diagnostics obligatoires en erreurs.
Cela inclut les diagnostics obligatoires que GCC émet sans -pédant mais traite comme
avertissements.

-M Au lieu d'afficher le résultat du prétraitement, éditez une règle adaptée à faire
décrivant les dépendances du fichier source principal. Le préprocesseur sort un
faire règle contenant le nom du fichier objet pour ce fichier source, deux points et les noms
de tous les fichiers inclus, y compris ceux provenant de -comprendre or -imacros commander
options de ligne.

Sauf indication explicite (avec -MT or -MQ), le nom du fichier objet se compose du
nom du fichier source avec n'importe quel suffixe remplacé par le suffixe du fichier objet et avec n'importe quel
parties de répertoire principales supprimées. S'il y a beaucoup de fichiers inclus, la règle est
diviser en plusieurs lignes à l'aide \-nouvelle ligne. La règle n'a pas de commandes.

Cette option ne supprime pas la sortie de débogage du préprocesseur, telle que -dM. Éviter
en mélangeant une telle sortie de débogage avec les règles de dépendance, vous devez spécifier explicitement le
fichier de sortie de dépendance avec -MF, ou utilisez une variable d'environnement comme
DEPENDANCES_OUTPUT. La sortie de débogage sera toujours envoyée au flux de sortie normal comme
Normal.

En passant -M au conducteur implique -E, et supprime les avertissements avec un -w.

-MM Comme -M mais ne mentionnez pas les fichiers d'en-tête qui se trouvent dans les répertoires d'en-tête du système,
ni les fichiers d'en-tête qui sont inclus, directement ou indirectement, à partir d'un tel en-tête.

Cela implique que le choix des chevrons ou des guillemets doubles dans un #comprendre
directive ne détermine pas en soi si cet en-tête apparaîtra dans -MM
sortie de dépendance. Il s'agit d'un léger changement dans la sémantique des versions GCC 3.0 et
plus tôt.

-MF filet
Lorsqu'il est utilisé avec -M or -MM, spécifie un fichier dans lequel écrire les dépendances. Sinon -MF
le commutateur est donné le préprocesseur envoie les règles au même endroit qu'il aurait envoyé
sortie prétraitée.

Lorsqu'il est utilisé avec les options du pilote -MARYLAND or -MMD, -MF remplace la dépendance par défaut
fichier de sortie.

-MG En conjonction avec une option telle que -M demander la génération de dépendances, -MG suppose
les fichiers d'en-tête manquants sont des fichiers générés et les ajoute à la liste de dépendances sans
levant une erreur. Le nom du fichier de dépendance est tiré directement du "#include"
directive sans ajouter de chemin. -MG supprime également la sortie prétraitée, en tant que
le fichier d'en-tête manquant rend cela inutile.

Cette fonctionnalité est utilisée dans la mise à jour automatique des makefiles.

-MP Cette option demande à CPP d'ajouter une cible bidon pour chaque dépendance autre que la
fichier principal, ce qui fait que chacun ne dépend de rien. Ces règles factices contournent les erreurs
faire donne si vous supprimez les fichiers d'en-tête sans mettre à jour le Makefile correspondre.

Voici une sortie typique :

test.o : test.c test.h

test.h :

-MT l'objectif
Modifiez la cible de la règle émise par la génération de dépendances. Par défaut, le RPC prend
le nom du fichier d'entrée principal, supprime tous les composants du répertoire et tout suffixe de fichier
tel que .c, et ajoute le suffixe d'objet habituel de la plate-forme. Le résultat est la cible.

An -MT L'option définira la cible pour qu'elle soit exactement la chaîne que vous spécifiez. Si tu veux
plusieurs cibles, vous pouvez les spécifier en tant qu'argument unique pour -MT, ou utilisez plusieurs
-MT options.

Par exemple, -MT '$(objpfx)foo.o' pourrait donner

$(objpfx)foo.o : foo.c

-MQ l'objectif
Pareil que -MT, mais il cite tous les caractères spéciaux pour Make.
-MQ '$(objpfx)foo.o' donne

$$(objpfx)foo.o : foo.c

La cible par défaut est automatiquement citée, comme si elle était donnée avec -MQ.

-MARYLAND -MARYLAND équivaut à -M -MF filet, excepté -E n'est pas implicite. Le conducteur
détermine filet selon qu'un -o option est donnée. Si c'est le cas, le conducteur utilise son
argument mais avec un suffixe de .d, sinon il prend le nom du fichier d'entrée,
supprime tous les composants et suffixes du répertoire et applique un .d suffixe.

If -MARYLAND est utilisé en conjonction avec -E, tout -o commutateur est compris pour spécifier le
fichier de sortie de dépendance, mais s'il est utilisé sans -E, Chaque -o est entendu pour spécifier un
fichier objet cible.

Depuis que -E n'est pas implicite, -MARYLAND peut être utilisé pour générer un fichier de sortie de dépendance en tant que
effet secondaire du processus de compilation.

-MMD
Comme -MARYLAND sauf mentionner uniquement les fichiers d'en-tête utilisateur, pas les fichiers d'en-tête système.

-fpch-deps
Lors de l'utilisation d'en-têtes précompilés, cet indicateur entraînera l'activation des indicateurs de sortie de dépendance.
répertorie également les fichiers des dépendances de l'en-tête précompilé. Si non spécifié seulement
l'en-tête précompilé serait répertorié et non les fichiers qui ont été utilisés pour le créer
car ces fichiers ne sont pas consultés lorsqu'un en-tête précompilé est utilisé.

-fpch-prétraitement
Cette option permet d'utiliser un en-tête précompilé avec -E. Il insère un spécial
"#pragma", "#pragma GCC pch_preprocess "nom de fichier"" dans la sortie pour marquer l'endroit
où l'en-tête précompilé a été trouvé, et son nom de fichier. Quand -fprétraité est en
utilisation, GCC reconnaît ce "#pragma" et charge le PCH.

Cette option est désactivée par défaut, car la sortie prétraitée résultante est uniquement
vraiment approprié comme entrée à GCC. Il est allumé par -sauve-temps.

Vous ne devriez pas écrire ce "#pragma" dans votre propre code, mais vous pouvez éditer le
nom de fichier si le fichier PCH est disponible dans un emplacement différent. Le nom du fichier peut être
absolu ou il peut être relatif au répertoire courant de GCC.

-x c
-x c ++
-x Objective-C
-x assembleur-avec-cpp
Spécifiez le langage source : C, C++, Objective-C ou assembleur. Cela n'a rien à voir
avec conformité aux normes ou extensions ; il sélectionne simplement la syntaxe de base à
attendre. Si vous ne donnez aucune de ces options, cpp déduira la langue du
extension du fichier source : .c, . Cc, .mou .S. Quelques autres extensions courantes pour
C++ et assembleur sont également reconnus. Si cpp ne reconnaît pas l'extension, il
traitera le fichier comme C ; c'est le mode le plus générique.

Remarque: Les versions précédentes de cpp acceptaient un -long option qui a sélectionné à la fois le
langue et le niveau de conformité aux normes. Cette option a été supprimée, car
il entre en conflit avec le -l option.

-std=Standard
-ansi
Spécifiez la norme à laquelle le code doit se conformer. Actuellement, le RPC connaît C
et les normes C++ ; d'autres pourraient être ajoutés à l'avenir.

Standard peut être l'un des :

"c90"
"c89"
"iso9899:1990"
La norme ISO C de 1990. c90 est le raccourci habituel pour cette version de
le standard.

La -ansi option équivaut à -std=c90.

"iso9899:199409"
La norme C de 1990, telle que modifiée en 1994.

"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
La norme ISO C révisée, publiée en décembre 1999. Avant sa publication, cette
était connu sous le nom de C9X.

"iso9899:2011"
"c11"
"c1x"
La norme ISO C révisée, publiée en décembre 2011. Avant sa publication, cette
était connu sous le nom de C1X.

"gnu90"
"gnu89"
La norme C de 1990 plus les extensions GNU. C'est la valeur par défaut.

"gnu99"
"gnu9x"
La norme C de 1999 plus les extensions GNU.

"gnu11"
"gnu1x"
La norme C de 2011 plus les extensions GNU.

"c++98"
La norme ISO C++ 1998 plus ses amendements.

"gnu++98"
Le même que -std = c ++ 98 plus les extensions GNU. C'est la valeur par défaut pour le code C++.

-I- Divisez le chemin d'inclusion. Tous les répertoires spécifiés avec -I options avant -I-
recherché uniquement pour les en-têtes demandés avec "#include "déposer""; ils ne sont pas recherchés
"#comprendrefichier>". Si des répertoires supplémentaires sont spécifiés avec -I options après la
-I-, ces répertoires sont recherchés pour tous #comprendre directives.

Par ailleurs, -I- inhibe l'utilisation du répertoire du répertoire de fichiers courant comme
le premier répertoire de recherche pour " #include "déposer"". Cette option a été dépréciée.

-nostdinc
Ne recherchez pas les fichiers d'en-tête dans les répertoires système standard. Seuls les répertoires
vous avez spécifié avec -I options (et le répertoire du fichier courant, si
approprié) sont recherchés.

-nostdinc++
Ne recherchez pas les fichiers d'en-tête dans les répertoires standard spécifiques à C++, mais faites quand même
rechercher dans les autres répertoires standard. (Cette option est utilisée lors de la construction du C++
bibliothèque.)

-comprendre filet
Processus filet comme si "#include "file"" apparaissait comme première ligne de la source principale
déposer. Cependant, le premier répertoire recherché filet le préprocesseur fonctionne-t-il
annuaire plutôt ; of le répertoire contenant le fichier source principal. Si non trouvé
là, il est recherché dans le reste de la chaîne de recherche "#include "..."" comme
Normal.

Si plusieurs -comprendre sont données, les fichiers sont inclus dans l'ordre dans lequel ils
apparaissent sur la ligne de commande.

-imacros filet
Exactement comme -comprendre, sauf que toute sortie produite par la numérisation filet Est lancé
une façon. Les macros qu'il définit restent définies. Cela vous permet d'acquérir toutes les macros
à partir d'un en-tête sans traiter également ses déclarations.

Tous les fichiers spécifiés par -imacros sont traités avant tous les fichiers spécifiés par -comprendre.

-idirafter dir
Rechercher dir pour les fichiers d'en-tête, mais faites-le après tous les répertoires spécifiés avec -I et par
les répertoires système standard ont été épuisés. dir est traité comme un système
annuaire. Si dir commence par "=", alors le "=" sera remplacé par le sysroot
préfixe; voir --sysroot ainsi que -isysroot.

-ipréfixe préfixe
Spécifier préfixe comme préfixe pour la suite -iavecpréfixe option. Si le préfixe
représente un répertoire, vous devez inclure le dernier /.

-iavecpréfixe dir
-iavecpréfixeavant dir
Ajouter dir au préfixe spécifié précédemment avec -ipréfixe, et ajouter le résultat
répertoire au chemin de recherche d'inclusion. -iavecpréfixeavant le met au même endroit -I
aurait; -iavecpréfixe le met où -idirafter aurait.

-isysroot dir
Cette option est comme la --sysroot option, mais s'applique uniquement aux fichiers d'en-tête (sauf pour
cibles Darwin, où il s'applique à la fois aux fichiers d'en-tête et aux bibliothèques). Voir le
--sysroot option pour plus d'informations.

-imultilib dir
Utilisez dir en tant que sous-répertoire du répertoire contenant les en-têtes C++ spécifiques à la cible.

-isystème dir
Rechercher dir pour les fichiers d'en-tête, après tous les répertoires spécifiés par -I mais avant le
répertoires système standard. Marquez-le comme répertoire système, afin qu'il obtienne le même
traitement spécial tel qu'il est appliqué aux répertoires système standard. Si dir commence
avec "=", alors le "=" sera remplacé par le préfixe sysroot ; voir --sysroot ainsi que
-isysroot.

-Je cite dir
Rechercher dir uniquement pour les fichiers d'en-tête demandés avec "#include "déposer""; ils ne sont pas
recherché "#includefichier>", avant tous les répertoires spécifiés par -I et avant le
répertoires système standard. Si dir commence par "=", puis le "=" sera remplacé par
le préfixe sysroot ; voir --sysroot ainsi que -isysroot.

-fdirectives-seulement
Lors du prétraitement, gérez les directives, mais ne développez pas les macros.

Le comportement de l'option dépend de la -E ainsi que -fprétraité options.

Avec -E, le prétraitement est limité au traitement des directives telles que "#define",
"#ifdef" et "#erreur". D'autres opérations de préprocesseur, telles que l'expansion de macros et
la conversion du trigraphe n'est pas effectuée. De plus, le -dD l'option est implicitement
activée.

Avec -fprétraité, la prédéfinition de la ligne de commande et de la plupart des macros intégrées est
désactivée. Les macros telles que "__LINE__", qui dépendent du contexte, sont gérées
normalement. Cela permet la compilation de fichiers préalablement prétraités avec "-E
-fdirectives-seulement".

Avec les deux -E ainsi que -fprétraité, les règles de -fprétraité avoir la priorité. Cette
permet un prétraitement complet des fichiers préalablement prétraités avec "-E
-fdirectives-seulement".

-fdollars-in-identifiants
Accepter $ dans les identifiants.

-fextended-identifiants
Acceptez les noms de caractères universels dans les identifiants. Cette option est expérimentale ; dans un
future version de GCC, il sera activé par défaut pour C99 et C++.

-fprétraité
Indiquez au préprocesseur que le fichier d'entrée a déjà été prétraité. Cette
supprime des choses comme l'expansion de macro, la conversion de trigraphe, l'épissage de nouvelle ligne échappé,
et le traitement de la plupart des directives. Le préprocesseur reconnaît et supprime toujours
commentaires, afin que vous puissiez passer un fichier prétraité avec -C au compilateur sans
problèmes. Dans ce mode, le préprocesseur intégré n'est guère plus qu'un tokenizer
pour les extrémités avant.

-fprétraité est implicite si le fichier d'entrée a l'une des extensions .i, .ii or .mi.
Ce sont les extensions que GCC utilise pour les fichiers prétraités créés par -sauve-temps.

-ftabstop=largeur
Définissez la distance entre les taquets de tabulation. Cela aide le préprocesseur à signaler la colonne correcte
nombres dans les avertissements ou les erreurs, même si des tabulations apparaissent sur la ligne. Si la valeur est inférieure
supérieur à 1 ou supérieur à 100, l'option est ignorée. La valeur par défaut est 8.

-fdebug-cpp
Cette option n'est utile que pour le débogage de GCC. Lorsqu'il est utilisé avec -E, décharge le débogage
informations sur les cartes de localisation. Chaque jeton de la sortie est précédé du vidage de
la carte à laquelle appartient son emplacement. Le dump de la carte contenant l'emplacement d'un jeton
serait:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"loc": }

Lorsqu'il est utilisé sans -E, cette option n'a aucun effet.

-ftrack-macro-extension[=niveau]
Suivez les emplacements des jetons à travers les extensions de macro. Cela permet au compilateur d'émettre
diagnostic sur la pile d'extension de macro actuelle lorsqu'une erreur de compilation se produit dans
une macro-extension. L'utilisation de cette option fait consommer au préprocesseur et au compilateur
plus de mémoire. Les niveau paramètre peut être utilisé pour choisir le niveau de précision du jeton
suivi de localisation diminuant ainsi la consommation de mémoire si nécessaire. Valeur 0 of
niveau désactive cette option comme si non -ftrack-macro-extension était présent le
la ligne de commande. Valeur 1 suit les emplacements des jetons dans un mode dégradé pour le plaisir de
surcharge mémoire minimale. Dans ce mode, tous les jetons résultant de l'expansion d'un
argument d'une macro de type fonction ont le même emplacement. Valeur 2 jetons de suivi
emplacements complètement. Cette valeur est la plus gourmande en mémoire. Lorsque cette option est donnée
pas d'argument, la valeur du paramètre par défaut est 2.

-fexec-jeu de caractères=jeu de caractères
Définit le jeu de caractères d'exécution, utilisé pour les constantes de chaîne et de caractère. Le défaut
est UTF-8. jeu de caractères peut être n'importe quel encodage pris en charge par la bibliothèque "iconv" du système
routine.

-fwide-exec-charset=jeu de caractères
Définit le jeu de caractères d'exécution large, utilisé pour les constantes de chaîne et de caractère larges.
La valeur par défaut est UTF-32 ou UTF-16, selon la largeur de "wchar_t". Comme
avec -fexec-jeu de caractères, jeu de caractères peut être n'importe quel encodage pris en charge par "iconv" du système
routine de la bibliothèque ; cependant, vous aurez des problèmes avec les encodages qui ne correspondent pas
exactement dans "wchar_t".

-finput-charset=jeu de caractères
Définir le jeu de caractères d'entrée, utilisé pour la traduction à partir du jeu de caractères de l'entrée
au jeu de caractères source utilisé par GCC. Si les paramètres régionaux ne le spécifient pas, ou GCC
ne peut pas obtenir ces informations à partir des paramètres régionaux, la valeur par défaut est UTF-8. Cela peut être
remplacé par les paramètres régionaux ou cette option de ligne de commande. Actuellement la commande
L'option de ligne est prioritaire en cas de conflit. jeu de caractères peut être n'importe quel encodage
pris en charge par la routine de bibliothèque "iconv" du système.

-frépertoire-de-travail
Activer la génération de marqueurs de ligne dans la sortie du préprocesseur qui permettra au compilateur
connaître le répertoire de travail courant au moment du prétraitement. Lorsque cette option est
activé, le préprocesseur émettra, après le marqueur de ligne initial, un deuxième marqueur de ligne
avec le répertoire de travail courant suivi de deux barres obliques. GCC utilisera ce
répertoire, lorsqu'il est présent dans l'entrée prétraitée, comme le répertoire émis en tant que
le répertoire de travail actuel dans certains formats d'informations de débogage. Cette option est
implicitement activé si les informations de débogage sont activées, mais cela peut être inhibé avec
la forme niée -fno-répertoire-de-travail. Si l' -P flag est présent dans la commande
line, cette option n'a aucun effet, car aucune directive "#line" n'est émise.

-fno-show-colonne
N'imprimez pas les numéros de colonne dans les diagnostics. Cela peut être nécessaire si le diagnostic est
étant analysé par un programme qui ne comprend pas les numéros de colonne, comme
déjagnu.

-A prédicat=répondre
Faire une assertion avec le prédicat prédicat et répond répondre. Ce formulaire est
préféré à l'ancienne forme -A prédicat(répondre), qui est toujours pris en charge, car il
n'utilise pas de caractères spéciaux shell.

-A -prédicat=répondre
Annuler une assertion avec le prédicat prédicat et répond répondre.

-dCHARS
CARACTÈRES est une séquence d'un ou plusieurs des caractères suivants, et ne doit pas être
précédé d'un espace. Les autres caractères sont interprétés par le compilateur proprement dit, ou
réservées aux futures versions de GCC, et sont donc ignorées en silence. Si vous spécifiez
personnages dont le comportement est en conflit, le résultat est indéfini.

M Au lieu de la sortie normale, générez une liste de #define directives pour tous les
macros définies lors de l'exécution du préprocesseur, y compris les macros prédéfinies
macro. Cela vous donne un moyen de découvrir ce qui est prédéfini dans votre version de
le préprocesseur. En supposant que vous n'avez pas de fichier foo.h, la commande

toucher foo.h; cpp -dM foo.h

affichera toutes les macros prédéfinies.

Si vous utilisez -dM sans -E option, -dM est interprété comme synonyme de
-fdump-rtl-mach.

D Comme M sauf à deux égards : il fait ne sauraient inclure les macros prédéfinies, et il
sorties tous les deux le #define directives et le résultat du prétraitement. Les deux sortes
de sortie aller au fichier de sortie standard.

N Comme D, mais n'émettent que les noms des macros, pas leurs extensions.

I Sortie #comprendre directives en plus du résultat du prétraitement.

U Comme D sauf que seules les macros qui sont développées, ou dont la définition est testée
dans les directives du préprocesseur, sont affichés ; la sortie est retardée jusqu'à l'utilisation ou
test de la macro ; et #undef les directives sont également sorties pour les macros testées mais
indéfini à l'époque.

-P Empêcher la génération de marqueurs de ligne dans la sortie du préprocesseur. Cela pourrait être
utile lors de l'exécution du préprocesseur sur quelque chose qui n'est pas du code C, et sera envoyé
à un programme qui pourrait être confondu par les marqueurs de ligne.

-C Ne jetez pas les commentaires. Tous les commentaires sont transmis au fichier de sortie, sauf
pour les commentaires dans les directives traitées, qui sont supprimés avec la directive.

Vous devez être préparé aux effets secondaires lors de l'utilisation -C; cela amène le préprocesseur à
traiter les commentaires comme des jetons à part entière. Par exemple, les commentaires apparaissant à la
début de ce qui serait une ligne directive ont pour effet de transformer cette ligne en une
ligne source ordinaire, puisque le premier jeton sur la ligne n'est plus un #.

-CC Ne supprimez pas les commentaires, y compris pendant l'expansion des macros. C'est comme -C, sauf
que les commentaires contenus dans les macros sont également transmis au fichier de sortie où
la macro est étendue.

En plus des effets secondaires de la -C option, la -CC l'option provoque tout le style C++
commentaires dans une macro à convertir en commentaires de style C. C'est pour éviter plus tard
l'utilisation de cette macro de commenter par inadvertance le reste de la ligne source.

La -CC L'option est généralement utilisée pour prendre en charge les commentaires Lint.

-traditionnel-cpp
Essayez d'imiter le comportement des préprocesseurs C à l'ancienne, par opposition à l'ISO C
préprocesseurs.

-trigraphes
Traiter les séquences de trigraphes. Ce sont des séquences de trois caractères, commençant toutes par
??, qui sont définis par ISO C pour représenter des caractères uniques. Par exemple, ??/ peuplements
en \, De sorte '??/n' est une constante de caractère pour une nouvelle ligne. Par défaut, GCC ignore
trigraphes, mais dans les modes conformes aux normes, il les convertit. Voir le -std ainsi que -ansi
options.

Les neuf trigraphes et leurs remplaçants sont

Trigraphe : ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Remplacement : [ ] { } # \ ^ | ~

-remapper
Activer le code spécial pour contourner les systèmes de fichiers qui n'autorisent que des fichiers très courts
noms, tels que MS-DOS.

--Aidez-moi
--target-aide
Imprimez du texte décrivant toutes les options de la ligne de commande au lieu de prétraiter quoi que ce soit.

-v Mode verbeux. Imprimez le numéro de version de GNU CPP au début de l'exécution, et
signaler la forme finale du chemin d'inclusion.

-H Imprimez le nom de chaque fichier d'en-tête utilisé, en plus des autres activités normales. Chaque
le nom est en retrait pour montrer à quel point le #comprendre pile c'est. En-tête précompilé
les fichiers sont également imprimés, même s'ils s'avèrent invalides ; un précompilé invalide
le fichier d'en-tête est imprimé avec ...X et valide avec ! ... .

-version
--version
Imprimez le numéro de version de GNU CPP. Avec un tiret, procédez au prétraitement comme d'habitude.
Avec deux tirets, sortez immédiatement.

En passant Options à le Assembleur
Vous pouvez passer des options à l'assembleur.

-Washington,option
Passé option en option à l'assembleur. Si option contient des virgules, il est divisé
en plusieurs options entre les virgules.

-Xassembleur option
Passé option en option à l'assembleur. Vous pouvez l'utiliser pour fournir des informations spécifiques au système
des options de l'assembleur que GCC ne sait pas reconnaître.

Si vous voulez passer une option qui prend un argument, vous devez utiliser -Xassembleur deux fois,
une fois pour l'option et une fois pour l'argument.

Options en Enchaînement
Ces options entrent en jeu lorsque le compilateur lie des fichiers objets dans un exécutable
fichier de sortie. Ils n'ont aucun sens si le compilateur ne fait pas d'étape de lien.

nom-fichier-objet
Un nom de fichier qui ne se termine pas par un suffixe spécial reconnu est considéré comme le nom d'un
fichier objet ou bibliothèque. (Les fichiers objets se distinguent des bibliothèques par l'éditeur de liens
en fonction du contenu du fichier.) Si la liaison est effectuée, ces fichiers objets sont utilisés comme
entrée à l'éditeur de liens.

-c
-S
-E Si l'une de ces options est utilisée, l'éditeur de liens n'est pas exécuté et les noms de fichiers objets
ne doit pas être utilisé comme argument.

-lbibliothèque
-l bibliothèque
Rechercher la bibliothèque nommée bibliothèque lors de la liaison. (La deuxième alternative avec le
bibliothèque en tant qu'argument séparé est uniquement pour la conformité POSIX et n'est pas recommandé.)

Cela fait une différence où dans la commande vous écrivez cette option ; l'éditeur de liens recherche
et traite les bibliothèques et les fichiers objets dans l'ordre dans lequel ils sont spécifiés. Ainsi, foo.o
-lz bar.o recherche dans la bibliothèque z après fichier foo.o mais avant bar.o. Si bar.o désigne
fonctions dans z, ces fonctions peuvent ne pas être chargées.

L'éditeur de liens recherche une liste standard de répertoires pour la bibliothèque, qui est en fait
un fichier nommé bibliothèque.a. L'éditeur de liens utilise alors ce fichier comme s'il avait été spécifié
précisément de nom.

Les répertoires recherchés incluent plusieurs répertoires système standard ainsi que ceux que vous
préciser avec -L.

Normalement, les fichiers trouvés de cette manière sont des fichiers de bibliothèque --- des fichiers d'archive dont les membres sont
fichiers objets. L'éditeur de liens gère un fichier d'archive en le parcourant à la recherche de membres
qui définissent des symboles qui ont jusqu'à présent été référencés mais non définis. Mais si le
le fichier trouvé est un fichier objet ordinaire, il est lié de la manière habituelle. Les
seule différence entre l'utilisation d'un -l option et spécifier un nom de fichier est que -l
entoure bibliothèque avec lib ainsi que .a et recherche plusieurs répertoires.

-lobjc
Vous avez besoin de ce cas particulier du -l option afin de lier un Objective-C ou
Programme Objective-C++.

-nostartfiles
N'utilisez pas les fichiers de démarrage système standard lors de la liaison. Le système standard
les bibliothèques sont utilisées normalement, à moins que -nostdlib or -nodefaultlibs est utilisé.

-nodefaultlibs
N'utilisez pas les bibliothèques système standard lors de la liaison. Seules les bibliothèques que vous spécifiez
sera passé à l'éditeur de liens, les options spécifiant la liaison des bibliothèques système, telles que
comme "-static-libgcc" ou "-shared-libgcc", sera ignoré. Les fichiers de démarrage standard
sont utilisés normalement, à moins que -nostartfiles est utilisé. Le compilateur peut générer des appels à
"memcmp", "memset", "memcpy" et "memmove". Ces entrées sont généralement résolues par
entrées dans la libc. Ces points d'entrée devraient être fournis par un autre mécanisme
lorsque cette option est spécifiée.

-nostdlib
N'utilisez pas les fichiers ou bibliothèques de démarrage système standard lors de la liaison. Pas de démarrage
fichiers et seules les bibliothèques que vous spécifiez seront transmises à l'éditeur de liens, options
spécifiant la liaison des bibliothèques système, telles que "-static-libgcc" ou
"-shared-libgcc", sera ignoré. Le compilateur peut générer des appels à "memcmp",
"memset", "memcpy" et "memmove". Ces entrées sont généralement résolues par des entrées dans
libc. Ces points d'entrée devraient être fournis par un autre mécanisme lorsque ce
est spécifiée.

L'une des bibliothèques standard contournées par -nostdlib ainsi que -nodefaultlibs is libgcc.aun
bibliothèque de sous-programmes internes que GCC utilise pour surmonter les lacunes de certains
machines, ou des besoins particuliers pour certaines langues.

Dans la plupart des cas, vous avez besoin libgcc.a même si vous voulez éviter d'autres bibliothèques standard.
En d'autres termes, lorsque vous spécifiez -nostdlib or -nodefaultlibs tu devrais normalement
spécifier -lgcc également. Cela garantit que vous n'avez aucune référence non résolue à
sous-routines internes de la bibliothèque GCC. (Par exemple, __principale, utilisé pour assurer C++
les constructeurs seront appelés.)

-tarte
Produire une position indépendante exécutable sur les cibles qui la supportent. Pour prévisible
résultats, vous devez également spécifier le même ensemble d'options qui ont été utilisées pour générer le code
(-fpie, -fPIE, ou les sous-options du modèle) lorsque vous spécifiez cette option.

-rdynamique
Passer le drapeau -export-dynamique à l'éditeur de liens ELF, sur les cibles qui le prennent en charge. Cette
indique à l'éditeur de liens d'ajouter tous les symboles, pas seulement ceux utilisés, au symbole dynamique
table. Cette option est nécessaire pour certaines utilisations de "dlopen" ou pour permettre d'obtenir
backtraces à partir d'un programme.

-s Supprimez toutes les informations de table de symboles et de relocalisation de l'exécutable.

-statique
Sur les systèmes qui prennent en charge la liaison dynamique, cela empêche la liaison avec le partage
bibliothèques. Sur les autres systèmes, cette option n'a aucun effet.

-partagé
Produire un objet partagé qui peut ensuite être lié à d'autres objets pour former un
exécutable. Tous les systèmes ne prennent pas en charge cette option. Pour des résultats prévisibles, vous devez
spécifiez également le même ensemble d'options qui ont été utilisées pour générer le code (-fpic, -fPICou
sous-options du modèle) lorsque vous spécifiez cette option.[1]

-shared-libgcc
-statique-libgcc
Sur les systèmes qui fournissent libgcc en tant que bibliothèque partagée, ces options forcent l'utilisation de
soit la version partagée ou statique respectivement. Si aucune version partagée de libgcc était
construit lorsque le compilateur a été configuré, ces options n'ont aucun effet.

Il existe plusieurs situations dans lesquelles une application doit utiliser le partage libgcc
au lieu de la version statique. Le plus courant d'entre eux est lorsque l'application
souhaite lancer et intercepter des exceptions dans différentes bibliothèques partagées. Dans ce cas,
chacune des bibliothèques ainsi que l'application elle-même doivent utiliser le partage libgcc.

Par conséquent, les pilotes G++ et GCJ ajoutent automatiquement -shared-libgcc chaque fois que vous construisez
une bibliothèque partagée ou un exécutable principal, car les programmes C++ et Java utilisent généralement
exceptions, c'est donc la bonne chose à faire.

Si, à la place, vous utilisez le pilote GCC pour créer des bibliothèques partagées, vous constaterez peut-être qu'ils
ne sera pas toujours lié au partage libgcc. Si GCC trouve, à sa configuration
fois, que vous avez un éditeur de liens non-GNU ou un éditeur de liens GNU qui ne prend pas en charge l'option
--eh-frame-hdr, il liera la version partagée de libgcc dans des bibliothèques partagées par
défaut. Sinon, il tirera parti de l'éditeur de liens et optimisera le
lien avec la version partagée de libgcc, lien avec la version statique de libgcc
par défaut. Cela permet aux exceptions de se propager à travers de telles bibliothèques partagées,
sans encourir de frais de déménagement au moment du chargement de la bibliothèque.

Cependant, si une bibliothèque ou un exécutable principal est censé lever ou intercepter des exceptions, vous
doit le lier à l'aide du pilote G++ ou GCJ, selon les langages utilisés dans le
programme, ou en utilisant l'option -shared-libgcc, de telle sorte qu'il soit lié au partage
libgcc.

-statique-libstdc++
When the g ++ est utilisé pour lier un programme C++, il sera normalement automatiquement
lien contre libstdc++. Si libstdc++ est disponible en tant que bibliothèque partagée, et le
-statique n'est pas utilisée, cela sera lié à la version partagée de
libstdc++. C'est normalement bien. Cependant, il est parfois utile de congeler les
version de libstdc++ utilisé par le programme sans aller jusqu'à un complètement statique
relier. Les -statique-libstdc++ option dirige le g ++ pilote à lier libstdc++
statiquement, sans nécessairement lier statiquement d'autres bibliothèques.

-symbolique
Liez des références à des symboles globaux lors de la création d'un objet partagé. Avertir de tout
références non résolues (sauf si elles sont remplacées par l'option de l'éditeur de liens -Xlinker -z
-Xlinker def). Seuls quelques systèmes prennent en charge cette option.

-T scénario
Utilisez scénario comme script de l'éditeur de liens. Cette option est prise en charge par la plupart des systèmes utilisant le
Éditeur de liens GNU. Sur certaines cibles, telles que les cibles à carte nue sans système d'exploitation,
le -T L'option peut être requise lors de la liaison pour éviter les références à des symboles non définis.

-Xlinker option
Passé option en option à l'éditeur de liens. Vous pouvez l'utiliser pour fournir des informations spécifiques au système
options de l'éditeur de liens que GCC ne reconnaît pas.

Si vous voulez passer une option qui prend un argument séparé, vous devez utiliser -Xlinker
deux fois, une fois pour l'option et une fois pour l'argument. Par exemple, pour passer -affirmer
définitions, vous devez écrire -Xlinker -affirmer -Xlinker définitions. Ça ne marche pas
pour écrire -Xlinker "-affirmer définitions", car cela passe la chaîne entière en tant que
argument unique, ce qui n'est pas ce que l'éditeur de liens attend.

Lors de l'utilisation de l'éditeur de liens GNU, il est généralement plus pratique de passer des arguments à l'éditeur de liens
options en utilisant le option=Plus-value syntaxe que sous forme d'arguments séparés. Par exemple, vous
peut spécifier -Xlinker -Map=sortie.map plutôt que -Xlinker -Carte -Xlinker sortie.map.
D'autres éditeurs de liens peuvent ne pas prendre en charge cette syntaxe pour les options de ligne de commande.

-Wl,option
Passé option en option à l'éditeur de liens. Si option contient des virgules, il est divisé en
plusieurs options entre les virgules. Vous pouvez utiliser cette syntaxe pour passer un argument au
option. Par example, -Wl,-Map,output.map passes -Carte sortie.map à l'éditeur de liens. Lorsque
en utilisant l'éditeur de liens GNU, vous pouvez également obtenir le même effet avec -Wl, -Map = output.map.

REMARQUE : dans Ubuntu 8.10 et versions ultérieures, pour LDFLAGS, l'option -Wl,-z,relro est utilisé.
Pour désactiver, utilisez -Wl,-z,norelro.

-u symbole
Faire semblant de symbole symbole n'est pas défini, pour forcer la liaison des modules de la bibliothèque pour définir
ce. Vous pouvez utiliser -u plusieurs fois avec des symboles différents pour forcer le chargement de
modules de bibliothèque supplémentaires.

Options en Annuaire Rechercher
Ces options spécifient les répertoires dans lesquels rechercher les fichiers d'en-tête, les bibliothèques et les pièces
du compilateur :

-Idir
Ajouter le répertoire dir en tête de la liste des répertoires à rechercher header
des dossiers. Cela peut être utilisé pour remplacer un fichier d'en-tête système, en substituant le vôtre
version, puisque ces répertoires sont recherchés avant le fichier d'en-tête système
répertoires. Cependant, vous ne devez pas utiliser cette option pour ajouter des répertoires contenant
fichiers d'en-tête système fournis par le fournisseur (utilisez -isystème pour ça). Si vous utilisez plusieurs
-I option, les répertoires sont scannés dans l'ordre de gauche à droite ; le système standard
les répertoires viennent après.

Si un répertoire d'inclusion système standard ou un répertoire spécifié avec -isystème, est
également spécifié avec -I, -I l'option sera ignorée. Le répertoire sera toujours
recherché mais en tant que répertoire système à sa position normale dans la chaîne d'inclusion du système.
Cela permet de s'assurer que la procédure de GCC pour corriger les en-têtes système bogués et la commande
pour la directive include_next ne sont pas modifiés par inadvertance. Si vous en avez vraiment besoin
modifier l'ordre de recherche des répertoires système, utilisez le -nostdinc (facultatif) -isystème
options.

-iplugindir=dir
Définir le répertoire pour rechercher les plugins qui sont passés par -fplugin=prénom au lieu de
-fplugin=chemin/prénom.so. Cette option n'est pas destinée à être utilisée par l'utilisateur, mais uniquement
passé par le chauffeur.

-Je citedir
Ajouter le répertoire dir en tête de la liste des répertoires à rechercher header
fichiers uniquement pour le cas de #comprendre "filet"; ils ne sont pas recherchés #comprendre <filet>,
sinon comme -I.

-Ldir
Ajouter un répertoire dir à la liste des répertoires à rechercher -l.

-Bpréfixe
Cette option spécifie où trouver les exécutables, les bibliothèques, les fichiers d'inclusion et
fichiers de données du compilateur lui-même.

Le programme pilote du compilateur exécute un ou plusieurs des sous-programmes cpp, cc1, as ainsi que ld.
il essaie préfixe comme préfixe pour chaque programme qu'il essaie d'exécuter, avec et sans
click/version/.

Pour chaque sous-programme à exécuter, le pilote du compilateur essaie d'abord le -B préfixe, le cas échéant.
Si ce nom n'est pas trouvé, ou si -B n'a pas été spécifié, le pilote essaie deux standards
préfixes, /usr/lib/gcc/ ainsi que /usr/local/lib/gcc/. Si aucun de ces résultats n'entraîne un
nom de fichier trouvé, le nom de programme non modifié est recherché à l'aide du
répertoires spécifiés dans votre PATH variable d'environnement.

Le compilateur vérifiera si le chemin fourni par le -B fait référence à un répertoire,
et si nécessaire, il ajoutera un caractère séparateur de répertoire à la fin du chemin.

-B les préfixes qui spécifient effectivement les noms de répertoire s'appliquent également aux bibliothèques dans le
l'éditeur de liens, car le compilateur traduit ces options en -L options pour l'éditeur de liens.
Ils s'appliquent également aux fichiers d'inclusion dans le préprocesseur, car le compilateur traduit
ces options en -isystème options pour le préprocesseur. Dans ce cas, le compilateur
ajoute comprendre au préfixe.

Le fichier de support d'exécution libgcc.a peut également être recherché en utilisant le -B préfixe, si
nécessaire. S'il ne s'y trouve pas, les deux préfixes standard ci-dessus sont essayés, et cela
est tout. Le fichier est exclu du lien s'il n'est pas trouvé par ces moyens.

Une autre façon de spécifier un préfixe un peu comme le -B le préfixe est d'utiliser l'environnement
variable GCC_EXEC_PREFIX.

En tant que kludge spécial, si le chemin fourni par -B is [dir/]étapeN/, Où N est un nombre
compris entre 0 et 9, alors il sera remplacé par [dir/]inclure. C'est pour aider avec
amorçage du compilateur.

-spécifications=filet
Processus filet après que le compilateur ait lu le standard spécifications fichier, afin de remplacer
les valeurs par défaut que le gcc le programme pilote utilise pour déterminer les commutateurs à passer
à cc1, cc1plus, as, ld, etc. Plus d'un -spécifications=filet peut être spécifié sur le
ligne de commande, et ils sont traités dans l'ordre, de gauche à droite.

--sysroot=dir
Utilisez dir comme répertoire racine logique pour les en-têtes et les bibliothèques. Par exemple, si le
le compilateur rechercherait normalement les en-têtes dans / usr / include et les bibliothèques de / usr / lib,
il cherchera à la place répertoire/usr/inclure ainsi que répertoire/usr/lib.

Si vous utilisez à la fois cette option et le -isysroot option, puis le --sysroot l'option sera
s'appliquent aux bibliothèques, mais le -isysroot L'option s'appliquera aux fichiers d'en-tête.

L'éditeur de liens GNU (à partir de la version 2.16) a le support nécessaire pour cela
option. Si votre éditeur de liens ne prend pas en charge cette option, l'aspect du fichier d'en-tête de
--sysroot fonctionnera toujours, mais pas l'aspect bibliothèque.

-I- Cette option a été dépréciée. Veuillez utiliser -Je cite au lieu de -I répertoires avant
le -I- et retirez le -I-. Tous les répertoires que vous spécifiez avec -I options avant le
-I- option sont recherchés uniquement pour le cas de #comprendre "filet"; ils ne sont pas recherchés
en #comprendre <filet>.

Si des répertoires supplémentaires sont spécifiés avec -I options après la -I-, Ceux-ci
les répertoires sont recherchés pour tous #comprendre directives. (Ordinairement TOUTE -I répertoires
sont utilisés de cette façon.)

En outre, le -I- L'option inhibe l'utilisation du répertoire courant (où le
provient du fichier d'entrée actuel) comme premier répertoire de recherche pour #comprendre "filet".
Il n'y a aucun moyen de neutraliser cet effet de -I-. Avec -NS. vous pouvez spécifier la recherche
le répertoire qui était en cours lorsque le compilateur a été appelé. Ce n'est pas exactement le
même chose que ce que fait le préprocesseur par défaut, mais c'est souvent satisfaisant.

-I- n'empêche pas l'utilisation des répertoires système standard pour les fichiers d'en-tête.
Ainsi, -I- ainsi que -nostdinc sont indépendants.

Spécification Target Machine ainsi que Compilateur Version
La façon habituelle d'exécuter GCC est d'exécuter l'exécutable appelé gccou click-gcc quand croix-
compilation, ou click-gcc-version pour exécuter une version différente de celle qui a été installée
dernier.

Matériel Des modèles photo ainsi que Configurations
Chaque type de machine cible peut avoir ses propres options spéciales, à commencer par -m, choisir
parmi divers modèles de matériel ou configurations --- par exemple, 68010 vs 68020, flottant
coprocesseur ou aucun. Une seule version installée du compilateur peut compiler pour n'importe quel modèle
ou configuration, selon les options spécifiées.

Certaines configurations du compilateur prennent également en charge des options spéciales supplémentaires, généralement pour
compatibilité avec d'autres compilateurs sur la même plate-forme.

Adapteva Épiphanie Options

Ces -m des options sont définies pour Adapteva Epiphany :

-mhal-reg-fichier
N'allouez aucun registre dans la plage "r32"..."r63". Cela permet au code de s'exécuter sur
variantes matérielles dépourvues de ces registres.

-mprefer-short-insn-regs
Allouez de préférence des registres qui permettent la génération d'instructions courtes. Ceci peut
entraîner une augmentation du nombre d'instructions, donc si cela réduit ou augmente la taille du code
peut varier d'un cas à l'autre.

-mbranche-coût=num
Fixez le coût des succursales à environ num instructions "simples". Ce coût n'est qu'un
heuristique et n'est pas garanti de produire des résultats cohérents entre les versions.

-mcmove
Activer la génération de mouvements conditionnels.

-mnops=num
Émettre num nops avant chaque autre instruction générée.

-mno-soft-cmpsf
Pour les comparaisons en virgule flottante simple précision, émettez une instruction fsub et testez le
drapeaux. Ceci est plus rapide qu'une comparaison de logiciels, mais peut obtenir des résultats incorrects dans
la présence de NaNs, ou lorsque deux petits nombres différents sont comparés de telle sorte que leur
la différence est calculée comme nulle. La valeur par défaut est -msoft-cmpsf, qui utilise plus lentement, mais
Comparaisons de logiciels conformes à la norme IEEE.

-mstack-offset=num
Définit le décalage entre le haut de la pile et le pointeur de pile. Par exemple, une valeur de 8
signifie que les huit octets de la plage sp+0...sp+7 peuvent être utilisés par les fonctions feuilles
sans allocation de pile. Valeurs autres que 8 or 16 ne sont pas testés et il est peu probable
travail. Notez également que cette option modifie l'ABI, en compilant un programme avec un
un décalage de pile différent de celui avec lequel les bibliothèques ont été compilées ne sera généralement pas
travail. Cette option peut être utile si vous souhaitez évaluer si un décalage de pile différent
vous donnerait un meilleur code, mais utiliser en fait un décalage de pile différent pour construire
programmes de travail, il est recommandé de configurer la chaîne d'outils avec les
--avec-stack-offset=num option.

-mno-rond-le plus proche
Faites en sorte que le planificateur suppose que le mode d'arrondi a été défini sur tronquer. Les
la valeur par défaut est -mround-plus proche.

-mlong-appels
Sauf indication contraire par un attribut, supposez que tous les appels pourraient être au-delà de la
plage de décalage des instructions b / bl, et donc charger l'adresse de la fonction dans
un registre avant d'effectuer un appel (autrement direct). C'est la valeur par défaut.

-mappels courts
Sauf indication contraire par un attribut, supposez que tous les appels directs sont dans la plage
des instructions b / bl, utilisez donc ces instructions pour les appels directs. Le défaut
is -mlong-appels.

-mpetit16
Supposons que les adresses peuvent être chargées en tant que valeurs non signées de 16 bits. Cela ne s'applique pas à
adresses de fonction pour lesquelles -mlong-appels la sémantique est en vigueur.

-mode-mfp=mode
Définissez le mode dominant de l'unité à virgule flottante. Ceci détermine le flottement-
mode point qui est fourni et attendu au moment de l'appel et du retour de la fonction. Fabrication
ce mode correspond au mode dont vous avez principalement besoin au démarrage de la fonction peut rendre votre
programmes plus petits et plus rapides en évitant les changements de mode inutiles.

mode peut être défini sur l'une des valeurs suivantes :

votre interlocuteur
Tout mode à l'entrée de la fonction est valide, et conservé ou restauré lorsque la fonction
renvoie, et quand il appelle d'autres fonctions. Ce mode est utile pour compiler
bibliothèques ou autres unités de compilation que vous pourriez vouloir incorporer dans différents
programmes avec différents modes FPU dominants, et la commodité de pouvoir
l'utilisation d'un seul fichier objet dépasse la taille et la surcharge de vitesse pour tout mode supplémentaire
changement qui pourrait être nécessaire, par rapport à ce qui serait nécessaire avec un
choix spécifique du mode FPU dominant.

tronquer
C'est le mode utilisé pour les calculs en virgule flottante avec troncature (c'est-à-dire ronde
vers zéro) mode d'arrondi. Cela inclut la conversion de virgule flottante en
entier.

rond-plus proche
C'est le mode utilisé pour les calculs à virgule flottante avec arrondir au plus proche ou
même mode d'arrondi.

int C'est le mode utilisé pour effectuer des calculs d'entiers dans le FPU, par exemple entier
multiplier, ou multiplier-et-accumuler un nombre entier.

La valeur par défaut est -mfp-mode=appelant

-mnosplit-lohi
-mno-postinc
-mno-postmodifier
Ajustements de génération de code qui désactivent, respectivement, le fractionnement des charges 32 bits,
génération d'adresses post-incrémentation et génération d'adresses post-modification. Les
les valeurs par défaut sont msplit-lohi, -mpost-incet -mpost-modifier.

-mnovect-double
Changez le mode SIMD préféré en mode SI. La valeur par défaut est -mvect-double, Qui utilise
DImode comme mode SIMD préféré.

-max-vect-align=num
L'alignement maximal pour les types de mode vectoriel SIMD. num peut être 4 ou 8. La valeur par défaut est
8. Notez qu'il s'agit d'un changement d'ABI, même si de nombreuses interfaces de fonctions de bibliothèque
ne soient pas affectés, s'ils n'utilisent pas les modes vectoriels SIMD aux endroits où ils affectent la taille
et/ou l'alignement des types pertinents.

-msplit-vecmove-tôt
Le vecteur fractionné se déplace en un seul mot avant le rechargement. En théorie, cela pourrait donner
meilleure allocation des registres, mais jusqu'à présent, l'inverse semble être généralement le cas.

-m1reg-reg
Spécifiez un registre pour maintenir la constante -1, ce qui rend le chargement petit négatif
constantes et certains masques de bits plus rapidement. Les valeurs autorisées pour reg sont r43 et r63,
qui spécifient d'utiliser ce registre comme registre fixe, et aucun, ce qui signifie qu'aucun
registre est utilisé à cette fin. La valeur par défaut est -m1reg-aucun.

AAArch64 Options

Ces options sont définies pour les implémentations AArch64 :

-mbig-endian
Générez du code gros-boutiste. Il s'agit de la valeur par défaut lorsque GCC est configuré pour un
aarch64_be-*-* cible.

-mgeneral-regs-uniquement
Générer du code qui utilise uniquement les registres généraux.

-mlittle-endian
Générez du code little-endian. Il s'agit de la valeur par défaut lorsque GCC est configuré pour un
aarch64 - * - * mais pas un aarch64_be-*-* cible.

-mcmodel=minuscule
Générez du code pour le modèle de code minuscule. Le programme et ses symboles définis statiquement
doivent être à moins de 1 Go l'un de l'autre. Les pointeurs sont de 64 bits. Les programmes peuvent être statiquement
ou liés dynamiquement. Ce modèle n'est pas entièrement mis en œuvre et est principalement traité comme
"petit".

-mcmodel=petit
Générez du code pour le modèle de petit code. Le programme et ses définitions statiques
les symboles doivent être à moins de 4 Go les uns des autres. Les pointeurs sont de 64 bits. Les programmes peuvent être
liés statiquement ou dynamiquement. Il s'agit du modèle de code par défaut.

-mcmodel=grand
Générez du code pour le modèle de code large. Cela ne fait aucune hypothèse sur les adresses et
tailles de sections. Les pointeurs sont de 64 bits. Les programmes ne peuvent être liés que de manière statique.

-mstrict-aligner
Ne partez pas du principe que les références de mémoire non alignées seront gérées par le système.

-momit-leaf-frame-pointeur
-mno-omettre-leaf-frame-pointer
Omettez ou conservez le pointeur de cadre dans les fonctions feuilles. Le premier comportement est le
défaut.

-mtls-dialect=desc
Utiliser des descripteurs TLS comme mécanisme de stockage local de thread pour les accès dynamiques de TLS
variables. C'est la valeur par défaut.

-mtls-dialect=traditionnel
Utilisez TLS traditionnel comme mécanisme de stockage local de thread pour les accès dynamiques de TLS
variables.

-mars=prénom
Précisez le nom de l'architecture cible, éventuellement suffixé par un ou plusieurs
modificateurs de caractéristiques. Cette option a la forme -mars=arche{+[aucune]caractéristique}*, où le
seule valeur pour arche is armv8-a. Les valeurs possibles pour caractéristique sont documentés dans le
sous-section ci-dessous.

Lorsque des modificateurs de fonction en conflit sont spécifiés, la fonction la plus à droite est utilisée.

GCC utilise ce nom pour déterminer le type d'instructions qu'il peut émettre lors de la génération
code d'assemblage. Cette option peut être utilisée en conjonction avec ou à la place du -mcpu=
option.

-mcpu=prénom
Spécifiez le nom du processeur cible, éventuellement suffixé par une ou plusieurs fonctionnalités
modificateurs. Cette option a la forme -mcpu=cpu{+[aucune]caractéristique}*, dans la mesure du possible
valeurs pour cpu générique, gros. Les valeurs possibles pour caractéristique sont documentés dans
la sous-section ci-dessous.

Lorsque des modificateurs de fonction en conflit sont spécifiés, la fonction la plus à droite est utilisée.

GCC utilise ce nom pour déterminer le type d'instructions qu'il peut émettre lors de la génération
code d'assemblage.

-mtune=prénom
Spécifiez le nom du processeur pour lequel régler les performances. Le code sera réglé
comme si le processeur cible était du type spécifié dans cette option, mais utilisant toujours
instructions compatibles avec le processeur cible spécifié par un -mcpu= option. Ce
L'option ne peut pas être suffixée par des modificateurs de fonction.

-Mars ainsi que -mcpu modificateurs de fonction

Modificateurs de caractéristiques utilisés avec -Mars ainsi que -mcpu peut être l'un des suivants :

Crypto
Activez l'extension Crypto. Cela implique que Advanced SIMD est activé.

fp Activez les instructions à virgule flottante.

SIMD
Activez les instructions SIMD avancées. Cela implique que les instructions à virgule flottante sont
activée. Il s'agit de la valeur par défaut pour toutes les valeurs possibles actuelles pour les options -Mars ainsi que
-mcpu=.

BRAS Options

Ces -m les options sont définies pour les architectures Advanced RISC Machines (ARM) :

-mabi=prénom
Générer du code pour l'ABI spécifiée. Les valeurs autorisées sont : apcs-gnu, atpc, AAPCS,
aapcs-linux ainsi que jewmmxt.

-mapcs-frame
Générer un cadre de pile conforme à la norme d'appel de procédure ARM pour tous
fonctions, même si cela n'est pas strictement nécessaire à la bonne exécution du code.
Spécification -fomit-frame-pointeur avec cette option, les cadres de pile ne seront pas
généré pour les fonctions feuilles. La valeur par défaut est -mno-apcs-cadre.

-cartes
C'est un synonyme de -mapcs-frame.

-mthumb-interfonctionnement
Générez du code qui prend en charge les appels entre les jeux d'instructions ARM et Thumb.
Sans cette option, sur les architectures antérieures à la v5, les deux jeux d'instructions ne peuvent pas être
utilisé de manière fiable dans un seul programme. La valeur par défaut est -mno-pouce-interwork, puisque légèrement
un code plus grand est généré lorsque -mthumb-interfonctionnement est spécifié. Dans les configurations AAPCS
cette option n'a pas de sens.

-mno-sched-prologue
Empêcher la réorganisation des instructions dans le prologue de la fonction, ou la fusion de
ces instructions avec les instructions dans le corps de la fonction. Cela signifie que tout
les fonctions commenceront par un ensemble d'instructions reconnaissable (ou en fait l'un d'un
choix parmi un petit ensemble de prologues de fonctions différentes), et cette information peut être
utilisé pour localiser les fonctions start if à l'intérieur d'un morceau de code exécutable. Le défaut
is -msched-prologue.

-mfloat-abi=prénom
Spécifie l'ABI à virgule flottante à utiliser. Les valeurs autorisées sont : qualité, que vous pourrez utilisé , softfp ainsi que
dur.

Spécification qualité, que vous pourrez utilisé oblige GCC à générer une sortie contenant des appels de bibliothèque pour le flottant-
opérations ponctuelles. softfp permet la génération de code à l'aide de virgule flottante matérielle
instructions, mais utilise toujours les conventions d'appel flottantes. dur permet
génération d'instructions à virgule flottante et utilise des conventions d'appel spécifiques à la FPU.

La valeur par défaut dépend de la configuration cible spécifique. Notez que le flotteur dur
et les ABI flottantes ne sont pas compatibles avec les liaisons ; vous devez compiler tout votre programme avec
la même ABI et un lien avec un ensemble de bibliothèques compatibles.

-mlittle-endian
Générez du code pour un processeur fonctionnant en mode little-endian. C'est la valeur par défaut pour
toutes les configurations standards.

-mbig-endian
Générer du code pour un processeur fonctionnant en mode gros-boutiste ; la valeur par défaut est de compiler
code pour un processeur little-endian.

-mwords-petit-boutiste
Cette option s'applique uniquement lors de la génération de code pour les processeurs big-endian. produire
code pour un ordre de mots little-endian mais un ordre d'octet big-endian. c'est-à-dire un octet
ordre de la forme 32107654. Remarque : cette option ne doit être utilisée que si vous avez besoin
compatibilité avec le code des processeurs ARM big-endian générés par les versions du
compilateur antérieur à 2.8. Cette option est désormais obsolète.

-mars=prénom
Ceci spécifie le nom de l'architecture ARM cible. GCC utilise ce nom pour
déterminer le type d'instructions qu'il peut émettre lors de la génération du code assembleur. Cette
L'option peut être utilisée en conjonction avec ou à la place de l'option -mcpu= option. Permis
les noms sont: 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, jewmmxt, iwmmxt2, ep9312.

-mars=natif oblige le compilateur à détecter automatiquement l'architecture de la construction
ordinateur. À l'heure actuelle, cette fonctionnalité n'est prise en charge que sur Linux, et pas tous
les architectures sont reconnues. Si la détection automatique échoue, l'option n'a pas
effet.

-mtune=prénom
Cette option spécifie le nom du processeur ARM cible pour lequel GCC doit régler
les performances du code. Pour certaines implémentations ARM, de meilleures performances peuvent être
obtenu en utilisant cette option. Les noms autorisés sont : arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, bras7m, bras7d, bras7dm, arm7di, arm7dmi, arm70,
arm700, bras700i, arm710, bras710c, arm7100, arm720, arm7500, bras7500fe, arm7tdmi,
arm7tdmi-s, bras710t, bras720t, bras740t, bras fort, bras fort110, bras fort1100,
bras fort1110, arm8, arm810, arm9, bras9e, arm920, bras920t, bras922t, bras946e-s,
bras966e-s, bras968e-s, bras926ej-s, bras940t, arm9tdmi, arm10tdmi, bras1020t, bras1026ej-s,
bras10e, bras1020e, bras1022e, bras1136j-s, bras1136jf-s, mpcore, mpcorenovfp, bras1156t2-s,
bras1156t2f-s, bras1176jz-s, bras1176jzf-s, Cortex-a5, Cortex-a7, Cortex-a8, Cortex-a9,
Cortex-a15, cortex-r4, cortex-r4f, cortex-r5, Cortex-m4, Cortex-m3, Cortex-m1,
Cortex-m0, échelle x, jewmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-mtune=générique-arche spécifie que GCC doit ajuster les performances pour un mélange de
processeurs dans l'architecture arche. L'objectif est de générer du code qui fonctionne bien sur le
processeurs actuels les plus populaires, en équilibrant les optimisations qui profitent à certains
CPU de la gamme, et éviter les écueils de performances des autres CPU. Les effets de
cette option peut changer dans les futures versions de GCC au fur et à mesure que les modèles de CPU vont et viennent.

-mtune=natif oblige le compilateur à détecter automatiquement le processeur de l'ordinateur de construction. À
présente, cette fonctionnalité n'est prise en charge que sous Linux et toutes les architectures ne sont pas
reconnu. Si la détection automatique échoue, l'option n'a aucun effet.

-mcpu=prénom
Ceci spécifie le nom du processeur ARM cible. GCC utilise ce nom pour dériver le
nom de l'architecture ARM cible (comme si spécifié par -Mars) et le processeur ARM
type pour lequel régler pour la performance (comme si spécifié par -mtune). Où cette option
est utilisé en conjonction avec -Mars or -mtune, ces options ont préséance sur les
partie appropriée de cette option.

Les noms autorisés pour cette option sont les mêmes que ceux pour -mtune.

-mcpu=générique-arche est également admissible et équivaut à -mars=arche
-mtune=générique-arche. Voir -mtune pour plus d'information.

-mcpu=natif oblige le compilateur à détecter automatiquement le processeur de l'ordinateur de construction. À
présente, cette fonctionnalité n'est prise en charge que sous Linux et toutes les architectures ne sont pas
reconnu. Si la détection automatique échoue, l'option n'a aucun effet.

-mfpu=prénom
-mfpe=nombre
-mfp=nombre
Ceci spécifie quel matériel à virgule flottante (ou émulation matérielle) est disponible sur
la cible. Les noms autorisés sont : fpa, fpe2, fpe3, franc-tireur, VFP, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, néon, néon-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 ainsi que néon-vfpv4. -mfp ainsi que -mfpe sont des synonymes de -mfpu=fpenombre, Pour
compatibilité avec les anciennes versions de GCC.

If -msoft-float est spécifié ceci spécifie le format des valeurs à virgule flottante.

Si le matériel à virgule flottante sélectionné inclut l'extension NEON (par ex. -mfpu=néon),
notez que les opérations à virgule flottante ne seront pas utilisées par la passe d'auto-vectorisation de GCC
à moins que -funsafe-math-optimisations est également précisé. C'est parce que le matériel NEON
n'implémente pas complètement la norme IEEE 754 pour l'arithmétique à virgule flottante (en
des valeurs dénormalisées particulières sont traitées comme zéro), de sorte que l'utilisation d'instructions NEON peut
entraîner une perte de précision.

-format-mfp16=prénom
Spécifiez le format du type à virgule flottante demi-précision "__fp16". Permis
les noms sont aucun, heeeeet alternative; la valeur par défaut est aucun, auquel cas le "__fp16"
le type n'est pas défini.

-mstructure-taille-limite=n
La taille de toutes les structures et syndicats sera arrondie à un multiple du nombre
de bits définis par cette option. Les valeurs autorisées sont 8, 32 et 64. La valeur par défaut
varie pour les différentes chaînes d'outils. Pour la chaîne d'outils ciblée COFF, la valeur par défaut est
8. Une valeur de 64 n'est autorisée que si l'ABI sous-jacente la prend en charge.

Spécifier le plus grand nombre peut produire un code plus rapide et plus efficace, mais peut également
augmenter la taille du programme. Des valeurs différentes sont potentiellement incompatibles.
Le code compilé avec une valeur ne peut pas nécessairement s'attendre à fonctionner avec du code ou des bibliothèques
compilés avec une autre valeur, s'ils échangent des informations à l'aide de structures ou d'unions.

-mabort-on-norturn
Générer un appel à la fonction "abort" à la fin d'une fonction "noreturn". Ce sera
être exécuté si la fonction essaie de revenir.

-mlong-appels
-mno-long-appels
Indique au compilateur d'effectuer des appels de fonction en chargeant d'abord l'adresse du
fonction dans un registre puis en effectuant un appel de sous-programme sur ce registre. Cette
est nécessaire si la fonction cible se situe en dehors de l'adressage de 64 mégaoctets
plage de la version basée sur le décalage de l'instruction d'appel de sous-programme.

Même si ce commutateur est activé, tous les appels de fonction ne seront pas transformés en appels longs.
L'heuristique est que les fonctions statiques, les fonctions qui ont le appel court attribut,
fonctions qui sont à l'intérieur de la portée d'un #pragma no_long_calls directive et fonctions
dont les définitions ont déjà été compilées dans l'unité de compilation courante,
pas être transformé en longs appels. L'exception à cette règle est que la fonction faible
définitions, fonctions avec le appel prolongé attribut ou le attribut, et
fonctions qui entrent dans le cadre d'un #pragma appels_longs directive, sera toujours
transformé en longs appels.

Cette fonctionnalité n'est pas activée par défaut. En précisant -mno-long-appels restaurera le
comportement par défaut, tout comme le fait de placer les appels de fonction dans le cadre d'un #pragma
long_calls_off directif. Notez que ces commutateurs n'ont aucun effet sur la façon dont le compilateur
génère du code pour gérer les appels de fonction via des pointeurs de fonction.

-msingle-pic-base
Traitez le registre utilisé pour l'adressage PIC en lecture seule, plutôt que de le charger dans le
prologue pour chaque fonction. Le système d'exécution est responsable de l'initialisation de ce
registre avec une valeur appropriée avant le début de l'exécution.

-mpic-register=reg
Spécifiez le registre à utiliser pour l'adressage PIC. La valeur par défaut est R10 sauf si stack-
la vérification est activée, lorsque R9 est utilisé.

-mcirrus-fix-invalid-insns
Insérez des NOP dans le flux d'instructions pour contourner les problèmes avec
combinaisons d'instructions non valides non valides. Cette option n'est valide que si le
-mcpu=ep9312 L'option a été utilisée pour permettre la génération d'instructions pour le Cirrus
Coprocesseur à virgule flottante Maverick. Cette option n'est pas activée par défaut, car
le problème n'est présent que dans les anciennes implémentations de Maverick. La valeur par défaut peut être ré-
activé par l'utilisation du -mno-cirrus-fix-invalid-insns interrupteur.

-mpoke-nom-de-fonction
Écrivez le nom de chaque fonction dans la section de texte, précédant directement la fonction
prologue. Le code généré est similaire à ceci :

t0
.ascii "arm_poke_function_name", 0
.aligner
t1
.mot 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp !, {fp, ip, lr, pc}
sous fp, ip, #4

Lors de l'exécution d'un backtrace de pile, le code peut inspecter la valeur de "pc" stockée dans "fp +
0". Si la fonction de trace regarde alors à l'emplacement "pc - 12" et les 8 premiers bits sont
set, alors nous savons qu'il y a un nom de fonction intégré précédant immédiatement ce
emplacement et a la longueur "((pc[-3]) & 0xff000000)".

-mpouce
-marm
Choisissez entre générer du code qui s'exécute dans les états ARM et Thumb. La valeur par défaut pour
la plupart des configurations consiste à générer du code qui s'exécute dans l'état ARM, mais la valeur par défaut
peut être modifié en configurant GCC avec le --avec-mode=Etat option de configuration.

-cadre mtpcs
Générez un cadre de pile conforme à la norme d'appel de procédure Thumb pour
toutes les fonctions non-feuille. (Une fonction feuille est une fonction qui n'appelle aucune autre
fonctions.) La valeur par défaut est -mno-tpcs-cadre.

-mtpcs-feuille-cadre
Générez un cadre de pile conforme à la norme d'appel de procédure Thumb pour
toutes les fonctions feuilles. (Une fonction feuille est une fonction qui n'appelle aucune autre fonction.)
La valeur par défaut est -mno-apcs-feuille-cadre.

-mcalle-super-interworking
Donne à toutes les fonctions visibles de l'extérieur dans le fichier en cours de compilation une instruction ARM
set header qui passe en mode Thumb avant d'exécuter le reste de la fonction.
Cela permet à ces fonctions d'être appelées à partir de code sans interfonctionnement. Cette option est
non valide dans les configurations AAPCS car l'interfonctionnement est activé par défaut.

-mcaller-super-interfonctionnement
Permet aux appels via des pointeurs de fonction (y compris les fonctions virtuelles) de s'exécuter correctement
indépendamment du fait que le code cible a été compilé pour l'interfonctionnement ou non.
Il y a un petit surcoût dans le coût d'exécution d'un pointeur de fonction si cette option
est autorisé. Cette option n'est pas valide dans les configurations AAPCS car l'interfonctionnement est
activé par défaut.

-mtp=prénom
Spécifiez le modèle d'accès pour le pointeur de stockage local de thread. Les modèles valides sont
qualité, que vous pourrez utilisé , qui génère des appels à "__aeabi_read_tp", cp15, qui récupère le fil
pointeur de "cp15" directement (pris en charge dans l'architecture arm6k), et auto, Qui
utilise la meilleure méthode disponible pour le processeur sélectionné. Le paramètre par défaut est
auto.

-mtls-dialecte=dialecte
Spécifiez le dialecte à utiliser pour accéder au stockage local des threads. Deux dialectes sont
prise en charge --- gnou ainsi que gnu2L’ gnou dialecte sélectionne le schéma GNU d'origine pour
prenant en charge les modèles TLS dynamiques locaux et mondiaux. Les gnu2 dialecte sélectionne le GNU
schéma de descripteur, qui offre de meilleures performances pour les bibliothèques partagées. Le GNU
le schéma de descripteur est compatible avec le schéma d'origine, mais nécessite de nouveaux
prise en charge de l'assembleur, de l'éditeur de liens et de la bibliothèque. Les modèles TLS d'exécution initiaux et locaux sont
pas affecté par cette option et utilisez toujours le schéma d'origine.

-mword-relocalisations
Ne générer des relocalisations absolues que sur des valeurs de la taille d'un mot (c'est-à-dire R_ARM_ABS32). C'est
activé par défaut sur les cibles (uClinux, SymbianOS) où le runtime loader impose
cette restriction, et quand -fpic or -fPIC est spécifié.

-mfix-cortex-m3-ldrd
Certains cœurs Cortex-M3 peuvent provoquer une corruption des données lorsque les instructions "ldrd" avec
des registres de destination et de base qui se chevauchent sont utilisés. Cette option évite de générer
ces instructions. Cette option est activée par défaut lorsque -mcpu=cortex-m3 is
spécifié.

-accès munaligné
-mno-accès non aligné
Active (ou désactive) la lecture et l'écriture de valeurs 16 et 32 ​​bits à partir d'adresses
qui ne sont pas alignés sur 16 ou 32 bits. Par défaut, l'accès non aligné est désactivé pour tous
pré-ARMv6 et toutes les architectures ARMv6-M, et activé pour toutes les autres architectures. Si
l'accès non aligné n'est pas activé, alors les mots dans les structures de données compressées seront accédés
un octet à la fois.

L'attribut ARM "Tag_CPU_unaligned_access" sera défini dans le fichier objet généré
à vrai ou faux, selon le réglage de cette option. Si non aligné
l'accès est activé, le symbole du préprocesseur "__ARM_FEATURE_UNALIGNED" sera également
Défini.

-mnéon-pour-64bits
Permet d'utiliser Neon pour gérer les opérations scalaires 64 bits. Ceci est désactivé par défaut
étant donné que le coût de déplacement des données des registres principaux vers Neon est élevé.

AVR Options

-mmcu=mcu
Spécifiez les architectures de jeu d'instructions Atmel AVR (ISA) ou le type de MCU.

La valeur par défaut pour cette option est @tie{}"avr2".

GCC prend en charge les appareils AVR et ISA suivants :

"avr2"
Appareils "classiques" avec jusqu'à 8@tie{}Ko de mémoire de programme. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
Appareils "classiques" avec jusqu'à 8@tie{}KiB de mémoire de programme et avec le "MOVW"
instruction. mcu@tie{}= "ata6289", "attiny13", "attiny13a", "attiny2313",
"attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
"attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45", "attiny461",
"attiny461a", "attiny48", "attiny84", "attiny84a", "attiny85", "attiny861",
"attiny861a", "attiny87", "attiny88", "at86rf401".

"avr3"
Appareils "classiques" avec 16@tie{}KiB jusqu'à 64@tie{}KiB de mémoire de programme.
mcu@tie{}= "at43usb355", "at76c711".

"avr31"
Appareils "classiques" avec 128@tie{}KiB de mémoire de programme. mcu@tie{}= "atmega103",
"à43usb320".

"avr35"
Appareils "classiques" avec 16@tie{}KiB jusqu'à 64@tie{}KiB de mémoire programme et avec
l'instruction "MOVW". mcu@tie{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
Appareils « améliorés » avec jusqu'à 8@tie{}Ko de mémoire de programme. mcu@cravate{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "atmega8hva", "atmega8515",
"atmega8535", "atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1",
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
Appareils « améliorés » avec 16@tie{}KiB jusqu'à 64@tie{}KiB de mémoire de programme.
mcu@tie{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
Appareils « améliorés » avec 128@tie{}KiB de mémoire de programme. mcu@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287".

"avr6"
Appareils "améliorés" avec PC 3 octets, c'est-à-dire avec plus de 128@tie{}KiB de programme
mémoire. mcu@tie{}= "atmega2560", "atmega2561".

"avrxmega2"
Appareils "XMEGA" avec plus de 8@tie{}KiB et jusqu'à 64@tie{}KiB de mémoire de programme.
mcu@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".

"avrxmega4"
Appareils "XMEGA" avec plus de 64@tie{}KiB et jusqu'à 128@tie{}KiB de programme
mémoire. mcu@tie{}= "atxmega64a3", "atxmega64d3".

"avrxmega5"
Appareils "XMEGA" avec plus de 64@tie{}KiB et jusqu'à 128@tie{}KiB de programme
mémoire et plus de 64@tie{}Ko de RAM. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Appareils "XMEGA" avec plus de 128@tie{}Ko de mémoire de programme. mcu@cravate{}=
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
Appareils "XMEGA" avec plus de 128@tie{}KiB de mémoire de programme et plus de
64@tie{}Ko de RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u".

"avr1"
Cet ISA est implémenté par le noyau AVR minimal et pris en charge pour l'assembleur uniquement.
mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumulate-args
Accumuler les arguments de fonction sortants et acquérir/libérer l'espace de pile nécessaire pour
arguments de fonction sortants une fois dans le prologue/épilogue de la fonction. Sans cette option,
les arguments sortants sont poussés avant d'appeler une fonction et sautés après.

Popping les arguments après l'appel de fonction peut être coûteux sur AVR de sorte que
accumuler l'espace de la pile peut conduire à des exécutables plus petits car les arguments ont besoin
ne pas être retiré de la pile après un tel appel de fonction.

Cette option peut conduire à une taille de code réduite pour les fonctions qui effectuent plusieurs appels à
fonctions qui obtiennent leurs arguments sur la pile comme des appels à des fonctions de type printf.

-mbranche-coût=sables moins coûteux
Définissez les coûts de succursale pour les instructions de succursale conditionnelles sur sables moins coûteux. Valeurs raisonnables
en sables moins coûteux sont de petits entiers non négatifs. Le coût de branche par défaut est 0.

-mcall-prologues
Les fonctions prologues/épilogues sont développées en tant qu'appels aux sous-programmes appropriés. Code
la taille est plus petite.

-menthe8
Supposons que "int" soit un entier de 8 bits. Cela affecte les tailles de tous les types : un "car" vaut 1
octet, un "int" est de 1 octet, un "long" est de 2 octets et "long long" est de 4 octets. S'il te plaît
notez que cette option n'est pas conforme aux normes C, mais elle se traduit par un plus petit
taille du code.

-mno-interruptions
Le code généré n'est pas compatible avec les interruptions matérielles. La taille du code est plus petite.

-mrelax
Essayez de remplacer "CALL" resp. Instruction "JMP" par le plus court "RCALL" resp. "RJMP"
instructions le cas échéant. La définition de "-mrelax" ajoute simplement l'option "--relax" au
ligne de commande de l'éditeur de liens lorsque l'éditeur de liens est appelé.

La relaxation de saut est effectuée par l'éditeur de liens car les décalages de saut ne sont pas connus avant
le code est localisé. Par conséquent, le code assembleur généré par le compilateur est le même,
mais les instructions de l'exécutable peuvent différer des instructions de l'assembleur
code.

La relaxation doit être activée si des stubs de liaison sont nécessaires, voir la section sur "EIND" et
talons de l'éditeur de liens ci-dessous.

-mappels courts
Cette option a été dépréciée et sera supprimée dans GCC 4.8. Voir "-mrelax" pour un
remplacement.

Utilisez les instructions "RCALL"/"RJMP" même sur les appareils avec 16@tie{}KiB ou plus de programme
mémoire, c'est-à-dire sur les appareils qui ont les instructions "CALL" et "JMP".

-msp8
Traiter le registre de pointeur de pile comme un registre à 8 bits, c'est-à-dire assumer l'octet de poids fort de
le pointeur de pile est zéro. En général, vous n'avez pas besoin de définir cette option à la main.

Cette option est utilisée en interne par le compilateur pour sélectionner et construire des multilibs pour
architectures "avr2" et "avr25". Ces architectures mélangent des appareils avec et sans
"SPH". Pour tout paramètre autre que "-mmcu=avr2" ou "-mmcu=avr25", le pilote du compilateur
ajoutera ou supprimera cette option de la ligne de commande du compilateur proprement dit, car le
le compilateur sait alors si le périphérique ou l'architecture a un pointeur de pile de 8 bits et donc
pas de registre "SPH" ou non.

-mstrict-X
Utilisez le registre d'adresses "X" d'une manière proposée par le matériel. Cela signifie que "X" est
utilisé uniquement dans l'adressage indirect, post-incrémental ou pré-décrémenté.

Sans cette option, le registre "X" peut être utilisé de la même manière que "Y" ou "Z" qui
puis est émulé par des instructions supplémentaires. Par exemple, charger une valeur avec
Adressage "X+const" avec un petit "const < 64" non négatif à un registre Rn is
interprété comme

adw r26, const ; X += const
ld , X ; = *X
sbiw r26, const ; X -= const

-mtiny-pile
Ne modifiez que les 8@tie{}bits inférieurs du pointeur de pile.

"EIND" et appareils avec plus de 128 Ki-octets de Flash

Les pointeurs dans l'implémentation ont une largeur de 16@tie{}bits. L'adresse d'une fonction ou d'un label
est représenté sous forme d'adresse de mot afin que les sauts et appels indirects puissent cibler n'importe quel code
adresse de l'ordre de 64@tie{}mots Ki.

Afin de faciliter le saut indirect sur les appareils avec plus de 128@tie{}Ki octets de
l'espace mémoire du programme, il existe un registre de fonction spécial appelé "EIND" qui sert de
partie la plus significative de l'adresse cible lorsque les instructions "EICAL" ou "EIJMP" sont
utilisé.

Les sauts et appels indirects sur ces appareils sont traités comme suit par le compilateur et sont
sous réserve de certaines limitations :

· Le compilateur ne définit jamais "EIND".

· Le compilateur utilise implicitement "EIND" dans les instructions "EICALL"/"EIJMP" ou peut lire
"EIND" directement afin d'émuler un appel/saut indirect au moyen d'un "RET"
instruction.

· Le compilateur suppose que "EIND" ne change jamais pendant le code de démarrage ou pendant le
application. En particulier, "EIND" n'est pas enregistré/restauré en fonction ou en interruption
prologue/épilogue de routine de service.

· Pour les appels indirects aux fonctions et goto calculé, l'éditeur de liens génère bouts. Talons
sont des tapis de saut parfois aussi appelés trampolines. Ainsi, l'appel/le saut indirect passe à
un tel talon. Le stub contient un saut direct vers l'adresse souhaitée.

· La relaxation de l'éditeur de liens doit être activée pour que l'éditeur de liens génère les stubs
correctement une toute situation. Voir l'option du compilateur "-mrelax" et l'option linler
"--se détendre". Il existe des cas extrêmes où l'éditeur de liens est censé générer des stubs mais
abandonne sans relâchement et sans message d'erreur utile.

· Le script de l'éditeur de liens par défaut est arrangé pour le code avec "EIND = 0". Si le code est supposé
pour travailler pour une configuration avec "EIND != 0", un script d'éditeur de liens personnalisé doit être utilisé dans l'ordre
pour placer les sections dont le nom commence par ".trampolines" dans le segment où
"EIND" pointe vers.

· Le code de démarrage de libgcc ne définit jamais "EIND". Notez que le code de démarrage est un mélange
de code de libgcc et AVR-LibC. Pour l'impact d'AVR-LibC sur "EIND", voir l'AVR-
Manuel d'utilisation de LibC ("http://nongnu.org/avr-libc/user-manual/").

· Il est légitime que le code de démarrage spécifique à l'utilisateur configure "EIND" tôt, par exemple en
moyen de code d'initialisation situé dans la section ".init3". Un tel code s'exécute avant
code de démarrage général qui initialise la RAM et appelle les constructeurs, mais après le bit de
code de démarrage d'AVR-LibC qui définit "EIND" sur le segment où se trouve la table vectorielle
situé.

#comprendre

vide statique
__attribute__((section(".init3"),nu,utilisé,no_instrument_function))
init3_set_eind (vide)
{
__asm ​​volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND) : "r24","memory");
}

Le symbole "__trampolines_start" est défini dans le script de l'éditeur de liens.

· Les stubs sont générés automatiquement par l'éditeur de liens si les deux conditions suivantes sont
rencontré:

-
(court pour générer bouts) ainsi:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
au contrôle le segment où se trouvent les talons.

· Le compilateur émet de tels modificateurs « gs » pour les étiquettes de code dans les situations suivantes :

-
-
- -mcall-prologues>
option de ligne de commande.

-
tableaux, vous pouvez spécifier le -fno-jump-tables option de ligne de commande.

-
-
· Sauter à des adresses non symboliques comme c'est le cas ne sauraient prise en charge:

int main (void)
{
/* Fonction d'appel à l'adresse de mot 0x2 */
return ((int (*) (void)) 0x2) ();
}

Au lieu de cela, un stub doit être configuré, c'est-à-dire que la fonction doit être appelée via un symbole
("func_4" dans l'exemple) :

int main (void)
{
extern int func_4 (vide);

/* Fonction d'appel à l'adresse d'octet 0x4 */
return fun_4();
}

et l'application soit liée avec "-Wl,--defsym,func_4=0x4". Alternativement, "func_4"
peut être défini dans le script de l'éditeur de liens.

Gestion des registres de fonctions spéciales "RAMPD", "RAMPX", "RAMPY" et "RAMPZ"

Certains appareils AVR prennent en charge des mémoires supérieures à la plage de 64@tie{}KiB accessible
avec des pointeurs 16 bits. Pour accéder aux emplacements de mémoire en dehors de cette plage de 64@tie{}KiB, le
le contenu d'un registre "RAMP" est utilisé comme partie haute de l'adresse : Le "X", "Y", "Z"
le registre d'adresses est concaténé avec la fonction spéciale "RAMPX", "RAMPY", "RAMPZ"
inscrivez-vous, respectivement, pour obtenir une adresse large. De même, "RAMPD" est utilisé avec
adressage direct.

· Le code de démarrage initialise les registres de fonction spéciale "RAMP" à zéro.

· Si un AVR Nommé Adresse Espaces, nommés propos espace autre que générique ou "__flash" est
utilisé, alors "RAMPZ" est défini comme nécessaire avant l'opération.

· Si l'appareil prend en charge une RAM supérieure à 64@tie{KiB} et que le compilateur doit changer
"RAMPZ" pour accomplir une opération, "RAMPZ" est remis à zéro après l'opération.

· Si l'appareil est livré avec un registre "RAMP" spécifique, le prologue/épilogue ISR
enregistre/restaure ce SFR et l'initialise avec zéro au cas où le code ISR pourrait
(implicitement) l'utiliser.

· La RAM supérieure à 64@tie{KiB} n'est pas prise en charge par GCC pour les cibles AVR. Si tu utilises
assembleur en ligne pour lire à partir d'emplacements en dehors de la plage d'adresses 16 bits et modifier
l'un des registres "RAMP", vous devez le remettre à zéro après l'accès.

Macros intégrées à l'AVR

GCC définit plusieurs macros intégrées afin que le code utilisateur puisse tester la présence ou
absence de fonctionnalités. Presque toutes les macros intégrées suivantes sont déduites de l'appareil
capacités et donc déclenché par l'option de ligne de commande "-mmcu=".

Pour encore plus de macros intégrées spécifiques à l'AVR, voir AVR Nommé Adresse Les espaces ainsi que AVR Encastré
Les fonctions.

"__AVR_ARCH__"
Macro intégrée qui se résout en un nombre décimal qui identifie l'architecture et
dépend du "-mmcu=mcu" option. Les valeurs possibles sont :

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

en mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
« avrxmega2 », « avrxmega4 », « avrxmega5 », « avrxmega6 », « avrxmega7 », respectivement. Si mcu
spécifie un périphérique, cette macro intégrée est définie en conséquence. Par exemple, avec
"-mmcu=atmega8" la macro sera définie sur 4.

"__AVR_Appareil__"
Paramètre "-mmcu=dispositif" définit cette macro intégrée qui reflète le nom de l'appareil.
Par exemple, "-mmcu=atmega8" définit la macro intégrée "__AVR_ATmega8__",
"-mmcu=attiny261a" définit "__AVR_ATtiny261A__", etc.

Les noms des macros intégrées suivent le schéma "__AVR_Appareil__" De Appareil est
nom de l'appareil selon le manuel d'utilisation de l'AVR. La différence entre Appareil dans le intégré
macro et dispositif dans "-mmcu=dispositif" est que ce dernier est toujours en minuscule.

If dispositif n'est pas un appareil mais seulement une architecture de base comme "avr51", cette macro va
pas être défini.

"__AVR_XMEGA__"
L'appareil/l'architecture appartient à la famille d'appareils XMEGA.

"__AVR_HAVE_ELPM__"
L'appareil a l'instruction "ELPM".

"__AVR_HAVE_ELPMX__"
L'appareil a le "ELPM Rn,Z" et "ELPM Rn,Z+" des instructions.

"__AVR_HAVE_MOVW__"
L'appareil dispose de l'instruction "MOVW" pour effectuer des mouvements de registre-registre de 16 bits.

"__AVR_HAVE_LPMX__"
L'appareil a le "LPM Rn,Z" et "LPM Rn,Z+" des instructions.

"__AVR_HAVE_MUL__"
L'appareil dispose d'un multiplicateur matériel.

"__AVR_HAVE_JMP_CALL__"
L'appareil dispose des instructions "JMP" et "CALL". C'est le cas des appareils avec
au moins 16@tie{}KiB de mémoire programme et si "-mshort-calls" n'est pas défini.

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
L'appareil a les instructions "EIJMP" et "EICAL". C'est le cas des appareils
avec plus de 128@tie{}Ko de mémoire programme. Cela signifie également que le programme
compteur (PC) a une largeur de 3@tie{}octets.

"__AVR_2_BYTE_PC__"
Le compteur de programme (PC) a une largeur de 2@tie{}octets. C'est le cas pour les appareils jusqu'à
128@tie{}Ko de mémoire de programme.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Le registre du pointeur de pile (SP) est traité comme un registre à 8 bits respectivement 16 bits par
le compilateur. La définition de ces macros est affectée par "-mtiny-stack".

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
L'appareil possède le registre de fonction spéciale SPH (high part of stack pointer) ou a
un pointeur de pile de 8 bits, respectivement. La définition de ces macros est affectée par
"-mmcu=" et dans les cas de "-mmcu=avr2" et "-mmcu=avr25" également par "-msp8".

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
L'appareil dispose du registre de fonction spéciale "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
respectivement.

"__NO_INTERRUPTS__"
Cette macro reflète l'option de ligne de commande "-mno-interrupts".

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Certains appareils AVR (AT90S8515, ATmega103) ne doivent pas sauter les instructions 32 bits en raison d'un
erratum matériel. Les instructions de saut sont "SBRS", "SBRC", "SBIS", "SBIC" et "CPSE".
La deuxième macro n'est définie que si "__AVR_HAVE_JMP_CALL__" est également défini.

"__AVR_SFR_OFFSET__=décalage"
Instructions pouvant adresser directement les registres de fonctions spéciales d'E/S comme "IN",
"OUT", "SBI", etc. peut utiliser une adresse différente comme si elle était adressée par une instruction à
accéder à la RAM comme "LD" ou "STS". Ce décalage dépend de l'architecture de l'appareil et a
à soustraire de l'adresse RAM afin d'obtenir l'adresse I/O@tie{} respective.

"__AVEC_AVRLIBC__"
Le compilateur est configuré pour être utilisé avec AVR-Libc. Voir le
Option de configuration "--with-avrlibc".

Blackfin Options

-mcpu=cpu[-sirévision]
Spécifie le nom du processeur Blackfin cible. Actuellement, cpu peut être l'un des
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. L'optionnel sirévision précise le
révision du silicium du processeur cible Blackfin. Toutes les solutions de contournement disponibles pour le
la révision ciblée du silicium sera activée. Si sirévision is aucun, aucune solution de contournement n'est
activée. Si sirévision is tous, toutes les solutions de contournement pour le processeur ciblé seront
activée. La macro "__SILICON_REVISION__" est définie sur deux chiffres hexadécimaux
représentant les nombres majeurs et mineurs dans la révision du silicium. Si sirévision is
aucun, le "__SILICON_REVISION__" n'est pas défini. Si sirévision is tous,
"__SILICON_REVISION__" est défini comme étant 0xffff. Si cette option sirévision n'est pas
utilisé, GCC assume la dernière révision connue du silicium du Blackfin ciblé
processeur.

Support pour bf561 est incomplet. Pour bf561, Seule la macro du processeur est définie.
Sans cette option, bf532 est utilisé comme processeur par défaut. Le correspondant
macros de processeur prédéfinies pour cpu est à définir. Et pour bfin-elfe chaîne d'outils,
cela provoque la liaison du BSP matériel fourni par libgloss si -msim n'est pas
donné.

-msim
Spécifie que le programme sera exécuté sur le simulateur. Cela provoque le simulateur
BSP fourni par libgloss pour être lié. Cette option n'a d'effet que pour bfin-elfe
chaîne d'outils. Certaines autres options, telles que -mi-bibliothèque-partagée ainsi que -mfdpic, impliquer
-msim.

-momit-leaf-frame-pointeur
Ne gardez pas le pointeur de cadre dans un registre pour les fonctions feuilles. Cela évite le
instructions pour enregistrer, configurer et restaurer les pointeurs de trame et créer un registre supplémentaire
disponible dans les fonctions feuilles. L'option -fomit-frame-pointeur supprime le cadre
pointeur pour toutes les fonctions, ce qui peut rendre le débogage plus difficile.

-mspecld-anomalie
Lorsqu'il est activé, le compilateur s'assurera que le code généré ne contient pas
charges spéculatives après les instructions de saut. Si cette option est utilisée,
"__WORKAROUND_SPECULATIVE_LOADS" est défini.

-mno-specld-anomalie
Ne générez pas de code supplémentaire pour empêcher les charges spéculatives de se produire.

-mcsync-anomalie
Lorsqu'il est activé, le compilateur s'assurera que le code généré ne contient pas de CSYNC
ou les instructions SSYNC trop tôt après les branchements conditionnels. Si cette option est utilisée,
"__WORKAROUND_SPECULATIVE_SYNCS" est défini.

-mno-csync-anomalie
Ne générez pas de code supplémentaire pour empêcher les instructions CSYNC ou SSYNC de se produire également
peu de temps après un branchement conditionnel.

-mlow-64k
Lorsqu'il est activé, le compilateur est libre de tirer parti de la connaissance que l'ensemble
programme s'inscrit dans le faible 64k de mémoire.

-mno-bas-64k
Supposons que le programme est arbitrairement grand. C'est la valeur par défaut.

-mstack-check-l1
Effectuez une vérification de la pile à l'aide des informations placées dans la mémoire du bloc-notes L1 par uClinux
noyau.

-mi-bibliothèque-partagée
Générez du code qui prend en charge les bibliothèques partagées via la méthode d'ID de bibliothèque. Ceci permet
pour exécuter sur place et bibliothèques partagées dans un environnement sans mémoire virtuelle
la gestion. Cette option implique -fPIC. Avec un bfin-elfe cible, cette option implique
-msim.

-mno-id-bibliothèque-partagée
Générez du code qui ne suppose pas que des bibliothèques partagées basées sur l'ID sont utilisées. C'est
le défaut.

-mleaf-id-bibliothèque-partagée
Générer du code qui prend en charge les bibliothèques partagées via la méthode d'ID de bibliothèque, mais suppose
que cette bibliothèque ou cet exécutable ne sera lié à aucune autre bibliothèque partagée d'ID.
Cela permet au compilateur d'utiliser un code plus rapide pour les sauts et les appels.

-mno-leaf-id-bibliothèque-partagée
Ne supposez pas que le code en cours de compilation ne sera lié à aucune bibliothèque partagée d'ID.
Un code plus lent sera généré pour les insns de saut et d'appel.

-mshared-library-id=n
A spécifié le numéro d'identification de la bibliothèque partagée basée sur l'ID en cours de compilation.
Spécifier une valeur de 0 générera un code plus compact, spécifier d'autres valeurs
forcer l'attribution de ce numéro à la bibliothèque actuelle mais il n'y a plus d'espace ou
gagner du temps que d'omettre cette option.

-msep-données
Générer du code qui permet au segment de données d'être situé dans une zone différente de la mémoire
du segment de texte. Cela permet d'exécuter sur place dans un environnement sans
gestion de la mémoire virtuelle en éliminant les relocalisations par rapport à la section de texte.

-mno-sep-données
Générez du code qui suppose que le segment de données suit le segment de texte. C'est
le défaut.

-mlong-appels
-mno-long-appels
Indique au compilateur d'effectuer des appels de fonction en chargeant d'abord l'adresse du
fonction dans un registre puis en effectuant un appel de sous-programme sur ce registre. Cette
est nécessaire si la fonction cible se situe en dehors de la plage d'adressage de 24 bits de
la version basée sur le décalage de l'instruction d'appel de sous-programme.

Cette fonctionnalité n'est pas activée par défaut. En précisant -mno-long-appels restaurera le
comportement par défaut. Notez que ces commutateurs n'ont aucun effet sur la façon dont le compilateur génère
code pour gérer les appels de fonction via des pointeurs de fonction.

-mfast-fp
Lien avec la bibliothèque à virgule flottante rapide. Cette bibliothèque assouplit certains des IEEE
les règles de la norme à virgule flottante pour vérifier les entrées par rapport à Not-a-Number (NAN), dans le
intérêt de la performance.

-minline-plt
Activer l'incorporation des entrées PLT dans les appels de fonction à des fonctions inconnues
lier localement. Il n'a aucun effet sans -mfdpic.

-mmulticœur
Créez une application autonome pour le processeur multicœur Blackfin. Fichiers de démarrage appropriés et
les scripts de liens seront utilisés pour prendre en charge le multicœur. Cette option définit
"__BFIN_MULTICORE". Il ne peut être utilisé qu'avec -mcpu=bf561[-sirévision]. Ça peut être utilisé
avec -mcorea or -mcoreb. S'il est utilisé sans -mcorea or -mcoreb, unique
Le modèle de programmation application/dual core est utilisé. Dans ce modèle, la fonction principale de
Le noyau B doit être nommé coreb_main. S'il est utilisé avec -mcorea or -mcoreb, un expert en
application par modèle de programmation de base est utilisée. Si cette option n'est pas utilisée, un seul
modèle de programmation d'application de base est utilisé.

-mcorea
Construire une application autonome pour le noyau A de BF561 lors de l'utilisation d'une application par cœur
modèle de programmation. Des fichiers de démarrage et des scripts de liens appropriés seront utilisés pour prendre en charge Core A.
Cette option définit "__BFIN_COREA". Il doit être utilisé avec -mmulticœur.

-mcoreb
Construire une application autonome pour le noyau B de BF561 lors de l'utilisation d'une application par noyau
modèle de programmation. Des fichiers de démarrage et des scripts de liens appropriés seront utilisés pour prendre en charge Core B.
Cette option définit "__BFIN_COREB". Lorsque cette option est utilisée, coreb_main doit être
utilisé à la place de principal. Il doit être utilisé avec -mmulticœur.

-msdram
Créez une application autonome pour SDRAM. Les fichiers de démarrage et les scripts de liens appropriés seront
utilisé pour mettre l'application dans la SDRAM. Le chargeur doit initialiser la SDRAM avant le chargement
l'application dans la SDRAM. Cette option définit "__BFIN_SDRAM".

-micplb
Supposons que les ICPLB soient activés au moment de l'exécution. Cela a un effet sur certaines anomalies
solutions de contournement. Pour les cibles Linux, la valeur par défaut est de supposer que les ICPLB sont activés ; pour
applications autonomes, la valeur par défaut est désactivée.

C6X Options

-mars=prénom
Ceci spécifie le nom de l'architecture cible. GCC utilise ce nom pour déterminer
quel type d'instructions il peut émettre lors de la génération du code assembleur. Permis
les noms sont: c62x, c64x, c64x+, c67x, c67x+, c674x.

-mbig-endian
Générez du code pour une cible big-endian.

-mlittle-endian
Générer du code pour une cible little-endian. C'est la valeur par défaut.

-msim
Choisissez les fichiers de démarrage et le script de l'éditeur de liens adaptés au simulateur.

-msdata=par défaut
Mettez de petites données globales et statiques dans le .nearddata section, qui est signalée par
inscrire "B14". Mettez de petites données globales et statiques non initialisées dans le .bss section,
qui jouxte le .nearddata section. Mettez de petites données en lecture seule dans le .rodata
section. Les sections correspondantes utilisées pour les gros morceaux de données sont .fardata, .far
ainsi que .const.

-msdata=tout
Mettez toutes les données, pas seulement les petits objets, dans les sections réservées aux petites données, et
utiliser l'adressage relatif au registre "B14" pour y accéder.

-msdata=aucun
N'utilisez pas les sections réservées aux petites données et utilisez des adresses absolues pour
accéder à toutes les données. Mettez toutes les données globales et statiques initialisées dans le .fardata section,
et toutes les données non initialisées dans le .far section. Mettez toutes les données constantes dans le .const
.

CRIS Options

Ces options sont définies spécifiquement pour les ports CRIS.

-mars=type d'architecture
-mcpu=type d'architecture
Générer du code pour l'architecture spécifiée. Les choix pour type d'architecture
v3, v8 ainsi que v10 pour respectivement ETRAX 4, ETRAX 100 et ETRAX 100 LX. La valeur par défaut est v0
sauf pour cris-axis-linux-gnu, où la valeur par défaut est v10.

-mtune=type d'architecture
Accordez à type d'architecture tout ce qui est applicable sur le code généré, à l'exception de
l'ABI et le jeu d'instructions disponibles. Les choix pour type d'architecture
le même que pour -mars=type d'architecture.

-mmax-stack-frame=n
Avertir lorsque le cadre de pile d'une fonction dépasse n octets.

-metrax4
-metrax100
Les options -metrax4 ainsi que -metrax100 sont des synonymes de -mars=v3 ainsi que -mars=v8
respectivement.

-mmul-bug-solution de contournement
-mno-mul-bug-solution de contournement
Contourner un bogue dans les instructions « muls » et « mulu » pour les modèles de processeur où il
s'applique. Cette option est active par défaut.

-mpdebug
Activez les informations détaillées relatives au débogage spécifiques à CRIS dans le code assembleur. Cette
option a également pour effet de désactiver le #NO_APP indicateur de code formaté au
assembleur au début du fichier d'assemblage.

-mcc-init
N'utilisez pas les résultats du code de condition de l'instruction précédente ; toujours émettre comparer et
testez les instructions avant d'utiliser les codes de condition.

-mno-effets secondaires
N'émettez pas d'instructions avec effets secondaires dans des modes d'adressage autres que post-
incrément.

-mstack-aligner
-mno-stack-aligner
-mdata-aligner
-mno-data-aligner
-mconst-aligner
-mno-const-aligner
Ces options (pas d'options) organisent (éliminent les arrangements) pour le cadre de pile,
données individuelles et constantes à aligner pour la taille d'accès aux données unique maximale
pour le modèle de processeur choisi. La valeur par défaut consiste à organiser un alignement 32 bits. ABI
les détails tels que la disposition de la structure ne sont pas affectés par ces options.

-m32 bits
-m16 bits
-m8 bits
Semblables aux options stack-data- et const-align ci-dessus, ces options organisent
stack-frame, les données inscriptibles et les constantes doivent toutes être alignées sur 32 bits, 16 bits ou 8 bits.
La valeur par défaut est l'alignement 32 bits.

-mno-prologue-épilogue
-mprologue-épilogue
Avec -mno-prologue-épilogue, la fonction normale prologue et épilogue qui a mis en place
le cadre de pile est omis et aucune instruction de retour ou séquence de retour n'est
généré dans le code. Utilisez cette option uniquement avec une inspection visuelle du
code compilé : aucun avertissement ou erreur n'est généré lorsque les registres enregistrés par l'appel doivent être
enregistré, ou le stockage pour la variable locale doit être alloué.

-mno-gotplt
-mgotplt
Avec -fpic ainsi que -fPIC, ne générez pas (générez) des séquences d'instructions qui se chargent
adresses pour les fonctions de la partie PLT du GOT plutôt que (traditionnel sur d'autres
architectures) appels au PLT. La valeur par défaut est -mgotplt.

-moi
L'option no-op héritée n'est reconnue qu'avec les cris-axis-elf et cris-axis-linux-gnu
cibles.

-mlinux
Ancienne option no-op reconnue uniquement avec la cible cris-axis-linux-gnu.

-sim
Cette option, reconnue pour le cris-axis-elf s'arrange pour faire le lien avec les entrées-sorties
fonctions d'une bibliothèque de simulateurs. Code, données initialisées et données initialisées à zéro
sont attribués consécutivement.

-sim2
Comme -sim, mais passez les options de l'éditeur de liens pour localiser les données initialisées à 0x40000000 et zéro-
données initialisées à 0x80000000.

CR16 Options

Ces options sont définies spécifiquement pour les ports CR16.

-mmac
Activer l'utilisation des instructions de multiplication-accumulation. Désactivé par défaut.

-mcr16cplus
-mcr16c
Générez du code pour l'architecture CR16C ou CR16C+. L'architecture CR16C+ est par défaut.

-msim
Liens vers la bibliothèque libsim.a qui est compatible avec le simulateur. Applicable à l'elfe
compilateur uniquement.

-menthe32
Choisissez le type d'entier sur 32 bits.

-mbit-ops
Génère des instructions sbit/cbit pour les manipulations de bits.

-mdata-modèle=modèle
Choisissez un modèle de données. Les choix pour modèle près, loin or moyenne. moyenne est par défaut.
Toutefois, loin n'est pas valide lorsque l'option -mcr16c est choisie car l'architecture CR16C ne
prend en charge le modèle de données lointain.

Darwin Options

Ces options sont définies pour toutes les architectures exécutant le système d'exploitation Darwin.

FSF GCC sur Darwin ne crée pas de fichiers objet "gros" ; il va créer un fichier objet pour
l'architecture unique pour laquelle il a été conçu. Le GCC d'Apple sur Darwin crée
fichiers "fat" si multiples -cambre les options sont utilisées ; il le fait en exécutant le compilateur ou
linker plusieurs fois et joindre les résultats avec lipo.

Le sous-type du fichier créé (comme ppc7400 or ppc970 or i686) est déterminé par le
des indicateurs qui spécifient l'ISA que GCC cible, comme -mcpu or -MarsL’
-force_cpusubtype_ALL L'option peut être utilisée pour outrepasser cela.

Les outils Darwin varient dans leur comportement lorsqu'ils sont présentés avec une incompatibilité ISA. Les
assembleur, as, n'autorisera l'utilisation que d'instructions valables pour le sous-type de
le fichier qu'il génère, vous ne pouvez donc pas mettre d'instructions 64 bits dans un ppc750 fichier objet.
L'éditeur de liens pour les bibliothèques partagées, /usr/bin/libtool, échouera et affichera une erreur si demandé
pour créer une bibliothèque partagée avec un sous-type moins restrictif que ses fichiers d'entrée (par
exemple, essayer de mettre un ppc970 fichier objet dans un ppc7400 une bibliothèque). L'éditeur de liens pour
exécutables, ld, donnera discrètement à l'exécutable le sous-type le plus restrictif de l'un des
ses fichiers d'entrée.

-Fdir
Ajouter le répertoire du framework dir en tête de la liste des répertoires à rechercher
pour les fichiers d'en-tête. Ces répertoires sont entrelacés avec ceux spécifiés par -I
options et sont scannés dans un ordre de gauche à droite.

Un répertoire de framework est un répertoire contenant des frameworks. Un cadre est un
répertoire avec un "En-têtes" (facultatif) "En-têtes privés" répertoire qu'il contient directement
qui se termine par ".cadre". Le nom d'un framework est le nom de ce répertoire
à l'exclusion du ".cadre". Les en-têtes associés au cadre se trouvent dans l'un des
ces deux répertoires, avec "En-têtes" recherché en premier. Un sous-cadre est un
répertoire de framework qui se trouve dans un framework "Cadres" annuaire. Comprend de
les en-têtes de sous-framework ne peuvent apparaître que dans un en-tête d'un framework qui contient le
sous-framework, ou dans un en-tête de sous-framework frère. Deux sous-cadres sont frères si
ils se produisent dans le même cadre. Un sous-framework ne doit pas avoir le même nom qu'un
cadre, un avertissement sera émis en cas de violation. Actuellement un sous-cadre
ne peut pas avoir de sous-cadres, à l'avenir, le mécanisme peut être étendu pour prendre en charge
cette. Les cadres standards peuvent être trouvés dans "/Système/Bibliothèque/Frameworks" ainsi que
"/Bibliothèque/Frameworks". Un exemple d'inclusion ressemble à "#include ",
De Framework désigne le nom du framework et header.h se trouve dans le
"En-têtes privés" or "En-têtes" répertoire.

-iframeworkdir
Comme -F sauf que le répertoire est traité comme un répertoire système. La principale différence
entre ce -iframework ainsi que -F est-ce avec -iframework le compilateur n'avertit pas
sur les constructions contenues dans les fichiers d'en-tête trouvés via dir. Cette option est valide
uniquement pour la famille de langages C.

-guidée
Émettre des informations de débogage pour les symboles utilisés. Pour le format de débogage STABS,
cela permet -felimate-unused-debug-symbols. C'est par défaut sur ON.

-gful
Émettre des informations de débogage pour tous les symboles et types.

-mmacosx-version-min=version
La première version de MacOS X sur laquelle cet exécutable s'exécutera est version. Typique
valeurs de version inclure 10.1, 10.2 et 10.3.9.

Si le compilateur a été conçu pour utiliser les en-têtes du système par défaut, alors la valeur par défaut pour
cette option est la version du système sur laquelle le compilateur s'exécute, sinon le
par défaut est de faire des choix compatibles avec autant de systèmes et de bases de code que
de qualité.

-mkernel
Activez le mode de développement du noyau. Les -mkernel ensembles d'options -statique, -fno-commun,
-fno-cxa-atexit, -fno-exceptions, -fno-non-appel-exceptions, -fapple-kext, -fno-faible
ainsi que -fno-rtti le cas échéant. Ce mode définit également -mno-altivec, -msoft-float,
-fno-intégré ainsi que -mlong-branche pour les cibles PowerPC.

-mone-octet-bool
Remplacer les valeurs par défaut pour bool de sorte que taille de (bool) == 1. Par défaut taillede(bool) is 4
lors de la compilation pour Darwin/PowerPC et 1 lors de la compilation pour Darwin/x86, cette option
n'a aucun effet sur x86.

Mise en garde: La -mone-octet-bool Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. L'utilisation de ce commutateur peut nécessiter
recompiler tous les autres modules d'un programme, y compris les bibliothèques système. Utilisez ceci
basculer pour se conformer à un modèle de données autre que celui par défaut.

-mfix-et-continuer
-fixer-et-continuer
-findirect-données
Générez du code adapté à un développement rapide. Nécessaire pour permettre à gdb de
charger dynamiquement les fichiers ".o" dans les programmes déjà en cours d'exécution. -findirect-données ainsi que
-fixer-et-continuer sont fournis pour la compatibilité descendante.

-all_load
Charge tous les membres des bibliothèques d'archives statiques. Voir l'homme ld(1) pour plus d'informations.

-arch_errors_fatal
Les erreurs liées aux fichiers ayant une mauvaise architecture sont fatales.

-bind_at_load
Le fichier de sortie est marqué de telle sorte que l'éditeur de liens dynamique lie tous
références non définies lors du chargement ou du lancement du fichier.

-paquet
Produisez un fichier au format de bundle Mach-o. Voir l'homme ld(1) pour plus d'informations.

-chargeur_bundle exécutable
Cette option spécifie le exécutable qui chargera le fichier de sortie de construction en cours
lié. Voir l'homme ld(1) pour plus d'informations.

-liblib dynamique
Une fois cette option passée, GCC produira une bibliothèque dynamique au lieu d'un exécutable
lors de la liaison, en utilisant le Darwin libtool commander.

-force_cpusubtype_ALL
Cela fait que le fichier de sortie de GCC a le TOUTES sous-type, au lieu d'un contrôlé par
le -mcpu or -Mars option.

-client_admissible nom_client
-Nom du client
-compatibilité_version
-version actuelle
-bande_morte
-fichier-dépendance
-dylib_file
-dylinker_nom_installation
-dynamique
-liste_symboles_exportés
-liste de fichiers
-flat_espace de noms
-force_flat_espace de noms
-headerpad_max_install_names
-image_base
-initialisation
-nom_installation
-keep_private_externs
-multi_module
-multiplier_défini
-multiply_defined_inutilisé
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-noprebind
-noseglinkedit
-pagezero_size
-préfixer
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-sectalign
-sectobjectsymboles
-pourquoi charger
-seg1addr
-sectCreate
-sectobjectsymboles
-secteur
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-module_single
-statique
-sous_bibliothèque
-sous_parapluie
-twolevel_namespace
-parapluie
-indéfini
-liste_de_symboles_non exportés
-weak_reference_mismatches
-ce qui est chargé
Ces options sont transmises à l'éditeur de liens Darwin. La page de manuel de l'éditeur de liens Darwin décrit
eux en détail.

DÉC Alpha Options

Ces -m des options sont définies pour les implémentations DEC Alpha :

-mno-soft-float
-msoft-float
Utiliser (ne pas utiliser) les instructions matérielles à virgule flottante pour la virgule flottante
opérations. Lorsque -msoft-float est spécifié, fonctionne dans libgcc.a sera utilisé pour
effectuer des opérations en virgule flottante. À moins qu'elles ne soient remplacées par des routines qui imitent
les opérations à virgule flottante, ou compilées de manière à appeler de telles émulations
routines, ces routines émettront des opérations à virgule flottante. Si vous compilez
pour un Alpha sans opérations en virgule flottante, vous devez vous assurer que la bibliothèque est
construit pour ne pas les appeler.

Notez que les implémentations Alpha sans opérations à virgule flottante doivent avoir
registres à virgule flottante.

-mfp-reg
-mno-fp-regs
Générez du code qui utilise (n'utilise pas) l'ensemble de registres à virgule flottante. -mno-fp-regs
implique -msoft-float. Si le jeu de registres à virgule flottante n'est pas utilisé,
les opérandes sont passés dans des registres d'entiers comme s'il s'agissait d'entiers et de virgule flottante
les résultats sont passés en $0 au lieu de $f0. Il s'agit d'une séquence d'appel non standard, donc
toute fonction avec un argument à virgule flottante ou une valeur de retour appelée par le code compilé
avec -mno-fp-regs doit également être compilé avec cette option.

Une utilisation typique de cette option est la construction d'un noyau qui n'utilise pas, et a donc besoin
pas enregistrer et restaurer, tous les registres à virgule flottante.

-mieee
L'architecture Alpha implémente un matériel à virgule flottante optimisé pour un maximum
performance. Il est principalement conforme à la norme à virgule flottante IEEE. Cependant,
pour une conformité totale, une assistance logicielle est requise. Cette option génère du code
code entièrement conforme à la norme IEEE sauf que l' inexact-drapeau n'est pas maintenu (voir ci-dessous).
Si cette option est activée, la macro du préprocesseur "_IEEE_FP" est définie lors
compilation. Le code résultant est moins efficace mais est capable de prendre en charge correctement
nombres dénormalisés et valeurs IEEE exceptionnelles telles que pas un nombre et plus/moins
infini. D'autres compilateurs Alpha appellent cette option -ieee_with_no_inexact.

-mieee-avec-inexact
C'est comme -mieee sauf que le code généré maintient également l'IEEE inexact-drapeau.
L'activation de cette option entraîne la mise en œuvre du code généré par IEEE entièrement conforme
math. En plus de "_IEEE_FP", "_IEEE_FP_EXACT" est défini comme une macro de préprocesseur.
Sur certaines implémentations Alpha, le code résultant peut s'exécuter beaucoup plus lentement que
le code généré par défaut. Comme il y a très peu de code qui dépend du
inexact-drapeau, vous ne devez normalement pas spécifier cette option. Appel d'autres compilateurs Alpha
cette option -ieee_with_inexact.

-mfp-trap-mode=mode piège
Cette option contrôle les interruptions liées à la virgule flottante qui sont activées. Autre Alpha
les compilateurs appellent cette option -fptm mode piège. Le mode piège peut être réglé sur l'un des quatre
valeurs:

n Il s'agit du paramètre par défaut (normal). Les seuls pièges activés sont les
ceux qui ne peuvent pas être désactivés dans le logiciel (par exemple, la division par zéro trap).

u En plus des pièges activés par n, les pièges à sous-verse sont également activés.

su Comme u, mais les instructions sont marquées pour être sûres pour l'achèvement du logiciel (voir
Manuel d'architecture Alpha pour plus de détails).

sur Comme su, mais les interruptions inexactes sont également activées.

-mfp-arrondi-mode=mode d'arrondi
Sélectionne le mode d'arrondi IEEE. D'autres compilateurs Alpha appellent cette option -fprm
mode d'arrondiL’ mode d'arrondi peut être l'un des :

n Mode d'arrondi IEEE normal. Les nombres à virgule flottante sont arrondis au plus proche
numéro de machine ou vers le numéro de machine pair en cas d'égalité.

m Arrondir vers moins l'infini.

c Mode d'arrondi haché. Les nombres à virgule flottante sont arrondis vers zéro.

d Mode d'arrondi dynamique. Un champ dans le registre de contrôle à virgule flottante (fpcr, Voir
Manuel de référence de l'architecture Alpha) contrôle le mode d'arrondi en vigueur. Le C
la bibliothèque initialise ce registre pour l'arrondi vers plus l'infini. Ainsi,
sauf si votre programme modifie le fpcr, d correspond à arrondir vers plus
infini.

-mtrap-précision=piège-précision
Dans l'architecture Alpha, les traps à virgule flottante sont imprécis. Cela signifie sans
assistance logicielle, il est impossible de récupérer d'un piège flottant et programmer
l'exécution doit normalement être terminée. GCC peut générer du code qui peut aider
les gestionnaires d'interruptions du système d'exploitation pour déterminer l'emplacement exact qui a causé un
piège à virgule flottante. Selon les exigences d'une application, différentes
les niveaux de précisions peuvent être sélectionnés :

p Précision du programme. Cette option est la valeur par défaut et signifie qu'un gestionnaire d'interruptions ne peut
identifier quel programme a causé une exception à virgule flottante.

f Précision de la fonction. Le gestionnaire d'interruptions peut déterminer la fonction qui a provoqué un
exception à virgule flottante.

i Précision des instructions. Le gestionnaire de pièges peut déterminer l'instruction exacte qui
a causé une exception à virgule flottante.

D'autres compilateurs Alpha fournissent les options équivalentes appelées -scope_safe ainsi que
-Resomption_safe.

-miee-conforme
Cette option marque le code généré comme conforme IEEE. Vous ne devez pas utiliser cette option
sauf si vous précisez également -mtrap-précision=i et soit -mfp-trap-mode=su or
-mfp-trap-mode=sui. Son seul effet est d'émettre la ligne .flag 48 dans la fonction
prologue du fichier d'assemblage généré. Sous DEC Unix, cela a pour effet que
Les routines de bibliothèque mathématique conformes à l'IEEE seront liées.

-mbuild-constantes
Normalement, GCC examine une constante entière de 32 ou 64 bits pour voir s'il peut la construire
à partir de constantes plus petites en deux ou trois instructions. S'il ne le peut pas, il affichera le
constante en tant que littéral et générer du code pour le charger à partir du segment de données au moment de l'exécution.

Utilisez cette option pour demander à GCC de construire TOUTE constantes entières utilisant du code, même si
il faut plus d'instructions (le maximum est de six).

Vous utiliserez généralement cette option pour créer un chargeur dynamique de bibliothèque partagée. Lui-même
une bibliothèque partagée, il doit se déplacer en mémoire avant de pouvoir trouver les variables
et des constantes dans son propre segment de données.

-malpha-comme
-mgaz
Sélectionnez s'il faut générer le code à assembler par l'assembleur fourni par le fournisseur
(-malpha-comme) ou par l'assembleur GNU -mgaz.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-mmax
-mno-max
Indiquez si GCC doit générer du code pour utiliser les options BWX, CIX, FIX et MAX
ensembles d'instructions. La valeur par défaut est d'utiliser les jeux d'instructions pris en charge par la CPU
type spécifié via -mcpu= option ou celle du CPU sur lequel GCC a été construit si aucune n'était
spécifié.

-mfloat-vax
-mfloat-ieee
Générer du code qui utilise (n'utilise pas) l'arithmétique à virgule flottante VAX F et G à la place
d'IEEE simple et double précision.

-mexplicit-relocs
-mno-explicite-relocs
Les assembleurs Alpha plus anciens ne fournissaient aucun moyen de générer des relocalisations de symboles, sauf via
macro assembleur. L'utilisation de ces macros ne permet pas une planification optimale des instructions.
GNU binutils à partir de la version 2.12 prend en charge une nouvelle syntaxe qui permet au compilateur de
marquer explicitement quelles délocalisations doivent s'appliquer à quelles instructions. Cette option est
surtout utile pour le débogage, car GCC détecte les capacités de l'assembleur lorsqu'il
est construit et définit la valeur par défaut en conséquence.

-msmall-données
-mlarge-données
Quand -mexplicit-relocs est en vigueur, les données statiques sont accessibles via gp-relatif
déménagements. Lorsque -msmall-données est utilisé, des objets de 8 octets de long ou moins sont placés dans
a petit données la surface (les sections ".sdata" et ".sbss") et sont accessibles via 16 bits
déménagements hors du registre $gp. Cela limite la taille de la petite zone de données à
64 Ko, mais permet d'accéder directement aux variables via une seule instruction.

La valeur par défaut est -mlarge-données. Avec cette option, la zone de données est limitée juste en dessous
2 Go. Les programmes qui nécessitent plus de 2 Go de données doivent utiliser « malloc » ou « mmap » pour
allouez les données dans le tas au lieu du segment de données du programme.

Lors de la génération de code pour les bibliothèques partagées, -fpic implique -msmall-données ainsi que -fPIC
implique -mlarge-données.

-mpetit-texte
-mlarge-texte
Quand -mpetit-texte est utilisé, le compilateur suppose que le code de l'ensemble du programme
(ou bibliothèque partagée) tient dans 4 Mo, et est donc accessible avec une instruction de branchement.
Quand -msmall-données est utilisé, le compilateur peut supposer que tous les symboles locaux partagent le
même valeur $gp, et ainsi réduire le nombre d'instructions requises pour une fonction
appel de 4 à 1.

La valeur par défaut est -mlarge-texte.

-mcpu=type_cpu
Définir le jeu d'instructions et les paramètres de planification des instructions pour le type de machine
type_cpu. Vous pouvez spécifier soit le EV le nom du style ou le numéro de puce correspondant.
GCC prend en charge les paramètres de planification pour la famille de processeurs EV4, EV5 et EV6 et
choisira les valeurs par défaut pour le jeu d'instructions du processeur que vous spécifiez.
Si vous ne spécifiez pas de type de processeur, GCC utilisera par défaut le processeur sur lequel le
compilateur a été construit.

Valeurs prises en charge pour type_cpu

ev4
ev45
21064
Se programme comme un EV4 et n'a pas d'extensions de jeu d'instructions.

ev5
21164
Se programme comme un EV5 et n'a pas d'extensions de jeu d'instructions.

ev56
21164
Se programme comme un EV5 et prend en charge l'extension BWX.

PCA56
21164pc
21164PC
Se programme comme un EV5 et prend en charge les extensions BWX et MAX.

ev6
21264
Se programme comme un EV6 et prend en charge les extensions BWX, FIX et MAX.

ev67
21264
Se programme comme un EV6 et prend en charge les extensions BWX, CIX, FIX et MAX.

Les chaînes d'outils natives soutiennent également la valeur indigène, qui sélectionne la meilleure architecture
option pour le processeur hôte. -mcpu=natif n'a aucun effet si GCC ne reconnaît pas
le processeur.

-mtune=type_cpu
Définir uniquement les paramètres de planification des instructions pour le type de machine type_cpuL’
jeu d'instructions n'est pas modifié.

Les chaînes d'outils natives soutiennent également la valeur indigène, qui sélectionne la meilleure architecture
option pour le processeur hôte. -mtune=natif n'a aucun effet si GCC ne reconnaît pas
le processeur.

-mémoire-latence=fiable
Définit la latence que le planificateur doit assumer pour les références de mémoire typiques telles que vues par
L'application. Ce nombre dépend fortement des modèles d'accès mémoire utilisés
par l'application et la taille du cache externe sur la machine.

Options valides pour fiable

nombre
Un nombre décimal représentant les cycles d'horloge.

L1
L2
L3
principal
Le compilateur contient des estimations du nombre de cycles d'horloge pour EV4 "typique" &
Matériel EV5 pour les caches de niveau 1, 2 et 3 (également appelés Dcache, Scache et
Bcache), ainsi qu'à la mémoire principale. Notez que L3 n'est valable que pour EV5.

DÉC Alpha/VMS Options

Ces -m des options sont définies pour les implémentations DEC Alpha/VMS :

-mvms-codes-retour
Renvoie les codes de condition VMS de main. La valeur par défaut est de retourner la condition de style POSIX
(par exemple des codes d'erreur).

-mdebug-main=préfixe
Marquer la première routine dont le nom commence par préfixe comme routine principale pour le
débogueur.

-mmalloc64
Par défaut, les routines d'allocation de mémoire 64 bits.

FR30 Options

Ces options sont définies spécifiquement pour le port FR30.

-mpetit-modèle
Utilisez le modèle de petit espace d'adressage. Cela peut produire un code plus petit, mais cela suppose
que toutes les valeurs et adresses symboliques s'inscriront dans une plage de 20 bits.

-mno-lsim
Supposons que le support d'exécution a été fourni et qu'il n'est donc pas nécessaire d'inclure le
bibliothèque de simulateurs (libsim.a) sur la ligne de commande de l'éditeur de liens.

FRV Options

-MGPR-32
N'utilisez que les 32 premiers registres à usage général.

-MGPR-64
Utilisez les 64 registres à usage général.

-mfpr-32
Utilisez uniquement les 32 premiers registres à virgule flottante.

-mfpr-64
Utilisez les 64 registres à virgule flottante.

-mhard-float
Utilisez des instructions matérielles pour les opérations à virgule flottante.

-msoft-float
Utilisez des routines de bibliothèque pour les opérations à virgule flottante.

-malloc-cc
Allouez dynamiquement des registres de codes de condition.

-mfixed-cc
N'essayez pas d'allouer dynamiquement des registres de code de condition, utilisez uniquement "icc0" et
"fcc0".

-mdword
Modifiez l'ABI pour utiliser le mot double insns.

-mno-dword
N'utilisez pas d'instructions comportant des mots doubles.

-mdouble
Utilisez des instructions doubles à virgule flottante.

-mno-double
N'utilisez pas d'instructions doubles à virgule flottante.

-mmédia
Utilisez les instructions des médias.

-mno-média
N'utilisez pas les instructions du support.

-mmuladd
Utilisez les instructions de multiplication et d'addition/soustraction.

-mno-muladd
N'utilisez pas les instructions de multiplication et d'addition/soustraction.

-mfdpic
Sélectionnez l'ABI FDPIC, qui utilise des descripteurs de fonction pour représenter des pointeurs vers
les fonctions. Sans aucune option liée au PIC/PIE, cela implique -fPIE. Avec -fpic or
-fpie, il suppose que les entrées GOT et les petites données sont dans une plage de 12 bits du GOT
adresse de base; avec -fPIC or -fPIE, les décalages GOT sont calculés avec 32 bits. Avec un
bfin-elfe cible, cette option implique -msim.

-minline-plt
Activer l'incorporation des entrées PLT dans les appels de fonction à des fonctions inconnues
lier localement. Il n'a aucun effet sans -mfdpic. Il est activé par défaut si
optimisation de la vitesse et compilation pour les bibliothèques partagées (c'est-à-dire, -fPIC or -fpic), ou
lorsqu'une option d'optimisation telle que -O3 ou supérieur est présent dans la ligne de commande.

-mTLS
Supposons un segment TLS volumineux lors de la génération de code thread-local.

-mtls
Ne supposez pas un segment TLS volumineux lors de la génération de code thread-local.

-mgprel-ro
Activer l'utilisation des relocalisations "GPREL" dans l'ABI FDPIC pour les données dont on sait qu'elles sont dans
sections en lecture seule. Il est activé par défaut, sauf pour -fpic or -fpie: bien que
cela peut aider à réduire la taille de la table de décalage global, il échange 1 instruction pour 4. Avec
-fPIC or -fPIE, il échange 3 instructions contre 4, dont une pouvant être partagée par plusieurs
symboles, et cela évite le besoin d'une entrée GOT pour le symbole référencé, c'est donc
plus de chances d'être une victoire. Si ce n'est pas le cas, -mno-gprel-ro peut être utilisé pour le désactiver.

-multilib-bibliothèque-pic
Lien avec les bibliothèques d'images (bibliothèque, pas FD). C'est sous-entendu par -mlibrary-pic, ainsi que
comme par -fPIC ainsi que -fpic sans -mfdpic. Vous ne devriez jamais avoir à l'utiliser explicitement.

-mlinked-fp
Suivez l'exigence EABI de toujours créer un pointeur de cadre chaque fois qu'un cadre de pile
est alloué. Cette option est activée par défaut et peut être désactivée avec
-mno-lié-fp.

-mlong-appels
Utilisez l'adressage indirect pour appeler des fonctions en dehors de l'unité de compilation actuelle. Cette
permet aux fonctions d'être placées n'importe où dans l'espace d'adressage de 32 bits.

-malign-étiquettes
Essayez d'aligner les étiquettes sur une limite de 8 octets en insérant des nops dans le paquet précédent.
Cette option n'a d'effet que lorsque l'emballage VLIW est activé. Cela ne crée pas de nouveau
paquets; il ajoute simplement des nops à ceux existants.

-mlibrary-pic
Générez un code EABI indépendant de la position.

-macc-4
Utilisez uniquement les quatre premiers registres de l'accumulateur de support.

-macc-8
Utilisez les huit registres d'accumulateur de support.

-mpack
Pack d'instructions VLIW.

-mno-pack
Ne pas emballer les instructions VLIW.

-mno-drapeaux
Ne marquez pas les commutateurs ABI dans les e_flags.

-mcond-move
Activez l'utilisation des instructions de déplacement conditionnel (par défaut).

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mno-cond-move
Désactivez l'utilisation des instructions de déplacement conditionnel.

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mscc
Activer l'utilisation d'instructions d'ensemble conditionnelles (par défaut).

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mno-scc
Désactivez l'utilisation des instructions d'ensemble conditionnelles.

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mcond-exec
Activer l'utilisation de l'exécution conditionnelle (par défaut).

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mno-cond-exec
Désactivez l'utilisation de l'exécution conditionnelle.

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mvliw-branche
Exécutez un pass pour compresser les branches dans les instructions VLIW (par défaut).

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mno-vliw-branche
N'exécutez pas de passe pour compresser des branches dans des instructions VLIW.

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mmulti-cond-exec
Activer l'optimisation de "&&" et "||" en exécution conditionnelle (par défaut).

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mno-multi-cond-exec
Désactiver l'optimisation de "&&" et "||" en exécution conditionnelle.

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mnested-cond-exec
Activer les optimisations d'exécution conditionnelles imbriquées (par défaut).

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-mno-niché-cond-exec
Désactivez les optimisations d'exécution conditionnelles imbriquées.

Ce commutateur sert principalement au débogage du compilateur et sera probablement supprimé dans un
version future.

-moptimize-membre
Ce commutateur supprime les instructions "membar" redondantes du code généré par le compilateur.
Il est activé par défaut.

-mno-optimize-membre
Ce commutateur désactive la suppression automatique des instructions « membar » redondantes du
code généré.

-statistiques-mtomcat
Faire en sorte que le gaz imprime les statistiques de Tomcat.

-mcpu=cpu
Sélectionnez le type de processeur pour lequel générer le code. Les valeurs possibles sont FRV, fr550,
matou, fr500, fr450, fr405, fr400, fr300 ainsi que simple.

GNU / Linux Options

Ces -m les options sont définies pour les cibles GNU/Linux :

-mglibc
Utilisez la bibliothèque GNU C. C'est la valeur par défaut sauf sur *-*-linux-*ulibc* ainsi que
*-*-linux-*android* cibles.

-muclibc
Utilisez la bibliothèque uClibc C. C'est la valeur par défaut sur *-*-linux-*ulibc* cibles.

-mbionique
Utilisez la bibliothèque Bionic C. C'est la valeur par défaut sur *-*-linux-*android* cibles.

-mandroïde
Compilez le code compatible avec la plate-forme Android. C'est la valeur par défaut sur
*-*-linux-*android* cibles.

Lors de la compilation, cette option permet -mbionique, -fPIC, -fno-exceptions ainsi que -fno-rtti by
défaut. Lors de la liaison, cette option oblige le pilote GCC à transmettre des options spécifiques à Android
à l'éditeur de liens. Enfin, cette option fait que la macro du préprocesseur "__ANDROID__" est
Défini.

-tno-android-cc
Désactiver les effets de compilation de -mandroïde, c'est-à-dire ne pas activer -mbionique, -fPIC,
-fno-exceptions ainsi que -fno-rtti par défaut.

-tno-android-ld
Désactiver les effets de liaison de -mandroïde, c'est-à-dire transmettre les options de liaison Linux standard au
éditeur de liens.

H8 / 300 Options

Ces -m des options sont définies pour les implémentations H8/300 :

-mrelax
Raccourcir certaines références d'adresses au moment de la liaison, lorsque cela est possible ; utilise l'option de l'éditeur de liens
-se détendre.

-mh Générez le code pour le H8/300H.

-SP Générez du code pour le H8S.

-mn Générez du code pour le H8S et le H8/300H en mode normal. Cet interrupteur doit être utilisé
soit avec -mh or -SP.

-ms2600
Générez le code pour le H8S/2600. Ce commutateur doit être utilisé avec -SP.

-menthe32
Rendre les données "int" 32 bits par défaut.

-malignité-300
Sur le H8/300H et le H8S, utilisez les mêmes règles d'alignement que pour le H8/300. Le défaut
pour le H8/300H et le H8S est d'aligner les longs et les floats sur des limites de 4 octets.
-malignité-300 les fait aligner sur des limites de 2 octets. Cette option n'a aucun effet
sur le H8/300.

HPPA Options

Ces -m des options sont définies pour la famille d'ordinateurs HPPA :

-mars=type d'architecture
Générer du code pour l'architecture spécifiée. Les choix pour type d'architecture
1.0 pour PA 1.0, 1.1 pour PA 1.1, et 2.0 pour les processeurs PA 2.0. Faire référence à
/usr/lib/sched.models sur un système HP-UX pour déterminer l'option d'architecture appropriée
pour votre appareil. Le code compilé pour les architectures moins numérotées s'exécutera sur les plus hautes
architectures numérotées, mais pas l'inverse.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Synonymes pour -mars=1.0, -mars=1.1et -mars=2.0 respectivement.

-mbig-commutateur
Générez du code adapté aux grandes tables de commutation. N'utilisez cette option que si le
l'assembleur/éditeur de liens se plaint de branches hors de portée dans une table de commutation.

-mjump-in-delay
Remplir les créneaux de retard des appels de fonction avec des instructions de saut inconditionnel en modifiant
le pointeur de retour pour que l'appel de fonction soit la cible du saut conditionnel.

-mdisable-fpregs
Empêcher les registres à virgule flottante d'être utilisés de quelque manière que ce soit. Ceci est nécessaire pour
compiler des noyaux qui effectuent une commutation de contexte paresseuse des registres à virgule flottante. Si
vous utilisez cette option et essayez d'effectuer des opérations en virgule flottante, le compilateur
avorte.

-mdisable-indexation
Empêcher le compilateur d'utiliser les modes d'adresse d'indexation. Cela évite certains plutôt
problèmes obscurs lors de la compilation du code généré par MIG sous MACH.

-mno-espace-regs
Générez du code qui suppose que la cible n'a pas de registres d'espace. Cela permet à GCC de
générer des appels indirects plus rapides et utiliser des modes d'adresse d'index non mis à l'échelle.

Un tel code convient aux systèmes et noyaux PA de niveau 0.

-mfast-appels-indirects
Générez du code qui suppose que les appels ne franchissent jamais les limites de l'espace. Cela permet à GCC de
émettre du code qui effectue des appels indirects plus rapides.

Cette option ne fonctionnera pas en présence de bibliothèques partagées ou de fonctions imbriquées.

-mplage-fixe=registre-plage
Générer du code traitant la plage de registres donnée comme des registres fixes. Un registre fixe
est celui que l'allocateur de registre ne peut pas utiliser. Ceci est utile lors de la compilation du noyau
code. Une plage de registres est spécifiée sous la forme de deux registres séparés par un tiret. Plusieurs
les plages de registres peuvent être spécifiées séparées par une virgule.

-mlong-load-store
Générez des séquences de chargement et de stockage de 3 instructions, comme parfois requis par HP-UX 10
éditeur de liens. Ceci équivaut à la +k option aux compilateurs HP.

-environnement d'exécution portable
Utilisez les conventions d'appel portable proposées par HP pour les systèmes ELF.

-mgaz
Activez l'utilisation de directives d'assembleur que seul GAS comprend.

-mschedule=type de processeur
Code horaire selon les contraintes du type de machine type de processeur. Les choix
en type de processeur 700 7100, 7100LC, 7200, 7300 ainsi que 8000. Faire référence à
/usr/lib/sched.models sur un système HP-UX pour déterminer l'option de planification appropriée pour
votre appareil. La programmation par défaut est 8000.

-mlinker-opt
Activez la passe d'optimisation dans l'éditeur de liens HP-UX. Notez que cela rend le débogage symbolique
impossible. Il déclenche également un bogue dans les linkers HP-UX 8 et HP-UX 9 dans lesquels ils
donner de faux messages d'erreur lors de la liaison de certains programmes.

-msoft-float
Générer une sortie contenant des appels de bibliothèque pour virgule flottante. Mise en garde: le requis
les bibliothèques ne sont pas disponibles pour toutes les cibles HPPA. Normalement, les installations du
le compilateur C habituel de la machine sont utilisés, mais cela ne peut pas être fait directement en cross-
compilation. Vous devez prendre vos propres dispositions pour fournir une bibliothèque appropriée
fonctions de compilation croisée.

-msoft-float modifie la convention d'appel dans le fichier de sortie ; par conséquent, ce n'est que
utile si vous compilez TOUTE d'un programme avec cette option. En particulier, vous devez
compiler libgcc.a, la bibliothèque fournie avec GCC, avec -msoft-float pour cela
à travailler.

-msio
Générez la prédéfinition "_SIO" pour les E/S du serveur. La valeur par défaut est -mwsio. Cela génère
les prédéfinis, "__hp9000s700", "__hp9000s700__" et "_WSIO", pour le poste de travail IO.
Ces options sont disponibles sous HP-UX et HI-UX.

-mgnu-ld
Utilisez les options spécifiques à GNU ld. Cela passe -partagé à ld lors de la construction d'un partage
une bibliothèque. C'est la valeur par défaut lorsque GCC est configuré, explicitement ou implicitement, avec le
Éditeur de liens GNU. Cette option n'a aucun effet sur quel ld est appelé, elle
change quels paramètres sont passés à ce ld. Le ld qui est appelé est déterminé par
le --avec-ld configurez l'option, le chemin de recherche du programme de GCC, et enfin par l'utilisateur
PATH. L'éditeur de liens utilisé par GCC peut être imprimé en utilisant qui `gcc -print-nom-prog=ld`.
Cette option n'est disponible que sur le HP-UX GCC 64 bits, c'est-à-dire configuré avec
hppa*64*-*-hpux*.

-mhp-ld
Utilisez les options spécifiques à HP ld. Cela passe -b à ld lors de la création d'une bibliothèque partagée et
passes +Accepter Incompatibilité de type à ld sur tous les liens. C'est la valeur par défaut lorsque GCC est
configuré, explicitement ou implicitement, avec l'éditeur de liens HP. Cette option n'a pas
n'importe quel effet sur quel ld est appelé, cela ne change que les paramètres qui lui sont passés
ld. Le ld qui est appelé est déterminé par le --avec-ld option de configuration, GCC
chemin de recherche du programme, et enfin par l'utilisateur PATH. L'éditeur de liens utilisé par GCC peut être
imprimé en utilisant qui `gcc -print-nom-prog=ld`. Cette option n'est disponible que sur le
HP-UX GCC 64 bits, c'est-à-dire configuré avec hppa*64*-*-hpux*.

-mlong-appels
Générez du code qui utilise de longues séquences d'appels. Cela garantit qu'un appel est toujours en mesure
pour atteindre les talons générés par l'éditeur de liens. La valeur par défaut est de générer des appels longs uniquement lorsque le
distance entre le lieu de l'appel et le début de la fonction ou de l'unité de traduction, comme
le cas, dépasse une limite prédéfinie fixée par le type de branche utilisé. Les
les limites pour les appels normaux sont de 7,600,000 240,000 2.0 et XNUMX XNUMX octets, respectivement pour le PA XNUMX
et les architectures PA 1.X. Les appels Sib sont toujours limités à 240,000 XNUMX octets.

Les distances sont mesurées à partir du début des fonctions lors de l'utilisation du
-ffonction-sections option, ou lors de l'utilisation de la -mgaz ainsi que -mno-portable-runtime Options
ensemble sous HP-UX avec l'éditeur de liens SOM.

Il n'est normalement pas souhaitable d'utiliser cette option car elle dégraderait les performances.
Cependant, cela peut être utile dans les applications volumineuses, en particulier lorsqu'une liaison partielle est
utilisé pour construire l'application.

Les types d'appels longs utilisés dépendent des capacités de l'assembleur et de l'éditeur de liens,
et le type de code généré. L'impact sur les systèmes qui prennent en charge
les appels absolus et les longs appels de différence de symboles ou de PC doivent être
relativement petite. Cependant, un appel indirect est utilisé sur les systèmes ELF 32 bits en code pic
et c'est assez long.

-munix=unix-std
Générez des prédéfinitions de compilateur et sélectionnez un fichier de démarrage pour la norme UNIX spécifiée.
Les choix pour unix-std 93, 95 ainsi que 98. 93 est pris en charge sur toutes les versions de HP-UX.
95 est disponible sur HP-UX 10.10 et versions ultérieures. 98 est disponible sur HP-UX 11.11 et versions ultérieures.
Les valeurs par défaut sont 93 pour HP-UX 10.00, 95 pour HP-UX 10.10 jusqu'à 11.00, et 98
pour HP-UX 11.11 et versions ultérieures.

-munix=93 fournit les mêmes prédéfinis que GCC 3.3 et 3.4. -munix=95 fournit
prédéfinis supplémentaires pour "XOPEN_UNIX" et "_XOPEN_SOURCE_EXTENDED", et le fichier de démarrage
unix95.o. -munix=98 fournit des prédéfinitions supplémentaires pour "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" et "_INCLUDE_XOPEN_SOURCE_500",
et le fichier de démarrage unix98.o.

De plus, il est important à noter que cette option modifie les interfaces pour diverses bibliothèques
routines. Cela affecte également le comportement opérationnel de la bibliothèque C. Ainsi, extrême
il faut être prudent dans l'utilisation de cette option.

Le code de bibliothèque destiné à fonctionner avec plusieurs normes UNIX doit être testé,
définir et restaurer la variable __xpg4_extended_mask le cas échéant. La plupart des logiciels GNU
ne fournit pas cette capacité.

-nolibdld
Supprimer la génération d'options de lien pour rechercher libdld.sl lorsque le -statique option est
spécifié sur HP-UX 10 et versions ultérieures.

-statique
L'implémentation HP-UX de setlocale dans libc a une dépendance sur libdld.sl. Là
n'est pas une version d'archive de libdld.sl. Ainsi, lorsque le -statique l'option est spécifiée,
des options de lien spéciales sont nécessaires pour résoudre cette dépendance.

Sur HP-UX 10 et versions ultérieures, le pilote GCC ajoute les options nécessaires pour établir une liaison avec
libdld.sl lorsque le -statique option est spécifiée. Cela fait que le binaire résultant
être dynamique. Sur le port 64 bits, les linkers génèrent des binaires dynamiques par défaut dans
en tout cas. Les -nolibdld L'option peut être utilisée pour empêcher le pilote GCC d'ajouter
ces options de lien.

-films
Ajout de la prise en charge du multithreading avec le dce fil bibliothèque sous HP-UX. Cette option
définit des indicateurs pour le préprocesseur et l'éditeur de liens.

Intel 386 ainsi que AMD x86-64 Options

Ces -m les options sont définies pour la famille d'ordinateurs i386 et x86-64 :

-mtune=type de processeur
Accordez à type de processeur tout ce qui est applicable sur le code généré, à l'exception de l'ABI
et l'ensemble des instructions disponibles. Les choix pour type de processeur sont:

générique
Produisez du code optimisé pour les processeurs IA32/AMD64/EM64T les plus courants. Si tu
connaître le CPU sur lequel votre code s'exécutera, alors vous devriez utiliser le correspondant
-mtune option au lieu de -mtune=générique. Mais, si vous ne savez pas exactement quel processeur
utilisateurs de votre application auront, alors vous devez utiliser cette option.

À mesure que de nouveaux processeurs sont déployés sur le marché, le comportement de cette option
changera. Par conséquent, si vous effectuez une mise à niveau vers une version plus récente de GCC, le code
L'option générée changera pour refléter les processeurs les plus courants lorsque
cette version de GCC a été publiée.

Il n'y a pas de -mars=générique option parce que -Mars indique le jeu d'instructions le
compilateur peut utiliser, et il n'y a pas de jeu d'instructions générique applicable à tous
processeurs. En revanche, -mtune indique le processeur (ou, dans ce cas,
ensemble de processeurs) dont le code est optimisé.

indigène
Cela sélectionne le processeur à régler au moment de la compilation en déterminant le processeur
type de machine de compilation. À l'aide de -mtune=natif produira du code optimisé
pour la machine locale sous les contraintes du jeu d'instructions sélectionné.
En utilisant -mars=natif activera tous les sous-ensembles d'instructions pris en charge par le
machine (par conséquent, le résultat peut ne pas s'exécuter sur des machines différentes).

i386
Processeur Intel i386 d'origine.

i486
Processeur Intel i486. (Aucune planification n'est implémentée pour cette puce.)

i586, pentium
Processeur Intel Pentium sans support MMX.

pentium-mmx
Processeur Intel PentiumMMX basé sur un noyau Pentium avec prise en charge du jeu d'instructions MMX.

pentium pro
Processeur Intel PentiumPro.

i686
Identique à "générique", mais lorsqu'il est utilisé comme option "mars", jeu d'instructions PentiumPro
sera utilisé, donc le code fonctionnera sur toutes les puces de la famille i686.

pentium2
Processeur Intel Pentium2 basé sur le noyau PentiumPro avec prise en charge du jeu d'instructions MMX.

pentium3, pentium3m
Processeur Intel Pentium3 basé sur le noyau PentiumPro avec jeu d'instructions MMX et SSE
soutien.

pentium-m
Version basse consommation du processeur Intel Pentium3 avec jeu d'instructions MMX, SSE et SSE2
Support. Utilisé par les ordinateurs portables Centrino.

pentium4, pentium4m
Processeur Intel Pentium4 avec prise en charge des jeux d'instructions MMX, SSE et SSE2.

prescott
Version améliorée du processeur Intel Pentium4 avec instruction MMX, SSE, SSE2 et SSE3
ensemble de soutien.

nocona
Version améliorée du processeur Intel Pentium4 avec extensions 64 bits, MMX, SSE, SSE2 et
Prise en charge du jeu d'instructions SSE3.

core2
Processeur Intel Core2 avec extensions 64 bits, instructions MMX, SSE, SSE2, SSE3 et SSSE3
ensemble de soutien.

corei7
Processeur Intel Core i7 avec extensions 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 et
Prise en charge du jeu d'instructions SSE4.2.

corei7-avx
Processeur Intel Core i7 avec extensions 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Prise en charge des jeux d'instructions SSE4.2, AVX, AES et PCLMUL.

core-avx-i
Processeur Intel Core avec extensions 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Prise en charge des jeux d'instructions SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND et F16C.

atome
Processeur Intel Atom avec extensions 64 bits, instructions MMX, SSE, SSE2, SSE3 et SSSE3
ensemble de soutien.

k6 Processeur AMD K6 avec prise en charge du jeu d'instructions MMX.

k6-2, k6-3
Versions améliorées du processeur AMD K6 avec MMX et 3DNow ! prise en charge du jeu d'instructions.

athlétisme, Athlon-Tbird
Processeur AMD Athlon avec MMX, 3dNOW !, 3DNow amélioré ! et instructions de prélecture SSE
soutien.

athlon-4, athlon-xp, athlon-mp
Processeur AMD Athlon amélioré avec MMX, 3DNow !, 3DNow ! et instruction SSE complète
ensemble de soutien.

k8, optéron, athlon64, athlon-fx
Processeurs basés sur le cœur AMD K8 avec prise en charge du jeu d'instructions x86-64. (Ceci surpasse le MMX,
SSE, SSE2, 3DNow !, 3DNow amélioré ! et extensions de jeu d'instructions 64 bits.)

k8-sse3, optéron-sse3, athlon64-sse3
Versions améliorées de k8, opteron et athlon64 avec prise en charge du jeu d'instructions SSE3.

amdfam10, Barcelona
Processeurs basés sur le cœur de la famille AMD 10h avec prise en charge du jeu d'instructions x86-64. (Cette
sur-ensembles MMX, SSE, SSE2, SSE3, SSE4A, 3DNow !, 3DNow ! amélioré, ABM et 64 bits
extensions de jeu d'instructions.)

bdver1
Processeurs basés sur le cœur de la famille AMD 15h avec prise en charge du jeu d'instructions x86-64. (Cette
surensembles FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM et extensions de jeu d'instructions 64 bits.)

bdver2
Processeurs basés sur le cœur de la famille AMD 15h avec prise en charge du jeu d'instructions x86-64. (Cette
surensembles BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM et extensions de jeu d'instructions 64 bits.)

btver1
Processeurs basés sur le cœur de la famille AMD 14h avec prise en charge du jeu d'instructions x86-64. (Cette
surensembles MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM et jeu d'instructions 64 bits
rallonges.)

treuil-c6
Processeur IDT Winchip C6, traité de la même manière que i486 avec un jeu d'instructions MMX supplémentaire
soutien.

treuil2
Processeur IDT Winchip2, traité de la même manière que i486 avec MMX et 3DNow supplémentaires !
prise en charge du jeu d'instructions.

c3 Via CPU C3 avec MMX et 3DNow ! prise en charge du jeu d'instructions. (Aucun horaire n'est
implémenté pour cette puce.)

c3-2
Via CPU C3-2 avec prise en charge des jeux d'instructions MMX et SSE. (Aucun horaire n'est
implémenté pour cette puce.)

géode
Processeur AMD intégré avec MMX et 3DNow ! prise en charge du jeu d'instructions.

Lors de la sélection d'un type de processeur planifiera les choses de manière appropriée pour cela
puce particulière, le compilateur ne générera aucun code qui ne s'exécute pas sur le
type de machine par défaut sans le -mars=type de processeur option utilisée. Par exemple, si
GCC est configuré pour i686-pc-linux-gnu puis -mtune=pentium4 générera du code qui
est réglé pour le Pentium4 mais fonctionnera toujours sur les machines i686.

-mars=type de processeur
Générer des instructions pour le type de machine type de processeur. Les choix pour type de processeur sont le
même chose que pour -mtune. De plus, en précisant -mars=type de processeur implique -mtune=type de processeur.

-mcpu=type de processeur
Un synonyme obsolète pour -mtune.

-mfpmath=unité
Générer une arithmétique à virgule flottante pour l'unité sélectionnée unité. Les choix pour unité sont:

387 Utiliser le coprocesseur à virgule flottante standard 387 présent sur la majorité des puces
et imité autrement. Le code compilé avec cette option s'exécute presque partout.
Les résultats temporaires sont calculés avec une précision de 80 bits au lieu de la précision
spécifié par le type, ce qui donne des résultats légèrement différents par rapport à la plupart des
autres puces. Voir -ffloat-store pour une description plus détaillée.

C'est le choix par défaut pour le compilateur i386.

sse Utilisez des instructions à virgule flottante scalaires présentes dans le jeu d'instructions SSE. Cette
jeu d'instructions est pris en charge par Pentium3 et les puces plus récentes, dans la ligne AMD par
Puces Athlon-4, Athlon-xp et Athlon-mp. La version antérieure de l'instruction SSE
l'ensemble ne prend en charge que l'arithmétique simple précision, donc le double et étendu-
l'arithmétique de précision se fait toujours à l'aide de 387. Une version ultérieure, présente uniquement dans
Pentium4 et les futures puces AMD x86-64, prennent en charge l'arithmétique double précision
trop.

Pour le compilateur i386, vous devez utiliser -mars=type de processeur, -msse or -msse2 commutateurs
pour activer les extensions SSE et rendre cette option effective. Pour le compilateur x86-64,
ces extensions sont activées par défaut.

Le code résultant devrait être considérablement plus rapide dans la majorité des cas et
éviter les problèmes d'instabilité numérique du code 387, mais peut casser certains existants
code qui s'attend à ce que les temporaires soient de 80 bits.

C'est le choix par défaut pour le compilateur x86-64.

387
ss+387
tous les deux
Essayez d'utiliser les deux jeux d'instructions à la fois. Cela double effectivement le
nombre de registres disponibles et sur puces avec unités d'exécution séparées pour 387
et SSE les ressources d'exécution aussi. Utilisez cette option avec précaution, car elle est toujours
expérimental, car l'allocateur de registre GCC ne modélise pas séparément
unités fonctionnelles résultant en des performances instables.

-masm=dialecte
Instructions asm de sortie en utilisant sélectionné dialecte. Les choix pris en charge sont Intel or à
(celui par défaut). Darwin ne prend pas en charge Intel.

-Mieee-FP
-mno-ieee-fp
Contrôlez si le compilateur utilise ou non des comparaisons à virgule flottante IEEE. Ces
gérer correctement le cas où le résultat d'une comparaison n'est pas ordonné.

-msoft-float
Générer une sortie contenant des appels de bibliothèque pour virgule flottante. Mise en garde: le requis
les bibliothèques ne font pas partie de GCC. Normalement, les installations de l'habituel C de la machine
compilateur sont utilisés, mais cela ne peut pas être fait directement en compilation croisée. Vous devez
prenez vos propres dispositions pour fournir des fonctions de bibliothèque appropriées pour le cross-
compilation.

Sur les machines où une fonction renvoie des résultats à virgule flottante dans le registre 80387
pile, certains opcodes à virgule flottante peuvent être émis même si -msoft-float est utilisé.

-mno-fp-ret-en-387
N'utilisez pas les registres FPU pour les valeurs de retour des fonctions.

La convention d'appel habituelle a des fonctions de retour des valeurs de types "float" et "double"
dans un registre FPU, même s'il n'y a pas de FPU. L'idée est que le système d'exploitation
devrait émuler un FPU.

L'option -mno-fp-ret-en-387 provoque le retour de ces valeurs dans le processeur ordinaire
s'inscrit à la place.

-mno-fancy-maths-387
Certains émulateurs 387 ne prennent pas en charge les instructions "sin", "cos" et "sqrt" pour le
387. Spécifiez cette option pour éviter de générer ces instructions. Cette option est la
par défaut sur FreeBSD, OpenBSD et NetBSD. Cette option est annulée lorsque -Mars
indique que le CPU cible aura toujours un FPU et donc l'instruction ne sera pas
besoin d'émulation. Depuis la révision 2.6.1, ces instructions ne sont générées que si vous
utilisez également le -funsafe-math-optimisations interrupteur.

-malin-double
-mno-aligner-double
Contrôler si GCC aligne les variables "double", "long double" et "long long" sur un
limite de deux mots ou limite d'un mot. Aligner des variables "doubles" sur un mot de deux
limite produit du code qui s'exécute un peu plus rapidement sur un Pentium au détriment de plus
mémoire.

Sur x86-64, -malin-double est activé par défaut.

Mise en garde: si vous utilisez le -malin-double switch, structures contenant les types ci-dessus
sera aligné différemment de l'interface binaire de l'application publiée
spécifications pour le 386 et ne sera pas compatible binaire avec les structures dans le code
compilé sans ce commutateur.

-m96bit-long-double
-m128bit-long-double
Ces commutateurs contrôlent la taille du type "long double". Le binaire de l'application i386
l'interface spécifie que la taille est de 96 bits, donc -m96bit-long-double est la valeur par défaut dans
mode 32 bits.

Les architectures modernes (Pentium et plus récentes) préfèrent que le "double long" soit aligné sur un 8-
ou limite de 16 octets. Dans les tableaux ou les structures conformes à l'ABI, ce n'est pas
possible. Donc en précisant -m128bit-long-double aligne "long double" sur 16 octets
limite en remplissant le « double long » avec un zéro supplémentaire de 32 bits.

Dans le compilateur x86-64, -m128bit-long-double est le choix par défaut comme son ABI
spécifie que "long double" doit être aligné sur une limite de 16 octets.

Notez qu'aucune de ces options ne permet une précision supplémentaire par rapport à la norme x87
de 80 bits pour un "double long".

Mise en garde: si vous remplacez la valeur par défaut de votre ABI cible, les structures et
les tableaux contenant des variables "long double" changeront leur taille ainsi que leur fonction
La convention d'appel pour la fonction prenant "long double" sera modifiée. C'est pourquoi ils
ne sera pas compatible binaire avec les tableaux ou les structures dans le code compilé sans cela
interrupteur.

-mlarge-data-threshold=nombre
Quand -mcmodel=moyen est spécifié, les données supérieures à порог sont placés en grand
rubrique données. Cette valeur doit être la même pour tous les objets liés au binaire
et la valeur par défaut est 65535.

-mrtd
Utilisez une convention d'appel de fonction différente, dans laquelle les fonctions qui prennent un
nombre d'arguments retournés avec le "ret" num instruction, qui fait apparaître leurs arguments
en rentrant. Cela permet d'économiser une instruction dans l'appelant puisqu'il n'est pas nécessaire de
pop les arguments là-bas.

Vous pouvez spécifier qu'une fonction individuelle est appelée avec cette séquence d'appel avec
l'attribut de fonction stdcall. Vous pouvez également remplacer le -mrtd option en utilisant le
attribut de fonction cdecl.

Mise en garde: cette convention d'appel est incompatible avec celle habituellement utilisée sous Unix,
vous ne pouvez donc pas l'utiliser si vous devez appeler des bibliothèques compilées avec le compilateur Unix.

De plus, vous devez fournir des prototypes de fonction pour toutes les fonctions qui prennent des variables
nombre d'arguments (y compris "printf"); sinon un code incorrect sera généré
pour les appels à ces fonctions.

De plus, un code sérieusement incorrect se produira si vous appelez une fonction avec trop de
arguments. (Normalement, les arguments supplémentaires sont ignorés sans danger.)

-mregparm=num
Contrôlez le nombre de registres utilisés pour transmettre des arguments entiers. Par défaut, non
les registres sont utilisés pour passer des arguments, et au plus 3 registres peuvent être utilisés. Vous pouvez
contrôler ce comportement pour une fonction spécifique en utilisant l'attribut function régime.

Mise en garde: si vous utilisez ce commutateur, et num est différent de zéro, alors vous devez construire tous les modules
avec la même valeur, y compris toutes les bibliothèques. Cela inclut les bibliothèques système et
modules de démarrage.

-msseregparm
Utilisez les conventions de passage de registre SSE pour les arguments flottants et doubles et les valeurs de retour.
Vous pouvez contrôler ce comportement pour une fonction spécifique en utilisant l'attribut function
serregparm.

Mise en garde: si vous utilisez ce commutateur, vous devez créer tous les modules avec la même valeur,
y compris toutes les bibliothèques. Cela inclut les bibliothèques système et les modules de démarrage.

-mvect8-ret-in-mem
Renvoie des vecteurs de 8 octets en mémoire au lieu des registres MMX. C'est la valeur par défaut sur
Solaris@tie{}8 et 9 et VxWorks pour correspondre à l'ABI des compilateurs Sun Studio jusqu'à
version 12. Les versions ultérieures du compilateur (à partir de Studio 12 Update@tie{}1) suivent
l'ABI utilisée par d'autres cibles x86, qui est la valeur par défaut sur Solaris@tie{}10 ​​et versions ultérieures.
Seulement utilisez cette option si vous devez rester compatible avec le code existant produit par
ces versions précédentes du compilateur ou les anciennes versions de GCC.

-mpc32
-mpc64
-mpc80
Définissez la précision à virgule flottante 80387 sur 32, 64 ou 80 bits. Lorsque -mpc32 est spécifié,
les significandes des résultats des opérations à virgule flottante sont arrondies à 24 bits
(simple précision) ; -mpc64 arrondit les significands des résultats de la virgule flottante
opérations à 53 bits (double précision) et -mpc80 arrondit les significandes des résultats
d'opérations en virgule flottante à 64 bits (double précision étendue), qui est le
défaut. Lorsque cette option est utilisée, les opérations à virgule flottante avec des précisions plus élevées sont
n'est pas disponible pour le programmeur sans définir explicitement le mot de contrôle FPU.

La définition de l'arrondi des opérations à virgule flottante à moins de 80 bits par défaut peut
accélérer certains programmes de 2 % ou plus. Notez que certaines bibliothèques mathématiques supposent que
les opérations à virgule flottante de précision étendue (80 bits) sont activées par défaut ; routines
dans de telles bibliothèques pourrait subir une perte significative de précision, généralement à cause de
appelé « annulation catastrophique », lorsque cette option est utilisée pour définir la précision sur
moins que la précision étendue.

-mstackrealign
Réalignez la pile à l'entrée. Sur l'Intel x86, le -mstackrealign l'option générera
un prologue et un épilogue alternatifs qui réalignent la pile d'exécution si nécessaire.
Cela prend en charge le mélange de codes hérités qui conservent une pile alignée de 4 octets avec des codes modernes
qui conservent une pile de 16 octets pour la compatibilité SSE. Voir aussi l'attribut
"force_align_arg_pointer", applicable aux fonctions individuelles.

-mpreferred-stack-limite=num
Tenter de garder la limite de la pile alignée sur un 2 élevé à num limite d'octet. Si
-mlimite-de-pile préférée n'est pas spécifié, la valeur par défaut est 4 (16 octets ou 128 bits).

Mise en garde: Lors de la génération de code pour l'architecture x86-64 avec des extensions SSE
désactivée, -mpreferred-stack-limite=3 peut être utilisé pour garder la limite de la pile alignée
à la limite de 8 octets. Vous devez construire tous les modules avec -mpreferred-stack-limite=3,
y compris toutes les bibliothèques. Cela inclut les bibliothèques système et les modules de démarrage.

-mincoming-stack-limite=num
Supposons que la pile entrante est alignée sur un 2 élevé à num limite d'octet. Si
-limite de pile mincoming n'est pas spécifié, celui spécifié par
-mlimite-de-pile préférée sera utilisé.

Sur Pentium et PentiumPro, les valeurs "double" et "long double" doivent être alignées sur un
Limite de 8 octets (voir -malin-double) ou subir des performances d'exécution importantes
pénalités. Sur le Pentium III, le type de données Streaming SIMD Extension (SSE) "__m128" peut
ne fonctionnera pas correctement s'il n'est pas aligné sur 16 octets.

Pour assurer un alignement correct de ces valeurs sur la pile, la limite de la pile doit être aussi
aligné comme celui requis par toute valeur stockée sur la pile. De plus, chaque fonction
doit être généré de telle sorte qu'il garde la pile alignée. Appelant ainsi une fonction
compilé avec une limite de pile préférée supérieure à partir d'une fonction compilée avec une limite inférieure
la limite de pile préférée va très probablement mal aligner la pile. Il est recommandé de
les bibliothèques qui utilisent des rappels utilisent toujours le paramètre par défaut.

Cet alignement supplémentaire consomme de l'espace de pile supplémentaire et augmente généralement le code
Taille. Code sensible à l'utilisation de l'espace de pile, comme les systèmes embarqués et
noyaux du système d'exploitation, peut vouloir réduire l'alignement préféré à
-mpreferred-stack-limite=2.

-mmmx
-mno-mmx
-msse
-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
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-mabm
-mno-abm
-mbmi
-mbmi2
-mno-imc
-mno-imc2
-mlzcnt
-mno-lzcnt
-vtt
-mno-tbm
Ces commutateurs activent ou désactivent l'utilisation des instructions dans le MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT ou 3DNow !
ensembles d'instructions étendus. Ces extensions sont également disponibles en version intégrée
fonctions : voir X86 Encastré Les fonctions, pour plus de détails sur les fonctions activées et
désactivé par ces commutateurs.

Pour que les instructions SSE/SSE2 soient générées automatiquement à partir du code à virgule flottante (comme
contre 387 instructions), voir -mfpmath=sse.

GCC abaisse les instructions SSEx lorsque -mavx est utilisé. Au lieu de cela, il génère de nouveaux AVX
instructions ou l'équivalence AVX pour toutes les instructions SSEx si nécessaire.

Ces options permettront à GCC d'utiliser ces instructions étendues dans le code généré,
même sans -mfpmath=sse. Les applications qui effectuent la détection du processeur au moment de l'exécution doivent
compiler des fichiers séparés pour chaque architecture prise en charge, en utilisant les indicateurs appropriés.
En particulier, le fichier contenant le code de détection CPU doit être compilé sans
ces options.

-mcld
Cette option demande à GCC d'émettre une instruction "cld" dans le prologue des fonctions
qui utilisent des instructions de chaîne. Les instructions de chaîne dépendent du drapeau DF à sélectionner
entre le mode auto-incrémentation ou auto-décrémentation. Alors que l'ABI spécifie le drapeau DF pour
être effacé à l'entrée de la fonction, certains systèmes d'exploitation enfreignent cette spécification en ne
effacer l'indicateur DF dans leurs répartiteurs d'exceptions. Le gestionnaire d'exceptions peut être
invoqué avec le drapeau DF défini, ce qui conduit à un mode de mauvaise direction lorsque la chaîne
les instructions sont utilisées. Cette option peut être activée par défaut sur les cibles x32 86 bits en
configuration de GCC avec le --enable-cld option de configuration. Génération de "cld"
les instructions peuvent être supprimées avec le -mno-cld option du compilateur dans ce cas.

-mvzeropper
Cette option demande à GCC d'émettre une instruction "vzeroupper" avant un transfert de
flux de contrôle hors de la fonction pour minimiser la pénalité de transition AVX vers SSE ainsi que
supprimez les valeurs intrinsèques superflues inutiles.

-mprefer-avx128
Cette option indique à GCC d'utiliser des instructions AVX 128 bits au lieu d'AVX 256 bits
instructions dans l'auto-vectoriseur.

-mcx16
Cette option permettra à GCC d'utiliser l'instruction CMPXCHG16B dans le code généré.
CMPXCHG16B permet des opérations atomiques sur des données 128 bits double quadword (ou oword)
les types. Ceci est utile pour les compteurs haute résolution qui pourraient être mis à jour par plusieurs
processeurs (ou cœurs). Cette instruction est générée dans le cadre de l'atomic intégré
fonctions : voir __sync Intégrés or __atomique Intégrés pour en savoir plus.

-msahf
Cette option permettra à GCC d'utiliser l'instruction SAHF dans le code 64 bits généré. De bonne heure
Les processeurs Intel avec Intel 64 manquaient d'instructions LAHF et SAHF prises en charge par AMD64 jusqu'à
introduction du Pentium 4 G1 step en décembre 2005. LAHF et SAHF chargent et stockent
instructions, respectivement, pour certains indicateurs d'état. En mode 64 bits, SAHF
L'instruction est utilisée pour optimiser les fonctions intégrées "fmod", "drem" ou "reste": voir
Autre Intégrés pour en savoir plus.

-mmovbe
Cette option permettra à GCC d'utiliser l'instruction movbe pour implémenter "__builtin_bswap32"
et "__builtin_bswap64".

-mcrc32
Cette option activera les fonctions intégrées, "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" et "__builtin_ia32_crc32di" pour
générer l'instruction machine crc32.

-mrecip
Cette option permettra à GCC d'utiliser les instructions RCPSS et RSQRTSS (et leurs
variantes vectorisées RCPPS et RSQRTPS) avec une étape Newton-Raphson supplémentaire pour
augmenter la précision au lieu de DIVSS et SQRTSS (et leurs variantes vectorisées) pour
arguments à virgule flottante simple précision. Ces instructions sont générées uniquement lorsque
-funsafe-math-optimisations est activé avec -fini-mathématiques-seulement ainsi que
-fno-piégeage-maths. Notez que bien que le débit de la séquence soit supérieur au
débit de l'instruction non réciproque, la précision de la séquence peut être
diminué jusqu'à 2 ulp (c'est-à-dire que l'inverse de 1.0 est égal à 0.99999994).

Notez que GCC implémente "1.0f/sqrtf(X)" en termes de RSQRTSS (ou RSQRTPS) déjà avec
-ffast-mathématiques (ou la combinaison d'options ci-dessus), et n'a pas besoin -mrecip.

Notez également que GCC émet la séquence ci-dessus avec une étape supplémentaire de Newton-Raphson pour
division à flotteur unique vectorisée et "sqrtf() vectoriséX)" déjà avec -ffast-mathématiques
(ou la combinaison d'options ci-dessus), et n'a pas besoin -mrecip.

-mrecip=opter
Cette option permet de contrôler quelles instructions d'estimation réciproque peuvent être utilisées. opter
est une liste d'options séparées par des virgules, qui peut être précédée d'un "!" d'inverser le
option : "all" : active toutes les instructions d'estimation, "default" : active la valeur par défaut
instructions, équivalent à -mrecip, "aucun": désactive toutes les instructions de devis,
équivalente à -mno-recette, "div": active l'approximation pour la division scalaire,
"vec-div" : active l'approximation pour la division vectorisée, "sqrt" : active le
approximation pour la racine carrée scalaire, "vec-sqrt": active l'approximation pour
racine carrée vectorisée.

Ainsi par exemple, -mrecip=tout,!sqrt permettrait toutes les approximations réciproques,
sauf pour la racine carrée.

-mveclibabi=type
Spécifie le type ABI à utiliser pour vectoriser les intrinsèques à l'aide d'une bibliothèque externe.
Les types pris en charge sont « svml » pour la bibliothèque mathématique vectorielle courte Intel et « acml » pour le
Style d'interfaçage de la bibliothèque de base mathématique AMD. GCC émettra actuellement des appels à
"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" et "vmlsAcos4" pour
type de fonction correspondant lorsque -mveclibabi=svml est utilisé et "__vrd2_sin",
"__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
"__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f",
"__vrs4_log10f" et "__vrs4_powf" pour le type de fonction correspondant lorsque
-mveclibabi=acml est utilisé. Les deux -ftree-vectoriser ainsi que -funsafe-math-optimisations avons
être activé. Une bibliothèque compatible SVML ou ACML ABI devra être spécifiée au lien
le temps.

-mabi=prénom
Générer du code pour la convention d'appel spécifiée. Les valeurs autorisées sont : système en
l'ABI utilisé sur GNU/Linux et d'autres systèmes et ms pour l'ABI de Microsoft. Le défaut
est d'utiliser l'ABI de Microsoft pour cibler Windows. Sur tous les autres systèmes, la valeur par défaut
est l'ABI SYSV. Vous pouvez contrôler ce comportement pour une fonction spécifique en utilisant le
attribut de fonction ms_abi/sysv_abi.

-mtls-dialecte=type
Générer du code pour accéder au stockage local des threads à l'aide du gnou or gnu2 conventions. gnou
est la valeur par défaut conservatrice ; gnu2 est plus efficace, mais il peut ajouter la compilation et l'exécution
des exigences de temps qui ne peuvent pas être satisfaites sur tous les systèmes.

-mpush-arguments
-mno-push-args
Utilisez les opérations PUSH pour stocker les paramètres sortants. Cette méthode est plus courte et généralement
aussi rapide que la méthode utilisant les opérations SUB/MOV et est activé par défaut. Dans certaines
les cas de désactivation peuvent améliorer les performances en raison d'une planification améliorée et d'une réduction
dépendances.

-maccumulate-arguments-sortants
Si activé, la quantité maximale d'espace requis pour les arguments sortants sera
calculé dans le prologue de la fonction. Ceci est plus rapide sur la plupart des processeurs modernes en raison de
dépendances réduites, planification améliorée et utilisation réduite de la pile lorsque la pile préférée
limite n'est pas égale à 2. L'inconvénient est une augmentation notable de la taille du code. Cette
interrupteur implique -mno-push-args.

-mthreads
Prise en charge de la gestion des exceptions thread-safe sur Mingw32. Code qui repose sur thread-safe
la gestion des exceptions doit compiler et lier tout le code avec le -mthreads option. Lorsque
compilation, -mthreads définit -D_MT; lors de la liaison, il se lie dans un assistant de fil spécial
bibliothèque -lmingwthrd qui nettoie par thread les données de gestion des exceptions.

-mno-align-stringops
N'alignez pas la destination des opérations de chaîne en ligne. Ce commutateur réduit la taille du code
et améliore les performances au cas où la destination est déjà alignée, mais GCC ne le fait pas
savoir à ce sujet.

-minline-tous les stringops
Par défaut, les opérations de chaîne inlines GCC uniquement lorsque la destination est connue pour être
aligné sur au moins une limite de 4 octets. Cela permet plus d'inline, augmente la taille du code,
mais peut améliorer les performances du code qui dépend de memcpy, strlen et memset rapides pour
courtes longueurs.

-minline-stringops-dynamiquement
Pour les opérations de chaîne de taille inconnue, utilisez des vérifications à l'exécution avec du code en ligne pour les petits
blocs et un appel à la bibliothèque pour les gros blocs.

-mstringop-stratégie=alg
Écraser l'heuristique de décision interne sur un algorithme particulier pour la chaîne en ligne
opération avec. Les valeurs autorisées sont « rep_byte », « rep_4byte », « rep_8byte » pour
expansion en utilisant le préfixe "rep" i386 de la taille spécifiée, "byte_loop", "loop",
"unrolled_loop" pour étendre la boucle en ligne, "libcall" pour toujours étendre la bibliothèque
appel.

-momit-leaf-frame-pointeur
Ne gardez pas le pointeur de cadre dans un registre pour les fonctions feuilles. Cela évite le
instructions pour enregistrer, configurer et restaurer les pointeurs de trame et créer un registre supplémentaire
disponible dans les fonctions feuilles. L'option -fomit-frame-pointeur supprime le cadre
pointeur pour toutes les fonctions, ce qui peut rendre le débogage plus difficile.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Contrôle si les variables TLS sont accessibles avec des décalages du segment TLS
(%gs pour 32 bits, %fs pour 64 bits), ou si le pointeur de base de thread doit être
ajoutée. Que cela soit légal ou non dépend du système d'exploitation, et s'il
mappe le segment pour couvrir toute la zone TLS.

Pour les systèmes qui utilisent GNU libc, la valeur par défaut est activée.

-msse2avx
-mno-sse2avx
Spécifiez que l'assembleur doit coder les instructions SSE avec le préfixe VEX. L'option
-mavx l'active par défaut.

-mfentry
-mno-fentry
Si le profilage est actif -pg mettre l'appel de compteur de profilage avant le prologue. Remarque : Activé
architectures x86 l'attribut "ms_hook_prologue" n'est pas possible pour le moment pour
-mfentry ainsi que -pg.

-m8bit-idiv
-mno-8bit-idiv
Sur certains processeurs, comme Intel Atom, la division d'entiers non signés 8 bits est beaucoup plus rapide que
Division d'entiers 32 bits/64 bits. Cette option génère un contrôle d'exécution. Si les deux
le dividende et le diviseur sont compris entre 0 et 255, la division entière non signée sur 8 bits est
utilisé à la place de la division entière 32 bits/64 bits.

-Mavx256-Split-Unaligned-charge
-mavx256-split-magasin-non-aligné
Chargement et stockage non alignés AVX divisés de 32 octets.

Ces -m les commutateurs sont pris en charge en plus de ce qui précède sur les processeurs AMD x86-64 dans
Environnements 64 bits.

-m32
-m64
-mx32
Générez du code pour un environnement 32 bits ou 64 bits. Les -m32 l'option définit int, long et
pointeur sur 32 bits et génère du code qui s'exécute sur n'importe quel système i386. Les -m64 option
définit int à 32 bits et long et pointeur à 64 bits et génère du code pour AMD
architecture x86-64. Les -mx32 l'option définit int, long et pointeur sur 32 bits et
génère du code pour l'architecture x86-64 d'AMD. Pour Darwin seulement le -m64 l'option tourne
en dehors de -fno-pic ainsi que -mdynamic-pas de photo options.

-mno-zone-rouge
N'utilisez pas de zone dite rouge pour le code x86-64. La zone rouge est mandatée par le
x86-64 ABI, c'est une zone de 128 octets au-delà de l'emplacement du pointeur de pile qui
pas être modifié par les gestionnaires de signal ou d'interruption et peut donc être utilisé pour
données temporaires sans ajuster le pointeur de pile. Le drapeau -mno-zone-rouge désactive
cette zone rouge.

-mcmodel=petit
Générer du code pour le modèle petit code : le programme et ses symboles doivent être liés dans
les 2 Go inférieurs de l'espace d'adressage. Les pointeurs sont de 64 bits. Les programmes peuvent être
liés statiquement ou dynamiquement. Il s'agit du modèle de code par défaut.

-mcmodel=noyau
Générez du code pour le modèle de code du noyau. Le noyau tourne dans les 2 Go négatifs du
espace d'adressage. Ce modèle doit être utilisé pour le code du noyau Linux.

-mcmodel=moyen
Générer du code pour le modèle moyen : Le programme est lié dans les 2 Go inférieurs du
espace d'adressage. De petits symboles y sont également placés. Symboles avec des tailles supérieures à
-mlarge-seuil-de-données sont placés dans de grandes sections de données ou bss et peuvent être localisés
au-dessus de 2 Go. Les programmes peuvent être liés de manière statique ou dynamique.

-mcmodel=grand
Générer du code pour le grand modèle : ce modèle ne fait aucune hypothèse sur les adresses et
tailles de sections.

-maddress-mode=long
Générer du code pour le mode d'adresse longue. Ceci est uniquement pris en charge pour 64 bits et x32
environnements. C'est le mode d'adressage par défaut pour les environnements 64 bits.

-maddress-mode=court
Générer du code pour le mode d'adresse courte. Ceci est uniquement pris en charge pour 32 bits et x32
environnements. C'est le mode d'adressage par défaut pour les environnements 32 bits et x32.

i386 ainsi que x86-64 Windows Options

Ces options supplémentaires sont disponibles pour les cibles Windows :

-mconsole
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise qu'une console
l'application doit être générée, en demandant à l'éditeur de liens de définir l'en-tête PE
type de sous-système requis pour les applications de console. C'est le comportement par défaut pour
Cibles Cygwin et MinGW.

-mdll
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise qu'une DLL - un
bibliothèque de liens dynamiques - doit être généré, permettant la sélection des
objet de démarrage d'exécution et point d'entrée.

-mnop-fun-dllimport
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise que le
L'attribut dllimport doit être ignoré.

-mthread
Cette option est disponible pour les cibles MinGW. Il spécifie que le thread spécifique à MinGW
le support doit être utilisé.

-municode
Cette option est disponible pour les cibles mingw-w64. Il précise que la macro UNICODE
est en train d'être prédéfini et que le code de démarrage d'exécution compatible Unicode est choisi.

-mwin32
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise que le type
Les macros prédéfinies de Windows doivent être définies dans le préprocesseur, mais n'influencent pas
le choix de la bibliothèque d'exécution/code de démarrage.

-mfenêtres
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise qu'une interface graphique
l'application doit être générée en demandant à l'éditeur de liens de définir l'en-tête PE
type de sous-système de manière appropriée.

-fno-set-stack-exécutable
Cette option est disponible pour les cibles MinGW. Il spécifie que le drapeau exécutable pour
la pile utilisée par les fonctions imbriquées n'est pas définie. Ceci est nécessaire pour les binaires s'exécutant dans
le mode noyau de Windows, car il y a l'API user32, qui est utilisée pour définir l'exécutable
privilèges, n'est pas disponible.

-mpe-aligné-commons
Cette option est disponible pour les cibles Cygwin et MinGW. Il précise que le GNU
extension au format de fichier PE qui permet l'alignement correct des variables COMMUNES
doit être utilisé lors de la génération de code. Il sera activé par défaut si GCC détecte
que l'assembleur cible trouvé lors de la configuration prend en charge la fonctionnalité.

Voir aussi sous i386 ainsi que x86-64 Options pour les options standards.

IA-64 Options

Ce sont les -m options définies pour l'architecture Intel IA-64.

-mbig-endian
Générez du code pour une cible big-endian. Il s'agit de la valeur par défaut pour HP-UX.

-mlittle-endian
Générer du code pour une cible little-endian. C'est la valeur par défaut pour AIX5 et GNU/Linux.

-mgnu-as
-mno-gnu-as
Générez (ou non) du code pour l'assembleur GNU. C'est la valeur par défaut.

-mgnu-ld
-mno-gnu-ld
Générez (ou non) du code pour l'éditeur de liens GNU. C'est la valeur par défaut.

-mno-pic
Générez du code qui n'utilise pas de registre de pointeur global. Le résultat n'est pas la position
code indépendant et viole l'ABI IA-64.

-mvolatile-asm-stop
-mno-volatile-asm-stop
Générez (ou non) un bit d'arrêt immédiatement avant et après les instructions asm volatiles.

-mregistre-noms
-mno-registre-noms
Générer (ou pas) in, locet ande noms de registre pour les registres empilés. Cette
peut rendre la sortie de l'assembleur plus lisible.

-mno-sdata
-msdata
Désactivez (ou activez) les optimisations qui utilisent la petite section de données. Cela peut être utile
pour contourner les bogues de l'optimiseur.

-mconstant-gp
Générez du code qui utilise une seule valeur de pointeur global constant. Ceci est utile lorsque
compilation du code du noyau.

-mauto-pic
Générez du code auto-déplaçable. Cela implique -mconstant-gp. C'est utile
lors de la compilation du code du micrologiciel.

-minline-float-divide-min-latence
Générer du code pour les divisions en ligne de valeurs à virgule flottante en utilisant la latence minimale
algorithme.

-minline-float-divide-max-débit
Générer du code pour les divisions en ligne de valeurs à virgule flottante en utilisant le débit maximal
algorithme.

-mno-inline-float-division
Ne générez pas de code en ligne pour les divisions de valeurs à virgule flottante.

-minline-int-divide-min-latence
Générer du code pour les divisions en ligne de valeurs entières en utilisant la latence minimale
algorithme.

-minline-int-divide-max-débit
Générer du code pour les divisions en ligne de valeurs entières en utilisant le débit maximal
algorithme.

-mno-inline-int-division
Ne générez pas de code en ligne pour les divisions de valeurs entières.

-minline-sqrt-min-latence
Générez du code pour les racines carrées en ligne à l'aide de l'algorithme de latence minimale.

-minline-sqrt-max-débit
Générez du code pour les racines carrées en ligne à l'aide de l'algorithme de débit maximal.

-mno-inline-sqrt
Ne générez pas de code en ligne pour sqrt.

-mfused-mad
-mno-fusionné-madd
Générer (ne pas) générer du code qui utilise la fusion/addition ou multiplication/soustraction
instructions. La valeur par défaut consiste à utiliser ces instructions.

-mno-nain2-asm
-mdwarf2-asm
Ne générez pas (ou ne générez pas) de code assembleur pour les informations de débogage du numéro de ligne DWARF2. Cette
peut être utile lorsque vous n'utilisez pas l'assembleur GNU.

-mearly-stop-bits
-mno-early-stop-bits
Permettre aux bits d'arrêt d'être placés avant immédiatement avant l'instruction qui
déclenché le bit d'arrêt. Cela peut améliorer la planification des instructions, mais ne
fais-le.

-mplage-fixe=registre-plage
Générer du code traitant la plage de registres donnée comme des registres fixes. Un registre fixe
est celui que l'allocateur de registre ne peut pas utiliser. Ceci est utile lors de la compilation du noyau
code. Une plage de registres est spécifiée sous la forme de deux registres séparés par un tiret. Plusieurs
les plages de registres peuvent être spécifiées séparées par une virgule.

-mtls-taille=tls-taille
Spécifiez la taille en bits des décalages TLS immédiats. Les valeurs valides sont 14, 22 et 64.

-mtune=type de processeur
Réglez la planification des instructions pour un processeur particulier, les valeurs valides sont l'itanium,
itanium1, merced, itanium2 et mckinley.

-milp32
-mlp64
Générez du code pour un environnement 32 bits ou 64 bits. L'environnement 32 bits définit int,
long et pointeur sur 32 bits. L'environnement 64 bits définit int sur 32 bits et long et
pointeur sur 64 bits. Il s'agit d'indicateurs spécifiques à HP-UX.

-mno-sched-br-data-spec
-msched-br-data-spec
(Dis/En)ablez la planification spéculative des données avant le rechargement. Cela se traduira par
génération des instructions ld.a et des instructions de contrôle correspondantes (ld.c /
chk.a). La valeur par défaut est « désactiver ».

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis)able planification spéculative des données après le rechargement. Cela se traduira par la génération
des instructions ld.a et des instructions de contrôle correspondantes (ld.c / chk.a). Les
la valeur par défaut est « activer ».

-mno-sched-control-spec
-MSChed-Control-Spec
(Dis/En)able contrôle la planification spéculative. Cette fonction n'est disponible que pendant
planification de la région (c'est-à-dire avant le rechargement). Cela entraînera la génération des ld.s
instructions et les instructions de contrôle correspondantes chk.s . La valeur par défaut est
'désactiver'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis)able ordonnancement spéculatif des instructions qui dépendent des données
charges spéculatives avant rechargement. Ceci n'est efficace qu'avec -msched-br-data-spec
activée. La valeur par défaut est « activer ».

-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis)able ordonnancement spéculatif des instructions qui dépendent des données
charges spéculatives après rechargement. Ceci n'est efficace qu'avec -msched-ar-data-spec
activée. La valeur par défaut est « activer ».

-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis)able programmation spéculative des instructions qui dépendent de la
contrôler les charges spéculatives. Ceci n'est efficace qu'avec -MSChed-Control-Spec activée.
La valeur par défaut est « activer ».

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Si activé, les instructions spéculatives de données seront choisies pour la planification uniquement s'il y a
n'y a pas d'autres choix pour le moment. Cela rendra l'utilisation de la spéculation des données
beaucoup plus conservateur. La valeur par défaut est « désactiver ».

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Si activé, les instructions spéculatives de contrôle seront choisies pour le calendrier uniquement s'il y a
n'y a pas d'autres choix pour le moment. Cela rendra l'utilisation de la spéculation de contrôle
beaucoup plus conservateur. La valeur par défaut est « désactiver ».

-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
Si cette option est activée, les dépendances spéculatives seront prises en compte lors du calcul du
priorités d'instructions. Cela rendra l'utilisation de la spéculation un peu plus
conservateur. La valeur par défaut est « désactiver ».

-msched-spec-ldc
Utilisez une simple vérification de la spéculation des données. Cette option est activée par défaut.

-msched-control-spec-ldc
Utilisez une simple vérification pour la spéculation de contrôle. Cette option est activée par défaut.

-msched-stop-bits-after-chaque-cycle
Placez un bit d'arrêt après chaque cycle lors de la planification. Cette option est activée par défaut.

-msched-fp-mem-deps-coût-zéro
Supposons que les stockages et les charges à virgule flottante ne sont pas susceptibles de provoquer un conflit lorsque
placés dans le même groupe d'instruction. Cette option est désactivée par défaut.

-msel-sched-dont-check-control-spec
Générez des vérifications pour la spéculation de contrôle dans la planification sélective. Ce drapeau est
désactivé par défaut.

-msched-max-memory-insns=max-insns
Limite du nombre d'insns de mémoire par groupe d'instructions, donnant une priorité inférieure à
les insns de mémoire suivants tentent de planifier dans le même groupe d'instructions.
Fréquemment utile pour éviter les conflits de banque de cache. La valeur par défaut est 1.

-msched-max-memory-insns-hard-limite
Interdire plus que `msched-max-memory-insns' dans le groupe d'instructions. Sinon, limite
est « doux », ce qui signifie que nous préférerions des opérations sans mémoire lorsque la limite est atteinte, mais
peut encore programmer des opérations de mémoire.

IA-64/VMS Options

Ces -m les options sont définies pour les implémentations IA-64/VMS :

-mvms-codes-retour
Renvoie les codes de condition VMS de main. La valeur par défaut est de retourner la condition de style POSIX
(par exemple des codes d'erreur).

-mdebug-main=préfixe
Marquer la première routine dont le nom commence par préfixe comme routine principale pour le
débogueur.

-mmalloc64
Par défaut, les routines d'allocation de mémoire 64 bits.

LM32 Options

Ces -m des options sont définies pour l'architecture Lattice Mico32 :

-mbarrel-shift-activé
Activer les instructions de changement de baril.

-mdivide-activé
Activez les instructions de division et de module.

-mmultiplier-activé
Activer les instructions de multiplication.

-msign-extend-activé
Activez les instructions d'extension de signe.

-muser-activé
Activez les instructions définies par l'utilisateur.

M32C Options

-mcpu=prénom
Sélectionnez le processeur pour lequel le code est généré. prénom peut être l'un des r8c pour le R8C/Tiny
séries, m16c pour la série M16C (jusqu'à /60), m32cm pour la série M16C/80, ou m32c
pour la série M32C/80.

-msim
Spécifie que le programme sera exécuté sur le simulateur. Cela provoque une alternative
bibliothèque d'exécution à lier dans laquelle prend en charge, par exemple, les E/S de fichiers. Vous ne devez pas
utilisez cette option lors de la génération de programmes qui s'exécuteront sur du matériel réel ; vous devez
fournissez votre propre bibliothèque d'exécution pour toutes les fonctions d'E/S nécessaires.

-memregs=nombre
Spécifie le nombre de pseudo-registres basés sur la mémoire que GCC utilisera pendant le code
génération. Ces pseudo-registres seront utilisés comme de vrais registres, il y a donc un
compromis entre la capacité de GCC à insérer le code dans les registres disponibles, et la
pénalité de performance due à l'utilisation de la mémoire au lieu des registres. Notez que tous les modules d'un
programme doit être compilé avec la même valeur pour cette option. A cause de cela, vous
ne doit pas utiliser cette option avec les bibliothèques d'exécution par défaut des builds gcc.

M32R / D Options

Ces -m des options sont définies pour les architectures Renesas M32R/D :

-m32r2
Générez le code pour le M32R/2.

-m32rx
Générez du code pour le M32R/X.

-m32r
Générez du code pour le M32R. C'est la valeur par défaut.

-mmodel=petit
Supposons que tous les objets vivent dans les 16 Mo inférieurs de mémoire (afin que leurs adresses puissent être
chargé avec l'instruction "ld24") et supposer que tous les sous-programmes sont accessibles avec le
instruction "bl". C'est la valeur par défaut.

L'adressabilité d'un objet particulier peut être définie avec l'attribut "modèle".

-mmodel=moyen
Supposons que les objets puissent se trouver n'importe où dans l'espace d'adressage 32 bits (le compilateur générera
instructions "seth/add3" pour charger leurs adresses), et supposer que tous les sous-programmes sont
accessible avec l'instruction "bl".

-mmodel=grand
Supposons que les objets puissent se trouver n'importe où dans l'espace d'adressage 32 bits (le compilateur générera
instructions "seth/add3" pour charger leurs adresses), et supposer que les sous-routines peuvent ne pas être
accessible avec l'instruction "bl" (le compilateur générera le plus lent
séquence d'instructions "seth/add3/jl").

-msdata=aucun
Désactiver l'utilisation de la petite zone de données. Les variables seront placées dans l'un des .Les données, bssou
.rodata (sauf si l'attribut "section" a été spécifié). C'est la valeur par défaut.

La petite zone de données se compose de sections .sdata ainsi que .sbss. Les objets peuvent être explicitement
mettre dans la petite zone de données avec l'attribut "section" en utilisant l'une de ces sections.

-msdonnées=sdonnées
Mettez de petites données globales et statiques dans la petite zone de données, mais ne générez pas de données spéciales
code pour les référencer.

-msdata=utiliser
Mettez de petites données globales et statiques dans la petite zone de données et générez des
instructions pour les référencer.

-G num
Mettez les objets globaux et statiques inférieurs ou égaux à num octets dans les petites données ou
sections bss au lieu des données normales ou des sections bss. La valeur par défaut de num is
8. le -msdata l'option doit être définie sur l'une des données s or utilisé pour que cette option ait
effet.

Tous les modules doivent être compilés avec le même -G num valeur. Compiler avec différents
valeurs de num peut ou peut ne pas fonctionner ; si ce n'est pas le cas, l'éditeur de liens donnera une erreur
message --- un code incorrect ne sera pas généré.

-mdebug
Fait en sorte que le code spécifique à M32R dans le compilateur affiche des statistiques qui pourraient aider
dans les programmes de débogage.

-boucles malignes
Alignez toutes les boucles sur une limite de 32 octets.

-mno-align-boucles
N'appliquez pas un alignement de 32 octets pour les boucles. C'est la valeur par défaut.

-taux d'erreur=nombre
Question nombre instructions par cycle. nombre ne peut être que 1 ou 2.

-mbranche-coût=nombre
nombre ne peut être que 1 ou 2. Si c'est 1 alors les branches seront préférées
code conditionnel, s'il est 2, alors l'inverse s'appliquera.

-mflush-trap=nombre
Spécifie le numéro d'interruption à utiliser pour vider le cache. La valeur par défaut est 12. Valide
les nombres sont compris entre 0 et 15 inclus.

-mno-flush-trap
Spécifie que le cache ne peut pas être vidé à l'aide d'une interruption.

-mflush-func=prénom
Spécifie le nom de la fonction du système d'exploitation à appeler pour vider le cache. Les
la valeur par défaut est _flush_cache, mais un appel de fonction ne sera utilisé que si un trap n'est pas
disponible.

-mno-flush-func
Indique qu'il n'y a pas de fonction du système d'exploitation pour vider le cache.

M680x0 Options

Ce sont les -m options définies pour les processeurs M680x0 et ColdFire. Les paramètres par défaut
dépendent de l'architecture sélectionnée lors de la configuration du compilateur ; les valeurs par défaut
pour les choix les plus courants sont donnés ci-dessous.

-mars=arche
Générez du code pour une architecture de jeu d'instructions M680x0 ou ColdFire spécifique.
Valeurs admissibles de arche pour les architectures M680x0 sont : 68000, 68010, 68020, 68030,
68040, 68060 ainsi que cpu32. Les architectures ColdFire sont sélectionnées selon les critères de Freescale
La classification ISA et les valeurs admissibles sont : Isaa, isaaplus, isabe ainsi que isac.

gcc définit une macro __mcfarche__ chaque fois qu'il génère du code pour une cible ColdFire.
La arche dans cette macro est l'un des -Mars arguments avancés ci-dessus.

Lorsqu'ils sont utilisés ensemble, -Mars ainsi que -mtune sélectionnez le code qui s'exécute sur une famille de
processeurs mais qui est optimisé pour une microarchitecture particulière.

-mcpu=cpu
Générez du code pour un processeur M680x0 ou ColdFire spécifique. Le M680x0 cpuS sont:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 ainsi que cpu32. Le Feu Froid cpus
sont donnés par le tableau ci-dessous, qui classe également les CPU en familles :

Famille : -mcpu arguments
51 : 51 51ac 51cn 51em 51qe
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211 : 5210 5211
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485

-mcpu=cpu remplacements -mars=arche if arche est compatible avec cpu. D'autres combinaisons de
-mcpu ainsi que -Mars sont rejetés.

gcc définit la macro __mcf_cpu_cpu lorsque ColdFire cible cpu est sélectionné. Ça aussi
définit __mcf_famille_famille, où la valeur de famille est donnée par le tableau ci-dessus.

-mtune=régler
Réglez le code pour une microarchitecture particulière, dans les limites fixées par -Mars
ainsi que -mcpu. Les microarchitectures M680x0 sont : 68000, 68010, 68020, 68030, 68040,
68060 ainsi que cpu32. Les microarchitectures ColdFire sont : cfv1, cfv2, cfv3, cfv4 ainsi que
cfv4e.

Vous pouvez également utiliser -mtune=68020-40 pour le code qui doit fonctionner relativement bien sur 68020,
cibles 68030 et 68040. -mtune=68020-60 est similaire mais comprend 68060 cibles comme
bien. Ces deux options sélectionnent les mêmes décisions de réglage que -m68020-40 ainsi que -m68020-60
respectivement.

gcc définit les macros __mcarche ainsi que __mcarche__ lors du réglage pour l'architecture 680x0
arche. Il définit également mcarche à moins que soit -ansi ou un non-GNU -std option est utilisée.
Si gcc s'adapte à une gamme d'architectures, comme sélectionné par -mtune=68020-40 or
-mtune=68020-60, il définit les macros pour chaque architecture de la gamme.

gcc définit également la macro __muarque__ lors du réglage de la microarchitecture ColdFire
uarque, Où uarque est l'un des arguments avancés ci-dessus.

-m68000
-mc68000
Générer une sortie pour un 68000. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68000. C'est équivalent à -mars=68000.

Utilisez cette option pour les microcontrôleurs avec un cœur 68000 ou EC000, y compris le 68008,
68302, 68306, 68307, 68322, 68328 et 68356.

-m68010
Générer une sortie pour un 68010. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68010. C'est équivalent à -mars=68010.

-m68020
-mc68020
Générer une sortie pour un 68020. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68020. C'est équivalent à -mars=68020.

-m68030
Générer une sortie pour un 68030. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68030. C'est équivalent à -mars=68030.

-m68040
Générer une sortie pour un 68040. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68040. C'est équivalent à -mars=68040.

Cette option interdit l'utilisation des instructions 68881/68882 qui doivent être émulées par
logiciel sur le 68040. Utilisez cette option si votre 68040 n'a pas de code à émuler
ces instructions.

-m68060
Générer une sortie pour un 68060. C'est la valeur par défaut lorsque le compilateur est configuré pour
systèmes basés sur 68060. C'est équivalent à -mars=68060.

Cette option interdit l'utilisation des instructions 68020 et 68881/68882 qui doivent être
émulé par le logiciel sur le 68060. Utilisez cette option si votre 68060 n'a pas de code
pour imiter ces instructions.

-mcpu32
Générer une sortie pour un CPU32. C'est la valeur par défaut lorsque le compilateur est configuré pour
Systèmes basés sur CPU32. C'est équivalent à -mars=cpu32.

Utilisez cette option pour les microcontrôleurs avec un cœur CPU32 ou CPU32+, y compris le 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 et 68360.

-m5200
Générez une sortie pour un processeur ColdFire 520X. C'est la valeur par défaut lorsque le compilateur est
configuré pour les systèmes basés sur 520X. C'est équivalent à -mcpu=5206, et est maintenant
dépréciée en faveur de cette option.

Utilisez cette option pour le microcontrôleur avec un cœur 5200, y compris le MCF5202, MCF5203,
MCF5204 et MCF5206.

-m5206e
Générez une sortie pour un processeur ColdFire 5206e. L'option est désormais dépréciée au profit de
l'équivalent -mcpu=5206e.

-m528x
Générez une sortie pour un membre de la famille ColdFire 528X. L'option est maintenant
déprécié au profit de l'équivalent -mcpu=528x.

-m5307
Générer une sortie pour un CPU ColdFire 5307. L'option est désormais dépréciée au profit de la
équivalent -mcpu=5307.

-m5407
Générer une sortie pour un CPU ColdFire 5407. L'option est désormais dépréciée au profit de la
équivalent -mcpu=5407.

-mcfv4e
Générer une sortie pour un CPU de la famille ColdFire V4e (par exemple 547x/548x). Cela inclut l'utilisation de
instructions matérielles à virgule flottante. L'option équivaut à -mcpu=547x, et est
désormais obsolète au profit de cette option.

-m68020-40
Générez une sortie pour un 68040, sans utiliser aucune des nouvelles instructions. Cela résulte
dans un code qui peut s'exécuter relativement efficacement sur un 68020/68881 ou un 68030 ou un
68040. Le code généré utilise les instructions 68881 qui sont émulées sur le
68040.

L'option équivaut à -mars=68020 -mtune=68020-40.

-m68020-60
Générez une sortie pour un 68060, sans utiliser aucune des nouvelles instructions. Cela résulte
dans un code qui peut s'exécuter relativement efficacement sur un 68020/68881 ou un 68030 ou un
68040. Le code généré utilise les instructions 68881 qui sont émulées sur le
68060.

L'option équivaut à -mars=68020 -mtune=68020-60.

-mhard-float
-m68881
Générer des instructions à virgule flottante. C'est la valeur par défaut pour 68020 et au-dessus, et
pour les appareils ColdFire qui ont un FPU. Il définit la macro __HAVE_68881__ sur M680x0
cibles et __mcffpu__ sur les cibles ColdFire.

-msoft-float
Ne générez pas d'instructions à virgule flottante ; utilisez plutôt les appels de bibliothèque. C'est le
par défaut pour les cibles 68000, 68010 et 68832. C'est aussi la valeur par défaut pour ColdFire
appareils qui n'ont pas de FPU.

-mdiv
-mno-div
Générez (ne générez pas) les instructions de division et de reste du matériel ColdFire. Si
-Mars s'utilise sans -mcpu, la valeur par défaut est "on" pour les architectures ColdFire et "off"
pour les architectures M680x0. Sinon, la valeur par défaut provient du CPU cible (soit
le CPU par défaut, ou celui spécifié par -mcpu). Par exemple, la valeur par défaut est « désactivé »
en -mcpu=5206 et "on" pour -mcpu=5206e.

gcc définit la macro __mcfhwdiv__ lorsque cette option est activée.

-mcourt
Considérez le type "int" comme ayant une largeur de 16 bits, comme "short int". De plus, les paramètres
transmis sur la pile sont également alignés sur une limite de 16 bits même sur les cibles dont l'API
oblige la promotion à 32 bits.

-mno-court
Ne considérez pas que le type "int" a une largeur de 16 bits. C'est la valeur par défaut.

-champ de bits
-mno-champ de bits
N'utilisez pas les instructions de champ de bits. Les -m68000, -mcpu32 ainsi que -m5200 les options impliquent
-champ de bits.

-champbit
Utilisez les instructions de champ de bits. Les -m68020 option implique -champbit. C'est
la valeur par défaut si vous utilisez une configuration conçue pour un 68020.

-mrtd
Utilisez une convention d'appel de fonction différente, dans laquelle les fonctions qui prennent un
nombre d'arguments renvoyés avec l'instruction "rtd", qui affiche leurs arguments
en rentrant. Cela permet d'économiser une instruction dans l'appelant puisqu'il n'est pas nécessaire de
pop les arguments là-bas.

Cette convention d'appel est incompatible avec celle normalement utilisée sous Unix, vous
ne peut pas l'utiliser si vous devez appeler des bibliothèques compilées avec le compilateur Unix.

De plus, vous devez fournir des prototypes de fonction pour toutes les fonctions qui prennent des variables
nombre d'arguments (y compris "printf"); sinon un code incorrect sera généré
pour les appels à ces fonctions.

De plus, un code sérieusement incorrect se produira si vous appelez une fonction avec trop de
arguments. (Normalement, les arguments supplémentaires sont ignorés sans danger.)

L'instruction "rtd" est supportée par les 68010, 68020, 68030, 68040, 68060 et CPU32
processeurs, mais pas par le 68000 ou le 5200.

-mno-rtd
N'utilisez pas les conventions d'appel sélectionnées par -mrtd. C'est la valeur par défaut.

-malign-int
-mno-align-int
Contrôlez si GCC aligne "int", "long", "long long", "float", "double" et "long
double" variables sur une limite de 32 bits (-malign-int) ou une limite de 16 bits
(-mno-align-int). L'alignement des variables sur les limites 32 bits produit du code qui s'exécute
un peu plus rapide sur les processeurs avec des bus 32 bits au détriment de plus de mémoire.

Mise en garde: si vous utilisez le -malign-int commutateur, GCC alignera les structures contenant le
types ci-dessus différemment de la plupart des interfaces binaires d'application publiées
spécifications pour le m68k.

-mpcrel
Utilisez directement le mode d'adressage relatif au PC du 68000, au lieu d'utiliser un
tableau de décalage. À l'heure actuelle, cette option implique -fpic, permettant au plus un décalage de 16 bits
pour l'adressage relatif au PC. -fPIC n'est actuellement pas pris en charge avec -mpcrel, mais
cela pourrait être pris en charge pour les processeurs 68020 et supérieurs.

-mno-strict-aligner
-mstrict-aligner
Ne supposez pas (ne supposez pas) que les références de mémoire non alignées seront gérées par le système.

-msep-données
Générer du code qui permet au segment de données d'être situé dans une zone différente de la mémoire
du segment de texte. Cela permet d'exécuter sur place dans un environnement sans
gestion de la mémoire virtuelle. Cette option implique -fPIC.

-mno-sep-données
Générez du code qui suppose que le segment de données suit le segment de texte. C'est
le défaut.

-mi-bibliothèque-partagée
Générez du code qui prend en charge les bibliothèques partagées via la méthode d'ID de bibliothèque. Ceci permet
pour exécuter sur place et bibliothèques partagées dans un environnement sans mémoire virtuelle
la gestion. Cette option implique -fPIC.

-mno-id-bibliothèque-partagée
Générez du code qui ne suppose pas que des bibliothèques partagées basées sur l'ID sont utilisées. C'est
le défaut.

-mshared-library-id=n
A spécifié le numéro d'identification de la bibliothèque partagée basée sur l'ID en cours de compilation.
Spécifier une valeur de 0 générera un code plus compact, spécifier d'autres valeurs
forcer l'attribution de ce numéro à la bibliothèque actuelle mais il n'y a plus d'espace ou
gagner du temps que d'omettre cette option.

-mxgot
-mno-xgot
Lors de la génération de code indépendant de la position pour ColdFire, générez un code qui fonctionne si
le GOT compte plus de 8192 entrées. Ce code est plus gros et plus lent que le code
généré sans cette option. Sur les processeurs M680x0, cette option n'est pas nécessaire ; -fPIC
suffit.

GCC utilise normalement une seule instruction pour charger les valeurs du GOT. Alors que c'est
relativement efficace, il ne fonctionne que si le GOT est inférieur à environ 64k. N'importe quoi
plus grand amène l'éditeur de liens à signaler une erreur telle que :

déménagement tronqué pour s'adapter : R_68K_GOT16O foobar

Si cela se produit, vous devez recompiler votre code avec -mxgot. Il devrait alors fonctionner avec
très gros GOT. Cependant, le code généré avec -mxgot est moins efficace, car il
prend 4 instructions pour récupérer la valeur d'un symbole global.

Notez que certains éditeurs de liens, y compris les versions plus récentes de l'éditeur de liens GNU, peuvent créer
plusieurs GOT et trier les entrées GOT. Si vous avez un tel éditeur de liens, vous n'aurez besoin que
à utiliser -mxgot lors de la compilation d'un fichier objet unique qui accède à plus de 8192 GOT
entrées. Très peu le font.

Ces options n'ont aucun effet à moins que GCC ne génère un code indépendant de la position.

MCore Options

Ce sont les -m options définies pour les processeurs Motorola M*Core.

-mhardlit
-mno-hardlit
Inline constantes dans le flux de code si cela peut être fait en deux instructions ou moins.

-mdiv
-mno-div
Utilisez l'instruction de division. (Activé par défaut).

-mrelax-immédiat
-mno-relax-immédiat
Autoriser les immédiats de taille arbitraire dans les opérations sur les bits.

-mwide-bitfields
-mno-wide-bitfields
Traitez toujours les champs de bits comme des entiers.

-m4byte-fonctions
-mno-4byte-fonctions
Forcer toutes les fonctions à être alignées sur une limite de 4 octets.

-mcallgraph-données
-mno-callgraph-données
Émettre des informations de callgraph.

-mslow-octets
-mno-octets lents
Privilégiez l'accès aux mots lors de la lecture des quantités d'octets.

-mlittle-endian
-mbig-endian
Générer du code pour une cible little-endian.

-m210
-m340
Générez du code pour le processeur 210.

-mno-lsim
Supposons que le support d'exécution a été fourni et donc omettez la bibliothèque de simulateur
(libsim.a) à partir de la ligne de commande de l'éditeur de liens.

-mstack-increment=taille
Définissez le montant maximum pour une opération d'incrémentation de pile unique. Les grandes valeurs peuvent
augmenter la vitesse des programmes contenant des fonctions nécessitant une grande quantité de
l'espace de la pile, mais ils peuvent aussi déclencher une erreur de segmentation si la pile est étendue
trop. La valeur par défaut est 0x1000.

Député Options

-mabsdiff
Active l'instruction "abs", qui est la différence absolue entre deux registres.

-centre commercial
Active toutes les instructions facultatives - opérations de moyenne, multiplication, division, bit,
zéro non significatif, différence absolue, min/max, écrêtage et saturation.

-moyenne
Active l'instruction "ave", qui calcule la moyenne de deux registres.

-mbased=n
Variables de taille n octets ou moins seront placés dans la section ".based" par
défaut. Les variables basées utilisent le registre $tp comme registre de base, et il existe un
Limite de 128 octets à la section ".based".

-mbitops
Active les instructions d'opération de bit - test de bit ("btstm"), set ("bsetm"), clear
("bclrm"), invert ("bnotm") et test-and-set ("tas").

-mc=prénom
Sélectionne la section dans laquelle les données constantes seront placées. prénom peut être "minuscule", "proche" ou
"loin".

-mclip
Active l'instruction "clip". Notez que "-mclip" n'est utile que si vous
fournir "-mminmax".

-mconfig=prénom
Sélectionne l'une des configurations de base intégrées. Chaque puce MeP a un ou plusieurs
modules en elle; chaque module dispose d'un processeur central et d'une variété de coprocesseurs, en option
instructions et périphériques. L'outil "MeP-Integrator", ne faisant pas partie de GCC, fournit
ces configurations via cette option ; utiliser cette option revient à utiliser tous
les options de ligne de commande correspondantes. La configuration par défaut est "par défaut".

-mcop
Active les instructions du coprocesseur. Par défaut, il s'agit d'un coprocesseur 32 bits. Noter
que le coprocesseur est normalement activé via l'option "-mconfig=".

-mcop32
Active les instructions du coprocesseur 32 bits.

-mcop64
Active les instructions du coprocesseur 64 bits.

-mivc2
Active la planification IVC2. IVC2 est un coprocesseur VLIW 64 bits.

-mdc
Provoque le placement des variables constantes dans la section ".near".

-mdiv
Active les instructions "div" et "divu".

-meb
Générez du code gros-boutiste.

-mel
Générez du code little-endian.

-mio-volatil
Indique au compilateur que toute variable marquée avec l'attribut "io" doit être
considérée comme volatile.

-ml Par défaut, les variables sont affectées à la section ".far".

-mleadz
Active l'instruction "leadz" (zéro non significatif).

-mm Par défaut, les variables sont affectées à la section ".near".

-mminmax
Active les instructions "min" et "max".

-mmult
Active les instructions de multiplication et de multiplication-accumulation.

-mno-opt
Désactive toutes les instructions facultatives activées par "-mall-opts".

-mrépéter
Active les instructions "repeat" et "erepeat", utilisées pour le bouclage à faible surcharge.

-SP Entraîne la valeur par défaut de toutes les variables dans la section ".tiny". Notez qu'il existe un
Limite de 65536 octets pour cette section. Les accès à ces variables utilisent la base %gp
inscrivez-vous.

-msaturé
Active les instructions de saturation. Notez que le compilateur ne
les générer lui-même, mais cette option est incluse pour la compatibilité avec d'autres outils,
comme en".

-msdram
Liez le runtime basé sur SDRAM au lieu du runtime basé sur la ROM par défaut.

-msim
Liez les bibliothèques d'exécution du simulateur.

-msimnovec
Liez les bibliothèques d'exécution du simulateur, à l'exclusion de la prise en charge intégrée de la réinitialisation et
vecteurs et tables d'exception.

-mtf
Toutes les fonctions sont définies par défaut sur la section ".far". Sans cette option, les fonctions
par défaut à la section ".near".

-mtiny=n
Des variables qui n octets ou moins seront alloués à la section ".tiny". Ces
les variables utilisent le registre de base $gp. La valeur par défaut pour cette option est 4, mais notez que
il y a une limite de 65536 octets à la section ".tiny".

Microblaze Options

-msoft-float
Utiliser l'émulation logicielle pour la virgule flottante (par défaut).

-mhard-float
Utilisez des instructions matérielles à virgule flottante.

-mmemcpy
N'optimisez pas les déplacements de blocs, utilisez "memcpy".

-mno-clearbss
Cette option est obsolète. Utilisation -fno-zero-initialisé-en-bss à la place.

-mcpu=type de processeur
Utilisez les fonctionnalités et le code de planification pour un processeur donné. Les valeurs prises en charge sont au format
vX.YY.Z, Où X est une version majeure, YY est la version mineure, et Z est la compatibilité
code. Des exemples de valeurs sont v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b, v6.00.a.

-mxl-soft-mul
Utiliser l'émulation de multiplication logicielle (par défaut).

-mxl-soft-div
Utilisez l'émulation logicielle pour les divisions (par défaut).

-mxl-baril-shift
Utilisez le levier de vitesses à barillet.

-mxl-pattern-comparer
Utilisez les instructions de comparaison de modèles.

-msmall-divise
Utilisez l'optimisation de la recherche de table pour les petites divisions entières signées.

-mxl-pile-vérifier
Cette option est obsolète. Utilisez plutôt -fstack-check.

-mxl-gp-opt
Utilisez les sections sdata/sbss relatives GP.

-mxl-multiplier-haut
Utilisez les instructions de multiplication haute pour la partie haute de la multiplication 32x32.

-mxl-float-convert
Utilisez les instructions de conversion matérielle à virgule flottante.

-mxl-float-sqrt
Utilisez l'instruction matérielle de racine carrée à virgule flottante.

-mode-mxl-modèle d'application
Sélectionnez le modèle d'application modèle d'application. Les modèles valides sont

exécutable
exécutable normal (par défaut), utilise le code de démarrage crt0.o.

xmdstub
à utiliser avec le débogage intrusif du logiciel basé sur le débogueur de microprocesseur Xilinx (XMD)
agent appelé xmdstub. Cela utilise le fichier de démarrage crt1.o et définit l'adresse de début de
le programme à 0x800.

bootstrap
pour les applications chargées à l'aide d'un chargeur de démarrage. Ce modèle utilise le fichier de démarrage
crt2.o qui ne contient pas de gestionnaire de vecteur de réinitialisation de processeur. Cela convient
pour transférer le contrôle sur une réinitialisation du processeur au chargeur de démarrage plutôt qu'au
.

novecteurs
pour les applications qui ne nécessitent aucun des vecteurs MicroBlaze. Cette option
peut être utile pour les applications exécutées dans une application de surveillance. Ce modèle
Usages crt3.o comme fichier de démarrage.

Option -mode-xl-modèle d'application est un alias obsolète pour -mode-mxl-modèle d'application.

MIPS Options

-EB Générez du code gros-boutiste.

-LA Générez du code little-endian. C'est la valeur par défaut pour mips*el-*-* configurations.

-mars=arche
Générer du code qui s'exécutera sur arche, qui peut être le nom d'un MIPS ISA générique, ou
le nom d'un processeur particulier. Les noms ISA sont : mips1, mips2, mips3, mips4,
mips32, mips32r2, mips64 ainsi que mips64r2. Les noms des processeurs sont : 4kc, 4km, 4kp, 4kc,
4kec, 4kem, 4Kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1,
24kef1_1, 34kc, 34kf2_1, 34kf1_1, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1,
1004kf1_1, loongson2e, loongson2f, longson3a, M4K, octéon, octéon+, octon2, orion,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 ainsi que xlr. La valeur spéciale de-abi sélectionne le plus compatible
l'architecture de l'ABI sélectionnée (c'est-à-dire, mips1 pour les ABI 32 bits et mips3 pour 64 bits
ABI).

Les chaînes d'outils natives Linux/GNU et IRIX prennent également en charge la valeur indigène, qui sélectionne le
meilleure option d'architecture pour le processeur hôte. -mars=natif n'a aucun effet si GCC
ne reconnaît pas le processeur.

Dans les noms de processeur, un dernier 000 peut être abrégé comme k (par exemple, -mars=r2k).
Les préfixes sont facultatifs et vr peut être écrit r.

Noms du formulaire nf2_1 font référence aux processeurs avec des FPU cadencés à la moitié du taux de la
noyau, noms de la forme nf1_1 font référence aux processeurs avec des FPU cadencés au même rythme
comme noyau, et les noms de la forme nf3_2 se référer aux processeurs avec des FPU cadencés à un ratio
de 3:2 par rapport au noyau. Pour des raisons de compatibilité, nf est accepté comme un
synonyme de nf2_1 tout en nx ainsi que bfx sont acceptés comme synonymes de nf1_1.

GCC définit deux macros en fonction de la valeur de cette option. Le premier est _MIPS_ARCH,
qui donne le nom de l'architecture cible, sous forme de chaîne. La seconde a la forme
_MIPS_ARCH_foo, Où foo est la valeur capitalisée de _MIPS_ARCH. Par exemple,
-mars=r2000 va définir _MIPS_ARCH à "r2000" et définir la macro _MIPS_ARCH_R2000.

Notez que le _MIPS_ARCH macro utilise les noms de processeur donnés ci-dessus. En d'autres termes,
il aura le préfixe complet et ne sera pas abrégé 000 as k. Dans le cas de de-
abi, la macro nomme l'architecture résolue (soit "mips1" or "mips3"). Il nomme
l'architecture par défaut lorsque non -Mars option est donnée.

-mtune=arche
Optimiser pour arche. Entre autres choses, cette option contrôle la façon dont les instructions sont
prévu et le coût perçu des opérations arithmétiques. La liste de arche valeurs
est le même que pour -Mars.

Lorsque cette option n'est pas utilisée, GCC optimisera pour le processeur spécifié par -Mars.
En utilisant -Mars ainsi que -mtune ensemble, il est possible de générer du code qui s'exécutera sur
une famille de processeurs, mais optimiser le code pour un membre particulier de cette
Famille.

-mtune définit les macros _MIPS_TUNE ainsi que _MIPS_TUNE_foo, qui fonctionnent de la même manière que
le -Mars celles décrites ci-dessus.

-mips1
Équivalent à -mars=mips1.

-mips2
Équivalent à -mars=mips2.

-mips3
Équivalent à -mars=mips3.

-mips4
Équivalent à -mars=mips4.

-mips32
Équivalent à -mars=mips32.

-mips32r2
Équivalent à -mars=mips32r2.

-mips64
Équivalent à -mars=mips64.

-mips64r2
Équivalent à -mars=mips64r2.

-mips16
-mno-mips16
Générez (ne générez pas) le code MIPS16. Si GCC cible un MIPS32 ou MIPS64
architecture, il utilisera le MIPS16e ASE.

La génération de code MIPS16 peut également être contrôlée fonction par fonction au moyen de
attributs "mips16" et "nomips16".

-mflip-mips16
Générer du code MIPS16 sur des fonctions alternées. Cette option est fournie pour la régression
test de génération de code mixte MIPS16/non-MIPS16, et n'est pas destiné à un usage ordinaire
utiliser dans la compilation du code utilisateur.

-minterlink-mips16
-mno-interlink-mips16
Exiger (ne pas exiger) que le code non-MIPS16 soit compatible avec le code MIPS16.

Par exemple, le code non-MIPS16 ne peut pas passer directement au code MIPS16 ; il doit soit utiliser un
appel ou un saut indirect. -minterlink-mips16 désactive donc les sauts directs à moins que
GCC sait que la cible du saut n'est pas MIPS16.

-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Générer du code pour l'ABI donnée.

Notez que l'EABI a une variante 32 bits et une variante 64 bits. GCC génère normalement 64 bits
code lorsque vous sélectionnez une architecture 64 bits, mais vous pouvez utiliser -mgp32 pour obtenir un code 32 bits
à la place.

Pour plus d'informations sur l'ABI O64, voirhttp://gcc.gnu.org/projects/mipso64-abi.html>.

GCC prend en charge une variante de l'ABI o32 dans laquelle les registres à virgule flottante sont 64 plutôt
de 32 bits de large. Vous pouvez sélectionner cette combinaison avec -mabi=32 -mfp64. Cette ABI
repose sur le mthc1 ainsi que mfhc1 instructions et n'est donc pris en charge que pour
Processeurs MIPS32R2.

Les affectations de registre pour les arguments et les valeurs de retour restent les mêmes, mais chaque
la valeur scalaire est transmise dans un seul registre 64 bits plutôt qu'une paire de 32 bits
registres. Par exemple, les valeurs à virgule flottante scalaires sont renvoyées dans $f0 seulement, pas un
$f0/$f1 paire. L'ensemble des registres d'appels enregistrés reste également le même, mais tous les 64 bits
sont sauvegardés.

-appels mabicaux
-mno-abicales
Générez (ne générez pas) de code adapté aux objets dynamiques de style SVR4.
-appels mabicaux est la valeur par défaut pour les systèmes basés sur SVR4.

-mpartagé
-mno-partagé
Générez (ne générez pas) du code totalement indépendant de la position et pouvant
donc être liés à des bibliothèques partagées. Cette option n'affecte que -appels mabicaux.

Tous -appels mabicaux le code a traditionnellement été indépendant de la position, quelles que soient les options
comme -fPIC ainsi que -fpic. Cependant, en tant qu'extension, la chaîne d'outils GNU autorise les exécutables
d'utiliser des accès absolus pour les symboles de liaison locale. Il peut également utiliser un GP plus court
séquences d'initialisation et générer des appels directs à des fonctions définies localement. Cette
le mode est sélectionné par -mno-partagé.

-mno-partagé dépend de binutils 2.16 ou supérieur et génère des objets qui ne peuvent être
lié par l'éditeur de liens GNU. Cependant, l'option n'affecte pas l'ABI de la finale
exécutable ; cela n'affecte que l'ABI des objets déplaçables. À l'aide de -mno-partagé sera
rendent généralement les exécutables à la fois plus petits et plus rapides.

-mpartagé est la valeur par défaut.

-mplt
-mno-plt
Supposons (ne supposez pas) que les lieurs statiques et dynamiques prennent en charge les PLT et copiez
déménagements. Cette option n'affecte que -mno-partagé -appels mabicaux. Pour l'ABI n64, cette
l'option n'a aucun effet sans -msym32.

Tu peux faire -mplt la valeur par défaut en configurant GCC avec --avec-mips-plt. Le défaut
is -mno-plt autrement.

-mxgot
-mno-xgot
Lever (ne pas lever) les restrictions habituelles sur la taille de la table de décalage global.

GCC utilise normalement une seule instruction pour charger les valeurs du GOT. Alors que c'est
relativement efficace, cela ne fonctionnera que si le GOT est inférieur à environ 64k.
Tout ce qui est plus grand entraînera l'éditeur de liens à signaler une erreur telle que :

relocalisation tronquée pour s'adapter : R_MIPS_GOT16 foobar

Si cela se produit, vous devez recompiler votre code avec -mxgot. Il devrait alors fonctionner avec
très gros GOT, même si ce sera aussi moins efficace, car il faudra trois
instructions pour récupérer la valeur d'un symbole global.

Notez que certains éditeurs de liens peuvent créer plusieurs GOT. Si vous avez un tel éditeur de liens, vous
devrait seulement avoir besoin d'utiliser -mxgot lorsqu'un seul fichier objet accède à plus de 64k
valeur des entrées GOT. Très peu le font.

Ces options n'ont aucun effet à moins que GCC ne génère un code indépendant de la position.

-mgp32
Supposons que les registres à usage général aient une largeur de 32 bits.

-mgp64
Supposons que les registres à usage général aient une largeur de 64 bits.

-mfp32
Supposons que les registres à virgule flottante aient une largeur de 32 bits.

-mfp64
Supposons que les registres à virgule flottante aient une largeur de 64 bits.

-mhard-float
Utilisez des instructions de coprocesseur à virgule flottante.

-msoft-float
N'utilisez pas d'instructions de coprocesseur à virgule flottante. Implémenter la virgule flottante
calculs utilisant des appels de bibliothèque à la place.

-msingle-flotteur
Supposons que le coprocesseur à virgule flottante ne prend en charge que les opérations en simple précision.

-mdouble-flotteur
Supposons que le coprocesseur à virgule flottante prend en charge les opérations en double précision. Cette
est la valeur par défaut.

-mllsc
-mno-llsc
Utiliser (ne pas utiliser) ll, scet synchroniser instructions pour implémenter la mémoire atomique intégrée
les fonctions. Lorsqu'aucune option n'est spécifiée, GCC utilisera les instructions si le
l'architecture cible les prend en charge.

-mllsc est utile si l'environnement d'exécution peut émuler les instructions et -mno-llsc
peut être utile lors de la compilation d'ISA non standard. Vous pouvez faire de l'une ou l'autre option le
par défaut en configurant GCC avec --avec-llsc ainsi que --sans-llsc respectivement.
--avec-llsc est la valeur par défaut pour certaines configurations ; voir la documentation d'installation
pour en savoir plus.

-mdsp
-mno-dsp
Utilisez (ne pas utiliser) la révision 1 du MIPS DSP ASE.
Cette option définit la macro du préprocesseur __mips_dsp. Il définit également
__mips_dsp_rev à 1.

-mdspr2
-mno-dspr2
Utilisez (ne pas utiliser) la révision 2 du MIPS DSP ASE.
Cette option définit les macros du préprocesseur __mips_dsp ainsi que __mips_dspr2. Elle
définit __mips_dsp_rev à 2.

-msmartmips
-mno-smartmips
Utilisez (ne pas utiliser) le MIPS SmartMIPS ASE.

-simple-altéré
-mno-paire-single
Utilisez (n'utilisez pas) des instructions à virgule flottante unique appariée.
Cette option nécessite l'activation de la prise en charge matérielle des virgules flottantes.

-mdmx
-mno-mdmx
Utilisez (ne pas utiliser) les instructions de MIPS Digital Media Extension. Cette option ne peut être
utilisé lors de la génération de code 64 bits et nécessite la prise en charge matérielle de la virgule flottante
activée.

-mips3d
-mno-mips3d
Utilisez (ne pas utiliser) le MIPS-3D ASE. L'option -mips3d implique -simple-altéré.

-mmt
-mno-mt
Utilisez (ne pas utiliser) les instructions MT Multithreading.

-mlong64
Forcer les types "longs" à avoir une largeur de 64 bits. Voir -mlong32 pour une explication du défaut
et la façon dont la taille du pointeur est déterminée.

-mlong32
Forcer les types "long", "int" et pointeur à avoir une largeur de 32 bits.

La taille par défaut des "int", "long" et des pointeurs dépend de l'ABI. Tous les
les ABI prises en charge utilisent des "int" 32 bits. L'ABI n64 utilise des "longs" 64 bits, tout comme le 64 bits
EABI ; les autres utilisent des "longs" 32 bits. Les pointeurs ont la même taille que les "longs", ou le
même taille que les registres d'entiers, selon la plus petite des deux.

-msym32
-mno-sym32
Supposons (ne supposez pas) que tous les symboles ont des valeurs de 32 bits, quel que soit le
ABI. Cette option est utile en combinaison avec -mabi=64 ainsi que -mno-abicales parce qu'il
permet à GCC de générer des références plus courtes et plus rapides à des adresses symboliques.

-G num
Mettez les définitions des données visibles de l'extérieur dans une petite section de données si ces données ne sont pas
plus grand que num octets. GCC peut alors accéder aux données plus efficacement ; voir -mgpopt en
détails.

Le défaut -G option dépend de la configuration.

-mlocal-sdata
-mno-local-sdata
Étendre (ne pas étendre) le -G comportement aux données locales aussi, comme aux variables statiques
dans C. -mlocal-sdata est la valeur par défaut pour toutes les configurations.

Si l'éditeur de liens se plaint qu'une application utilise trop de petites données, vous pouvez
voulez essayer de reconstruire les pièces les moins critiques avec -mno-local-sdata. Vous
peut également vouloir construire de grandes bibliothèques avec -mno-local-sdata, afin que les bibliothèques
laisser plus de place au programme principal.

-mextern-sdata
-mno-extern-sdata
Supposons (ne supposez pas) que les données définies en externe seront dans une petite section de données si
que les données se trouvent dans le -G limite. -mextern-sdata est la valeur par défaut pour tous
configurations.

Si vous compilez un module Façon avec -mextern-sdata -G num -mgpoptet Façon référence un
variable Chaque ce n'est pas plus grand que num octets, vous devez vous assurer que Chaque est placé
dans une petite section de données. Si Chaque est défini par un autre module, vous devez soit compiler
ce module avec une assez haute -G définir ou attacher un attribut "section" à Chaque's
définition. Si Chaque est courant, vous devez lier l'application avec un -G
réglage.

Le moyen le plus simple de satisfaire ces restrictions est de compiler et de lier chaque module
avec la même -G option. Cependant, vous souhaiterez peut-être créer une bibliothèque prenant en charge
plusieurs petites limites de données différentes. Vous pouvez le faire en compilant la bibliothèque avec
le plus élevé pris en charge -G réglage et en plus à l'aide -mno-extern-sdata pour arrêter le
bibliothèque de faire des hypothèses sur les données définies de l'extérieur.

-mgpopt
-mno-gpopt
Utiliser (ne pas utiliser) les accès relatifs au GP pour les symboles connus pour être dans une petite donnée
section; voir -G, -mlocal-sdata ainsi que -mextern-sdata. -mgpopt est la valeur par défaut pour tous
configurations.

-mno-gpopt est utile pour les cas où le registre $gp pourrait ne pas contenir la valeur de
"_gp". Par exemple, si le code fait partie d'une bibliothèque qui peut être utilisée dans un boot
monitor, les programmes qui appellent les routines de boot monitor passeront une valeur inconnue dans $gp.
(Dans de telles situations, le moniteur de démarrage lui-même serait généralement compilé avec -G0.)

-mno-gpopt implique -mno-local-sdata ainsi que -mno-extern-sdata.

-données-intégrées
-mno-données-intégrées
Allouez d'abord les variables à la section de données en lecture seule si possible, puis ensuite dans la
petite section de données si possible, sinon dans les données. Cela donne un code légèrement plus lent
que la valeur par défaut, mais réduit la quantité de RAM requise lors de l'exécution, et peut donc
être préféré pour certains systèmes embarqués.

-muninit-const-in-rodata
-mno-uninit-const-dans-rodata
Mettez les variables "const" non initialisées dans la section de données en lecture seule. Cette option est
n'a de sens qu'en conjonction avec -données-intégrées.

-mcode-lisible=mise
Spécifiez si GCC peut générer du code qui se lit à partir des sections exécutables. Il y a
trois réglages possibles :

-mcode-readable=oui
Les instructions peuvent accéder librement aux sections exécutables. Ce sont les paramètres par défauts.

-mcode-lisible=pcrel
Les instructions de chargement MIPS16 relatives au PC peuvent accéder aux sections exécutables, mais d'autres
les instructions ne doivent pas le faire. Cette option est utile sur les processeurs 4KSc et 4KSd
lorsque les TLB de code ont le bit d'interdiction de lecture défini. Il est également utile sur les processeurs
qui peut être configuré pour avoir une double interface SRAM instruction/données et qui,
comme le M4K, redirigent automatiquement les charges relatives au PC vers la RAM d'instructions.

-mcode-readable=non
Les instructions ne doivent pas accéder aux sections exécutables. Cette option peut être utile sur
cibles qui sont configurées pour avoir une double interface SRAM instruction/données mais
qui (contrairement au M4K) ne redirigent pas automatiquement les charges relatives au PC vers le
RAM d'instructions.

-msplit-adresses
-mno-split-adresses
Activer (désactiver) l'utilisation des opérateurs de relocalisation d'assembleur "%hi()" et "%lo()". Cette
l'option a été remplacée par -mexplicit-relocs mais est retenu pour l'arrière
compatibilité.

-mexplicit-relocs
-mno-explicite-relocs
Utilisez (n'utilisez pas) les opérateurs de relocalisation d'assembleur lorsque vous traitez des adresses symboliques.
L'alternative, choisie par -mno-explicite-relocs, consiste à utiliser des macros assembleur à la place.

-mexplicit-relocs est la valeur par défaut si GCC a été configuré pour utiliser un assembleur qui
soutient les opérateurs de relocalisation.

-mcheck-division-zéro
-mno-check-zéro-division
Piège (ne pas piège) sur division entière par zéro.

La valeur par défaut est -mcheck-division-zéro.

-mdivide-pièges
-mdivide-pauses
Les systèmes MIPS vérifient la division par zéro en générant soit un déroutement conditionnel, soit un
instruction de pause. L'utilisation de traps donne un code plus petit, mais n'est pris en charge que sur MIPS
II et plus tard. De plus, certaines versions du noyau Linux ont un bogue qui empêche le piège
de générer le signal approprié ("SIGFPE"). Utilisation -mdivide-pièges permettre au conditionnel
pièges sur les architectures qui les supportent et -mdivide-pauses pour forcer l'utilisation de
des pauses.

La valeur par défaut est généralement -mdivide-pièges, mais cela peut être remplacé au moment de la configuration
en utilisant --with-divide=casse. Les contrôles de division par zéro peuvent être complètement désactivés en utilisant
-mno-check-zéro-division.

-mmemcpy
-mno-memcpy
Forcez (ne forcez pas) l'utilisation de "memcpy()" pour les mouvements de blocs non triviaux. Le défaut
is -mno-memcpy, ce qui permet à GCC d'intégrer la plupart des copies de taille constante.

-mlong-appels
-mno-long-appels
Désactivez (ne désactivez pas) l'utilisation de l'instruction "jal". Appeler des fonctions avec "jal"
est plus efficace mais nécessite que l'appelant et l'appelé soient dans le même 256 mégaoctets
segment.

Cette option n'a aucun effet sur le code abicalls. La valeur par défaut est -mno-long-appels.

-mmad
-mno-fou
Activer (désactiver) l'utilisation des instructions « mad », « madu » et « mul », telles que fournies par le
R4650ISA.

-mfused-mad
-mno-fusionné-madd
Activer (désactiver) l'utilisation des instructions de multiplication-accumulation à virgule flottante, lorsqu'elles
sont disponibles. La valeur par défaut est -mfused-mad.

Lorsque des instructions de multiplication-accumulation sont utilisées, le produit intermédiaire est calculé
avec une précision infinie et n'est pas soumis au bit FCSR Flush to Zero. Cela peut être
indésirables dans certaines circonstances.

-nocpp
Dites à l'assembleur MIPS de ne pas exécuter son préprocesseur sur les fichiers assembleur utilisateur (avec un
.s suffixe) lors de leur assemblage.

-mfix-24k
-mno-fix-24k
Contournez l'errata 24K E48 (données perdues sur les magasins pendant la recharge). Les solutions de contournement
sont implémentés par l'assembleur plutôt que par GCC.

-mfix-r4000
-mno-fix-r4000
Contournez certains errata du processeur R4000 :

- Un mot double ou un décalage variable peut donner un résultat incorrect s'il est exécuté
immédiatement après avoir commencé une division entière.

- Un mot double ou un décalage variable peut donner un résultat incorrect s'il est exécuté pendant
une multiplication d'entiers est en cours.

- Une division entière peut donner un résultat incorrect si elle est lancée dans un intervalle de retard d'un
branche prise ou un saut.

-mfix-r4400
-mno-fix-r4400
Contournez certains errata du processeur R4400 :

- Un mot double ou un décalage variable peut donner un résultat incorrect s'il est exécuté
immédiatement après avoir commencé une division entière.

-mfix-r10000
-mno-fix-r10000
Contournement de certains errata R10000 :

- Les séquences "ll"/"sc" peuvent ne pas se comporter de manière atomique sur les révisions antérieures à 3.0. Ils peuvent
blocage sur les révisions 2.6 et antérieures.

Cette option ne peut être utilisée que si l'architecture cible prend en charge les branches probables
des instructions. -mfix-r10000 est la valeur par défaut lorsque -mars=r10000 est utilisé; -mno-fix-r10000
est la valeur par défaut sinon.

-mfix-vr4120
-mno-fix-vr4120
Contournement de certains errata du VR4120 :

- "dmultu" ne produit pas toujours le bon résultat.

- "div" et "ddiv" ne produisent pas toujours le bon résultat si l'un des opérandes
est négatif.

Les solutions de contournement pour les errata de division reposent sur des fonctions spéciales dans libgcc.a. À
présentes, ces fonctions ne sont fournies que par les configurations "mips64vr*-elf".

D'autres errata VR4120 nécessitent l'insertion d'un nop entre certaines paires de
instructions. Ces errata sont gérés par l'assembleur, pas par GCC lui-même.

-mfix-vr4130
Contournez l'errata "mflo"/"mfhi" du VR4130. Les solutions de contournement sont mises en œuvre par le
assembleur plutôt que par GCC, bien que GCC évitera d'utiliser "mflo" et "mfhi" si le
Les instructions VR4130 "macc", "macchi", "dmacc" et "dmacchi" sont disponibles à la place.

-mfix-sb1
-mno-fix-sb1
Contournez certains errata du cœur du processeur SB-1. (Ce drapeau fonctionne actuellement autour du SB-1
révision 2 "F1" et "F2" errata à virgule flottante.)

-mr10k-cache-barrier=mise
Spécifiez si GCC doit insérer des barrières de cache pour éviter les effets secondaires de
spéculation sur les processeurs R10K.

Comme de nombreux processeurs, le R10K essaie de prédire le résultat d'un
branche et exécute de manière spéculative les instructions de la branche "prise". Il plus tard
interrompt ces instructions si le résultat prévu était erroné. Cependant, sur le R10K,
même les instructions avortées peuvent avoir des effets secondaires.

Ce problème n'affecte que les magasins du noyau et, selon le système, les charges du noyau.
Par exemple, un magasin exécuté de manière spéculative peut charger la mémoire cible dans le cache
et marquez la ligne de cache comme sale, même si le magasin lui-même est abandonné plus tard. Si un DMA
l'opération écrit dans la même zone de mémoire avant que la ligne "sale" ne soit vidée, le
les données mises en cache écraseront les données DMA. Voir le manuel du processeur R10K pour un
description, y compris d'autres problèmes potentiels.

Une solution de contournement consiste à insérer des instructions de barrière de cache avant chaque accès à la mémoire qui
pourrait être exécuté de manière spéculative et cela pourrait avoir des effets secondaires même s'il est avorté.
-mr10k-cache-barrier=mise contrôle la mise en œuvre par GCC de cette solution de contournement. Ce
suppose que les accès avortés à n'importe quel octet dans les régions suivantes n'auront pas de côté
effets:

1. la mémoire occupée par le cadre de pile de la fonction actuelle ;

2. la mémoire occupée par un argument de pile entrant ;

3. la mémoire occupée par un objet avec une adresse de constante de temps de liaison.

Il est de la responsabilité du noyau de s'assurer que les accès spéculatifs à ces régions
sont en effet en sécurité.

Si le programme d'entrée contient une déclaration de fonction telle que :

void foo (vide);

alors l'implémentation de "foo" doit permettre l'exécution de "j foo" et "jal foo"
spéculativement. GCC respecte cette restriction pour les fonctions qu'il compile lui-même. Ce
s'attend à ce que les fonctions non GCC (comme le code assembleur écrit à la main) fassent de même.

L'option a trois formes :

-mr10k-cache-barrier=charger-magasin
Insérer une barrière de cache avant un chargement ou un stockage qui pourrait être exécuté de manière spéculative
et cela peut avoir des effets secondaires même s'il est avorté.

-mr10k-cache-barrier=magasin
Insérez une barrière de cache avant un magasin qui pourrait être exécuté de manière spéculative et
cela pourrait avoir des effets secondaires même s'il est avorté.

-mr10k-cache-barrier=aucun
Désactivez l'insertion de barrières de cache. Ce sont les paramètres par défauts.

-mflush-func=fonction
-mno-flush-func
Spécifie la fonction à appeler pour vider les caches I et D, ou pour ne pas en appeler
fonction. Si elle est appelée, la fonction doit prendre les mêmes arguments que le commun
"_flush_func()", c'est-à-dire l'adresse de la plage de mémoire pour laquelle le cache est
vidés, la taille de la plage de mémoire et le nombre 3 (pour vider les deux caches). Les
par défaut dépend de la cible GCC a été configuré pour, mais est généralement soit
_flush_func or __cpu_flush.

mbranche-coût=num
Fixez le coût des succursales à environ num instructions "simples". Ce coût n'est qu'un
heuristique et n'est pas garanti de produire des résultats cohérents entre les versions. Un zéro
le coût sélectionne de manière redondante la valeur par défaut, qui est basée sur le -mtune réglage.

-mbranche-probable
-mno-branche-probable
Activer ou désactiver l'utilisation des instructions Branch Likely, quelle que soit la valeur par défaut du
architecture choisie. Par défaut, les instructions Branch Likely peuvent être générées si
ils sont supportés par l'architecture choisie. Une exception est pour le MIPS32 et
Architectures et processeurs MIPS64 qui implémentent ces architectures ; pour ceux,
Les instructions Branch Likely ne seront pas générées par défaut car les MIPS32 et
Les architectures MIPS64 désapprouvent spécifiquement leur utilisation.

-exceptions-mfp
-mno-fp-exceptions
Spécifie si les exceptions FP sont activées. Cela affecte la façon dont nous planifions la PF
instructions pour certains processeurs. Par défaut, les exceptions FP sont activées.

Par exemple, sur le SB-1, si les exceptions FP sont désactivées et que nous émettons 64 bits
code, alors nous pouvons utiliser les deux tuyaux FP. Sinon, nous ne pouvons utiliser qu'un seul tuyau FP.

-mvr4130-aligner
-mno-vr4130-aligner
Le pipeline VR4130 est superscalaire bidirectionnel, mais ne peut émettre que deux instructions
ensemble si le premier est aligné sur 8 octets. Lorsque cette option est activée, GCC
aligner des paires d'instructions qu'il pense devoir exécuter en parallèle.

Cette option n'a d'effet que lors de l'optimisation pour le VR4130. Il fait normalement du code
plus vite, mais au détriment de l'agrandir. Il est activé par défaut à
niveau d'optimisation -O3.

-msynci
-mno-synci
Activer (désactiver) la génération d'instructions "synci" sur les architectures qui la supportent.
Les instructions "synci" (si activées) seront générées lorsque
"__builtin___clear_cache()" est compilé.

Cette option est par défaut "-mno-synci", mais la valeur par défaut peut être remplacée en configurant
avec "--avec-synci".

Lors de la compilation de code pour des systèmes à processeur unique, il est généralement sûr d'utiliser "synci".
Cependant, sur de nombreux systèmes multicœurs (SMP), cela n'invalidera pas l'instruction
caches sur tous les cœurs et peut conduire à un comportement indéfini.

-mrelax-pic-calls
-mno-relax-pic-calls
Essayez de transformer les appels PIC qui sont normalement envoyés via le registre 25 $ en appels directs.
Ceci n'est possible que si l'éditeur de liens peut résoudre la destination au moment de la liaison et si
la destination est à portée pour un appel direct.

-mrelax-pic-calls est la valeur par défaut si GCC a été configuré pour utiliser un assembleur et un
l'éditeur de liens qui prend en charge la directive d'assemblage ".reloc" et "-mexplicit-relocs" est dans
effet. Avec "-mno-explicit-relocs", cette optimisation peut être effectuée par le
assembleur et l'éditeur de liens seuls sans l'aide du compilateur.

-mmcount-ra-adresse
-mno-mcount-ra-adresse
Emettre (ne pas émettre) de code qui permet à "_mcount" de modifier le retour de la fonction appelante
adresse. Lorsqu'elle est activée, cette option étend l'interface habituelle "_mcount" avec un nouveau
ra-adresse paramètre, qui a le type "intptr_t *" et est passé dans le registre $12.
"_mcount" peut alors modifier l'adresse de retour en effectuant les deux opérations suivantes :

· Retour de la nouvelle adresse dans le registre 31 $.

· Mémorisation de la nouvelle adresse dans "*ra-adresse", Si ra-adresse est non nul.

La valeur par défaut est -mno-mcount-ra-adresse.

MÉLANGE Options

Ces options sont définies pour le MMIX :

-mlibfuncs
-mno-libfuncs
Spécifiez que les fonctions de bibliothèque intrinsèques sont en cours de compilation, en passant toutes les valeurs dans
registres, quelle que soit leur taille.

-mepsilon
-mno-epsilon
Générer des instructions de comparaison à virgule flottante qui comparent par rapport au "rE"
registre epsilon.

-mabi=mmixware
-mabi=gnou
Générer du code qui transmet les paramètres de fonction et renvoie des valeurs qui (dans le
fonction) sont considérés comme des registres à partir de 0 $, par opposition à l'ABI GNU qui utilise
s'inscrit à 231 $ et plus.

-mzero-étendre
-mno-zero-étendre
Lors de la lecture de données de la mémoire dans des tailles inférieures à 64 bits, utilisez (ne pas utiliser) zéro-
étendre les instructions de chargement par défaut, plutôt que celles qui étendent le signe.

-mknuthdiv
-mno-knuthdiv
Faire en sorte que le résultat d'une division donnant un reste ait le même signe que le diviseur.
Avec la valeur par défaut, -mno-knuthdiv, le signe du reste suit le signe du
dividende. Les deux méthodes sont arithmétiquement valides, la dernière étant presque exclusivement
utilisé.

-mtoplevel-symboles
-mno-toplevel-symboles
Ajouter (ne pas ajouter) a : à tous les symboles globaux, donc le code assembleur peut être utilisé
avec la directive d'assemblage "PREFIX".

-moi
Générer un exécutable au format ELF, plutôt que le format par défaut mmo format utilisé par
le mmmix simulateur.

-mbranche-prédire
-mno-branche-prédire
Utiliser (ne pas utiliser) les instructions de branche probable, lorsque la prédiction de branche statique
indique une branche probable.

-mbase-adresses
-mno-base-adresses
Générer (ne pas générer) de code qui utilise base adresses. Utiliser une adresse de base
génère automatiquement une requête (traitée par l'assembleur et l'éditeur de liens) pour un
constante à paramétrer dans un registre global. Le registre est utilisé pour une ou plusieurs bases
les demandes d'adresses comprises entre 0 et 255 à partir de la valeur contenue dans le registre. Les
conduit généralement à un code court et rapide, mais le nombre d'éléments de données différents qui
peut être abordé est limité. Cela signifie qu'un programme qui utilise beaucoup de données statiques
peut nécessiter -mno-base-adresses.

-msortie unique
-mno-simple-sortie
Forcer (ne pas forcer) le code généré à avoir un seul point de sortie dans chaque fonction.

MN10300 Options

Ces -m les options sont définies pour les architectures Matsushita MN10300 :

-mmult-bogue
Générez du code pour éviter les bogues dans les instructions de multiplication pour les processeurs MN10300.
C'est la valeur par défaut.

-mno-mult-bogue
Ne générez pas de code pour éviter les bogues dans les instructions de multiplication pour le MN10300
processeurs.

-maman33
Générez du code à l'aide de fonctionnalités spécifiques au processeur AM33.

-mno-am33
Ne générez pas de code en utilisant des fonctionnalités spécifiques au processeur AM33. C'est le
défaut.

-maman33-2
Générez du code à l'aide de fonctionnalités spécifiques au processeur AM33/2.0.

-maman34
Générez du code à l'aide de fonctionnalités spécifiques au processeur AM34.

-mtune=type de processeur
Utilisez les caractéristiques de synchronisation du type de CPU indiqué lors de la planification des instructions.
Cela ne change pas le type de processeur ciblé. Le type de CPU doit être l'un des
mn10300, am33, am33-2 or am34.

-mreturn-pointeur-sur-d0
Lors de la génération d'une fonction qui renvoie un pointeur, renvoyez le pointeur à la fois dans "a0" et
"d0". Sinon, le pointeur n'est renvoyé que dans a0 et tente d'appeler un tel
fonctions sans prototype entraînerait des erreurs. Notez que cette option est activée par
défaut; utilisation -mno-retour-pointeur-sur-d0 pour le désactiver.

-mno-crt0
Ne pas lier dans le fichier objet d'initialisation d'exécution C.

-mrelax
Indiquez à l'éditeur de liens qu'il doit effectuer une passe d'optimisation de relaxation pour
raccourcir les branches, les appels et les adresses mémoire absolues. Cette option n'a d'effet que
lorsqu'il est utilisé sur la ligne de commande pour l'étape de liaison finale.

Cette option rend le débogage symbolique impossible.

-mliw
Autoriser le compilateur à générer Location Instruction Word instructions si la cible est le
AM33 ou plus tard. C'est la valeur par défaut. Cette option définit la macro du préprocesseur
__LIW__.

-mnoliw
Ne pas autoriser le compilateur à générer Location Instruction Word instructions. Cette option
définit la macro du préprocesseur __NO_LIW__.

-msetlb
Autoriser le compilateur à générer le SETLB ainsi que LCC instructions si la cible est le
AM33 ou plus tard. C'est la valeur par défaut. Cette option définit la macro du préprocesseur
__SETLB__.

-mnosetlb
Ne pas autoriser le compilateur à générer SETLB or LCC instructions. Cette option définit
la macro du préprocesseur __NO_SETLB__.

PDP-11 Options

Ces options sont définies pour le PDP-11 :

-mfpu
Utilisez la virgule flottante FPP matérielle. C'est la valeur par défaut. (virgule flottante FIS sur le
PDP-11/40 n'est pas pris en charge.)

-msoft-float
N'utilisez pas de virgule flottante matérielle.

-mac0
Renvoie les résultats en virgule flottante dans ac0 (fr0 dans la syntaxe assembleur Unix).

-mno-ac0
Renvoie les résultats en virgule flottante en mémoire. C'est la valeur par défaut.

-m40
Générez du code pour un PDP-11/40.

-m45
Générez du code pour un PDP-11/45. C'est la valeur par défaut.

-m10
Générez du code pour un PDP-11/10.

-mbcopy-intégré
Utilisez des modèles "movmemhi" en ligne pour copier la mémoire. C'est la valeur par défaut.

-mbcopie
N'utilisez pas de modèles "movmemhi" en ligne pour copier la mémoire.

-menthe16
-mno-int32
Utilisez "int" 16 bits. C'est la valeur par défaut.

-menthe32
-mno-int16
Utilisez "int" 32 bits.

-mfloat64
-mno-float32
Utilisez le "float" 64 bits. C'est la valeur par défaut.

-mfloat32
-mno-float64
Utilisez "float" 32 bits.

-mabshi
Utilisez le modèle "abshi2". C'est la valeur par défaut.

-mno-abshi
N'utilisez pas le modèle "abshi2".

-mbranche-cher
Imaginez que les succursales sont chères. Ceci est pour expérimenter la génération de code
seulement.

-mbranche-pas cher
Ne prétendez pas que les branches sont chères. C'est la valeur par défaut.

-munix-asm
Utilisez la syntaxe assembleur Unix. Il s'agit de la valeur par défaut lorsqu'il est configuré pour pdp11-*-bsd.

-mdec-asm
Utilisez la syntaxe assembleur DEC. C'est la valeur par défaut lorsqu'elle est configurée pour n'importe quelle cible PDP-11
autre que pdp11-*-bsd.

picoChip Options

Ces -m les options sont définies pour les implémentations picoChip :

-mae=ae_type
Définir le jeu d'instructions, le jeu de registres et les paramètres de planification d'instructions pour le tableau
type d'élément ae_type. Valeurs prises en charge pour ae_type à N'IMPORTE QUELLE RÉUNION sur la liste., MULet MAC.

-mae=TOUT sélectionne un type AE complètement générique. Le code généré avec cette option sera
fonctionner sur l'un des autres types d'AE. Le code ne sera pas aussi efficace qu'il le serait si
compilé pour un type AE spécifique et certains types d'opérations (par exemple, multiplication)
ne fonctionnera pas correctement sur tous les types d'AE.

-mae=MUL sélectionne un type MUL AE. C'est le type AE le plus utile pour le code compilé,
et est la valeur par défaut.

-mae=MAC sélectionne un MAC AE de style DSP. Le code compilé avec cette option peut souffrir de
mauvaise performance de la manipulation d'octets (car), puisque le DSP AE ne fournit pas
prise en charge matérielle pour le chargement/les magasins d'octets.

-msymbole-comme-adresse
Permet au compilateur d'utiliser directement un nom de symbole comme adresse dans un chargement/stockage
instruction, sans la charger au préalable dans un registre. En règle générale, l'utilisation de ce
L'option générera des programmes plus volumineux, qui s'exécuteront plus rapidement que lorsque l'option n'est pas
utilisé. Cependant, les résultats varient d'un programme à l'autre, il est donc laissé à l'utilisateur
option, plutôt que d'être activé en permanence.

-mno-inefficace-warnings
Désactive les avertissements concernant la génération de code inefficace. Ces avertissements peuvent être
généré, par exemple, lors de la compilation de code qui effectue des opérations de mémoire au niveau de l'octet
sur le type MAC AE. Le MAC AE n'a pas de support matériel pour la mémoire au niveau de l'octet
opérations, de sorte que tous les chargements/stocks d'octets doivent être synthétisés à partir du chargement/stockage de mots
opérations. Ceci est inefficace et un avertissement sera généré indiquant au
programmeur qu'ils doivent réécrire le code pour éviter les opérations sur les octets, ou pour cibler un
Type AE qui a le support matériel nécessaire. Cette option permet à l'avertissement de
être éteint.

PowerPC Options

Ceux-ci sont répertoriés sous

RL78 Options

-msim
Liens dans des bibliothèques cibles supplémentaires pour prendre en charge le fonctionnement dans un simulateur.

-mmul=aucun
-mmul=g13
-mmul=rl78
Spécifie le type de support de multiplication matérielle à utiliser. La valeur par défaut est
"aucun", qui utilise des fonctions de multiplication logicielles. L'option "g13" est pour le
le matériel multiplie/divise le périphérique uniquement sur les cibles RL78/G13. L'option "rl78"
est pour la multiplication matérielle standard définie dans le manuel du logiciel RL78.

IBM RS / 6000 ainsi que PowerPC Options

Ces -m les options sont définies pour l'IBM RS/6000 et le PowerPC :

-mpuissance
-mno-puissance
-mpower2
-mno-puissance2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
GCC prend en charge deux architectures de jeux d'instructions connexes pour le RS/6000 et le PowerPC.
La RENFORCER jeu d'instructions sont les instructions prises en charge par le rios jeu de puces utilisé
dans les systèmes RS/6000 d'origine et le PowerPC jeu d'instructions est l'architecture de
les microprocesseurs Freescale MPC5xx, MPC6xx, MPC8xx et les IBM 4xx, 6xx et
microprocesseurs de suivi.

Aucune architecture n'est un sous-ensemble de l'autre. Cependant, il existe un grand sous-ensemble commun
d'instructions prises en charge par les deux. Un registre MQ est inclus dans les processeurs
prenant en charge l'architecture POWER.

Vous utilisez ces options pour spécifier quelles instructions sont disponibles sur le processeur que vous
utilisent. La valeur par défaut de ces options est déterminée lors de la configuration de GCC.
Spécification du -mcpu=type_cpu remplace la spécification de ces options. Nous
vous recommandons d'utiliser le -mcpu=type_cpu option plutôt que les options énumérées ci-dessus.

La -mpuissance permet à GCC de générer des instructions qui ne se trouvent que dans le
l'architecture POWER et d'utiliser le registre MQ. En précisant -mpower2 implique -Puissance ainsi que
permet également à GCC de générer des instructions présentes dans l'architecture POWER2
mais pas l'architecture POWER d'origine.

La -mpowerpc permet à GCC de générer des instructions qui ne se trouvent que dans le
Sous-ensemble 32 bits de l'architecture PowerPC. En précisant -mpowerpc-gpopt implique
-mpowerpc et permet également à GCC d'utiliser les instructions optionnelles de l'architecture PowerPC dans
le groupe Usage général, y compris la racine carrée à virgule flottante. En précisant
-mpowerpc-gfxopt implique -mpowerpc et permet également à GCC d'utiliser le PowerPC en option
instructions d'architecture dans le groupe Graphics, y compris la sélection à virgule flottante.

La -mmfcrf L'option permet à GCC de générer le déplacement depuis le champ du registre de condition
instruction implémentée sur le processeur POWER4 et d'autres processeurs qui prennent en charge le
Architecture PowerPC V2.01. Les -mpopcntb L'option permet à GCC de générer le popcount
et instruction d'estimation réciproque FP double précision implémentée sur le POWER5
processeur et d'autres processeurs prenant en charge l'architecture PowerPC V2.02. Les
-mpopcntd permet à GCC de générer l'instruction popcount implémentée sur le
Processeur POWER7 et autres processeurs prenant en charge l'architecture PowerPC V2.06.
La -mfprnd L'option permet à GCC de générer les instructions d'arrondi FP en nombre entier
implémenté sur le processeur POWER5+ et d'autres processeurs prenant en charge le PowerPC
Architecture V2.03. Les -mcmpb L'option permet à GCC de générer les octets de comparaison
instruction implémentée sur le processeur POWER6 et d'autres processeurs qui prennent en charge le
Architecture PowerPC V2.05. Les -mmfpgpr L'option permet à GCC de générer le mouvement FP
vers/depuis les instructions de registre à usage général implémentées sur le processeur POWER6X et
d'autres processeurs prenant en charge l'architecture étendue PowerPC V2.05. Les -mhard-dfp
permet à GCC de générer les instructions décimales à virgule flottante implémentées sur
certains processeurs POWER.

La -mpowerpc64 permet à GCC de générer les instructions 64 bits supplémentaires qui
se trouvent dans l'architecture PowerPC64 complète et pour traiter les GPR comme des mots doubles 64 bits
quantités. GCC est par défaut -mno-powerpc64.

Si vous spécifiez les deux -mno-puissance ainsi que -mno-powerpc, GCC utilisera uniquement les instructions de
le sous-ensemble commun des deux architectures plus quelques appels en mode commun AIX spéciaux, et
n'utilisera pas le registre MQ. Spécifier les deux -mpuissance ainsi que -mpowerpc permet à GCC de
utiliser n'importe quelle instruction de l'une ou l'autre architecture et permettre l'utilisation du registre MQ ;
spécifiez-le pour le Motorola MPC601.

-mnew-mnémonique
-mold-mnémonique
Sélectionnez les mnémoniques à utiliser dans le code assembleur généré. Avec -mnew-mnémonique,
GCC utilise les mnémoniques assembleur définis pour l'architecture PowerPC. Avec
-mold-mnémonique il utilise les mnémoniques assembleur définis pour l'architecture POWER.
Les instructions définies dans une seule architecture n'ont qu'un seul mnémonique ; GCC utilise cela
mnémonique quelle que soit l'option spécifiée.

GCC utilise par défaut les mnémoniques appropriés à l'architecture utilisée. En précisant
-mcpu=type_cpu remplace parfois la valeur de ces options. A moins que vous ne construisiez
un compilateur croisé, vous ne devriez normalement pas spécifier non plus -mnew-mnémonique or
-mold-mnémonique, mais devrait plutôt accepter la valeur par défaut.

-mcpu=type_cpu
Définir le type d'architecture, l'utilisation des registres, le choix des mnémoniques et la planification des instructions
paramètres pour le type de machine type_cpu. Valeurs prises en charge pour type_cpu 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, ec603e, G3, G4, G5, Titan, power, power2, power3, power4, power5,
puissance5+, power6, puissance6x, power7, commun, powerpc, puissancepc64, rios, rivières1, rivières2, rsc,
ainsi que rs64.

-mcpu=commun sélectionne un processeur complètement générique. Code généré sous cette option
fonctionnera sur n'importe quel processeur POWER ou PowerPC. GCC n'utilisera que les instructions du
sous-ensemble commun des deux architectures, et n'utilisera pas le registre MQ. GCC suppose un
modèle de processeur générique à des fins de planification.

-mcpu=puissance, -mcpu=puissance2, -mcpu=powerpcet -mcpu=powerpc64 spécifier PUISSANCE générique,
POWER2, ​​pure PowerPC 32 bits (c'est-à-dire pas MPC601) et architecture PowerPC 64 bits
types de machines, avec un modèle de processeur générique approprié supposé pour l'ordonnancement
fins pratiques.

Les autres options spécifient un processeur spécifique. Code généré sous ces options
fonctionnera mieux sur ce processeur, et peut ne pas fonctionner du tout sur les autres.

La -mcpu les options activent ou désactivent automatiquement les options suivantes :

-maltivec -mfprnd -mhard-float -mmfcrf -mmultiple -mnew-mnémonique -mpopcntb
-mpopcntd -mpuissance -mpower2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-flotteur -mdouble-flotteur -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx

Les options particulières définies pour un processeur particulier varieront entre les versions du compilateur,
selon quel paramètre semble produire un code optimal pour ce processeur ; ce n'est pas
reflètent nécessairement les capacités réelles du matériel. Si vous souhaitez définir un
option individuelle à une valeur particulière, vous pouvez la spécifier après le -mcpu option,
comme -mcpu=970 -mno-altivec.

Sous AIX, le -maltivec ainsi que -mpowerpc64 les options ne sont pas activées ou désactivées par le -mcpu
option à l'heure actuelle car AIX ne prend pas entièrement en charge ces options. Tu peux
activez-les ou désactivez-les individuellement si vous êtes sûr que cela fonctionnera dans votre
environnement.

-mtune=type_cpu
Définir les paramètres de planification des instructions pour le type de machine type_cpu, mais ne définissez pas
le type d'architecture, l'utilisation du registre ou le choix des mnémoniques, comme -mcpu=type_cpu
aurait. Les mêmes valeurs pour type_cpu sont utilisés pour -mtune pour ce qui est de -mcpu. Si les deux sont
spécifié, le code généré utilisera l'architecture, les registres et les mnémoniques définis
by -mcpu, mais les paramètres de planification définis par -mtune.

-mcmodel=petit
Générer du code PowerPC64 pour le petit modèle : Le TOC est limité à 64k.

-mcmodel=moyen
Générer du code PowerPC64 pour le modèle moyen : la table des matières et d'autres données statiques peuvent être en place
à un total de 4G en taille.

-mcmodel=grand
Générez du code PowerPC64 pour le grand modèle : le TOC peut atteindre une taille de 4G. Autre
les données et le code ne sont limités que par l'espace d'adressage 64 bits.

-maltivec
-mno-altivec
Générer du code qui utilise (n'utilise pas) les instructions AltiVec, et permet également l'utilisation
de fonctions intégrées qui permettent un accès plus direct au jeu d'instructions AltiVec.
Vous devrez peut-être également définir -mabi=altivec pour ajuster l'ABI actuelle avec AltiVec ABI
améliorations.

-mvrsave
-Mno-Vrsave
Générez des instructions VRSAVE lors de la génération du code AltiVec.

-mgen-cell-microcode
Générer des instructions de microcode de cellule

-mwarn-cell-microcode
Avertissement lorsqu'une instruction de microcode Cell va être émise. Un exemple de cellule
L'instruction du microcode est un décalage variable.

-msecure-plt
Générer du code qui permet à ld et ld.so de créer des exécutables et des bibliothèques partagées avec
sections non exécutives .plt et .got. Il s'agit d'une option ABI SYSV 32 bits pour PowerPC.

-mbss-plt
Générez du code qui utilise une section BSS .plt que ld.so remplit et qui nécessite .plt et
.got sections qui sont à la fois inscriptibles et exécutables. Il s'agit d'un SYSV PowerPC 32 bits
Option ABI.

-misel
-mno-isel
Ce commutateur active ou désactive la génération d'instructions ISEL.

-misel=Oui Non
Ce commutateur est obsolète. Utilisation -misel ainsi que -mno-isel à la place.

-mspe
-mno-spé
Ce commutateur active ou désactive la génération d'instructions SPE simd.

-altéré
-mno-apparié
Ce commutateur active ou désactive la génération d'instructions PAIRED simd.

-mspe=Oui Non
Cette option a été dépréciée. Utilisation -mspe ainsi que -mno-spé à la place.

-mvsx
-mno-vsx
Générer du code qui utilise (n'utilise pas) des instructions vectorielles/scalaires (VSX), et également
permettre l'utilisation de fonctions intégrées qui permettent un accès plus direct au VSX
jeu d'instructions.

-mfloat-gprs =oui/simple/double/non
-mfloat-gprs
Ce commutateur active ou désactive la génération d'opérations à virgule flottante sur le
registres à usage général pour les architectures qui le prennent en charge.

L'argument Oui or unique permet l'utilisation de la virgule flottante simple précision
opérations.

L'argument double permet l'utilisation de virgule flottante simple et double précision
opérations.

L'argument aucune désactive les opérations à virgule flottante sur les registres à usage général.

Cette option n'est actuellement disponible que sur le MPC854x.

-m32
-m64
Générez du code pour les environnements 32 bits ou 64 bits des cibles Darwin et SVR4 (y compris
GNU/Linux). L'environnement 32 bits définit int, long et pointer sur 32 bits et
génère du code qui s'exécute sur n'importe quelle variante de PowerPC. L'environnement 64 bits définit int sur
32 bits et long et pointeur sur 64 bits, et génère du code pour PowerPC64, comme pour
-mpowerpc64.

-mfull-toc
-mno-fp-en-toc
-mno-somme-en-toc
-minimal-toc
Modifier la génération de la TOC (Table Of Contents), qui est créée pour chaque
fichier exécutable. Les -mfull-toc l'option est sélectionnée par défaut. Dans ce cas, GCC
allouera au moins une entrée de table des matières pour chaque référence de variable non automatique unique
dans votre programme. GCC placera également des constantes à virgule flottante dans la table des matières. Cependant,
seules 16,384 XNUMX entrées sont disponibles dans la table des matières.

Si vous recevez un message d'erreur de l'éditeur de liens indiquant que vous avez dépassé le nombre disponible
Espace TOC, vous pouvez réduire la quantité d'espace TOC utilisé avec le -mno-fp-en-toc ainsi que
-mno-somme-en-toc options. -mno-fp-en-toc empêche GCC de mettre en virgule flottante
constantes dans la table des matières et -mno-somme-en-toc force GCC à générer du code pour calculer le
somme d'une adresse et d'une constante au moment de l'exécution au lieu de mettre cette somme dans la table des matières.
Vous pouvez spécifier l'une de ces options ou les deux. Chacun fait en sorte que GCC produise très
code légèrement plus lent et plus volumineux au détriment de la conservation de l'espace TOC.

Si vous manquez toujours d'espace dans la table des matières même lorsque vous spécifiez ces deux options,
spécifier -minimal-toc au lieu. Cette option oblige GCC à créer une seule entrée de table des matières pour
chaque fichier. Lorsque vous spécifiez cette option, GCC produira un code plus lent et
plus grand mais qui utilise extrêmement peu d'espace TOC. Vous pouvez utiliser cette option
uniquement sur les fichiers qui contiennent du code exécuté moins fréquemment.

-maix64
-maix32
Activez l'ABI AIX 64 bits et la convention d'appel : pointeurs 64 bits, type "long" 64 bits et
l'infrastructure nécessaire pour les soutenir. En précisant -maix64 implique -mpowerpc64 ainsi que
-mpowerpc, tandis que -maix32 désactive l'ABI 64 bits et implique -mno-powerpc64. CCG
Par défaut -maix32.

-mxl-compat
-mno-xl-compat
Produisez du code plus conforme à la sémantique du compilateur IBM XL lors de l'utilisation d'AIX-
ABI compatible. Passer des arguments à virgule flottante aux fonctions prototypées au-delà du
enregistrer la zone de sauvegarde (RSA) sur la pile en plus des arguments FPR. Ne présume pas
ce double le plus significatif dans une valeur double de 128 bits est correctement arrondi lorsque
comparer les valeurs et convertir en double. Utilisez les noms de symboles XL pour les longs doubles
les routines de soutien.

La convention d'appel AIX a été étendue mais n'a pas été initialement documentée pour gérer un
obscur cas K&R C d'appel d'une fonction qui prend l'adresse de ses arguments avec
moins d'arguments que déclarés. Les compilateurs IBM XL accèdent à des arguments à virgule flottante qui
ne rentrent pas dans le RSA de la pile lorsqu'un sous-programme est compilé sans
optimisation. Parce que toujours stocker des arguments à virgule flottante sur la pile est
inefficace et rarement nécessaire, cette option n'est pas activée par défaut et n'est
nécessaire lors de l'appel de sous-programmes compilés par les compilateurs IBM XL sans optimisation.

-mpe
Assistance IBM RS / 6000 SP Parallèle Environment (PE). Lier une application écrite à utiliser
message passant avec un code de démarrage spécial pour permettre à l'application de s'exécuter. Les
le système doit avoir PE installé à l'emplacement standard (/usr/lpp/ppe.poe/), ou la
spécifications le fichier doit être remplacé par le -spécifications= option pour spécifier le
emplacement du répertoire. L'environnement parallèle ne prend pas en charge les threads, donc le -mpe
option et le -pthread option sont incompatibles.

-malin-naturel
-malign-pouvoir
Sous AIX, Darwin 32 bits et PowerPC GNU/Linux 64 bits, l'option -malin-naturel
remplace l'alignement défini par l'ABI des types plus grands, tels que les doubles à virgule flottante,
sur leur limite naturelle basée sur la taille. L'option -malign-pouvoir charge le GCC de
suivre les règles d'alignement spécifiées par l'ABI. GCC utilise par défaut l'alignement standard
défini dans l'ABI.

Sur Darwin 64 bits, l'alignement naturel est la valeur par défaut, et -malign-pouvoir n'est pas
prise en charge.

-msoft-float
-mhard-float
Générez du code qui n'utilise pas (utilise) l'ensemble de registres à virgule flottante. Logiciel
l'émulation à virgule flottante est fournie si vous utilisez le -msoft-float option, et passer le
option à GCC lors de la liaison.

-msingle-flotteur
-mdouble-flotteur
Générez du code pour les opérations à virgule flottante simple ou double précision.
-mdouble-flotteur implique -msingle-flotteur.

-msimple-fpu
Ne générez pas d'instructions sqrt et div pour l'unité matérielle à virgule flottante.

-mfpu
Spécifiez le type d'unité à virgule flottante. Les valeurs valides sont sp_lite (équivalent à
-msingle-float -msimple-fpu), dp_lite (équivalent à -mdouble-float -msimple-fpu),
sp_full (équivalent à -msingle-float), et dp_plein (équivalent à -mdouble-float).

-mxilinx-fpu
Effectuez des optimisations pour l'unité à virgule flottante sur Xilinx PPC 405/440.

-mmultiple
-mno-multiple
Générer du code qui utilise (n'utilise pas) les instructions de chargement de plusieurs mots et le
stocker plusieurs instructions de mot. Ces instructions sont générées par défaut sur
systèmes POWER, et non générés sur les systèmes PowerPC. Ne pas utiliser -mmultiple sur peu-
systèmes PowerPC endian, car ces instructions ne fonctionnent pas lorsque le processeur est en
mode petit-boutiste. Les exceptions sont PPC740 et PPC750 qui permettent ces
instructions en mode little-endian.

-mstring
-mno-chaîne
Générer du code qui utilise (n'utilise pas) les instructions de chaîne de chargement et le magasin
instructions de mots de chaîne pour enregistrer plusieurs registres et effectuer de petits déplacements de blocs. Ces
les instructions sont générées par défaut sur les systèmes POWER, et non générées sur PowerPC
systèmes. Ne pas utiliser -mstring sur les systèmes PowerPC little-endian, puisque ceux-ci
les instructions ne fonctionnent pas lorsque le processeur est en mode little-endian. Les exceptions
sont PPC740 et PPC750 qui permettent ces instructions en mode little-endian.

- mise à jour
-mno-mise à jour
Générer du code qui utilise (n'utilise pas) les instructions de chargement ou de stockage qui mettent à jour le
registre de base à l'adresse de l'emplacement mémoire calculé. Ces instructions
sont générés par défaut. Si tu utilises -mno-mise à jour, il y a une petite fenêtre entre le
l'heure à laquelle le pointeur de pile est mis à jour et l'adresse de la trame précédente est
stocké, ce qui signifie que le code qui parcourt le cadre de la pile à travers les interruptions ou les signaux peut
obtenir des données corrompues.

-mavoid-indexed-address
-mno-éviter-les-adresses-indexées
Générer du code qui essaie d'éviter (pas d'éviter) l'utilisation d'une charge ou d'un magasin indexés
instructions. Ces instructions peuvent entraîner une pénalité de performances sur les processeurs Power6
dans certaines situations, comme lorsque vous traversez de grands réseaux qui traversent un 16M
frontière. Cette option est activée par défaut lors du ciblage de Power6 et désactivée
autrement.

-mfused-mad
-mno-fusionné-madd
Générer du code qui utilise (n'utilise pas) la multiplication et l'accumulation à virgule flottante
instructions. Ces instructions sont générées par défaut si virgule flottante matérielle
est utilisé. La machine dépendante -mfused-mad l'option est maintenant mappée sur la machine-
indépendant -ffp-contrat=rapide option, et -mno-fusionné-madd est mappé à
-ffp-contrat=off.

-mmulhw
-mno-mulhw
Générer du code qui utilise (n'utilise pas) le demi-mot multiplier et multiplier-accumuler
instructions sur les processeurs IBM 405, 440, 464 et 476. Ces instructions sont
généré par défaut lors du ciblage de ces processeurs.

-mdlmzb
-mno-dlmzb
Générer du code qui utilise (n'utilise pas) la recherche de chaîne dlmzb instruction sur l'IBM
Processeurs 405, 440, 464 et 476. Cette instruction est générée par défaut lorsque
ciblant ces processeurs.

-mno-bit-aligner
-mbit-aligner
Sur le système V.4 et les systèmes PowerPC embarqués, ne forcez pas les structures et les unions
qui contiennent des champs de bits à aligner sur le type de base du champ de bits.

Par exemple, par défaut une structure ne contenant que 8 champs de bits "non signés" de
la longueur 1 est alignée sur une limite de 4 octets et a une taille de 4 octets. En utilisant
-mno-bit-aligner, la structure est alignée sur une limite de 1 octet et a une taille de 1 octet.

-mno-strict-aligner
-mstrict-aligner
Sur les systèmes System V.4 et PowerPC embarqués, ne supposez pas (ne) supposez pas que la mémoire non alignée
les références seront gérées par le système.

-mrelocalisable
-mno-déplaçable
Générer du code qui permet (ne permet pas) à un exécutable statique d'être déplacé vers un
adresse différente au moment de l'exécution. Un simple chargeur de système PowerPC embarqué devrait
déplacer tout le contenu des emplacements ".got2" et 4 octets répertoriés dans le ".fixup"
section, une table d'adresses 32 bits générée par cette option. Pour que cela fonctionne, tout
les objets liés entre eux doivent être compilés avec -mrelocalisable or -mrelocalisable-lib.
-mrelocalisable le code aligne la pile sur une limite de 8 octets.

-mrelocalisable-lib
-mno-librairie-relocalisable
Comme -mrelocalisable, -mrelocalisable-lib génère une section ".fixup" pour autoriser la statique
exécutables à déplacer au moment de l'exécution, mais -mrelocalisable-lib n'utilise pas le
alignement de la pile plus petit de -mrelocalisable. Objets compilés avec -mrelocalisable-lib Au cours de cette réunion, Matthew a obtenu de précieux conseils et Linda lui a demandé de la tenir au courant de ses progrès.
être lié à des objets compilés avec n'importe quelle combinaison des -mrelocalisable options.

-mno-toc
-mtoc
Sur le système V.4 et les systèmes PowerPC embarqués, ne supposez pas (ne) supposez pas que le registre 2 contient
un pointeur vers une zone globale pointant vers les adresses utilisées dans le programme.

-petit
-mlittle-endian
Sur les systèmes System V.4 et PowerPC embarqués, compilez le code pour le processeur en peu de temps.
mode boutien. Les -mlittle-endian l'option est la même que -petit.

-mbig
-mbig-endian
Sur les systèmes System V.4 et PowerPC embarqués, compilez le code pour le processeur en gros
mode boutien. Les -mbig-endian l'option est la même que -mbig.

-mdynamic-pas de photo
Sur les systèmes Darwin et Mac OS X, compilez le code pour qu'il ne soit pas transférable, mais que
ses références externes sont délocalisables. Le code résultant convient pour
applications, mais pas les bibliothèques partagées.

-msingle-pic-base
Traitez le registre utilisé pour l'adressage PIC en lecture seule, plutôt que de le charger dans le
prologue pour chaque fonction. Le système d'exécution est responsable de l'initialisation de ce
registre avec une valeur appropriée avant le début de l'exécution.

-prioritize-restricted-insns=priorité
Cette option contrôle la priorité attribuée au créneau de répartition restreint
instructions lors de la deuxième passe de programmation. L'argument priorité prend la valeur
0/1/2 assigner non/le plus haut/le deuxième plus haut priorité au créneau d'expédition restreint
des instructions.

-msched-costly-dep=type_de_dépendance
Cette option contrôle quelles dépendances sont considérées comme coûteuses par la cible pendant
ordonnancement des instructions. L'argument type_de_dépendance prend l'un des suivants
valeurs: aucune: aucune dépendance n'est coûteuse, TOUTE: toutes les dépendances sont coûteuses,
true_store_to_load: une vraie dépendance du magasin à la charge est coûteuse, magasin_à_charger: tout
la dépendance du magasin au chargement est coûteuse, nombre: toute dépendance pour laquelle latence >=
nombre est coûteux.

-minsert-sched-nops=programme
Cette option contrôle quel schéma d'insertion nop sera utilisé pendant la seconde
passe de programmation. L'argument programme prend l'une des valeurs suivantes : aucune: ne pas
insérer nops. chemin: Pad avec nops tout groupe de répartition qui a des emplacements de problème vacants,
selon le regroupement de l'ordonnanceur. regrouper_exact: Insérer des nops pour forcer coûteux
insns dépendants en groupes séparés. Insérez exactement autant de nops que nécessaire pour forcer
un insn à un nouveau groupe, selon le groupement de processeurs estimé. nombre: Insérer
nops pour forcer les insns dépendants coûteux en groupes séparés. Insérer nombre non à
forcer un insn à un nouveau groupe.

-mcall-sysv
Sur les systèmes System V.4 et PowerPC embarqués, compilez le code en utilisant des conventions d'appel qui
adhère au projet de mars 1995 de l'interface binaire d'application System V, PowerPC
supplément processeur. C'est la valeur par défaut sauf si vous avez configuré GCC en utilisant
powerpc-*-eabiaix.

-MCALL-SYSV-EABI
-mcall-eabi
Spécifiez les deux -mcall-sysv ainsi que -meabi options.

-mcall-sysv-noeabi
Spécifiez les deux -mcall-sysv ainsi que -mno-eabi options.

-mcall-aixdesc
Sur les systèmes System V.4 et PowerPC embarqués, compilez le code pour le système d'exploitation AIX.

-mcall-linux
Sur le système V.4 et les systèmes PowerPC embarqués, compilez le code pour le GNU basé sur Linux
système.

-mcall-freebsd
Sur le système V.4 et les systèmes PowerPC embarqués, compilez le code pour le fonctionnement de FreeBSD
système.

-mcall-netbsd
Sur le système V.4 et les systèmes PowerPC embarqués, compilez le code pour le fonctionnement de NetBSD
système.

-mcall-openbsd
Sur le système V.4 et les systèmes PowerPC embarqués, compilez le code pour le fonctionnement d'OpenBSD
système.

-maix-struct-retour
Renvoie toutes les structures en mémoire (comme spécifié par l'ABI AIX).

-msvr4-struct-retour
Renvoie les structures inférieures à 8 octets dans les registres (comme spécifié par l'ABI SVR4).

-mabi=type abi
Étendez l'ABI actuelle avec une extension particulière ou supprimez une telle extension. Valide
les valeurs sont altivec, non-altivec, spe, non-spé, ibmlongdouble, ieeelongdouble.

-mabi=spé
Étendez l'ABI actuelle avec les extensions SPE ABI. Cela ne change pas l'ABI par défaut,
à la place, il ajoute les extensions SPE ABI à l'ABI actuelle.

-mabi=pas de spe
Désactivez les extensions Booke SPE ABI pour l'ABI actuelle.

-mabi=ibmlongdouble
Modifiez l'ABI actuelle pour utiliser IBM Extended Precision Long Double. C'est un PowerPC
Option ABI SYSV 32 bits.

-mabi=ieeelongdouble
Modifiez l'ABI actuelle pour utiliser le double long à précision étendue IEEE. C'est un PowerPC
Option ABI Linux 32 bits.

-mprototype
-mno-prototype
Sur les systèmes System V.4 et PowerPC embarqués, supposez que tous les appels à l'argument variable
les fonctions sont correctement prototypées. Sinon, le compilateur doit insérer une instruction
avant chaque appel non prototypé pour activer ou effacer le bit 6 du registre de code de condition
(CR) pour indiquer si des valeurs à virgule flottante ont été passées dans la virgule flottante
registres au cas où la fonction prend des arguments variables. Avec -mprototype, uniquement les appels
aux fonctions d'argument variable prototypées définiront ou effaceront le bit.

-msim
Sur les systèmes PowerPC embarqués, supposons que le module de démarrage est appelé sim-crt0.o ainsi que
que les bibliothèques C standard sont libsim.a ainsi que libc.a. C'est la valeur par défaut pour
powerpc-*-eabisim configurations.

-mmvmoi
Sur les systèmes PowerPC embarqués, supposons que le module de démarrage est appelé crt0.o et par
les bibliothèques C standard sont libmvme.a ainsi que libc.a.

-les fous
Sur les systèmes PowerPC embarqués, supposons que le module de démarrage est appelé crt0.o et par
les bibliothèques C standard sont libads.a ainsi que libc.a.

-moncouteau
Sur les systèmes PowerPC embarqués, supposons que le module de démarrage est appelé crt0.o et par
les bibliothèques C standard sont libyk.a ainsi que libc.a.

-mvxworks
Sur les systèmes System V.4 et PowerPC embarqués, spécifiez que vous compilez pour un
Système VxWorks.

-membre
Sur les systèmes PowerPC embarqués, définissez le PPC_EMB bit dans l'en-tête des drapeaux ELF pour indiquer
qui eabi les délocalisations prolongées sont utilisées.

-meabi
-mno-eabi
Sur le système V.4 et les systèmes PowerPC embarqués n'adhèrent (ne) pas aux
Applications Binary Interface (eabi) qui est un ensemble de modifications apportées au système V.4
Caractéristiques. Sélection -meabi signifie que la pile est alignée sur un 8 octets
limite, une fonction "__eabi" est appelée depuis "main" pour configurer l'environnement eabi,
et par -msdata L'option peut utiliser à la fois "r2" et "r13" pour pointer vers deux petites données distinctes
domaines. Sélection -mno-eabi signifie que la pile est alignée sur une limite de 16 octets, ne
pas appeler une fonction d'initialisation de "main", et le -msdata l'option n'utilisera que
"r13" pour pointer vers une seule petite zone de données. Les -meabi l'option est activée par défaut si vous
GCC configuré à l'aide de l'un des powerpc*-*-eabi* options.

-msdata=eabi
Sur les systèmes System V.4 et PowerPC embarqués, mettez un petit "const" global et
données statiques dans le .sdata2 section, qui est pointée par le registre "r2". Mettre petit
données globales et statiques non "const" initialisées dans le .sdata section, qui est pointée
par registre "r13". Mettez de petites données globales et statiques non initialisées dans le .sbss
section, qui est adjacente à la .sdata section. le -msdata=eabi option est
incompatible avec le -mrelocalisable option. La -msdata=eabi l'option définit également le
-membre option.

-msdata=sysv
Sur les systèmes System V.4 et PowerPC embarqués, placez de petites données globales et statiques dans le
.sdata section, qui est pointée par le registre "r13". Mettez un petit global non initialisé
et des données statiques dans le .sbss section, qui est adjacente à la .sdata section. le
-msdata=sysv l'option est incompatible avec le -mrelocalisable option.

-msdata=par défaut
-msdata
Sur les systèmes System V.4 et PowerPC embarqués, si -meabi est utilisé, compilez le code de la même manière
as -msdata=eabi, sinon compiler le code de la même manière que -msdata=sysv.

-msdata=données
Sur les systèmes System V.4 et PowerPC embarqués, placez de petites données globales dans le .sdata
section. Mettez de petites données globales non initialisées dans le .sbss section. Ne pas utiliser
inscrire "r13" pour traiter les petites données cependant. C'est le comportement par défaut à moins que
autre -msdata les options sont utilisées.

-msdata=aucun
-mno-sdata
Sur les systèmes PowerPC embarqués, placez toutes les données globales et statiques initialisées dans le .Les données
section, et toutes les données non initialisées dans le .bss .

-mblock-move-inline-limit=num
Inline tous les mouvements de bloc (tels que les appels à "memcpy" ou les copies de structure) inférieurs ou
égal à num octets. La valeur minimale pour num est de 32 octets sur des cibles 32 bits et 64
octets sur des cibles 64 bits. La valeur par défaut est spécifique à la cible.

-G num
Sur les systèmes PowerPC embarqués, placez les éléments globaux et statiques inférieurs ou égaux à num
octets dans les sections small data ou bss au lieu de la section data normale ou bss.
Par défaut, num est 8. Le -G num switch est également transmis à l'éditeur de liens. Tous les modules
doit être compilé avec le même -G num valeur.

-nomsmreg
-mno-regnames
Sur le système V.4 et les systèmes PowerPC embarqués n'émettent (n'émettent pas) de noms de registre dans le
sortie en langage assembleur à l'aide de formes symboliques.

-mlongappel
-mno-longappel
Par défaut, supposons que tous les appels sont éloignés, de sorte qu'un appel plus long et plus coûteux
une séquence est requise. Ceci est requis pour les appels de plus de 32 mégaoctets
(33,554,432 XNUMX XNUMX octets) à partir de l'emplacement actuel. Un appel court sera généré si le
le compilateur sait que l'appel ne peut pas être si loin. Ce paramètre peut être remplacé par
l'attribut de fonction "shortcall", ou par "#pragma appel long(0) ".

Certains éditeurs de liens sont capables de détecter les appels hors de portée et de générer du code de collage sur
la mouche. Sur ces systèmes, les appels longs sont inutiles et génèrent un code plus lent. Comme
de cette écriture, l'éditeur de liens AIX peut le faire, tout comme l'éditeur de liens GNU pour PowerPC/64. Ce
est prévu d'ajouter cette fonctionnalité à l'éditeur de liens GNU pour les systèmes PowerPC 32 bits également.

Sur les systèmes Darwin/PPC, "#pragma longcall" générera "jbsr callee, L42", plus un
« l'île de la branche » (code de la colle). Les deux adresses cibles représentent l'appelé et le
« île de la branche ». L'éditeur de liens Darwin/PPC préférera la première adresse et générera un
« bl callee » si l'instruction PPC « bl » atteindra directement l'appelé ; sinon, le
l'éditeur de liens va générer "bl L42" pour appeler "l'îlot de branchement". L'« île de la branche » est
ajouté au corps de la fonction appelante ; il calcule l'adresse complète de 32 bits de
l'appelé et saute dessus.

Sur les systèmes Mach-O (Darwin), cette option dirige l'émission du compilateur vers la colle pour
chaque appel direct, et l'éditeur de liens Darwin décide s'il doit l'utiliser ou le rejeter.

À l'avenir, nous pourrions faire en sorte que GCC ignore toutes les spécifications longcall lorsque l'éditeur de liens
est connu pour générer de la colle.

-marqueurs-mtls
-marqueurs-mno-tls
Marquer (ne pas marquer) les appels à "__tls_get_addr" avec une relocalisation spécifiant la fonction
argument. La relocalisation permet à ld d'associer de manière fiable l'appel de fonction à l'argument
instructions de configuration pour l'optimisation TLS, ce qui permet à gcc de mieux planifier
la séquence.

-pthread
Ajoute la prise en charge du multithreading avec le fils de discussion une bibliothèque. Cette option définit des indicateurs pour
à la fois le préprocesseur et l'éditeur de liens.

-mrecip
-mno-recette
Cette option permettra à GCC d'utiliser l'estimation réciproque et la racine carrée réciproque
estimer les instructions avec des étapes Newton-Raphson supplémentaires pour augmenter la précision
au lieu de faire une division ou une racine carrée et une division pour les arguments à virgule flottante. Tu
devrait utiliser le -ffast-mathématiques option lors de l'utilisation -mrecip (ou au moins
-funsafe-math-optimisations, -fini-mathématiques-seulement, -freciprocal-maths ainsi que
-fno-piégeage-maths). Notez que si le débit de la séquence est généralement
supérieure au débit de l'instruction non réciproque, la précision de la
la séquence peut être diminuée jusqu'à 2 ulp (c'est-à-dire que l'inverse de 1.0 est égal à 0.99999994)
pour les racines carrées réciproques.

-mrecip=opter
Cette option permet de contrôler quelles instructions d'estimation réciproque peuvent être utilisées. opter
est une liste d'options séparées par des virgules, qui peut être précédée d'un "!" d'inverser le
option : "all" : active toutes les instructions d'estimation, "default" : active la valeur par défaut
instructions, équivalent à -mrecip, "aucun": désactive toutes les instructions de devis,
équivalente à -mno-recette; "div": active les instructions d'approximation réciproque pour
à la fois simple et double précision; "divf" : activez l'inverse en simple précision
instructions d'approximation; "divd" : activez la réciproque en double précision
instructions d'approximation; "rsqrt": active l'approximation de racine carrée réciproque
instructions pour la simple et la double précision ; "rsqrtf": active le single-
instructions d'approximation de racine carrée réciproque de précision ; "rsqrtd": activez le
instructions d'approximation de racine carrée réciproque en double précision ;

Ainsi par exemple, -mrecip=tout,!rsqrtd permettrait l'ensemble de l'estimation réciproque
instructions, à l'exception des instructions "FRSQRTE", "XSRSQRTEDP" et "XVRSQRTEDP"
qui gèrent les calculs de racine carrée réciproque en double précision.

-mrecip-précision
-mno-recip-précision
Supposons (ne présumez pas) que les instructions d'estimation réciproque fournissent des
estimations de précision que ce qui est mandaté par le PowerPC ABI. Sélection -mcpu=puissance6 or
-mcpu=puissance7 sélectionne automatiquement -mrecip-précision. Le carré double précision
les instructions d'estimation de racine ne sont pas générées par défaut sur les machines de faible précision,
car ils ne fournissent pas une estimation qui converge après trois étapes.

-mveclibabi=type
Spécifie le type ABI à utiliser pour vectoriser les intrinsèques à l'aide d'une bibliothèque externe.
Le seul type pris en charge à l'heure actuelle est "mass", qui spécifie d'utiliser le
Bibliothèques du sous-système d'accélération mathématique (MASS) pour la vectorisation d'intrinsèques à l'aide
bibliothèques externes. GCC émettra actuellement des appels à "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" et "tanhf4" lors de la génération du code pour power7. Les deux -ftree-vectoriser ainsi que
-funsafe-math-optimisations doivent être activés. Les bibliothèques MASS devront être
spécifié au moment de la liaison.

-mfriz
-mno-friz
Générer (ne pas générer) l'instruction "friz" lorsque le -funsafe-math-optimisations
L'option est utilisée pour optimiser l'arrondi des valeurs à virgule flottante à un entier 64 bits et
retour à la virgule flottante. L'instruction "friz" ne renvoie pas la même valeur si le
nombre à virgule flottante est trop grand pour tenir dans un entier.

-mpointeurs-vers-fonctions-imbriquées
-mno-pointeurs-vers-fonctions-emboîtées
Générer (ne pas générer) de code pour charger le registre de chaîne statique (r11) quand
appel via un pointeur sur les systèmes AIX et Linux 64 bits où un pointeur de fonction
pointe vers un descripteur de 3 mots donnant l'adresse de la fonction, la valeur TOC à charger dans
S'inscrire r2, et la valeur de chaîne statique à charger dans le registre r11L’
-mpointeurs-vers-fonctions-imbriquées est activé par défaut. Vous ne pourrez pas appeler via
des pointeurs vers des fonctions imbriquées ou des pointeurs vers des fonctions compilées dans d'autres langages qui
utilisez la chaîne statique si vous utilisez le -mno-pointeurs-vers-fonctions-emboîtées.

-msave-toc-indirect
-mno-save-toc-indirect
Générer (ne pas générer) de code pour enregistrer la valeur TOC dans l'emplacement de pile réservé
dans le prologue de la fonction si la fonction appelle via un pointeur sur AIX et 64 bits
Systèmes Linux. Si la valeur COT n'est pas enregistrée dans le prologue, elle est enregistrée juste avant
l'appel via le pointeur. Les -mno-save-toc-indirect L'option est l'option par défaut.

RX Options

Ces options de ligne de commande sont définies pour les cibles RX :

-m64bit-double
-m32bit-double
Faites en sorte que le type de données "double" soit de 64 bits (-m64bit-double) ou 32 bits (-m32bit-double)
en taille. La valeur par défaut est -m32bit-double. Notes Le matériel à virgule flottante RX ne fonctionne que
sur des valeurs 32 bits, c'est pourquoi la valeur par défaut est -m32bit-double.

-fpu
-nofpu
Active (-fpu) ou désactive (-nofpu) l'utilisation de matériel à virgule flottante RX. Les
par défaut est activé pour le RX600 série et désactivé pour le RX200 série.

Les instructions à virgule flottante ne seront générées que pour les valeurs à virgule flottante 32 bits
cependant, donc si le -m64bit-double est en cours d'utilisation, le matériel FPU ne sera pas
utilisé pour les doubles.

Notes Si la -fpu l'option est activée alors -funsafe-math-optimisations est également activé
automatiquement. C'est parce que les instructions RX FPU sont elles-mêmes dangereuses.

-mcpu=prénom
Sélectionne le type de CPU RX à cibler. Actuellement, trois types sont pris en charge, le
générique RX600 ainsi que RX200 matériel de série et les spécificités RX610 CPU. La valeur par défaut est
RX600.

La seule différence entre RX600 ainsi que RX610 est que le RX610 ne prend pas en charge le
Instruction "MVTIPL".

La RX200 la série n'a pas d'unité matérielle à virgule flottante et donc -nofpu est autorisé
par défaut lorsque ce type est sélectionné.

-mbig-endian-données
-mlittle-endian-données
Stockez les données (mais pas le code) au format big-endian. La valeur par défaut est
-mlittle-endian-données, c'est-à-dire pour stocker les données au format little-endian.

-msmall-data-limit=N
Spécifie la taille maximale en octets des variables globales et statiques qui peuvent être placées
dans la petite zone de données. L'utilisation de la petite zone de données peut conduire à des
code, mais la taille de la zone est limitée et il appartient au programmeur de s'assurer que
la zone ne déborde pas. De même, lorsque la petite zone de données est utilisée, l'un des RX
registres (généralement "r13") est réservé à une utilisation pointant vers cette zone, il n'est donc pas
plus disponible pour une utilisation par le compilateur. Cela pourrait entraîner des ralentissements et/ou des
code si les variables qui auraient pu être conservées dans le registre réservé sont maintenant
poussé sur la pile.

Notez que les variables communes (variables qui n'ont pas été initialisées) et les constantes sont
pas placés dans la petite zone de données car ils sont affectés à d'autres sections de la
exécutable de sortie.

La valeur par défaut est zéro, ce qui désactive cette fonctionnalité. Notez que cette fonctionnalité n'est pas
activé par défaut avec des niveaux d'optimisation plus élevés (-O2 etc) en raison de la
effets potentiellement préjudiciables de la réservation d'un registre. C'est au programmeur
pour expérimenter et découvrir si cette fonctionnalité est bénéfique pour leur programme. Voir
la description de la -mpid option pour une description de la façon dont le registre réel
maintenez le pointeur de petite zone de données est choisi.

-msim
-mno-sim
Utilisez le moteur d'exécution du simulateur. La valeur par défaut est d'utiliser le runtime spécifique à la carte libgloss.

-mas100-syntaxe
-mno-as100-syntaxe
Lors de la génération de la sortie assembleur, utilisez une syntaxe compatible avec l'AS100 de Renesas
assembleur. Cette syntaxe peut aussi être gérée par l'assembleur GAS mais elle a quelques
restrictions, donc la générer n'est pas l'option par défaut.

-mmax-taille-constante=N
Spécifie la taille maximale, en octets, d'une constante pouvant être utilisée comme opérande dans
une instruction RX. Bien que le jeu d'instructions RX autorise des constantes allant jusqu'à 4
octets de longueur à utiliser dans les instructions, une valeur plus longue équivaut à une
instruction. Ainsi, dans certaines circonstances, il peut être avantageux de restreindre la taille des
constantes utilisées dans les instructions. Les constantes trop grandes sont à la place
placé dans un pool constant et référencé via l'indirection de registre.

La valeur N peut être compris entre 0 et 4. Une valeur de 0 (valeur par défaut) ou 4 signifie que
les constantes de n'importe quelle taille sont autorisées.

-mrelax
Activer la relaxation de l'éditeur de liens. La relaxation du lieur est un processus par lequel le lieur va
tenter de réduire la taille d'un programme en trouvant des versions plus courtes de divers
instructions. Désactivé par défaut.

-mint-registre=N
Spécifiez le nombre de registres à réserver pour les fonctions de gestionnaire d'interruption rapide. Les
Plus-value N peut être compris entre 0 et 4. Une valeur de 1 signifie que le registre "r13" sera
réservé à l'usage exclusif des gestionnaires d'interruption rapide. Une valeur de 2 réserves
"r13" et "r12". Une valeur de 3 réserve "r13", "r12" et "r11", et une valeur de 4
réserve "r13" à "r10". Une valeur de 0, la valeur par défaut, ne réserve aucun
registres.

-msave-acc-en-interruptions
Spécifie que les fonctions du gestionnaire d'interruption doivent préserver le registre de l'accumulateur.
Ceci n'est nécessaire que si le code normal peut utiliser le registre de l'accumulateur, par exemple
car il effectue des multiplications de 64 bits. La valeur par défaut est d'ignorer l'accumulateur
car cela rend les gestionnaires d'interruption plus rapides.

-mpid
-mno-pid
Permet la génération de données indépendantes de la position. Lorsqu'il est activé, tout accès à
les données constantes seront effectuées via un décalage à partir d'une adresse de base contenue dans un registre. Cette
permet de déterminer l'emplacement des données constantes au moment de l'exécution sans nécessiter
l'exécutable à déplacer, ce qui est un avantage pour les applications embarquées avec
contraintes de mémoire. Les données modifiables ne sont pas affectées par cette option.

Notez que l'utilisation de cette fonctionnalité réserve un registre, généralement "r13", pour les données constantes
adresse de base. Cela peut entraîner un code plus lent et/ou plus volumineux, en particulier dans les
fonctions.

Le registre réel choisi pour contenir l'adresse de base de données constante dépend de si
le -msmall-data-limite et / ou -mint-registre les options de ligne de commande sont activées.
En commençant par le registre "r13" et en descendant, les registres sont alloués en premier
pour satisfaire aux exigences de -mint-registre, puis -mpid et enfin
-msmall-data-limite. Ainsi, il est possible que le registre de la petite zone de données soit "r8"
si les deux -mint-registre=4 ainsi que -mpid sont spécifiés sur la ligne de commande.

Par défaut, cette fonctionnalité n'est pas activée. La valeur par défaut peut être restaurée via le -mno-pid
option de ligne de commande.

Remarque: L'option de ligne de commande GCC générique -fixé-reg a une importance particulière pour le RX
port lorsqu'il est utilisé avec l'attribut de fonction "interruption". Cet attribut indique un
fonction destinée à traiter les interruptions rapides. GCC veillera à n'utiliser que les
registres "r10", "r11", "r12" et/ou "r13" et à condition que l'utilisation normale du
les registres correspondants ont été restreints via le -fixé-reg or -mint-registre
options de ligne de commande.

S / 390 ainsi que zSérie Options

Ce sont les -m options définies pour l'architecture S/390 et zSeries.

-mhard-float
-msoft-float
Utilisez (n'utilisez pas) les instructions matérielles à virgule flottante et les registres pour
opérations ponctuelles. Lorsque -msoft-float est spécifié, fonctionne dans libgcc.a sera utilisé
pour effectuer des opérations à virgule flottante. Lorsque -mhard-float est spécifié, le compilateur
génère des instructions à virgule flottante IEEE. C'est la valeur par défaut.

-mhard-dfp
-mno-hard-dfp
Utilisez (n'utilisez pas) les instructions matérielles à virgule flottante décimale
opérations à virgule flottante. Lorsque -mno-hard-dfp est spécifié, fonctionne dans libgcc.a
sera utilisé pour effectuer des opérations à virgule flottante décimale. Lorsque -mhard-dfp is
spécifié, le compilateur génère des instructions matérielles à virgule flottante décimale. Cette
est la valeur par défaut pour -mars=z9-ec ou plus.

-mlong-double-64
-mlong-double-128
Ces commutateurs contrôlent la taille du type "long double". Une taille de 64 bits rend le
type "long double" équivalent au type "double". C'est la valeur par défaut.

-mbackchain
-mno-backchain
Stockez (ne stockez pas) l'adresse de la trame de l'appelant en tant que pointeur de backchain dans le
cadre de pile de l'appelé. Un backchain peut être nécessaire pour permettre le débogage à l'aide d'outils qui
ne comprennent pas les informations de trame d'appel DWARF-2. Lorsque -mno-packed-pile est en
effet, le pointeur backchain est stocké au bas du cadre de la pile ; lorsque
-mpacked-pile est en effet, la chaîne arrière est placée dans le mot le plus élevé du
Zone de sauvegarde de registre de 96/160 octets.

En général, le code compilé avec -mbackchain est compatible avec les appels avec le code compilé avec
-mmo-backchain; cependant, l'utilisation de la backchain à des fins de débogage nécessite généralement
que tout le binaire est construit avec -mbackchain. A noter que la combinaison de
-mbackchain, -mpacked-pile ainsi que -mhard-float n'est pas pris en charge. Afin de construire un
utilisation du noyau Linux -msoft-float.

La valeur par défaut est de ne pas maintenir le backchain.

-mpacked-pile
-mno-packed-pile
Utilisez (n'utilisez pas) la disposition de la pile emballée. Lorsque -mno-packed-pile est spécifié, le
le compilateur utilise tous les champs de la zone de sauvegarde du registre 96/160 octets uniquement pour leur
objectif par défaut ; les champs inutilisés occupent toujours de l'espace dans la pile. Lorsque -mpacked-pile is
spécifié, les emplacements de sauvegarde de registre sont densément emballés en haut de la sauvegarde de registre
Région; l'espace inutilisé est réutilisé à d'autres fins, ce qui permet une utilisation plus efficace des
l'espace de pile disponible. Cependant, quand -mbackchain est également en vigueur, le plus haut
le mot de la zone de sauvegarde est toujours utilisé pour stocker le backchain, et l'adresse de retour
Le registre est toujours enregistré deux mots sous le backchain.

Tant que le backchain du cadre de pile n'est pas utilisé, le code généré avec -mpacked-pile
est compatible avec les appels avec le code généré avec -mno-packed-pile. Notez que certains non-FSF
versions de GCC 2.95 pour le code généré S/390 ou zSeries qui utilise le cadre de pile
backchain au moment de l'exécution, pas seulement à des fins de débogage. Un tel code n'est pas appel-
compatible avec le code compilé avec -mpacked-pile. Notez également que la combinaison de
-mbackchain, -mpacked-pile ainsi que -mhard-float n'est pas pris en charge. Afin de construire un
utilisation du noyau Linux -msoft-float.

La valeur par défaut est de ne pas utiliser la disposition de la pile emballée.

-msmall-exec
-mno-petit-exec
Générez (ou ne générez pas) de code en utilisant l'instruction "bras" pour faire le sous-programme
appels. Cela ne fonctionne de manière fiable que si la taille totale de l'exécutable ne dépasse pas 64 Ko.
La valeur par défaut est d'utiliser à la place l'instruction "basr", qui n'a pas cette
limitation.

-m64
-m31
Quand -m31 est spécifié, générez du code conforme à GNU/Linux pour S/390 ABI. Lorsque
-m64 est spécifié, générez du code conforme à l'ABI GNU/Linux for zSeries. Cette
permet notamment à GCC de générer des instructions 64 bits. Pour le s390 cibles, le
la valeur par défaut est -m31, Bien que l' s390x cible par défaut -m64.

-mzarch
-mesa
Quand -mzarch est spécifié, générez le code en utilisant les instructions disponibles sur
z/Architecture. Lorsque -mesa est spécifié, générez le code à l'aide des instructions
disponible sur ESA/390. Noter que -mesa n'est pas possible avec -m64. Lors de la génération
code conforme à GNU/Linux pour S/390 ABI, la valeur par défaut est -mesa. Lors de la génération
code conforme à l'ABI GNU/Linux for zSeries, la valeur par défaut est -mzarch.

-mmvcle
-mno-mvcle
Générez (ou ne générez pas) de code à l'aide de l'instruction "mvcle" pour effectuer le bloc
se déplace. Lorsque -mno-mvcle est spécifié, utilisez plutôt une boucle "mvc". C'est la valeur par défaut
à moins d'optimiser la taille.

-mdebug
-mno-débogage
Imprimez (ou n'imprimez pas) des informations de débogage supplémentaires lors de la compilation. La valeur par défaut est
pour ne pas imprimer les informations de débogage.

-mars=type de processeur
Générer du code qui s'exécutera sur type de processeur, qui est le nom d'un système représentant un
certain type de processeur. Valeurs possibles pour type de processeur g5, g6, z900, z990, z9-109,
z9-ec ainsi que z10. Lors de la génération de code en utilisant les instructions disponibles sur
z/Architecture, la valeur par défaut est -mars=z900. Sinon, la valeur par défaut est -mars=g5.

-mtune=type de processeur
Accordez à type de processeur tout ce qui est applicable sur le code généré, à l'exception de l'ABI
et l'ensemble des instructions disponibles. La liste de type de processeur les valeurs sont les mêmes que pour
-Mars. La valeur par défaut est la valeur utilisée pour -Mars.

-mtpf-trace
-mno-tpf-trace
Générer du code qui ajoute (n'ajoute pas) dans les branches spécifiques du système d'exploitation TPF aux routines de suivi
dans le système d'exploitation. Cette option est désactivée par défaut, même lors de la compilation pour le
Système d'exploitation TPF.

-mfused-mad
-mno-fusionné-madd
Générer du code qui utilise (n'utilise pas) la multiplication et l'accumulation à virgule flottante
instructions. Ces instructions sont générées par défaut si virgule flottante matérielle
est utilisé.

-mwarn-framesize=taille du cadre
Émet un avertissement si la fonction actuelle dépasse la taille de trame donnée. Parce que c'est
une vérification au moment de la compilation, cela n'a pas besoin d'être un réel problème lorsque le programme s'exécute. Ce
est destiné à identifier les fonctions qui provoquent très probablement un débordement de pile. Il est
utile pour être utilisé dans un environnement avec une taille de pile limitée, par exemple le noyau Linux.

-mwarn-pile dynamique
Émettre un avertissement si la fonction appelle alloca ou utilise des tableaux de taille dynamique. C'est
généralement une mauvaise idée avec une taille de pile limitée.

-mstack-guard=garde-pile
-taille-mstack=taille de la pile
Si ces options sont fournies, le back-end s390 émet des instructions supplémentaires dans le
fonction prologue qui déclenche un piège si la taille de la pile est garde-pile octets au-dessus
le taille de la pile (rappelez-vous que la pile sur s390 augmente vers le bas). Si la garde-pile
l'option est omise la plus petite puissance de 2 plus grande que la taille de trame du compilé
la fonction est choisie. Ces options sont destinées à être utilisées pour aider à déboguer la pile
problèmes de débordement. Le code émis en plus ne provoque que peu de surcharge et
peut donc également être utilisé dans des systèmes de production sans plus de performances
dégradation. Les valeurs données doivent être des puissances exactes de 2 et taille de la pile doit être
plus grand que garde-pile sans dépasser 64k. Afin d'être efficace, le supplément
le code suppose que la pile commence à une adresse alignée sur la valeur
donné par taille de la pileL’ garde-pile L'option ne peut être utilisée qu'avec
taille de la pile.

Score Options

Ces options sont définies pour les implémentations de Score :

-meb
Compilez le code pour le mode big-endian. C'est la valeur par défaut.

-mel
Compilez le code pour le mode little-endian.

-mnhwloop
Désactivez générer l'instruction bcnz.

-muls
Activer la génération d'instructions de chargement et de stockage non alignées.

-mmac
Activer l'utilisation des instructions de multiplication-accumulation. Désactivé par défaut.

-mscore5
Spécifiez le SCORE5 comme architecture cible.

-mscore5u
Spécifiez le SCORE5U de l'architecture cible.

-mscore7
Spécifiez le SCORE7 comme architecture cible. C'est la valeur par défaut.

-mscore7d
Spécifiez le SCORE7D comme architecture cible.

SH Options

Ces -m des options sont définies pour les implémentations SH :

-m1 Générer du code pour le SH1.

-m2 Générer du code pour le SH2.

-m2e
Générez du code pour le SH2e.

-m2a-nofpu
Générer du code pour le SH2a sans FPU, ou pour un SH2a-FPU de telle manière que le
l'unité à virgule flottante n'est pas utilisée.

-m2a-unique-uniquement
Générer du code pour le SH2a-FPU, de telle sorte qu'aucune virgule flottante en double précision
les opérations sont utilisées.

-m2a-simple
Générer du code pour le SH2a-FPU en supposant que l'unité à virgule flottante est en simple précision
mode par défaut.

-m2a
Générer du code pour le SH2a-FPU en supposant que l'unité à virgule flottante est en double précision
mode par défaut.

-m3 Générer du code pour le SH3.

-m3e
Générez du code pour le SH3e.

-m4-nofpu
Générez du code pour le SH4 sans unité à virgule flottante.

-m4-unique-uniquement
Générez du code pour le SH4 avec une unité à virgule flottante qui ne prend en charge que les
arithmétique de précision.

-m4-simple
Générer du code pour le SH4 en supposant que l'unité à virgule flottante est en mode simple précision
par défaut.

-m4 Générer du code pour le SH4.

-m4a-nofpu
Générer du code pour le SH4al-dsp, ou pour un SH4a de telle manière que la virgule flottante
l'unité n'est pas utilisée.

-m4a-unique-uniquement
Générer du code pour le SH4a, de telle sorte qu'aucune virgule flottante en double précision
les opérations sont utilisées.

-m4a-simple
Générer du code pour le SH4a en supposant que l'unité à virgule flottante est en simple précision
mode par défaut.

-m4a
Générez du code pour le SH4a.

-m4al
Pareil que -m4a-nofpu, sauf qu'il passe implicitement -dsp à l'assembleur. CCG
ne génère aucune instruction DSP pour le moment.

-mb Compilez le code du processeur en mode gros-boutiste.

-ml Compilez le code du processeur en mode little-endian.

-mdalign
Alignez les doubles aux limites de 64 bits. Notez que cela change les conventions d'appel,
et donc certaines fonctions de la bibliothèque C standard ne fonctionneront pas à moins que vous ne recompiliez
il d'abord avec -mdalign.

-mrelax
Raccourcir certaines références d'adresses au moment de la liaison, lorsque cela est possible ; utilise l'option de l'éditeur de liens
-se détendre.

-mbigtable
Utilisez des décalages de 32 bits dans les tables de « commutation ». La valeur par défaut consiste à utiliser des décalages de 16 bits.

-mbitops
Activer l'utilisation des instructions de manipulation de bits sur SH2A.

-mfmovd
Activez l'utilisation de l'instruction "fmovd". Vérifier -mdalign pour les contraintes d'alignement.

-mhitachi
Respecter les conventions d'appel définies par Renesas.

-mrenesas
Respecter les conventions d'appel définies par Renesas.

-mno-renesas
Se conformer aux conventions d'appel définies pour GCC avant les conventions Renesas
étaient disponibles. Cette option est la valeur par défaut pour toutes les cibles de la chaîne d'outils SH.

-mnomacsave
Marquez le registre « MAC » comme ayant été bloqué, même si -mhitachi est donné.

-mieee
-mno-ieee
Contrôler la conformité IEEE des comparaisons à virgule flottante, ce qui affecte la gestion
des cas où le résultat d'une comparaison n'est pas ordonné. Par défaut -mieee is
implicitement activé. Si -ffinite-mathématiques-seulement est autorisé -mno-ieee est implicitement défini,
ce qui se traduit par des comparaisons plus rapides à virgule flottante plus égales et moins égales. Les
les paramètres implicites peuvent être remplacés en spécifiant soit -mieee or -mno-ieee.

-minline-ic_invalidate
Code en ligne pour invalider les entrées du cache d'instructions après la configuration de la fonction imbriquée
trampolines. Cette option n'a aucun effet si -musermode est activé et le
L'option de génération de code (par exemple -m4) ne permet pas l'utilisation de l'instruction icbi. Si
l'option de génération de code sélectionnée ne permet pas l'utilisation de l'instruction icbi,
et -musermode n'est pas en vigueur, le code en ligne manipulera l'instruction
tableau d'adresses de cache directement avec une écriture associative. Cela nécessite non seulement
mode privilégié, mais il échouera également si la ligne de cache avait été mappée via le TLB
et est devenu non mappé.

-miser
Taille et emplacement de l'instruction de vidage dans le code d'assemblage.

-mpadstruct
Cette option est obsolète. Il complète les structures à un multiple de 4 octets, ce qui est
incompatible avec le SH ABI.

-msoft-atomique
Générer des séquences atomiques du logiciel gUSA compatibles GNU/Linux pour l'atomic intégré
les fonctions. Les séquences atomiques générées nécessitent le support de l'interruption /
code de gestion des exceptions du système et ne conviennent qu'aux systèmes monocœur.
Ils ne fonctionneront pas correctement sur les systèmes multicœurs. Cette option est activée par
par défaut lorsque la cible est "sh-*-linux*". Pour plus de détails sur la fonction atomique intégrée
fonctions voir __atomique Intégrés.

-mespace
Optimisez pour l'espace au lieu de la vitesse. Impliqué par -Tu.

-mpréfergot
Lors de la génération de code indépendant de la position, émettre des appels de fonction à l'aide du décalage global
Table au lieu de la table de liaison de procédure.

-musermode
Ne générez pas de code en mode privilégié uniquement ; implique -mno-inline-ic_invalidate si le
le code en ligne ne fonctionnerait pas en mode utilisateur. Il s'agit de la valeur par défaut lorsque la cible est
"sh-*-linux*".

-coût multiple=nombre
Définissez le coût à assumer pour un insn multiplié.

-mdiv=stratégie
Définissez la stratégie de division à utiliser pour les opérations de division entière. Pour SHmédia
stratégie peut être l'un des :

fp Effectue l'opération en virgule flottante. Cela a une latence très élevée, mais a besoin
seulement quelques instructions, donc cela pourrait être un bon choix si votre code a assez
ILP facilement exploitable pour permettre au compilateur de programmer la virgule flottante
instructions avec d'autres instructions. La division par zéro provoque un
exception à virgule flottante.

inv Utilise des opérations sur des nombres entiers pour calculer l'inverse du diviseur, puis
multiplie le dividende par l'inverse. Cette stratégie permet au CSE et au levage
du calcul inverse. La division par zéro calcule un résultat quelconque,
mais ne piège pas.

Inv: Minlat
Une variante de inv où, si aucune opportunité de CSE ou de levage n'a été trouvée, ou si
toute l'opération a été hissée au même endroit, les dernières étapes de la
calcul inverse sont entrelacés avec la multiplication finale pour réduire l'ensemble
latence, au détriment de l'utilisation de quelques instructions supplémentaires, et offrant ainsi moins
des opportunités de planification avec un autre code.

Appelez-nous
Appelle une fonction de bibliothèque qui implémente généralement le Inv: Minlat stratégie. Cette
donne une densité de code élevée pour les compilations "m5-*media-nofpu".

call2
Utilise un point d'entrée différent de la même fonction de bibliothèque, où il suppose qu'un
le pointeur vers une table de recherche a déjà été configuré, ce qui expose la charge du pointeur
au CSE et aux optimisations de levage de code.

inv:appel
inv:appel2
inv:fp
Utilisez l'option inv algorithme pour la génération initiale du code, mais si le code reste
non optimisé, revenir à la Appelez-nous, call2ou fp stratégies, respectivement. Noter que
l'effet secondaire potentiellement piège de la division par zéro est porté par un
instruction, il est donc possible que toutes les instructions entières soient hissées,
mais le marqueur de l'effet secondaire reste là où il est. Une recombinaison à
les opérations à virgule flottante ou un appel n'est pas possible dans ce cas.

inv20u
inv20l
Variantes du Inv: Minlat stratégie. Dans le cas où le calcul inverse est
non séparés de la multiplication, ils accélèrent la division là où le dividende s'adapte
en 20 bits (signe plus le cas échéant) en insérant un test pour sauter un certain nombre de
opérations dans ce cas; ce test ralentit le cas de dividendes plus importants.
inv20u suppose que le cas d'un si petit dividende est peu probable, et inv20l
suppose que c'est probable.

Pour les cibles autres que SHmedia stratégie peut être l'un des :

appel-div1
Appelle une fonction de bibliothèque qui utilise l'instruction de division en une seule étape « div1 » pour
effectuer l'opération. La division par zéro calcule un résultat quelconque et ne
pas piéger. C'est la valeur par défaut sauf pour SH4, SH2A et SHcompact.

appel-fp
Appelle une fonction de bibliothèque qui effectue l'opération en flottant double précision
point. La division par zéro provoque une exception à virgule flottante. C'est la valeur par défaut
pour SHcompact avec FPU. Spécifier ceci pour les cibles qui n'ont pas de double
Le FPU de précision sera par défaut "call-div1".

table d'appel
Appelle une fonction de bibliothèque qui utilise une table de recherche pour les petits diviseurs et le
Instruction "div1" avec distinction de cas pour les diviseurs plus grands. Division par zéro
calcule un résultat non spécifié et n'intercepte pas. C'est la valeur par défaut pour SH4.
Spécifier ceci pour les cibles qui n'ont pas d'instructions de décalage dynamique
par défaut à "call-div1".

Lorsqu'une stratégie de division n'a pas été spécifiée, la stratégie par défaut sera sélectionnée
en fonction de la cible actuelle. Pour SH2A, la stratégie par défaut consiste à utiliser les "divs" et
instructions "divu" au lieu d'appels de fonction de bibliothèque.

-maccumulate-arguments-sortants
Réservez de l'espace une fois pour les arguments sortants dans le prologue de la fonction plutôt qu'autour
chaque appel. Généralement bénéfique pour les performances et la taille. Également nécessaire pour se détendre
pour éviter de changer le cadre de pile autour du code conditionnel.

-mdivsi3_libfunc=prénom
Définissez le nom de la fonction de bibliothèque utilisée pour la division signée 32 bits sur prénom. Ce
n'affectent que le nom utilisé dans les stratégies de division call et inv:call, et le
le compilateur attendra toujours les mêmes ensembles de registres d'entrée/sortie/écrêtés comme si
cette option n'était pas présente.

-mplage-fixe=registre-plage
Générer du code traitant la plage de registres donnée comme des registres fixes. Un registre fixe
est celui que l'allocateur de registre ne peut pas utiliser. Ceci est utile lors de la compilation du noyau
code. Une plage de registres est spécifiée sous la forme de deux registres séparés par un tiret. Plusieurs
les plages de registres peuvent être spécifiées séparées par une virgule.

-folle-dérouler
Déroulement de l'accélérateur pour éviter de cogner les registres cibles. Cette option n'a qu'un
effet si la base de code gcc prend en charge le hook cible TARGET_ADJUST_UNROLL_MAX.

-adressage-mindexé
Activez l'utilisation du mode d'adressage indexé pour SHmedia32/SHcompact. C'est seulement
sûr si le matériel et/ou le système d'exploitation implémentent une sémantique de bouclage 32 bits pour le
mode d'adressage. L'architecture permet la mise en œuvre de processeurs avec 64 bits
MMU, que le système d'exploitation pourrait utiliser pour obtenir un adressage 32 bits, mais comme aucun matériel actuel
l'implémentation prend en charge ceci ou tout autre moyen de sécuriser le mode d'adressage indexé
à utiliser dans l'ABI 32 bits, la valeur par défaut est -mno-indexé-adressage.

-mggettrcost=nombre
Définissez le coût supposé de l'instruction gettr sur nombre. La valeur par défaut est 2 si
-mpt-fixe est en vigueur, 100 sinon.

-mpt-fixe
Supposons que les instructions pt* ne piègent pas. Cela générera généralement une meilleure planification
code, mais n'est pas sûr sur le matériel actuel. La définition actuelle de l'architecture dit
que les ptabs et les ptrels piègent lorsque la cible anded avec 3 est 3. Cela a le
effet non intentionnel de rendre dangereux la planification de ptabs / ptrel avant une branche, ou
le sortir d'une boucle. Par exemple, __do_global_ctors, une partie de libgcc qui s'exécute
constructeurs au démarrage du programme, appelle des fonctions dans une liste délimitée par -1.
Avec l'option -mpt-fixed, les ptabs seront effectués avant de tester par rapport à -1. Cette
signifie que tous les constructeurs seront exécutés un peu plus rapidement, mais lorsque la boucle arrive à
la fin de la liste, le programme plante car ptabs charge -1 dans une cible
S'inscrire. Étant donné que cette option n'est pas sûre pour tout matériel mettant en œuvre l'actuel
spécification d'architecture, la valeur par défaut est -mno-pt-fixed. Sauf si l'utilisateur spécifie un
coût spécifique avec -coût de gestion, -mno-pt-fixed implique également -mggettrcost=100; ce
dissuade l'allocation de registres en utilisant des registres cibles pour stocker des entiers ordinaires.

-minvalid-symboles
Supposons que les symboles ne soient pas valides. Symboles de fonction ordinaires générés par le compilateur
sera toujours valide pour charger avec movi/shori/ptabs ou movi/shori/ptrel, mais avec
des trucs d'assembleur et/ou d'éditeur de liens, il est possible de générer des symboles qui provoqueront
ptabs / ptrel à piéger. Cette option n'a de sens que lorsque -mno-pt-fixe est en
effet. Cela empêchera alors le cse cross-basic-block, le levage et la plupart des programmations de
charges de symboles. La valeur par défaut est -mno-invalid-symboles.

-mbranche-coût=num
Supposer num être le coût d'une instruction de branchement. Des nombres plus élevés rendront le
le compilateur essaie de générer plus de code sans branche si possible. Si non spécifié le
La valeur est sélectionnée en fonction du type de processeur pour lequel est compilé.

-mcbranchedi
Activez le modèle d'instruction "cbranchdi4".

-mcmpeqdi
Émettez le modèle d'instruction "cmpeqdi_t" même lorsque -mcbranchedi est en vigueur.

-mfused-mad
Autoriser l'utilisation de l'instruction "fmac" (multiplier-accumuler en virgule flottante) si le
le type de processeur le prend en charge. L'activation de cette option peut générer du code qui produit
différents résultats numériques à virgule flottante par rapport à l'arithmétique stricte IEEE 754.

-mpretend-cmmove
Préférez les branches conditionnelles à déplacement nul pour les instructions de déplacement conditionnel
motifs. Cela peut entraîner un code plus rapide sur le processeur SH4.

Solaris 2 Options

Ces -m les options sont prises en charge sur Solaris 2 :

-texte-mimpure
-texte-mimpure, utilisé en plus de -partagé, indique au compilateur de ne pas passer -z texte à
l'éditeur de liens lors de la liaison d'un objet partagé. En utilisant cette option, vous pouvez lier position-
code dépendant dans un objet partagé.

-texte-mimpure supprime les « délocalisations restent contre allouables mais non inscriptibles
sections" message d'erreur de l'éditeur de liens. Cependant, les relocalisations nécessaires déclencheront la copie
en écriture, et l'objet partagé n'est pas réellement partagé entre les processus. À la place de
en utilisant -texte-mimpure, vous devez compiler tout le code source avec -fpic or -fPIC.

Ces commutateurs sont pris en charge en plus de ceux ci-dessus sur Solaris 2 :

-pthreads
Ajout de la prise en charge du multithreading à l'aide de la bibliothèque de threads POSIX. Cette option définit
flags pour le préprocesseur et l'éditeur de liens. Cette option n'affecte pas le fil
la sécurité du code objet produit par le compilateur ou celle des bibliothèques fournies avec celui-ci.

-pthread
C'est un synonyme de -pthreads.

SPARC Options

Ces -m les options sont prises en charge sur le SPARC :

-mno-app-regs
-mapp-regs
Spécifier -mapp-regs pour générer une sortie en utilisant les registres globaux 2 à 4, qui
le SPARC SVR4 ABI se réserve pour les applications. Comme le registre global 1, chaque global
le registre 2 à 4 est alors traité comme un registre attribuable qui est écrasé par
appels de fonction. C'est la valeur par défaut.

Pour être entièrement conforme à l'ABI SVR4 au prix d'une certaine perte de performances, spécifiez
-mno-app-regs. Vous devez compiler les bibliothèques et le logiciel système avec cette option.

-mplat
-mno-plat
Avec -mplat, le compilateur ne génère pas d'instructions de sauvegarde/restauration et utilise un
modèle de fenêtre « plat » ou à un seul registre. Ce modèle est compatible avec le régulier
modèle de fenêtre d'enregistrement. Les registres locaux et les registres d'entrée (0--5) sont toujours
traités comme des registres « enregistrés par appel » et seront sauvegardés sur la pile selon les besoins.

Avec -mno-plat (par défaut), le compilateur génère des instructions de sauvegarde/restauration (sauf
pour les fonctions feuilles). C'est le mode de fonctionnement normal.

-mfpu
-mhard-float
Générer une sortie contenant des instructions à virgule flottante. C'est la valeur par défaut.

-mno-fpu
-msoft-float
Générer une sortie contenant des appels de bibliothèque pour virgule flottante. Mise en garde: le requis
les bibliothèques ne sont pas disponibles pour toutes les cibles SPARC. Normalement, les installations du
le compilateur C habituel de la machine sont utilisés, mais cela ne peut pas être fait directement en cross-
compilation. Vous devez prendre vos propres dispositions pour fournir une bibliothèque appropriée
fonctions de compilation croisée. Les cibles embarquées sparc-*-aout ainsi que sparlite-*-*
fournissent un support logiciel en virgule flottante.

-msoft-float modifie la convention d'appel dans le fichier de sortie ; par conséquent, ce n'est que
utile si vous compilez TOUTE d'un programme avec cette option. En particulier, vous devez
compiler libgcc.a, la bibliothèque fournie avec GCC, avec -msoft-float pour cela
à travailler.

-mhard-quad-float
Générer une sortie contenant des instructions à virgule flottante à quatre mots (long double).

-msoft-quad-flotteur
Générer une sortie contenant des appels de bibliothèque pour la virgule flottante à quatre mots (long double)
instructions. Les fonctions appelées sont celles spécifiées dans l'ABI SPARC. C'est le
défaut.

Au moment d'écrire ces lignes, aucune implémentation SPARC ne prend en charge le matériel pour
les instructions à virgule flottante à quatre mots. Ils invoquent tous un gestionnaire d'interruptions pour l'un des
ces instructions, puis le gestionnaire d'interruptions émule l'effet de l'instruction.
En raison de la surcharge du gestionnaire de traps, c'est beaucoup plus lent que d'appeler la bibliothèque ABI
routines. Ainsi, le -msoft-quad-flotteur L'option est l'option par défaut.

-mno-doubles-non-alignés
-doubles-munalignés
Supposons que les doubles aient un alignement sur 8 octets. C'est la valeur par défaut.

Avec -doubles-munalignés, GCC suppose que les doubles ont un alignement sur 8 octets uniquement s'ils
sont contenus dans un autre type, ou s'ils ont une adresse absolue. Sinon, il
suppose qu'ils ont un alignement de 4 octets. La spécification de cette option évite certains
problèmes de compatibilité avec le code généré par d'autres compilateurs. Ce n'est pas la valeur par défaut
car cela entraîne une perte de performances, en particulier pour le code à virgule flottante.

-mno-structures plus rapides
-structures mfaster
Avec -structures mfaster, le compilateur suppose que les structures doivent avoir 8 octets
alignement. Cela permet l'utilisation de paires d'instructions "ldd" et "std" pour les copies
dans l'affectation de structure, au lieu de deux fois plus de paires "ld" et "st". Cependant, le
l'utilisation de cet alignement modifié viole directement l'ABI SPARC. Ainsi, il est prévu
uniquement pour une utilisation sur des cibles où le développeur reconnaît que leur code résultant
ne sera pas directement conforme aux règles de l'ABI.

-mcpu=type_cpu
Définissez le jeu d'instructions, le jeu de registres et les paramètres de planification d'instructions pour
type de machine type_cpu. Valeurs prises en charge pour type_cpu v7, cyprès, v8, supersparc,
hypersparc, leon, sparlite, f930, f934, sparlite86x, étincelle, tsc701, v9,
ultrasparc, ultrasparc3, Niagara, niagara2, niagara3et niagara4.

Les chaînes d'outils natives Solaris et GNU/Linux prennent également en charge la valeur indigène, qui sélectionne
la meilleure option d'architecture pour le processeur hôte. -mcpu=natif n'a aucun effet si
GCC ne reconnaît pas le processeur.

Les paramètres de planification d'instructions par défaut sont utilisés pour les valeurs qui sélectionnent un
architecture et non une implémentation. Ceux-ci sont v7, v8, sparlite, étincelle, v9.

Voici une liste de chaque architecture prise en charge et de leurs implémentations prises en charge.

v7 cyprès

v8 supersparc, hypersparc, léon

sparlite
f930, f934, spaclite86x

étincelle
tsc701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

Par défaut (sauf configuration contraire), GCC génère du code pour la variante V7 du
Architecture SPARC. Avec -mcpu=cyprès, le compilateur l'optimise en plus pour
la puce Cypress CY7C602, telle qu'utilisée dans la série SPARCStation/SPARCServer 3xx. C'est
convient également pour les anciennes SPARCStation 1, 2, IPX, etc.

Avec -mcpu=v8, GCC génère du code pour la variante V8 de l'architecture SPARC. Les
la seule différence avec le code V7 est que le compilateur émet l'entier multiplier et
instructions de division d'entiers qui existent dans SPARC-V8 mais pas dans SPARC-V7. Avec
-mcpu=supersparc, le compilateur l'optimise en plus pour la puce SuperSPARC, comme
utilisé dans les séries SPARCStation 10, 1000 et 2000.

Avec -mcpu=sparclite, GCC génère du code pour la variante SPARClite du SPARC
architecture. Cela ajoute la multiplication entière, l'étape de division entière et le balayage ("ffs")
instructions qui existent dans SPARClite mais pas dans SPARC-V7. Avec -mcpu=f930,
le compilateur l'optimise en outre pour la puce Fujitsu MB86930, qui est l'original
SPARClite, sans FPU. Avec -mcpu=f934, le compilateur l'optimise en plus pour
la puce Fujitsu MB86934, qui est la plus récente SPARClite avec FPU.

Avec -mcpu=sparclet, GCC génère du code pour la variante SPARClet du SPARC
architecture. Ceci ajoute l'entier multiplier, multiplier/accumuler, diviser l'entier
instructions step and scan ("ffs") qui existent dans SPARClet mais pas dans SPARC-V7. Avec
-mcpu=tsc701, le compilateur l'optimise en plus pour la puce TEMIC SPARClet.

Avec -mcpu=v9, GCC génère du code pour la variante V9 de l'architecture SPARC. Cette
ajoute des instructions de déplacement d'entier et de virgule flottante 64 bits, 3 virgule flottante supplémentaires
registres de code de condition et instructions de déplacement conditionnel. Avec -mcpu=ultraparc,
le compilateur l'optimise en plus pour les puces Sun UltraSPARC I/II/IIIi. Avec
-mcpu=ultraparc3, le compilateur l'optimise en plus pour le Sun UltraSPARC
Puces III/III+/IIIi/IIIi+/IV/IV+. Avec -mcpu=niagara, le compilateur en plus
l'optimise pour les puces Sun UltraSPARC T1. Avec -mcpu=niagara2, le compilateur
l'optimise en outre pour les puces Sun UltraSPARC T2. Avec -mcpu=niagara3,
le compilateur l'optimise en outre pour les puces Sun UltraSPARC T3. Avec -mcpu=niagara4,
le compilateur l'optimise en outre pour les puces Sun UltraSPARC T4.

-mtune=type_cpu
Définir les paramètres de planification des instructions pour le type de machine type_cpu, mais ne définissez pas
le jeu d'instructions ou le jeu de registres que l'option -mcpu=type_cpu aurait.

Les mêmes valeurs pour -mcpu=type_cpu peut être utilisé pour -mtune=type_cpu, mais le seul
les valeurs utiles sont celles qui sélectionnent une implémentation CPU particulière. Ce sont
cyprès, supersparc, hypersparc, leon, f930, f934, sparlite86x, tsc701, ultrasparc,
ultrasparc3, Niagara, niagara2, niagara3 ainsi que niagara4. Avec Solaris natif et
chaînes d'outils GNU/Linux, indigène peuvent également être utilisés.

-mv8plus
-mno-v8plus
Avec -mv8plus, GCC génère du code pour l'ABI SPARC-V8+. La différence avec le V8
ABI est que les registres global et out sont considérés comme larges de 64 bits. Ceci est activé
par défaut sur Solaris en mode 32 bits pour tous les processeurs SPARC-V9.

-mvis
-mno-vis
Avec -mvis, GCC génère du code qui tire parti d'UltraSPARC Visual
Extensions de jeu d'instructions. La valeur par défaut est -mno-vis.

-mvis2
-mno-vis2
Avec -mvis2, GCC génère du code qui tire parti de la version 2.0 de l'UltraSPARC
Extensions de jeu d'instructions visuelles. La valeur par défaut est -mvis2 lorsque vous ciblez un processeur qui
prend en charge de telles instructions, telles que UltraSPARC-III et versions ultérieures. Réglage -mvis2 aussi
ensembles -mvis.

-mvis3
-mno-vis3
Avec -mvis3, GCC génère du code qui tire parti de la version 3.0 de l'UltraSPARC
Extensions de jeu d'instructions visuelles. La valeur par défaut est -mvis3 lorsque vous ciblez un processeur qui
prend en charge de telles instructions, telles que niagara-3 et versions ultérieures. Réglage -mvis3 définit également
-mvis2 ainsi que -mvis.

-mpopc
-mno-popc
Avec -mpopc, GCC génère du code qui tire parti de la population UltraSPARC
instruction de compter. La valeur par défaut est -mpopc lorsque vous ciblez un processeur qui prend en charge de tels
instructions, telles que Niagara-2 et versions ultérieures.

-mfmaf
-mno-fmaf
Avec -mfmaf, GCC génère du code qui tire parti de l'UltraSPARC Fused Multiply-
Ajoutez des extensions à virgule flottante. La valeur par défaut est -mfmaf lorsque vous ciblez un processeur qui
prend en charge de telles instructions, telles que Niagara-3 et versions ultérieures.

-mfix-at697f
Activez la solution de contournement documentée pour l'erratum unique du processeur Atmel AT697F
(qui correspond à l'erratum #13 du processeur AT697E).

Ces -m les options sont prises en charge en plus de celles ci-dessus sur les processeurs SPARC-V9 en 64 bits
environnements:

-m32
-m64
Générez du code pour un environnement 32 bits ou 64 bits. L'environnement 32 bits définit int,
long et pointeur sur 32 bits. L'environnement 64 bits définit int sur 32 bits et long et
pointeur sur 64 bits.

-mcmodèle=qui
Définissez le modèle de code sur l'un des

moyen
Le modèle de code Medium/Low : adresses 64 bits, les programmes doivent être liés dans le bas 32
bits de mémoire. Les programmes peuvent être liés de manière statique ou dynamique.

moyen
Le modèle de code Medium/Middle : adresses 64 bits, les programmes doivent être liés dans le bas
44 bits de mémoire, les segments de texte et de données doivent avoir une taille inférieure à 2 Go et
le segment de données doit être situé à moins de 2 Go du segment de texte.

médany
Le modèle de code Medium/Anywhere : adresses 64 bits, les programmes peuvent être liés n'importe où
en mémoire, les segments de texte et de données doivent avoir une taille inférieure à 2 Go et les données
segment doit être situé à moins de 2 Go du segment de texte.

embarquer
Le modèle de code Medium/Anywhere pour les systèmes embarqués : adresses 64 bits, le texte
et les segments de données doivent avoir une taille inférieure à 2 Go, les deux commençant n'importe où dans la mémoire
(déterminé au moment de la liaison). Le registre global %g4 pointe vers la base des données
segment. Les programmes sont liés de manière statique et PIC n'est pas pris en charge.

-memory-model=mem-modèle
Réglez le modèle de mémoire en vigueur sur le processeur sur l'un des

défaut
Le modèle de mémoire par défaut pour le processeur et le système d'exploitation.

rmo Ordre de mémoire détendu

pso Commande partielle en magasin

tso Commande totale du magasin

sc Cohérence séquentielle

Ces modèles de mémoire sont formellement définis dans l'annexe D de l'architecture Sparc V9
manuel, tel que défini dans le champ "PSATE.MM" du processeur.

-mstack-biais
-mno-stack-biais
Avec -mstack-biais, GCC suppose que le pointeur de pile, et le pointeur de trame s'il est présent,
sont décalés de -2047 qui doivent être rajoutés lors de la création de références de trame de pile. Cette
est la valeur par défaut en mode 64 bits. Sinon, supposez qu'un tel décalage n'est pas présent.

SPU Options

Ces -m les options sont prises en charge sur le SPU :

-mwarn-reloc
-Merror-Reloc
Le chargeur pour SPU ne gère pas les relocalisations dynamiques. Par défaut, GCC donnera un
erreur lorsqu'il génère du code qui nécessite une relocalisation dynamique. -mno-erreur-reloc
désactive l'erreur, -mwarn-reloc générera un avertissement à la place.

-msafe-dma
-munsafe-dma
Les instructions qui initient ou testent l'achèvement du DMA ne doivent pas être réordonnées avec
en ce qui concerne les charges et les stockages de la mémoire en cours d'accès. Les utilisateurs généralement
résoudre ce problème en utilisant le mot-clé volatile, mais cela peut conduire à un code inefficace
dans des endroits où la mémoire est connue pour ne pas changer. Plutôt que de marquer la mémoire comme
volatile, nous traitons les instructions DMA comme affectant potentiellement toute la mémoire. Avec
-munsafe-dma les utilisateurs doivent utiliser le mot-clé volatile pour protéger les accès mémoire.

-mbranche-indices
Par défaut, GCC générera une instruction d'indication de branchement pour éviter les blocages de pipeline pour
branches toujours prises ou probablement prises. Un indice ne sera pas généré à moins de 8
instructions loin de sa succursale. Il y a peu de raisons de les désactiver, sauf pour
à des fins de débogage ou pour rendre un objet un peu plus petit.

-mpetit-mem
-mlarge-mem
Par défaut, GCC génère du code en supposant que les adresses ne dépassent jamais 18 bits.
Avec -mlarge-mem un code est généré qui suppose une adresse complète de 32 bits.

-mstdmain
Par défaut, GCC se lie au code de démarrage qui assume la fonction principale de style SPU
interface (qui a une liste de paramètres non conventionnelle). Avec -mstdmain, GCC reliera
votre programme par rapport au code de démarrage qui suppose une interface de style C99 vers "main",
y compris une copie locale des chaînes "argv".

-mplage-fixe=registre-plage
Générer du code traitant la plage de registres donnée comme des registres fixes. Un registre fixe
est celui que l'allocateur de registre ne peut pas utiliser. Ceci est utile lors de la compilation du noyau
code. Une plage de registres est spécifiée sous la forme de deux registres séparés par un tiret. Plusieurs
les plages de registres peuvent être spécifiées séparées par une virgule.

-mea32
-mea64
Compiler le code en supposant que les pointeurs vers l'espace d'adressage PPU accessible via le "__ea"
qu'un qualificateur d'espace d'adressage nommé a une largeur de 32 ou 64 bits. La valeur par défaut est 32 bits.
Comme il s'agit d'une option de modification de l'ABI, tout le code objet d'un exécutable doit être compilé
avec le même réglage.

-maddress-espace-conversion
-mno-conversion-espace-adresse
Autoriser/interdire le traitement de l'espace d'adressage "__ea" comme surensemble de l'adresse générique
espacer. Cela permet des transtypages explicites entre "__ea" et un pointeur générique ainsi que
conversions implicites de pointeurs génériques en pointeurs "__ea". La valeur par défaut est d'autoriser
conversions de pointeur d'espace d'adressage.

-mcache-taille=taille du cache
Cette option contrôle la version de libgcc que le compilateur lie à un exécutable
et sélectionne un cache géré par logiciel pour accéder aux variables dans l'adresse "__ea"
espace avec une taille de cache particulière. Options possibles pour taille du cache 8, 16, 32, 64
ainsi que 128. La taille du cache par défaut est de 64 Ko.

-matomic-mises à jour
-mno-atomic-mises à jour
Cette option contrôle la version de libgcc que le compilateur lie à un exécutable
et sélectionne si les mises à jour atomiques du cache géré par logiciel des variables côté PPU
sont utilisés. Si vous utilisez des mises à jour atomiques, les modifications apportées à une variable PPU à partir du code SPU à l'aide
le qualificateur d'espace d'adressage nommé "__ea" n'interférera pas avec les modifications apportées aux autres PPU
variables résidant dans la même ligne de cache du code PPU. Si vous n'utilisez pas atomic
mises à jour, de telles interférences peuvent se produire ; cependant, la réécriture des lignes de cache sera plus
efficace. Le comportement par défaut consiste à utiliser des mises à jour atomiques.

-mdual-nops
-Mdual-nops =n
Par défaut, GCC insère des nops pour augmenter le double problème lorsqu'il s'attend à ce qu'il augmente
la performance. n peut être une valeur de 0 à 10. Un plus petit n insèrera moins de nops. dix
est la valeur par défaut, 0 est le même que -mno-dual-nops. Désactivé avec -Tu.

-mhint-max-nops=n
Nombre maximal de nops à insérer pour un indice de branche. Un indice de branche doit être d'au moins 8
instructions loin de la branche qu'il effectue. GCC insérera jusqu'à n non à
appliquez ceci, sinon il ne générera pas le conseil de branche.

-mindice-max-distance=n
L'encodage de l'instruction de conseil de branche limite le conseil à moins de 256
instructions de la succursale qu'il exerce. Par défaut, GCC s'assure qu'il est dans
125.

-msafe-indices
Contournez un bogue matériel qui fait que le SPU se bloque indéfiniment. Par défaut, GCC
insérera l'instruction "hbrp" pour s'assurer que ce blocage ne se produira pas.

Options en Système V

Ces options supplémentaires sont disponibles sur System V Release 4 pour la compatibilité avec d'autres
compilateurs sur ces systèmes :

-G Créez un objet partagé. Il est recommandé de -symbolique or -partagé être utilisé à la place.

-Qy Identifier les versions de chaque outil utilisé par le compilateur, dans un assembleur ".ident"
directive dans la sortie.

-Qn S'abstenir d'ajouter des directives ".ident" au fichier de sortie (c'est la valeur par défaut).

-YP,dirs
Rechercher dans les répertoires dirs, et pas d'autres, pour les bibliothèques spécifiées avec -l.

-Ah,dir
regarde dans l'annuaire dir pour trouver le préprocesseur M4. L'assembleur utilise ce
option.

TUILE-Gx Options

Ces -m les options sont prises en charge sur le TILE-Gx :

-mcpu=prénom
Sélectionne le type de CPU à cibler. Actuellement, le seul type pris en charge est tuilegx.

-m32
-m64
Générez du code pour un environnement 32 bits ou 64 bits. L'environnement 32 bits définit int,
long et pointeur sur 32 bits. L'environnement 64 bits définit int sur 32 bits et long et
pointeur sur 64 bits.

TILEPro Options

Ces -m les options sont prises en charge sur le TILEPro :

-mcpu=prénom
Sélectionne le type de CPU à cibler. Actuellement, le seul type pris en charge est tuilepro.

-m32
Générez du code pour un environnement 32 bits, qui définit int, long et pointeur sur 32 bits.
C'est le seul comportement pris en charge, donc l'indicateur est essentiellement ignoré.

V850 Options

Ces -m les options sont définies pour les implémentations V850 :

-mlong-appels
-mno-long-appels
Traitez tous les appels comme étant éloignés (proches). Si les appels sont supposés être éloignés, le
le compilateur chargera toujours l'adresse des fonctions dans un registre et appellera indirectement
par le pointeur.

-mno-ep
-mep
Ne pas optimiser (optimiser) les blocs de base qui utilisent le même pointeur d'index 4 ou plus
fois pour copier le pointeur dans le registre "ep", et utiliser les plus courts "sld" et "sst"
instructions. Les -mep L'option est activée par défaut si vous optimisez.

-mno-prolog-fonction
-mprolog-fonction
Ne pas utiliser (utiliser) des fonctions externes pour sauvegarder et restaurer des registres au prologue
et épilogue d'une fonction. Les fonctions externes sont plus lentes, mais utilisent moins de code
espace si plusieurs fonctions enregistrent le même nombre de registres. Les
-mprolog-fonction L'option est activée par défaut si vous optimisez.

-mespace
Essayez de rendre le code aussi petit que possible. À l'heure actuelle, cela allume simplement le -mep
ainsi que -mprolog-fonction options.

-mtda=n
Mettez des variables statiques ou globales dont la taille est n octets ou moins dans la petite zone de données
ce registre "ep" pointe vers. La petite zone de données peut contenir jusqu'à 256 octets au total
(128 octets pour les références d'octets).

-msda=n
Mettez des variables statiques ou globales dont la taille est n octets ou moins dans la petite zone de données
ce registre "gp" pointe vers. La petite zone de données peut contenir jusqu'à 64 kilo-octets.

-mzda=n
Mettez des variables statiques ou globales dont la taille est n octets ou moins dans les 32 premiers
kilo-octets de mémoire.

-MV850
Spécifiez que le processeur cible est le V850.

-mbig-commutateur
Générez du code adapté aux grandes tables de commutation. N'utilisez cette option que si le
l'assembleur/éditeur de liens se plaint de branches hors de portée dans une table de commutation.

-mapp-regs
Cette option entraînera l'utilisation de r2 et r5 dans le code généré par le compilateur.
Ce paramètre est la valeur par défaut.

-mno-app-regs
Cette option fera que r2 et r5 seront traités comme des registres fixes.

-mv850e2v3
Spécifiez que le processeur cible est le V850E2V3. Les constantes du préprocesseur
__v850e2v3__ sera défini si cette option est utilisée.

-mv850e2
Spécifiez que le processeur cible est le V850E2. Les constantes du préprocesseur
__v850e2__ sera défini si cette option est utilisée.

-mv850e1
Spécifiez que le processeur cible est le V850E1. Les constantes du préprocesseur
__v850e1__ ainsi que __v850e__ sera défini si cette option est utilisée.

-mv850es
Spécifiez que le processeur cible est le V850ES. Il s'agit d'un alias pour le -mv850e1
option.

-mv850e
Spécifiez que le processeur cible est le V850E. La constante du préprocesseur __v850e__
sera défini si cette option est utilisée.

Si ni l'un ni l'autre -MV850 ni -mv850e ni -mv850e1 ni -mv850e2 ni -mv850e2v3 sont définis
alors un processeur cible par défaut sera choisi et le __v850** préprocesseur
constante sera définie.

Les constantes du préprocesseur __v850 ainsi que __v851__ sont toujours définis, quel que soit le
variante de processeur est la cible.

-mdisable-appel
Cette option supprimera la génération de l'instruction CALLT pour les v850e, v850e1,
Versions v850e2 et v850e2v3 de l'architecture v850. La valeur par défaut est
-mno-disable-callt qui permet d'utiliser l'instruction CALLT.

VAX Options

Ces -m des options sont définies pour le VAX :

-munix
Ne pas sortir certaines instructions de saut ("aobleq" et ainsi de suite) que l'assembleur Unix
car le VAX ne peut pas gérer sur de longues distances.

-mgnu
Sortez ces instructions de saut, en supposant que vous les assemblerez avec le
assembleur GNU.

-mg Code de sortie pour les nombres à virgule flottante au format G au lieu du format D.

VxWorks Options

Les options de cette section sont définies pour toutes les cibles VxWorks. Options spécifiques au
le matériel cible est répertorié avec les autres options pour cette cible.

-mrtp
GCC peut générer du code pour les noyaux VxWorks et les processus en temps réel (RTP). Cette
l'option passe de la première à la seconde. Il définit également la macro du préprocesseur
"__RTP__".

-non statique
Liez un exécutable RTP à des bibliothèques partagées plutôt qu'à des bibliothèques statiques. Les
Options -statique ainsi que -partagé peut également être utilisé pour les RTP ; -statique est la valeur par défaut.

-Bstatique
-Bdynamique
Ces options sont transmises à l'éditeur de liens. Ils sont définis pour la compatibilité avec
Diab.

-Xbind-paresseux
Activez la liaison paresseuse des appels de fonction. Cette option équivaut à -Wl,-z, maintenant Les modèles sont aussi
défini pour la compatibilité avec Diab.

-Xbind-maintenant
Désactivez la liaison paresseuse des appels de fonction. Cette option est la valeur par défaut et est définie pour
compatibilité avec Diab.

x86-64 Options

Ceux-ci sont répertoriés sous

Xstormy16 Options

Ces options sont définies pour Xstormy16 :

-msim
Choisissez les fichiers de démarrage et le script de l'éditeur de liens adaptés au simulateur.

Xtensa Options

Ces options sont prises en charge pour les cibles Xtensa :

-mconst16
-mno-const16
Activer ou désactiver l'utilisation des instructions "CONST16" pour le chargement des valeurs constantes. Les
L'instruction "CONST16" n'est actuellement pas une option standard de Tensilica. Lorsque
activé, les instructions "CONST16" sont toujours utilisées à la place du "L32R" standard
instructions. L'utilisation de "CONST16" n'est activée par défaut que si le "L32R"
l'instruction n'est pas disponible.

-mfused-mad
-mno-fusionné-madd
Activer ou désactiver l'utilisation des instructions fusionnées de multiplication/addition et multiplication/soustraction dans le
option virgule flottante. Cela n'a aucun effet si l'option virgule flottante n'est pas également
activée. La désactivation des instructions fusionnées de multiplication/addition et de multiplication/soustraction force le
compilateur d'utiliser des instructions distinctes pour les opérations de multiplication et d'addition/soustraction.
Cela peut être souhaitable dans certains cas où des résultats strictement conformes à la norme IEEE 754 sont
requis : les instructions fusionnées d'addition/soustraction n'arrondissent pas l'intermédiaire
résultat, produisant ainsi des résultats avec PLUS bits de précision que spécifié par le
Norme IEEE. La désactivation des instructions d'addition/soustraction multipliées par fusion garantit également que
la sortie du programme n'est pas sensible à la capacité du compilateur à combiner multiplier et
ajouter/soustraire des opérations.

-msérialiser-volatile
-mno-sérialiser-volatile
Lorsque cette option est activée, GCC insère les instructions "MEMW" avant la mémoire "volatile"
références pour garantir la cohérence séquentielle. La valeur par défaut est -msérialiser-volatile.
Utilisez -mno-sérialiser-volatile pour omettre les instructions "MEMW".

-mforce-pas de photo
Pour les cibles, comme GNU/Linux, où tout le code Xtensa en mode utilisateur doit être positionné
code indépendant (PIC), cette option désactive le PIC pour la compilation du code du noyau.

-mtext-section-littéraux
-mno-texte-section-littéraux
Contrôler le traitement des pools littéraux. La valeur par défaut est -mno-texte-section-littéraux,
qui place les littéraux dans une section distincte du fichier de sortie. Cela permet au
pool littéral à placer dans une RAM/ROM de données, et il permet également à l'éditeur de liens de combiner
pools de littéraux à partir de fichiers objets séparés pour supprimer les littéraux redondants et améliorer le code
Taille. Avec -mtext-section-littéraux, les littéraux sont intercalés dans la section de texte
afin de les garder au plus près de leurs références. Cela peut être nécessaire
pour les gros fichiers d'assemblage.

-mtarget-aligner
-mno-cible-aligner
Lorsque cette option est activée, GCC demande à l'assembleur d'aligner automatiquement
des instructions pour réduire les pénalités de branche au détriment d'une certaine densité de code. Les
l'assembleur tente d'élargir les instructions de densité pour aligner les cibles de branchement et le
instructions suivant les instructions d'appel. S'il n'y a pas assez de coffre précédent
instructions de densité pour aligner une cible, aucun élargissement ne sera effectué. La valeur par défaut est
-mtarget-aligner. Ces options n'affectent pas le traitement de l'alignement automatique
des instructions comme "LOOP", que l'assembleur alignera toujours, soit en élargissant
instructions de densité ou en insérant des instructions no-op.

-mlongappels
-mno-longappels
Lorsque cette option est activée, GCC demande à l'assembleur de traduire les appels directs en
appels indirects à moins qu'il ne puisse déterminer que la cible d'un appel direct se trouve dans le
plage autorisée par l'instruction d'appel. Cette traduction se produit généralement pour les appels à
fonctions dans d'autres fichiers source. Plus précisément, l'assembleur traduit une
"CALL" dans un "L32R" suivi d'une instruction "CALLX". La valeur par défaut est
-mno-longappels. Cette option doit être utilisée dans les programmes où la cible de l'appel peut
être potentiellement hors de portée. Cette option est implémentée dans l'assembleur, pas dans le
compilateur, de sorte que le code assembleur généré par GCC affichera toujours l'appel direct
instructions --- regardez le code objet désassemblé pour voir les instructions réelles.
Notez que l'assembleur utilisera un appel indirect pour chaque appel inter-fichiers, pas seulement
ceux qui seront vraiment hors de portée.

zSérie Options

Ceux-ci sont répertoriés sous

Options en Code Génération Conventions
Ces options indépendantes de la machine contrôlent les conventions d'interface utilisées dans le code
génération.

La plupart d'entre eux ont à la fois des formes positives et négatives ; la forme négative de -ffou serait
-fno-foo. Dans le tableau ci-dessous, une seule des formes est répertoriée --- celle qui n'est pas la
défaut. Vous pouvez découvrir l'autre forme en supprimant no- ou en l'ajoutant.

-fbounds-check
Pour les frontaux qui le prennent en charge, générez du code supplémentaire pour vérifier que les indices utilisés pour
les tableaux d'accès sont dans la plage déclarée. Ceci n'est actuellement pris en charge que par le
Frontaux Java et Fortran, où cette option est définie par défaut sur true et false
respectivement.

-ftrapv
Cette option génère des traps pour débordement signé sur addition, soustraction,
opérations de multiplication.

-fwrapv
Cette option demande au compilateur de supposer que le débordement arithmétique signé de
l'addition, la soustraction et la multiplication s'enroulent en utilisant le complément à deux
représentation. Ce drapeau active certaines optimisations et en désactive d'autres. Cette
L'option est activée par défaut pour le frontal Java, comme requis par le langage Java
spécification.

-fexceptions
Activer la gestion des exceptions. Génère le code supplémentaire nécessaire pour propager les exceptions. Pour
certaines cibles, cela implique que GCC générera des informations de déroulement de trame pour tous
fonctions, ce qui peut produire une surcharge de taille de données importante, bien que cela ne
affecter l'exécution. Si vous ne spécifiez pas cette option, GCC l'activera par défaut
pour les langages comme C++ qui nécessitent normalement la gestion des exceptions, et désactivez-le pour
des langages comme le C qui n'en ont normalement pas besoin. Cependant, vous devrez peut-être activer
cette option lors de la compilation du code C qui doit interagir correctement avec exception
gestionnaires écrits en C++. Vous pouvez également désactiver cette option si vous êtes
compiler des programmes C++ plus anciens qui n'utilisent pas la gestion des exceptions.

-fnon-appel-exceptions
Générez du code qui permet aux instructions de trapping de lever des exceptions. Notez que ce
nécessite un support d'exécution spécifique à la plate-forme qui n'existe pas partout. De plus,
il permet seulement le piégeage instructions pour lever des exceptions, c'est-à-dire des références de mémoire ou
instructions à virgule flottante. Il ne permet pas de lever des exceptions d'arbitraire
gestionnaires de signaux tels que "SIGALRM".

-tables-funwind
Similaire à -fexceptions, sauf qu'il ne générera que les données statiques nécessaires, mais
n'affectera pas le code généré d'une autre manière. Vous n'activerez normalement pas
cette option; à la place, un processeur de langage qui a besoin de cette gestion l'activerait sur
votre nom.

-fasynchrone-unwind-tables
Générez une table de déroulement au format nain2, si pris en charge par la machine cible. Le tableau est
exact à chaque frontière d'instruction, il peut donc être utilisé pour le déroulement de la pile à partir de
événements asynchrones (comme le débogueur ou le ramasse-miettes).

-fpcc-struct-retour
Renvoie les valeurs "courtes" "struct" et "union" en mémoire comme des valeurs plus longues, plutôt que dans
registres. Cette convention est moins efficace, mais elle a l'avantage de permettre
intercallabilité entre les fichiers compilés par GCC et les fichiers compilés avec d'autres compilateurs,
en particulier le compilateur portable C (pcc).

La convention précise pour renvoyer les structures en mémoire dépend de la cible
macro de configuration.

Les structures et unions courtes sont celles dont la taille et l'alignement correspondent à ceux de certains
type entier.

Mise en garde: code compilé avec le -fpcc-struct-retour le commutateur n'est pas compatible binaire
avec du code compilé avec le -freg-struct-retour changer. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.

-freg-struct-retour
Renvoyez les valeurs « struct » et « union » dans les registres lorsque cela est possible. C'est plus efficace
pour les petites structures que -fpcc-struct-retour.

Si vous ne spécifiez ni -fpcc-struct-retour ni -freg-struct-retour, GCC est par défaut
quelle que soit la convention standard pour la cible. S'il n'y a pas de convention standard,
GCC est par défaut -fpcc-struct-retour, sauf sur les cibles où GCC est le principal
compilateur. Dans ces cas, nous pouvons choisir la norme, et nous avons choisi le plus efficace
enregistrer retour alternative.

Mise en garde: code compilé avec le -freg-struct-retour le commutateur n'est pas compatible binaire
avec du code compilé avec le -fpcc-struct-retour changer. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.

-fshort-énumérations
N'allouez à un type "enum" que le nombre d'octets dont il a besoin pour la plage déclarée de
valeurs possibles. Concrètement, le type "enum" sera équivalent au plus petit
type entier qui a assez de place.

Mise en garde: le -fshort-énumérations Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.

-fcourt-double
Utilisez la même taille pour « double » que pour « flotteur ».

Mise en garde: le -fcourt-double Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.

-fshort-wchar
Remplacer le type sous-jacent pour wchar_t être court non signé int à la place du
par défaut pour la cible. Cette option est utile pour créer des programmes à exécuter sous
DU VIN.

Mise en garde: le -fshort-wchar Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. Utilisez-le pour vous conformer à une non-
interface binaire d'application par défaut.

-fno-commun
En code C, contrôle le placement des variables globales non initialisées. Compilateurs Unix C
ont traditionnellement permis de multiples définitions de ces variables dans différentes
unités de compilation en plaçant les variables dans un bloc commun. C'est le comportement
spécifié par -fcommun, et est la valeur par défaut pour GCC sur la plupart des cibles. D'autre part,
ce comportement n'est pas requis par ISO C, et sur certaines cibles peut porter une vitesse ou un code
pénalité de taille sur les références variables. Les -fno-commun option spécifie que le
le compilateur doit placer des variables globales non initialisées dans la section de données de l'objet
plutôt que de les générer en tant que blocs communs. Cela a pour effet que si le
même variable est déclarée (sans "extern") dans deux compilations différentes, vous
obtenez une erreur de définition multiple lorsque vous les liez. Dans ce cas, vous devez compiler
avec -fcommun au lieu. Compilation avec -fno-commun est utile sur des cibles pour lesquelles il
offre de meilleures performances, ou si vous souhaitez vérifier que le programme fonctionnera sur
d'autres systèmes qui traitent toujours les déclarations de variables non initialisées de cette façon.

-fno-identifiant
Ignore le #ident Directive.

-finhibit-taille-directive
Ne pas sortir une directive d'assembleur ".size", ou quoi que ce soit d'autre qui causerait des problèmes
si la fonction est divisée au milieu et que les deux moitiés sont placées à des endroits éloignés
à part dans la mémoire. Cette option est utilisée lors de la compilation crtstuff.c; tu ne devrais pas avoir besoin
de l'utiliser pour autre chose.

-fverbeux-asm
Mettez des informations de commentaire supplémentaires dans le code d'assemblage généré pour le rendre plus
lisible. Cette option n'est généralement utile qu'à ceux qui ont réellement besoin de lire le
code assembleur généré (peut-être lors du débogage du compilateur lui-même).

-fno-verbeux-asm, la valeur par défaut, entraîne l'omission des informations supplémentaires et est
utile lors de la comparaison de deux fichiers assembleur.

-frecord-gcc-commutateurs
Ce commutateur fait que la ligne de commande qui a été utilisée pour appeler le compilateur est
enregistré dans le fichier objet en cours de création. Ce commutateur n'est implémenté que
sur certaines cibles et le format exact de l'enregistrement est le format de fichier cible et binaire
dépendant, mais il prend généralement la forme d'une section contenant du texte ASCII. Cette
l'interrupteur est lié au -fverbeux-asm commutateur, mais ce commutateur n'enregistre que
informations dans le fichier de sortie de l'assembleur sous forme de commentaires, afin qu'elles n'atteignent jamais l'objet
déposer. Voir également -commutateurs-grecord-gcc pour une autre façon de stocker les options du compilateur dans
le fichier objet.

-fpic
Générer un code indépendant de la position (PIC) adapté à une utilisation dans une bibliothèque partagée, si
pris en charge pour la machine cible. Un tel code accède à toutes les adresses constantes via un
table de décalage global (GOT). Le chargeur dynamique résout les entrées GOT lorsque le
le programme démarre (le chargeur dynamique ne fait pas partie de GCC ; il fait partie du
système). Si la taille GOT de l'exécutable lié dépasse un maximum spécifique à la machine
size, vous obtenez un message d'erreur de l'éditeur de liens indiquant que -fpic ne marche pas; dans
ce cas, recompilez avec -fPIC au lieu. (Ces maximums sont de 8k sur le SPARC et de 32k
sur le m68k et le RS/6000. Le 386 n'a pas une telle limite.)

Le code indépendant de la position nécessite un support spécial et ne fonctionne donc que sur
certaines machines. Pour le 386, GCC prend en charge PIC pour System V mais pas pour le Sun
386i. Le code généré pour l'IBM RS/6000 est toujours indépendant de la position.

Lorsque ce drapeau est défini, les macros "__pic__" et "__PIC__" sont définies à 1.

-fPIC
Si pris en charge pour la machine cible, émettre un code indépendant de la position, adapté à
liaison dynamique et évitant toute limite sur la taille de la table d'offset global. Cette
option fait une différence sur le m68k, PowerPC et SPARC.

Le code indépendant de la position nécessite un support spécial et ne fonctionne donc que sur
certaines machines.

Lorsque ce drapeau est défini, les macros "__pic__" et "__PIC__" sont définies à 2.

-fpie
-fPIE
Ces options sont similaires à -fpic ainsi que -fPIC, mais code indépendant de la position généré
ne peut être lié qu'à des exécutables. Ces options sont généralement utilisées lorsque -tarte GCC
L'option sera utilisée lors de la liaison.

-fpie ainsi que -fPIE les deux définissent les macros "__pie__" et "__PIE__". Les macros ont le
valeur 1 pour -fpie et pour 2 -fPIE.

-fno-jump-tables
N'utilisez pas de tables de saut pour les instructions switch même là où cela serait plus efficace
que d'autres stratégies de génération de code. Cette option est utile en conjonction avec
-fpic or -fPIC pour le code du bâtiment qui fait partie d'un éditeur de liens dynamique et ne peut pas
référence l'adresse d'une table de saut. Sur certaines cibles, les tables de saut ne nécessitent pas de
GOT et cette option n'est pas nécessaire.

-fixé-reg
Traiter le registre nommé reg comme registre fixe ; le code généré ne doit jamais faire référence à
(sauf peut-être en tant que pointeur de pile, pointeur de cadre ou dans un autre rôle fixe).

reg doit être le nom d'un registre. Les noms de registre acceptés sont spécifiques à la machine
et sont définis dans la macro "REGISTER_NAMES" du fichier de macro de description de la machine.

Ce drapeau n'a pas de forme négative, car il spécifie un choix à trois voies.

-fcall-utilisé-reg
Traiter le registre nommé reg comme un registre allouable écrasé par fonction
appels. Il peut être alloué pour des temporaires ou des variables qui ne vivent pas sur une
appel. Les fonctions compilées de cette manière n'enregistreront pas et ne restaureront pas le registre reg.

C'est une erreur d'utiliser ce drapeau avec le pointeur de trame ou le pointeur de pile. Utilisation de ce
indicateur pour les autres registres qui ont des rôles omniprésents fixes dans l'exécution de la machine
modèle produira des résultats désastreux.

Ce drapeau n'a pas de forme négative, car il spécifie un choix à trois voies.

-fcall-sauvé-reg
Traiter le registre nommé reg comme un registre allouable sauvegardé par les fonctions. C'est possible
alloué même pour les temporaires ou les variables qui vivent à travers un appel. Les fonctions
compilé de cette façon sauvegardera et restaurera le registre reg s'ils l'utilisent.

C'est une erreur d'utiliser ce drapeau avec le pointeur de trame ou le pointeur de pile. Utilisation de ce
indicateur pour les autres registres qui ont des rôles omniprésents fixes dans l'exécution de la machine
modèle produira des résultats désastreux.

Un autre type de catastrophe résultera de l'utilisation de ce drapeau pour un registre dans
quelles valeurs de fonction peuvent être renvoyées.

Ce drapeau n'a pas de forme négative, car il spécifie un choix à trois voies.

-fpack-struct[=n]
Sans valeur spécifiée, regroupez tous les membres de la structure sans trous. Lorsqu'un
valeur est spécifiée (qui doit être une petite puissance de deux), les membres de la structure du pack
en fonction de cette valeur, représentant l'alignement maximal (c'est-à-dire les objets avec
les exigences d'alignement par défaut supérieures à celles-ci seront sorties potentiellement non alignées
à l'emplacement de montage suivant.

Mise en garde: le -fpack-struct Le commutateur force GCC à générer du code qui n'est pas binaire
compatible avec le code généré sans ce commutateur. De plus, cela rend le code
sous-optimal. Utilisez-le pour vous conformer à une interface binaire d'application autre que celle par défaut.

-finstrument-fonctions
Générer des appels d'instrumentation pour l'entrée et la sortie des fonctions. Juste après la fonction
entrée et juste avant la sortie de la fonction, les fonctions de profilage suivantes seront appelées
avec l'adresse de la fonction courante et son site d'appel. (Sur certaines plateformes,
"__builtin_return_address" ne fonctionne pas au-delà de la fonction actuelle, donc le site d'appel
sinon, les informations peuvent ne pas être disponibles pour les fonctions de profilage.)

void __cyg_profile_func_enter (void *this_fn,
vide *call_site);
void __cyg_profile_func_exit (void *this_fn,
vide *call_site);

Le premier argument est l'adresse du début de la fonction courante, qui peut être
recherché exactement dans la table des symboles.

Cette instrumentation est également réalisée pour des fonctions étendues en ligne dans d'autres fonctions.
Les appels de profilage indiqueront où, conceptuellement, la fonction en ligne est entrée
et sorti. Cela signifie que des versions adressables de ces fonctions doivent être disponibles.
Si toutes vos utilisations d'une fonction sont étendues en ligne, cela peut signifier un
extension de la taille du code. Si tu utilises externe en ligne dans votre code C, un adressable
version de ces fonctions doit être fournie. (C'est normalement le cas de toute façon, mais
si vous avez de la chance et que l'optimiseur étend toujours les fonctions en ligne, vous pourriez avoir
s'en tirer sans fournir de copies statiques.)

Une fonction peut recevoir l'attribut "no_instrument_function", auquel cas cette
l'instrumentation ne sera pas effectuée. Cela peut être utilisé, par exemple, pour le profilage
les fonctions énumérées ci-dessus, les routines d'interruption de haute priorité et toutes les fonctions à partir desquelles
les fonctions de profilage ne peuvent pas être appelées en toute sécurité (peut-être des gestionnaires de signaux, si le
les routines de profilage génèrent une sortie ou allouent de la mémoire).

-finstrument-functions-exclude-file-list=filet,filet...
Définir la liste des fonctions exclues de l'instrumentation (voir la description
de "-finstrument-functions"). Si le fichier qui contient une définition de fonction correspond
avec l'un des filet, alors cette fonction n'est pas instrumentée. Le match se fait le
sous-chaînes : si le filet paramètre est une sous-chaîne du nom de fichier, il est considéré comme
être un match.

Par exemple :

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

exclura toute fonction en ligne définie dans les fichiers dont les chemins contiennent "/bits/stl"
ou "include/sys".

Si, pour une raison quelconque, vous souhaitez inclure la lettre ',' dans l'un des sym, écrivez ','. Pour
exemple, "-finstrument-functions-exclude-file-list=',,tmp'" (notez le guillemet simple
entourant l'option).

-finstrument-functions-exclude-function-list=sym,sym...
Ceci est similaire à "-finstrument-functions-exclude-file-list", mais cette option définit
la liste des noms de fonctions à exclure de l'instrumentation. Le nom de la fonction à
être mis en correspondance est son nom visible par l'utilisateur, tel que "vector bla (vecteur constant &)",
pas le nom mutilé interne (par exemple, "_Z4blahRSt6vectorIiSaiiEE"). Le match est fait
sur les sous-chaînes : si le sym paramètre est une sous-chaîne du nom de la fonction, c'est
considéré comme un match. Pour les identifiants étendus C99 et C++, le nom de la fonction
doit être donné en UTF-8, sans utiliser de noms de caractères universels.

-fstack-vérifier
Générez du code pour vérifier que vous ne dépassez pas les limites de la pile. Tu
devrait spécifier ce drapeau si vous exécutez dans un environnement avec plusieurs threads,
mais n'a que rarement besoin de le spécifier dans un environnement monothread puisque la pile
le débordement est automatiquement détecté sur presque tous les systèmes s'il n'y a qu'une seule pile.

Notez que ce commutateur ne provoque pas réellement la vérification ; le fonctionnement
système ou le language runtime doit le faire. Le commutateur provoque la génération de code pour
s'assurer qu'ils voient la pile s'allonger.

Vous pouvez également spécifier un paramètre de chaîne : "no" signifie aucune vérification, "generic"
signifie forcer l'utilisation de la vérification à l'ancienne, "spécifique" signifie utiliser la meilleure vérification
méthode et équivaut à nu -fstack-vérifier.

La vérification à l'ancienne est un mécanisme générique qui ne nécessite aucune prise en charge de cible spécifique dans
le compilateur mais présente les inconvénients suivants :

1. Stratégie d'allocation modifiée pour les objets volumineux : ils seront toujours alloués
dynamiquement si leur taille dépasse un seuil fixé.

2. Limite fixe sur la taille du cadre statique de fonctions : lorsqu'il est surmonté d'un
fonction particulière, la vérification de la pile n'est pas fiable et un avertissement est émis par le
compilateur.

3. Inefficacité : à cause à la fois de la stratégie d'allocation modifiée et du
mise en œuvre, les performances du code sont entravées.

Notez que la vérification de la pile à l'ancienne est également la méthode de secours pour "spécifique" si non
la prise en charge des cibles a été ajoutée dans le compilateur.

-fstack-limit-register=reg
-fstack-limite-symbole=sym
-fno-stack-limite
Générer du code pour s'assurer que la pile ne dépasse pas une certaine valeur, soit
la valeur d'un registre ou l'adresse d'un symbole. Si la pile grandissait au-delà
la valeur, un signal est élevé. Pour la plupart des cibles, le signal est élevé avant le
pile dépasse la limite, il est donc possible de capter le signal sans prendre
Précautions spéciales.

Par exemple, si la pile commence à l'adresse absolue Assistance et pousse vers le bas,
vous pouvez utiliser les drapeaux -fstack-limit-symbol=__stack_limit ainsi que
-Wl,--defsym,__stack_limit=0x7ffe0000 pour appliquer une limite de pile de 128 Ko. Noter que
cela ne peut fonctionner qu'avec l'éditeur de liens GNU.

-fsplit-pile
Générez du code pour diviser automatiquement la pile avant qu'elle ne déborde. La résultante
programme a une pile non contiguë qui ne peut déborder que si le programme est incapable de
allouer plus de mémoire. Ceci est très utile lors de l'exécution de programmes threadés, car il
n'est plus nécessaire de calculer une bonne taille de pile à utiliser pour chaque thread. C'est
actuellement implémenté uniquement pour les back-ends i386 et x86_64 exécutant GNU/Linux.

Lorsque le code compilé avec -fsplit-pile appelle le code compilé sans -fsplit-pile, Là
peut ne pas y avoir beaucoup d'espace de pile disponible pour que ce dernier code s'exécute. Si vous compilez tous
code, y compris le code de la bibliothèque, avec -fsplit-pile n'est pas une option, alors l'éditeur de liens peut
corriger ces appels afin que le code compilé sans -fsplit-pile a toujours un grand
empiler. La prise en charge de ceci est implémentée dans l'éditeur de liens gold dans la version GNU binutils
2.21 et versions ultérieures.

-fagging-underscore
Cette option et sa contrepartie, -fno-leader-soulignement, changer de force la manière C
les symboles sont représentés dans le fichier objet. Une utilisation est d'aider à établir un lien avec l'héritage
code d'assemblage.

Mise en garde: le -fagging-underscore Le commutateur force GCC à générer du code qui n'est pas
binaire compatible avec le code généré sans ce commutateur. Utilisez-le pour vous conformer à un
interface binaire d'application autre que celle par défaut. Toutes les cibles ne fournissent pas un support complet
pour ce commutateur.

-ftls-modèle=modèle
Modifiez le modèle de stockage thread-local à utiliser. Les modèle l'argument devrait être l'un des
"global-dynamic", "local-dynamic", "initial-exec" ou "local-exec".

La valeur par défaut sans -fpic est "initial-exec" ; avec -fpic la valeur par défaut est
"global-dynamique".

-fvisibilité=défaut|interne|caché|protégé
Définissez la visibilité par défaut du symbole d'image ELF sur l'option spécifiée --- tous les symboles seront
être marqué avec ceci à moins qu'il ne soit remplacé dans le code. L'utilisation de cette fonction peut très
améliorer considérablement les temps de liaison et de chargement des bibliothèques d'objets partagés, produire plus
code optimisé, fournir une exportation d'API presque parfaite et éviter les conflits de symboles. Il est
fortement recommandé de l'utiliser dans tous les objets partagés que vous distribuez.

Malgré la nomenclature, « par défaut » signifie toujours public ; c'est-à-dire disponible pour être lié
contre de l'extérieur de l'objet partagé. "protégé" et "interne" sont assez inutiles
dans le monde réel, la seule autre option couramment utilisée sera donc "cachée". Les
par défaut si -fvisibilité n'est pas spécifié est "par défaut", c'est-à-dire que chaque symbole
public --- cela provoque le même comportement que les versions précédentes de GCC.

Une bonne explication des avantages offerts en s'assurant que les symboles ELF ont le bon
la visibilité est donnée par "How To Write Shared Libraries" d'Ulrich Drepper (qui peut être
trouvé àhttp://people.redhat.com/~drepper/>)---cependant une solution supérieure a fait
possible par cette option de marquer les choses cachées lorsque la valeur par défaut est public est de faire
la valeur par défaut est masquée et marque les choses en public. C'est la norme avec les DLL sous Windows et
avec -fvisibilité=caché et "__attribute__ ((visibility("default")))" au lieu de
"__declspec(dllexport)" vous obtenez une sémantique presque identique avec une syntaxe identique.
C'est une aubaine pour ceux qui travaillent sur des projets multiplateformes.

Pour ceux qui ajoutent une prise en charge de la visibilité au code existant, vous pouvez trouver #pragma GCC
définition utile. Cela fonctionne en joignant les déclarations que vous souhaitez définir
visibilité pour avec (par exemple) #pragma GCC définition pousser (caché) ainsi que #pragma GCC
définition pop. Gardez à l'esprit que la visibilité des symboles doit être vue as partie of le
API interface contrat et donc tout nouveau code doit toujours spécifier la visibilité lorsqu'il
n'est pas la valeur par défaut ; c'est-à-dire que les déclarations à utiliser uniquement au sein du GRD local devraient toujours
être marqué explicitement comme masqué afin d'éviter les frais généraux d'indirection PLT --- ce qui en fait
abondamment clair facilite également la lisibilité et l'auto-documentation du code. Noter que
en raison des exigences de la spécification ISO C++, l'opérateur new et l'operator delete doivent
toujours avoir une visibilité par défaut.

Sachez que les en-têtes externes à votre projet, en particulier les en-têtes système et
les en-têtes de toute autre bibliothèque que vous utilisez, peuvent ne pas s'attendre à être compilés avec
visibilité autre que la valeur par défaut. Vous devrez peut-être dire explicitement #pragma GCC
définition pousser (par défaut) avant d'inclure de tels en-têtes.

externe les déclarations ne sont pas affectées par -fvisibilité, donc beaucoup de code peut être
recompilé avec -fvisibilité=caché sans aucune modification. Cependant, cela signifie que
appelle à externe les fonctions sans visibilité explicite utiliseront le PLT, il est donc plus
efficace à utiliser __attribut ((visibilité)) (facultatif) #pragma GCC définition dire au
compilateur qui externe les déclarations doivent être traitées comme masquées.

Notez que -fvisibilité affecte les entités de liaison vagues C++. Cela signifie que, pour
exemple, une classe d'exception qui sera levée entre les DSO doit être explicitement
marqué avec la visibilité par défaut de sorte que le type_info les nœuds seront unifiés entre les
DSO.

Un aperçu de ces techniques, de leurs avantages et de la façon de les utiliser est à
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
Cette option doit être utilisée si les accès à des champs de bits volatiles (ou autre structure
champs, bien que le compilateur honore généralement ces types de toute façon) doit utiliser un seul
accès de la largeur du type de champ, aligné sur un alignement naturel si possible.
Par exemple, les cibles avec des registres périphériques mappés en mémoire peuvent nécessiter tous ces
les accès doivent avoir une largeur de 16 bits ; avec ce drapeau, l'utilisateur pourrait déclarer tous les bits périphériques
champs comme "unsigned short" (en supposant que short est de 16 bits sur ces cibles) pour forcer GCC
d'utiliser des accès 16 bits au lieu, peut-être, d'un accès 32 bits plus efficace.

Si cette option est désactivée, le compilateur utilisera l'instruction la plus efficace. Dans
l'exemple précédent, cela pourrait être une instruction de chargement de 32 bits, même si cela
octets d'accès qui ne contiennent aucune partie du champ de bits, ou mappés en mémoire
registres sans rapport avec celui en cours de mise à jour.

Si la cible nécessite un alignement strict et que le respect du type de champ nécessite
violant cet alignement, un avertissement est émis. Si le champ a l'attribut "packed",
l'accès se fait sans respecter le type de champ. Si le champ n'a pas
attribut "packed", l'accès se fait en respectant le type de champ. Dans les deux cas, GCC
suppose que l'utilisateur sait quelque chose sur le matériel cible qu'il ignore.

La valeur par défaut de cette option est déterminée par l'interface binaire de l'application pour
le processeur cible.

ENVIRONNEMENT


Cette section décrit plusieurs variables d'environnement qui affectent le fonctionnement de GCC. Certains
d'entre eux fonctionnent en spécifiant des répertoires ou des préfixes à utiliser lors de la recherche de différents types
de fichiers. Certains sont utilisés pour spécifier d'autres aspects de l'environnement de compilation.

Notez que vous pouvez également spécifier des lieux de recherche à l'aide d'options telles que -B, -I ainsi que -L.
Ceux-ci ont priorité sur les emplacements spécifiés à l'aide de variables d'environnement, qui à leur tour
ont préséance sur celles spécifiées par la configuration de GCC.

LANGUE
LC_CTYPE
LC_MESSAGES
LC_TOUS
Ces variables d'environnement contrôlent la manière dont GCC utilise les informations de localisation
ce qui permet au GCC de travailler avec différentes conventions nationales. GCC inspecte les paramètres régionaux
catégories LC_CTYPE ainsi que LC_MESSAGES s'il a été configuré pour le faire. Ces localités
les catégories peuvent être définies sur n'importe quelle valeur prise en charge par votre installation. Une valeur typique est
en_GB.UTF-8 pour l'anglais au Royaume-Uni encodé en UTF-8.

La LC_CTYPE variable d'environnement spécifie la classification des caractères. GCC l'utilise pour
déterminer les limites des caractères dans une chaîne ; cela est nécessaire pour certains multi-octets
codages contenant des guillemets et des caractères d'échappement qui seraient autrement interprétés
comme fin de chaîne ou échappement.

La LC_MESSAGES variable d'environnement spécifie la langue à utiliser dans le diagnostic
des messages.

Si la LC_TOUS variable d'environnement est définie, elle remplace la valeur de LC_CTYPE ainsi que
LC_MESSAGES; autrement, LC_CTYPE ainsi que LC_MESSAGES par défaut à la valeur de LANGUE
variable d'environnement. Si aucune de ces variables n'est définie, GCC passe par défaut à traditionnel
C Comportement anglais.

TMPDIR
If TMPDIR est défini, il spécifie le répertoire à utiliser pour les fichiers temporaires. GCC utilise
fichiers temporaires pour contenir la sortie d'une étape de compilation qui doit être utilisée comme
entrée à l'étape suivante : par exemple, la sortie du préprocesseur, qui est le
entrée dans le compilateur proprement dit.

GCC_COMPARE_DEBUG
Paramètres GCC_COMPARE_DEBUG équivaut presque à passer -fcompare-debug à la
pilote du compilateur. Voir la documentation de cette option pour plus de détails.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX est défini, il spécifie un préfixe à utiliser dans les noms des
sous-programmes exécutés par le compilateur. Aucune barre oblique n'est ajoutée lorsque ce préfixe est combiné
avec le nom d'un sous-programme, mais vous pouvez spécifier un préfixe qui se termine par une barre oblique si
vous le souhaitez.

If GCC_EXEC_PREFIX n'est pas défini, GCC tentera de trouver un préfixe approprié pour
utiliser en fonction du nom de chemin avec lequel il a été invoqué.

Si GCC ne peut pas trouver le sous-programme en utilisant le préfixe spécifié, il essaie de chercher dans le
emplacements habituels pour le sous-programme.

La valeur par défaut de GCC_EXEC_PREFIX is préfixe/lib/gcc/ De préfixe est le préfixe de
le compilateur installé. Dans de nombreux cas préfixe est la valeur de "préfixe" lorsque vous avez exécuté le
configurer scripts.

Autres préfixes spécifiés avec -B ont préséance sur ce préfixe.

Ce préfixe est également utilisé pour rechercher des fichiers tels que crt0.o qui sont utilisés pour la liaison.

De plus, le préfixe est utilisé de manière inhabituelle pour trouver les répertoires à rechercher
pour les fichiers d'en-tête. Pour chacun des répertoires standards dont le nom commence normalement
avec /usr/local/lib/gcc (plus précisément, avec la valeur de GCC_INCLUDE_DIR), GCC essaie
remplacer ce qui commence par le préfixe spécifié pour produire un autre répertoire
Nom. Ainsi, avec -Bfoo/, GCC recherchera nourriture/bar où il rechercherait normalement
/usr/local/lib/bar. Ces répertoires alternatifs sont recherchés en premier ; le standard
les répertoires viennent ensuite. Si un répertoire standard commence par le préfixe puis
la valeur de préfixe est remplacé par GCC_EXEC_PREFIX lors de la recherche de fichiers d'en-tête.

COMPILATEUR_PATH
La valeur de COMPILATEUR_PATH est une liste de répertoires séparés par des deux-points, un peu comme PATH.
GCC essaie les répertoires ainsi spécifiés lors de la recherche de sous-programmes, s'il ne peut pas
trouver les sous-programmes en utilisant GCC_EXEC_PREFIX.

LIBRARY_PATH
La valeur de LIBRARY_PATH est une liste de répertoires séparés par des deux-points, un peu comme PATH.
Lorsqu'il est configuré en compilateur natif, GCC essaie les répertoires ainsi spécifiés lorsque
recherche de fichiers de liens spéciaux, s'il ne les trouve pas en utilisant GCC_EXEC_PREFIX.
La liaison à l'aide de GCC utilise également ces répertoires lors de la recherche de bibliothèques ordinaires
pour le -l option (mais les répertoires spécifiés avec -L viens en premier).

LANGUE
Cette variable est utilisée pour transmettre les informations de localisation au compilateur. Une façon dont
ces informations sont utilisées pour déterminer le jeu de caractères à utiliser lorsque le caractère
les littéraux, les chaînes de caractères et les commentaires sont analysés en C et C++. Lorsque le compilateur est
configuré pour autoriser les caractères multi-octets, les valeurs suivantes pour LANGUE
reconnu:

C-JIS
Reconnaître les caractères JIS.

C-SJIS
Reconnaître les caractères SJIS.

C-EUCJP
Reconnaître les caractères EUCJP.

If LANGUE n'est pas défini, ou s'il a une autre valeur, alors le compilateur utilisera
mblen et mbtowc tels que définis par les paramètres régionaux par défaut pour reconnaître et traduire plusieurs octets
caractères.

Certaines variables d'environnement supplémentaires affectent le comportement du préprocesseur.

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
La valeur de chaque variable est une liste de répertoires séparés par un caractère spécial, beaucoup
comme PATH, dans lequel rechercher les fichiers d'en-tête. Le caractère spécial,
"PATH_SEPARATOR", dépend de la cible et est déterminé au moment de la construction de GCC. Pour Microsoft
Cibles basées sur Windows, il s'agit d'un point-virgule, et pour presque toutes les autres cibles, il s'agit d'un
côlon.

CPATH spécifie une liste de répertoires à rechercher comme si spécifié avec -I, mais
après tous les chemins donnés avec -I options sur la ligne de commande. Cette variable d'environnement
est utilisé quelle que soit la langue en cours de prétraitement.

Les variables d'environnement restantes s'appliquent uniquement lors du prétraitement du
langue indiquée. Chacun spécifie une liste de répertoires à rechercher comme si
spécifié avec -isystème, mais après tous les chemins donnés avec -isystème options sur le
ligne de commande.

Dans toutes ces variables, un élément vide demande au compilateur de rechercher son
directeur de travail. Des éléments vides peuvent apparaître au début ou à la fin d'un chemin. Pour
exemple, si la valeur de CPATH est ":/special/include", qui a le même effet que
-NS. -Je/spécial/inclus.

DEPENDANCES_OUTPUT
Si cette variable est définie, sa valeur spécifie comment afficher les dépendances pour Make based
sur les fichiers d'en-tête non système traités par le compilateur. Les fichiers d'en-tête système sont
ignoré dans la sortie de dépendance.

La valeur de DEPENDANCES_OUTPUT peut être juste un nom de fichier, auquel cas les règles Make
sont écrites dans ce fichier, en devinant le nom cible à partir du nom du fichier source. Ou la
valeur peut avoir la forme filet l'objectif, auquel cas les règles sont écrites dans le fichier filet
en utilisant l'objectif comme nom cible.

En d'autres termes, cette variable d'environnement équivaut à combiner les options -MM
ainsi que -MF, avec une option -MT interrupteur aussi.

SUNPRO_DÉPENDANCES
Cette variable est la même que DEPENDANCES_OUTPUT (voir ci-dessus), sauf que le système
les fichiers d'en-tête ne sont pas ignorés, cela implique donc -M plutôt que -MM. Cependant, l'
la dépendance vis-à-vis du fichier d'entrée principal est omise.

Utilisez g++-4.7 en ligne à l'aide des services onworks.net


Serveurs et postes de travail gratuits

Télécharger des applications Windows et Linux

  • 1
    turcdevops
    turcdevops
    TurkDevOps a ?k kaynak yaz?l?m
    geli?tirici topluluklar? DevTurks-Équipe
    Tarafándan desteklenmektedir..
    Fonctionnalités : https://github.com/turkdevopshttps://turkdevops.g...
    Télécharger turkdevops
  • 2
    asammdf
    asammdf
    *asammdf* est un analyseur rapide Python et
    éditeur pour l'ASAM (Association pour
    Standardisation de l'automatisation et
    Systèmes de mesure) MDF / MF4
    (Format des données de mesure...
    Télécharger asammdf
  • 3
    LAME (Lame n'est pas un encodeur MP3)
    LAME (Lame n'est pas un encodeur MP3)
    LAME est un outil pédagogique à utiliser
    pour en savoir plus sur l'encodage MP3. Le
    L'objectif du projet LAME est d'améliorer
    la psycho acoustique, la qualité et la rapidité
    de député...
    Télécharger LAME (Lame n'est pas un encodeur MP3)
  • 4
    wxPython
    wxPython
    Un ensemble de modules d'extension Python qui
    encapsulez les classes d'interface graphique multiplateforme à partir de
    wxWidgets.. Public : Développeurs. Utilisateur
    interface : Système X Window (X11), Win32...
    Télécharger wxPython
  • 5
    gestionnaire de fichiers de paquets
    gestionnaire de fichiers de paquets
    Ceci est le gestionnaire de fichiers du pack Total War
    projet, à partir de la version 1.7. UNE
    courte introduction à Warscape
    modding : ...
    Télécharger le packfilemanager
  • 6
    IPerf2
    IPerf2
    Un outil de trafic réseau pour mesurer
    Performances TCP et UDP avec métriques
    autour du débit et de la latence. Les
    les objectifs comprennent le maintien d'une activité
    morue iperf...
    Télécharger IPerf2
  • Plus "

Commandes Linux

Ad