InglêsFrancêsEspanhol

Executar servidores | Ubuntu > | Fedora > |


favicon do OnWorks

g ++ - Online na nuvem

Execute g ++ no provedor de hospedagem gratuita OnWorks no Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS

Este é o comando g ++ que pode ser executado no provedor de hospedagem gratuita OnWorks usando uma de nossas várias estações de trabalho online gratuitas, como Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS

PROGRAMA:

NOME


gcc - compilador C e C ++ do projeto GNU

SINOPSE


gcc [-c|-S|-E] [-std =padrão]
[-g] [-pg] [-Onível]
[-Wavisar...] [-Wpedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=definir] ...] [-Umacro]
[-fopção...] [-mopção de máquina...]
[-o arquivo de saída] [@filete] no arquivo...

Apenas as opções mais úteis são listadas aqui; veja abaixo para o restante. g ++ aceita
principalmente as mesmas opções que gcc.

DESCRIÇÃO


Quando você invoca o GCC, ele normalmente faz o pré-processamento, a compilação, a montagem e a vinculação.
As "opções gerais" permitem interromper esse processo em um estágio intermediário. Para
exemplo, o -c opção diz para não executar o vinculador. Então, a saída consiste no objeto
arquivos produzidos pelo montador.

Outras opções são passadas para um estágio de processamento. Algumas opções controlam o
pré-processador e outros, o próprio compilador. No entanto, outras opções controlam o montador e
vinculador; a maioria deles não está documentada aqui, já que você raramente precisa usar algum deles.

A maioria das opções de linha de comando que você pode usar com o GCC são úteis para programas C; quando
uma opção só é útil com outra linguagem (geralmente C ++), a explicação diz isso
explicitamente. Se a descrição de uma determinada opção não menciona uma fonte
idioma, você pode usar essa opção com todos os idiomas suportados.

A gcc programa aceita opções e nomes de arquivo como operandos. Muitas opções têm
nomes de letras; portanto, várias opções de uma única letra podem não ser agrupado: -dv é muito
diferente -d -v.

Você pode misturar opções e outros argumentos. Na maior parte, a ordem que você usa não
matéria. A ordem é importante quando você usa várias opções do mesmo tipo; por exemplo, se
você especifica -L mais de uma vez, os diretórios são pesquisados ​​na ordem especificada. Também,
a colocação do -l opção é significativa.

Muitas opções têm nomes longos começando com -f ou com -W---por exemplo,
-fmove-loop-invariants, -Wformato e assim por diante. A maioria deles tem aspectos positivos e negativos
formulários; a forma negativa de -ffoo is -fno-foo. Este manual documenta apenas um destes
dois formulários, o que não for o padrão.

OPÇÕES


Opção Resumo
Aqui está um resumo de todas as opções, agrupadas por tipo. As explicações estão nas seguintes
.

No geral Opções
-c -S -E -o filete -no-canonical-prefixes -tubo -códigos de saída -x língua -v
- ### --Socorro[=classe[, ...]] --alvo-ajuda --versão -embrulho @filete -fplugin =filete
-fplugin-arg-nome=arg -fdump-ada-spec[-fino] -fada-spec-parent =unidade
-fdump-go-spec =filete

C Língua Opções
-ansi -std =padrão -fgnu89-inline -aux-info nome do arquivo
-funções variádicas sem parâmetros de pousio -fno-asm -fno-builtin -fno-builtin-função
-fhosted -freestanding -fopenac -fopenmp -fopenmp-simd -fms-extensions
-fplan9-extensions -trígrafos -tradicional -tradicional-cpp -precisão simples de pousio
-fcond-incompatibilidade -flax-vector-conversões -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char

C + + Língua Opções
-fabi-version =n -fno-controle de acesso -fcheck-novo -fconstexpr-depth =n
-injeção de amigo -fno-elide-construtores -fno-enforce-eh-specs -ffor-scope
-fno-para-escopo -fno-gnu-palavras-chave -fno-implícito-templates
-FNO-implícito-modelos em linha -fno-implement-inlines -fms-extensions
-fno-nonansi-builtins -fnothrow-opt -fno-operator-names -fno-opcional-diags
-fpermissivo -fno-pretty-templates -frepo -fno-rtti -fsized-desalocação -fstats
-ftemplate-backtrace-limit =n -ftemplate-depth =n -fno-threadsafe-statics
-fuse-cxa-atexit -não-fraco -nostdinc ++ -fvisibility-inlines-hidden
-fvtable-verify =[std|pré-iniciar|Nenhum] -contagens de fvtv -fvtv-debug -fvisibility-ms-compat
-fext-numeric-literais -Wabi =n -Wabi-tag -Wconversion-null -Wctor-dtor-privacidade
-Delete-não-virtual-dtor -Wliteral-sufixo -Aviso -Wnoexceto -Wnon-virtual-dtor
-Encomendar -Weffc ++ -Wstrict-null-sentinela -Não-não-amigo-modelo -Estilo antigo
-Woverloaded-virtual -Wno-pmf-conversões -Wsign-promo

Objective-C e assim Objective-C ++ Língua Opções
-fconstant-string-class =nome da classe -fgnu-runtime -fnext-runtime -fno-nil-receptores
-fobjc-abi-version =n -fobjc-call-cxx-cdtors -fobjc-direct-dispatch -fobjc-exceções
-fobjc-gc -fobjc-nilcheck -fobjc-std = objc1 -fno-local-ivars
-fivar-visibility =[público|protegido|privado|pacote] -freplace-objc-classes
-fzero-link -gen-decls -Watribuir-interceptar -Wno-protocolo -Seletor
-Wstrict-selector-match -Seletor Wundeclared

Língua Independente Opções
-fmessage-length =n -fdiagnostics-show-location =[uma vez|Cada linha]
-fdiagnostics-color =[auto|nunca|sempre] -fno-diagnostics-show-option
-fno-diagnostics-show-caret

Aviso Opções
-fsyntax-only -fmax-errors =n -Wpedantic -erros-pedantes -w -Wextra -Parede
-Endereço -Waggregate-retorno -Otimizações de loop Waggressive - Limites da guerra
-Warray-bounds =n -Wbool-compare -Wno-atributos -Wno-builtin-macro-redefinido
-Wc90-c99-compat -Wc99-c11-compat -Wc ++ - compat -Wc ++ 11-compat -Wc ++ 14-compat
-Wcast-align -qualidade wcast -Wchar-subscripts -Wclobbered -Comentário
-W com suporte condicional -Wconversão -Wcoverage-inmatch -Hora
-Wdelete-incompleto -Wno-cpp -Wno-obsoleto -Wno-declarações-depreciadas
-Wno-designado-init -Wdisabled-otimização -Wno-descartados-qualificadores
-Wno-discarded-array-qualifiers -Wno-div-por-zero -Dupla promoção -Corpo-vazio
-Wenum-compare -Wno-endif-labels -Erro -Werror = * -Wfatal-errors -Wfloat-igual
-Wformato -Wformat = 2 -Wno-format-contém-nul -Wno-format-extra-args
-Wformat-nonliteral -Wformato-segurança -Wformat-assinatura -Wformat-y2k
-Wframe-maior-que =len -Wno-free-nonheap-object -Wjump-misses-init
-Wignored-qualifiers -Tipos de ponteiros compatíveis com Win -Wimplicit
-Declaração de função explícita -Wimplicit-int -Winit-self -Winline
-Wno-int-conversion -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch
-Maior que =len -Wunsafe-loop-otimizações -Wlogical-op -Wlógico-não-parênteses
-Muito longo -Wmain -Wtalvez não inicializado -Wmemset-transposed-args - Suspensórios
-Wmissing-field-inicializadores -Wmissing-include-dirs -Wno-multichar -Wnonnull
-Wnormalized =[Nenhum|id|nfc|nfkc]
-Wodr -Wno-overflow -Wopenmp-simd -Woverlength-strings -Embalado
-Wpacked-bitfield-compat -W acolchoado -Parênteses -Wpedantic-ms-formato
- Formato Wno-pedante-ms -Wpointer-arith -Wno-pointer-to-int-cast -Wredundant-decls
-Wno-return-local-addr -Tipo de retrocesso -Ponto de sequência -Sombra -Wno-sombra-ivar
-Wshift-contagem-negativa -Wshift-count-overflow -Wsign-compare -Conversão de sinal
-Wfloat-conversão -Wsizeof-pointer-memaccess -Wsizeof-array-argument
-Wstack-protetor -Wstack-usage =len -Wstrict-aliasing -Wstrict-aliasing = n
-Wstrict-overflow -Wstrict-overflow =n -Wsuggest-attribute =[puro|const|Noreturn|formato]
-Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-override
- Atributo de formato de saudação -Mudar -Wswitch-default -Wswitch-enum -Wswitch-bool
-Wsync-nand -Wsystem-headers -Wtrampolins -Wtrigraphs -Limites de tipo -Wundef
-W não inicializado -Wunknown-pragmas -Wno-pragmas -Wunsuffixed-float-constantes
-Não usado -Função não usada -Wunused-rótulo -Wunused-local-typedefs -Wunused-parâmetro
-Wno-unused-result -Wunused-value -Wunused-variable -Wunused-mas-set-parameter
-Wunused-but-set-variable -Wuseless-cast -Wvariádicos-macros
-Wector-operation-performance -Wvla -Wvolatile-register-var -Wwrite-strings
-Wzero-as-null-ponteiro-constante

C e assim Somente Objective-C Aviso Opções
-Wbad-função-cast -Declarações-saudações - Tipo de parâmetro ausente
-Protótipos-saudade -Wnested-externs -Declaração de estilo antigo -Definição de estilo antigo
-Wstrict-protótipos -Wtradicional -Wtraditional-conversion
-Wdeclaration-after-statement -Wpointer-sinal

depuração Opções
-dletras -dumpspecs -máquina de despejo -versão de despejo -fsanitize =estilo -fsanitize-recover
-fsanitize-recover =estilo -fasan-shadow-offset =número
-fsanitize-undefined-trap-on-error -fcheck-pointer-bounds -fchkp-check-incompleto-type
-fchkp-first-field-tem-próprio-limites -fchkp-limites estreitos
-fchkp-narrow-to-innermost-array -fchkp-optimize -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-funções -fchkp-use-static-bounds
-fchkp-use-static-const-bounds -fchkp-treat-zero-dynamic-size-as-infinite
-fchkp-check-read -fchkp-check-read -fchkp-check-write -fchkp-store-bounds
-fchkp-instrument-calls -fchkp-instrument-mark-only -fchkp-use-wrappers
-fdbg-cnt-list -fdbg-cnt =lista de contra-valores -fdisable-ipa-pass_name
-fdisable-rtl-pass_name -fdisable-rtl-senha=lista de alcance -fdisable-tree-pass_name
-fdisable-tree-senha=lista de alcance -fdump-noaddr -fdump-unnumbered
-fdump-unnumbered-links -fdump-translation-unit[-n] -fdump-class-hierarquia[-n]
-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline -fdump-passes -fdump-statistics
-fdump-tree-all -fdump-tree-original[-n] -fdump-tree-otimizado[-n] -fdump-tree-cfg
-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-dom[-n]
-fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-fre[-n]
-fdump-tree-vtable-verify -fdump-tree-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns =filete -fcompare-debug[=opta] -fcompare-debug-second
-feliminate-dwarf2-dups -fno-eliminar-unused-debug-types
-feliminate-unused-debug-symbols -femit-class-debug-always -fenável-tipo-passar
-fenável-tipo-passar=lista de alcance -fdebug-types-seção -fmem-report-wpa -fmem-relatório
-fpre-ipa-mem-relatório -fpost-ipa-mem-report -fprofile-arcs -fopt-info
-fopt-info-opções[=filete] -frandom-seed =número -fsched-verbose =n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-usage -teste-cobertura
-ftime-report -fvar-tracking -fvar-tracking-assignments
-fvar-tracking-assignments-toggle -g -gnível -gtoggle -gcoff -gdwarf-versão -ggdb
-grecord-gcc-switches -gno-record-gcc-switches -gstabs -gstabs + -gstrict-anão
-gno-estrito-anão -gvms -gxcoff -gxcoff + -gz[=tipo] -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map =velho=novo -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-Detailed[=lista de especificações] -p -pg
-print-file-name =biblioteca -print-libgcc-nome-do-arquivo -print-multi-diretório
-print-multi-lib -print-multi-os-directory -print-prog-name =programa
-print-search-dirs -Q -print-sysroot -print-sysroot-headers-suffix -save-temps
-save-temps = cwd -save-temps = obj -Tempo[=filete]

Otimização Opções
-faggressive-loop-otimizations -falign-functions [=n] -falign-jumps [=n]
-falign-labels [=n] -falign-loops [=n] -fassociativa-matemática -fauto-profile
-fauto-profile [=caminho] -fauto-inc-dec -fbranch-probabilities
-fbranch-target-load-optimize -fbranch-target-load-optimize2 -fbtr-bb-exclusivo
-fcaller-saves -fcheck-data-deps -fcombine-stack-settings -fconserve-stack
-fcompare-elim -fcprop-registers -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fcx-fortran-regras -fcx-limited-range -fdata-seções -fdce -fdelayed-branch
-fdelete-null-pointer-checks -fdesvirtualize -fdevirtualizar-especulativamente
-fdevirtualize-at-ltrans -fdse -com medo -fipa-sra -otimizações caras
-ffat-lto-objects -rápida matemática -finite-matemática-apenas -loat-store
-fexcess-precision =estilo -fforward-propagate -ffp-contract =estilo -funções-seções
-fgcse -fgcse-após-recarregar -fgcse-las -fgcse-lm -fgraphite-identity -fgcse-sm
-fhoist-adjacente-cargas -fif-conversão -fif-conversion2 -findirect-inlining
-funções-finline -finline-functions-called-once -finline-limit =n
-finline-pequenas-funções -fipa-cp -fipa-cp-clone -fipa-cp-align -fipa-pta
-fipa-perfil -fipa-puro-const -fipa-referência -fipa-icf -fira-algorithm =algoritmo
-fira-region =região -fira-grua-pressão -fira-loop-pressão -fno-ira-share-save-slots
-Fno-IRA-Share-Spill-Slots -fira-verbose =n -fisolate-erroneous-path-dereference
-fisolate-erroneous-path-attribute -cincopts -fkeep-inline-functions
-fkeep-static-consts -flive-range-encolhimento -bloop-block -intercâmbio-floop
-floop-strip-mine -floop-unroll-and-jam -floop-nest-optimize -floop-parallelize-all
-flra-remat -flto -flto-compression-level -flto-partição =alg -flto-reportar
-flto-report-wpa -fmerge-all-constantes -fmerge-constantes -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-invariants -fno-branch-count-reg
-fno-adiar-pop -fno-função-cse -fno-adivinha-probabilidade-ramo -fno-inline
-fno-math-errno -fno-olho mágico -fno-olho mágico2 -fno-sched-interblock -fno-sched-spec
-não-zeros assinados -fno-toplevel-reorder -fno-trapping-math
-fno-zero-inicializado-em-bss -fomit-frame-pointer -foptimize-sibling-calls
-fpartial-inlining -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays
-fprofile-report - correção de perfil -fprofile-dir =caminho -fprofile-generate
-fprofile-generate =caminho -fprofile-use -fprofile-use =caminho -fprofile-values
-fprofile-reorder-functions -frecíproca-matemática -livre -frename-registers
-freorder-blocks -freorder-blocks-and-partition -funções-freorder
-frerun-cse-após-loop -freschedule-modulo-Schedules-loops -matriz-matemática
-fsched2-use-superblocks -fsched-pressão -fsched-spec-load
-fsched-spec-load-perigoso -fsched-stalled-insns-dep [=n] -fsched-stalled-insns [=n]
-fsched-group-heuristic -fsched-critical-path-heuristic -fsched-spec-insn-heuristic
-fsched-rank-heuristic -fsched-last-insn-heuristic -fsched-dep-count-heuristic
-fschedule-fusion -fschedule-insns -fschedule-insns2 - âncoras de seção
- agendamento seletivo - agendamento seletivo 2 -fsel-sched-pipelining
-fsel-sched-pipelining-outer-loops -fsemantic-interposition -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -fssa-phiopt -fstack-protector -fstack-protector-all
-fstack-protector-strong -fstack-protector-explicit -fstdarg-opt -fstrict-aliasing
-fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
-sem árvores -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -ftree-loop-distribuição -ftree-loop-distrib-patterns
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-loop-vetorize
-ftree-parallelize-loops =n -ftree-pre -ftree-partial-pre -ftree-pta -ftree-reassoc
-ftree-sink -ftree-slsr -ftree-sra -ftree-switch-conversion -ftree-tail-merge
-ftree-ter -ftree-vetorize -ftree-vrp -funit-at-a-time -funroll-all-loops
-funroll-loops -funsafe-loop-otimizations -funsafe-math-otimizations
-funswitch-loops -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
-fweb -fwhole-programa -fwpa -plug-in de ligação de fusível --param nome=valor -O -O0 -O1 -O2
-O3 -Os -Rápido -Og

Pré-processador Opções
-Aquestão=responder -A-questão[=responder] -C -dD -dI -dM -dN -Dmacro[=definir] -E -H
-dirijo dir -incluir filete -imacros filete -iprefixo filete -i com prefixo dir
- com o prefixo antes dir -isistema dir -imultilib dir -isysroot dir -M -MILÍMETROS -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-expansão -diretório-fworking
-remapear -trígrafos -undef -Umacro -Wp,opção -Xpré-processador opção -no-integrado-cpp

Assembler Opção
-Wa,opção -Xassembler opção

Vinculador Opções
nome-do-arquivo-objeto -fuse-ld =vinculador -lbiblioteca -nostartfiles -nodefaultlibs -nostdlib
-torta -rdinâmica -s -estático -static-libgcc -static-libstdc ++ -static-libasan
-static-libtsan -static-liblsan -static-libubsan -static-libmpx -static-libmpxwrappers
-compartilhado -shared-libgcc -simbólico -T escrita -Wl,opção -Xlinker opção -u símbolo -z
palavra chave

Diretório Opções
-Bprefixo -Idir -iplugindir =dir -Eu citodir -Ldir -specs =filete -I- --sysroot =dir
--no-sysroot-sufixo

Lavagem Dependente Opções
AAArch64 Opções -mabi =nome -mbi-endian -mlittle-endian -mgeneral-regs-only
-mcmodel = tiny -mcmodel = pequeno -mcmodel = grande -mstrict-align -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mtls-dialect = desc -mtls-dialect = tradicional
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 -march =nome -mcpu =nome -mtune =nome

Adaptava Epifania Opções -meia-reg-arquivo -mprefer-short-insn-regs -mbranch-cost =Números
-mcmove -mnops =Números -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modify
-mstack-offset =Números -modo-mais próximo -muito chamadas -mshort-chamadas -msmall16 -mfp-mode =modo
-mvect-double -max-vect-align =Números -msplit-vecmove-early -m1reg-reg

ARC Opções -deslocador de barril -mcpu =cpu -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-compact -mdpfp-rápido -mno-dpfp-lrsr -mea -mno-mpy -mmul32x16 -mmul64 -mnorm
-mspfp -mspfp-compact -mspfp-rápido -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswape -mtelefonia -mxy -dimensionar -manotar-alinhar
-marclinux -marclinux_prof -mepílogo-cfi -muito chamadas -média-chamadas -msdata
-mucb-mcount -mvolatile-cache -chamada maligna -mauto-modify-reg -mbbit-olho mágico -mno-brcc
-mcase-vetor-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi -mexpand-adddi
-mindexed -loads -mlra -mlra-priority-nenhum -mlra-priority-compact mlra-prioridade-
não compacto -mno-milicode -mixed-code -mq-class -mRcq -mRcw -msize-level =nível
-mtune =cpu -mmultcost =Números -munalign-prob-threshold =probabilidade

ARM Opções -mapcs-frame -mno-apcs-frame -mabi =nome -mapcs-stack-check
-mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrante
-mno-apcs-reentrante -msched-prolog -mno-sched-prolog -mlittle-endian -mbi-endian
-mfloat-abi =nome -mfp16-format =nome -mthumb-interwork -mno-thumb-interwork -mcpu =nome
-march =nome -mfpu =nome -mtune =nome -mprint-tune-info -mstructure-size-boundary =n
-mabort-on-noreturn -muito chamadas -mno-long-chamadas -msingle-pic-base
-mno-single-pic-base -mpic-register =reg -mnop-fun-dllimport -mpoke-nome-função
-mthumb -marm -mtpcs-frame -mtpcs-leaf-frame -mcaller-superinterworking
-mcallee-superinterworking -mtp =nome -mtls-dialect =dialeto -mword-relocations
-mfix-córtex-m3-ldrd -acesso-imunalinhado -mneon-para-64bits -mslow-flash-data
-masm-sintaxe-unificado -mrestrict-it

AVR Opções -mmcu =MCU -maccumulate-args -mbranch-cost =custo -mcall-prólogos -hortelã8
-mn_flash =tamanho -mno-interrupções -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib
-Wadd-space-convert

Blackfin Opções -mcpu =cpu[-revisão] -msim -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mspeld-anomalia -mno-specld-anomalia -mcsync-anomalia
-mno-csync-anomalia -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library
-mno-id-shared-library -mshared-library-id =n -mleaf-id-shared-library
-mno-leaf-id-shared-library -msep-data -mno-sep-data -muito chamadas -mno-long-chamadas
-mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram -micplb

C6X Opções -mbi-endian -mlittle-endian -march =cpu -msim -msdata =tipo sdata

CRIS Opções -mcpu =cpu -march =cpu -mtune =cpu -mmax-stack-frame =n
-melinux-stacksize =n -metrax4 -metrax100 -mpdebug -mcc-init -mno-efeitos colaterais
-mstack-align -mdata-align -mconst-align -m32 bits -m16 bits -m8 bits
-mno-prólogo-epílogo -mno-gotplt -me -maout -melinux -mlinux -sim -sim2
-mmul-bug-solução -mno-mul-bug-solução

CR16 Opções -mmac -mcr16cplus -mcr16c -msim -hortelã32 -mbit-ops -mdata-model =modelo

Darwin Opções -all_load -allowable_client -arco -arch_errors_fatal -arch_only
-bind_at_load -agrupar -bundle_loader -Nome do cliente -compatibilidade_versão
-Versão Atual -dead_strip -arquivo de dependência -dylib_file -dylinker_install_name
-dinâmico -dinamiclib -exported_symbols_list -lista de arquivos -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-imagem_base -iniciar -install_name -keep_private_externs -multi_module
-multiplicar_definido -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -noprebind
-noseglinkedit -pagezero_size -prebind -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -sectalign -símbolos de objeto da seita -porque -seg1addr -sectcreate
-símbolos de objeto da seita -ordem do setor -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -Segripor. -segs_read_only_addr
-segs_read_write_addr -single_module -estático -sub_library -sub_guarda-chuva
-twolevel_namespace - guarda-chuva -Indefinido -unexported_symbols_list
-weak_reference_mismatches - o que foi carregado -F -sentiu -gfull -mmacosx-version-min =versão
-mkernel -mone-byte-bool

Dezembro alfa Opções -mno-fp-regs -msoft-float -meee -mieee-com-inexato
-mieee-conformant -mfp-trap-mode =modo -mfp-rounding-mode =modo -mtrap-precision =modo
-mbuild-constantes -mcpu =tipo cpu -mtune =tipo cpu -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data -mlarge-data -msmall-text
-texto-grande -mmemory-latency =tempo

FR30 Opções -msmall-model -mno-lsim

FRV Opções -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -duplo -mno-duplo -mídia -mno-media
-mmulad -mno-mulad -mfdpic -minline-plt -mgprel-ro -multilib-library-pic
-mlinked-fp -muito chamadas -rótulos malignos -mlibrary-pic -macc-4 -macc-8 -mpack
-mno-pack -mno-eflags -mcond-move -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-branch
-mno-vliw-branch -multi-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-stats -mTLS -mtls -mcpu =cpu

GNU / Linux Opções -mglibc -muclibc -mbiônico -mandróide -tno-android-cc -tno-android-ld

H8 / 300 Opções -mrelax -mh -em -mn -mexr -mno-exr -hortelã32 -maligno-300

HPPA Opções -march =tipo de arquitetura -mdisable-fpregs -mdisable-indexing
-mrápido-indireto-chamadas -mgas -mgnu-ld -mhp-ld -mfixed-range =intervalo de registro
-mjump-in-delay -mlinker-opt -muito chamadas -mlong-load-store -mno-disable-fpregs
-mno-disable-indexing -mno-fast-indirect-calls -mno-gás -mno-jump-in-delay
-mno-long-load-store -mno-portable-runtime -mno-soft-float -mno-space-regs
-msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime
-mschedule =tipo cpu -mspace-regs -msio -mwsio -munix =unix-std -nolibdld -estático
-tópicos

IA-64 Opções -mbi-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-names -msdata -mno-sdata -mconstant-gp -mauto-pic
-mfused-madd -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latency
-minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm -poucos-stop-bits
-mfixed-range =intervalo de registro -mtls-size =tamanho tls -mtune =tipo cpu -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-ever-cycle
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memory-insns =max-insns

LM32 Opções -barrel-shift-habilitado -mdivide habilitado -multiply ativado
-msign-extend-habilitado -muser ativado

M32R / D Opções -m32r2 -m32rx -m32r -mdebug -loops malignos -mno-align-loops
- taxa de emissão =número -mbranch-cost =número -mmodel =código-tamanho-modelo-tipo -msdata =sdata-
tipo -mno-flush-func -mflush-func =nome -mno-flush-trap -mflush-trap =número -G Números

M32C Opções -mcpu =cpu -msim -memregs =número

M680x0 Opções -march =arco -mcpu =cpu -mtune =afinação -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mcurto -mno-curto -mhard-float -m68881 -msoft-float -mpcrel
-malign-int -mstrict-align -msep-data -mno-sep-data -mshared-library-id = n
-mid-shared-library -mno-id-shared-library -mxgot -mno-xgot

MCore Opções -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-imediates
-mno-relax-imediates -mwide-bitfields -mno-wide-bitfields -m4byte-funções
-mno-4byte-funções -mcallgraph-data -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbi-endian -m210 -m340
-mstack-increment

MeP Opções -mabsdiff -pequenas opções -maédia -mbasado =n -mbitops -mc =n -mclip
-mconfig =nome -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-volátil -ml
-mleadz -milímetros -mminmax -multo -mno-opts -repetir -em -msatur -msdram -msim -msimnovec
-mtf -mtiny =n

MicroBlaze Opções -msoft-float -mhard-float -msmall-divide -mcpu =cpu -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-pattern-compare -mxl-stack-check
-mxl-gp-opt -mno-clearbss -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
-mbi-endian -mlittle-endian -mxl-reordenar -mxl-mode-modelo de aplicativo

MIPS Opções -A -EB -march =arco -mtune =arco -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-comprimido
-mno-interlink-compactado -minterlink-mips16 -mno-interlink-mips16 -mabi =abi
-mabicalls -mno-abicals -mshared -mno-compartilhado -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-float
-msingle-float -mdouble-float -modd-spreg -mno-odd-spreg -mabs =modo -mnan =codificação
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -meva -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -mmicromips -mno-micromips -mfpu =tipo fpu -msmartmips -mno-smartmips
-mpareado-único -mno-pareado-único -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt
-mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -GNúmeros
-mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt
-dados-incorporados -mno-embedded-data -muninit-const-in-rodata
-mno-uninit-const-in-rodata -mcode-readable =fixação -msplit-address
-mno-split-address -mexplicit-relocs -mno-explicit-relocs -mcheck-zero-divisão
-mno-check-zero-divisão -mdivide-armadilhas -mdivide-breaks -mmemcpy -mno-memcpy
-muito chamadas -mno-long-chamadas -mmad -mno-louco -mimad -mno-imadd -mfused-madd
-mno-fused-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000
-mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000
-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func =função -mno-flush-func -mbranch-cost =Números -mbranch-provável
-mno-branch-provável -mfp-exceções -mno-fp-exceções -mvr4130-align -mno-vr4130-align
-msynci -mno-sinci -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-endereço

MMIX Opções -mlibfuncs -mno-libfuncs -mepsilon -mno-épsilon -mabi = gnu
-mabi = mmixware -mzero-extend -mknuthdiv -mtoplevel-símbolos -me -mbranch-prognosticar
-mno-branch-Pred -mbase-endereços -mno-base-address -msingle-exit
-mno-single-saída

MN10300 Opções -mmult-bug -mno-mult-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune =CPU-
tipo -mreturn-pointer-on-d0 -mno-crt0 -mrelax -mliw -msetlb

Moxie Opções -meb -mel -mmul.x -mno-crt0

MSP430 Opções -msim -masm-hex -mmcu = -mcpu = grande -pequeno -mrelax -mhwmult = -hortelã

NDS32 Opções -mbi-endian -mlittle-endian -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vector-size =Números
-mcache-block-size =Números -march =arco -mcmodel =modelo de código -mctor-dtor -mrelax

Nios II Opções -G Números -mgpopt =opção -mgpopt -mno-gpopt -mel -meb -mno-bypass-cache
-mbypass-cache -mno-cache-volátil -mcache-volátil -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -mpersonalizado-pousada=N
-mno-custom-pousada -mcustom-fpu-cfg =nome -mhal -msmallc -msys-crt0 =nome -msys-lib =nome

Nvidia PTX Opções -m32 -m64 -mmainkernel

PDP-11 Opções -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy-builtin -hortelã32 -mno-int16 -hortelã16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -mbranch-caro -mbranch-barato
-munix-asm -mdec-asm

picoChip Opções -mae =ae_type -mvliw-lookahead =N -msymbol-as-address
-mno-ineficiente-avisos

PowerPC Opções Consulte RS / 6000 e Opções PowerPC.

RL78 Opções -msim -mmul = nenhum -mmul = g13 -mmul = rl78 -m64bit-doubles -m32bit-doubles

RS / 6000 e assim PowerPC Opções -mcpu =tipo cpu -mtune =tipo cpu -mcmodel =modelo de código
-mpowerpc64 -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-hard-dfp -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-soma-em-toc
-m64 -m32 -mxl-compat -mno-xl-compat -mpe -poder maligno -maligno-natural
-msoft-float -mhard-float -múltiplos -mno-múltiplo -msingle-float -mdouble-float
-msimple-fpu -mstring -mno-string -mupdate -mno-atualização -mavoid-indexed-endereços
-mno-Avoid-indexed-endereços -mfused-madd -mno-fused-madd -mbit-align
-mno-bit-align -mstrict-align -mno-strict-align -mrelocável -mno-relocável
-mrelocável-lib -mno-relocável-lib -mtoc -mno-toc -um pouco -mlittle-endian
-grande -mbi-endian -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base
-mprioritize-restricted-insns =prioridade -msched-costly-dep =tipo_dependência
-minsert-sched-nops =esquema -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi =tipo abi -msecure-plt -mbss-plt
-mblock-move-inline-limit =Números -misel -mno-isel -misel = sim -misel = não -mspe -mno-spe
-mspe = sim -mspe = não -mparado -mgen-cell-microcode -mwarn-cell-microcódigo -mvrsave
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs = yes -mfloat-gprs = no
-mfloat-gprs = single -mfloat-gprs = double -mprotótipo -mno-protótipo -msim -mmvme
-loucos -faca amarela -membro -msdata -msdata =optar -mvxworks -G Números -pthread -mrecip
-mrecip =optar -mno-receita -mrecip-precisão -mno-recip-precisão -mveclibabi =tipo -mfriz
-mno-friz -mpointers-to-nested-functions -mno-ponteiros-para-funções aninhadas
-msave-toc-indireto -mno-save-toc-indireto -mpower8-fusão -mno-mpower8-fusão
-power8-vector -mno-power8-vetor -mcrypto -mno-cripto -mdirect-move -mno-direct-move
-mquad-memória -mno-quad-memória -mquad-memória-atômica -mno-quad-memória-atômica
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf -mupper-regs -mno-upper-regs

RX Opções -m64bit-doubles -m32bit-doubles -fpu -nofpu -mcpu = -mbig-endian-data
-mlittle-endian-data -msmall-data -msim -mno-sim -mas100-sintaxe -mno-as100-sintaxe
-mrelax -mmax-constant-size = -mint-register = -mpid -mno-warn-multiple-fast-interrupts
-msave-acc-in-interrupts

S / 390 e assim zSeries Opções -mtune =tipo cpu -march =tipo cpu -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-backchain -empacked-stack -mno -pack-stack -msmall-exec -mno-pequeno-executivo
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa -mzarch -mtpf-trace
-mno-tpf-trace -mfused-madd -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack
-mstack-size -mstack-guard -mhotpatch =meias palavras,meias palavras

Contagem Opções -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH Opções -m1 -m2 -m2e -m2a-nofpu -m2a-single-only -m2a-único -m2a -m3 -m3e
-m4-nofpu -m4-single-only -m4-único -m4 -m4a-nofpu -m4a-single-only -m4a-único
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compacto
-m5-compact-nofpu -mb -ml -mdalign -mrelax -mbigtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -meee -mno-ieee -mbitops -dimensionar -minline-ic_invalidate
-mpadstruct -mspace -mprefergot -musermode -multcost =número -mdiv =estratégia
-mdivsi3_libfunc =nome -mfixed-range =intervalo de registro -mindexed-address
-mgettrcost =número - sintoma corrigido -maccumulate-outgoing-args -minvalid-symbols
-matomic-model =modelo atômico -mbranch-cost =Números -mzdcbranch -mno-zdcbranch
-mcbranch-force-delay-slot -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -mpretend-cmove -mtas

Solaris 2 Opções -mclear-hwcap -mno-clear-hwcap -mimpure-texto -mno-texto impuro
-pthreads -pthread

SPARC Opções -mcpu =tipo cpu -mtune =tipo cpu -mcmodel =modelo de código -mmemory-model =mem-
modelo -m32 -m64 -map-regs -mno-app-regs -maior-structs -mno-mais rápido-structs
-mflat -mno-flat -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stack-bias -munaligned-doubles
-mno-unaligned-doubles -modo de muser -mno-modo de usuário -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699

SPU Opções -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma -dicas de ramificação
-msmall-mem -mlarge-mem -mstdmain -mfixed-range =intervalo de registro -mea32 -mea64
-maddress-espacial-conversão -mno-address-space-conversion -mcache-size =tamanho da memória cache
-atualizações-matomic -mno-atomic-updates

Instantâneo V Opções -Qy -Qn -YP,caminhos -Sim,dir

TELHA-Gx Opções -mcpu = CPU -m32 -m64 -mbi-endian -mlittle-endian -mcmodel =modelo de código

TILEPro Opções -mcpu =cpu -m32

V850 Opções -muito chamadas -mno-long-chamadas -mep -mno-ep -mprolog-função
-mno-prolog-função -mspace -mtda =n -msda =n -mzda =n -map-regs -mno-app-regs
-mdisable-callt -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -mloop -mrelax - grandes saltos -msoft-float -mhard-float -mgcc-abi
-mrh850-abi -mbig-switch

VAX Opções -mg -mgnu -munix

Visium Opções -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu =tipo cpu
-mtune =tipo cpu -msv-mode -modo de muser

VMS Opções -mvms-return-codes -mdebug-main =prefixo -mmalloc64 -mpointer-size =tamanho

VxWorks Opções -mrtp -não estático -Bstatic -Bdinâmico -Xbind-preguiçoso -Xbind-agora

x86 Opções -mtune =tipo cpu -march =tipo cpu -mtune-ctrl =lista de recursos
-mdump-tune-features -mno-padrão -mfpmath =unidade -masm =dialeto -mno-fantasia-matemática-387
-mno-fp-ret-in-387 -msoft-float -mno-wide-multiply -mrtd -malign-duplo
-mpreferred-stack-boundary =Números -mincoming-stack-boundary =Números -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mrecip -mrecip =optar -mvzeroupper -mprefer-avx128 -mmmx -msse -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -msse4a -m3dnow -mpopct -mabm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
-mno-align-stringops -minline-all-stringops -minline-stringops-dinamicamente
-mstringop-strategy =alg -mmemcpy-strategy =estratégia -mmemset-strategy =estratégia
-mpus-args -maccumulate-outgoing-args -m128bit-long-double -m96bit-long-double
-mlong-double-64 -mlong-double-80 -mlong-double-128 -mregparm =Números -msseregparm
-mveclibabi =tipo -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs -mcmodel =modelo de código
-mabi =nome -maddress-mode =modo -m32 -m64 -mx32 -m16 -mlarge-data-threshold =Números
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data =tipo
-mstack-protector-guard =guarda

x86 Windows Opções -mconsole -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
-municode -mwin32 - janelas -fno-set-stack-executável

Xstormy16 Opções -msim

Xtensa Opções -mconst16 -mno-const16 -mfused-madd -mno-fused-madd -mforce-no-pic
-mserializar-volátil -mno-serialize-volatile -mtext-section-literais
-mno-text-section-liters -mtarget-align -mno-target-align -mlongcalls
-mno-longcalls

zSeries Opções Consulte as opções S / 390 e zSeries.

Código Geração Opções
-fcall-saved-reg -fcall-usado-reg -fixado-reg -fexceções -fnon-call-exceptions
-fdelete-dead-exceptions -funwind-tables -fasynchronous -wind-tables -fno-gnu-único
-finhibit-size-Directive -funções de instrumentos
-finstrument-functions-exclude-function-list =sym,sym, ...
-finstrument-functions-exclude-file-list =filete,filete, ... -fno-comum -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tables -frecord-gcc-switches
-freg-struct-return -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct [=n] -fstack-check -fstack-limit-register =reg -fstack-limit-symbol =sym
-fno-stack-limit -fsplit-stack -fluindo-sublinhado -ftls-model =modelo
-fstack-reuse =nível_reutilização -ftrapv -fwrapv -fbounds-check
-fvisibility =[omissão|interno|escondido|protegido] -fstrict-volatile-bitfields
-fsync-libcalls

Opções Controlador do Tipo of saída
A compilação pode envolver até quatro etapas: pré-processamento, compilação adequada, montagem e
vinculando, sempre nessa ordem. O GCC é capaz de pré-processar e compilar vários
arquivos em vários arquivos de entrada do montador ou em um arquivo de entrada do montador; então
cada arquivo de entrada do montador produz um arquivo de objeto, e a vinculação combina todos os objetos
arquivos (os recém-compilados e os especificados como entrada) em um arquivo executável.

Para qualquer arquivo de entrada, o sufixo do nome do arquivo determina que tipo de compilação é
feito:

filete.c
Código-fonte C que deve ser pré-processado.

filete.i
Código-fonte C que não deve ser pré-processado.

filete.ii
Código-fonte C ++ que não deve ser pré-processado.

filete.m
Código-fonte Objective-C. Observe que você deve vincular com o libobjc biblioteca para fazer um
Trabalho do programa Objective-C.

filete.mi
Código-fonte Objective-C que não deve ser pré-processado.

filete.milímetros
filete.M
Código-fonte Objective-C ++. Observe que você deve vincular com o libobjc biblioteca para fazer
um trabalho de programa Objective-C ++. Observe que .M refere-se a um M maiúsculo literal.

filete.mii
Código-fonte Objective-C ++ que não deve ser pré-processado.

filete.h
Arquivo de cabeçalho C, C ++, Objective-C ou Objective-C ++ para ser transformado em um pré-compilado
cabeçalho (padrão), ou arquivo de cabeçalho C, C ++ para ser transformado em uma especificação Ada (por meio do
-fdump-ada-spec trocar).

filete. Cc
filete.cp
filete.cxx
filete.cpp
filete.CPP
filete.c ++
filete.C
Código-fonte C ++ que deve ser pré-processado. Observe que em .cxx, as duas últimas letras
devem ser ambos literalmente x. Da mesma forma, .C refere-se a um C maiúsculo literal

filete.milímetros
filete.M
Código-fonte Objective-C ++ que deve ser pré-processado.

filete.mii
Código-fonte Objective-C ++ que não deve ser pré-processado.

filete.hh
filete.H
filete.hp
filete.hxx
filete.hpp
filete.HPP
filete.h ++
filete.tcc
Arquivo de cabeçalho C ++ a ser transformado em um cabeçalho pré-compilado ou especificação Ada.

filete.f
filete.para
filete.ftn
Código-fonte Fortran de formato fixo que não deve ser pré-processado.

filete.F
filete.PARA
filete.fpp
filete.FPP
filete.FTN
Código-fonte Fortran de forma fixa que deve ser pré-processado (com o tradicional
pré-processador).

filete.f90
filete.f95
filete.f03
filete.f08
Código-fonte Fortran de formato livre que não deve ser pré-processado.

filete.F90
filete.F95
filete.F03
filete.F08
Código-fonte Fortran de forma livre que deve ser pré-processado (com o tradicional
pré-processador).

filete.ir
Código-fonte Go.

filete.Publicidades
Arquivo de código-fonte Ada que contém uma declaração de unidade de biblioteca (uma declaração de um
pacote, subprograma ou genérico, ou uma instanciação genérica), ou uma unidade de biblioteca
declaração de renomeação (uma declaração de renomeação de pacote, genérica ou subprograma). Tal
arquivos também são chamados óculos.

filete.adb
Arquivo de código-fonte Ada contendo um corpo de unidade de biblioteca (um subprograma ou corpo de pacote).
Esses arquivos também são chamados corpos.

filete.s
Código Assembler.

filete.S
filete.sx
Código assembler que deve ser pré-processado.

de outros
Um arquivo de objeto a ser alimentado diretamente na vinculação. Qualquer nome de arquivo sem reconhecimento
sufixo é tratado desta forma.

Você pode especificar o idioma de entrada explicitamente com o -x opção:

-x língua
Especifique explicitamente o língua para os seguintes arquivos de entrada (em vez de permitir que o
o compilador escolhe um padrão com base no sufixo do nome do arquivo). Esta opção se aplica a todos
seguindo os arquivos de entrada até o próximo -x opção. Valores possíveis para língua são:

c c-header cpp-output
c ++ c ++ - cabeçalho c ++ - saída cpp
objetivo-c objetivo-c-cabeçalho objetivo-c-cpp-saída
objetiva-c ++ objetiva-c ++ - cabeçalho objetiva-c ++ - saída cpp
montador montador-com-cpp
ada
f77 f77-cpp-input f95 f95-cpp-input
go
Java

-x Nenhum
Desative qualquer especificação de um idioma, para que os arquivos subsequentes sejam tratados
de acordo com seus sufixos de nome de arquivo (como eles são se -x não foi usado).

-códigos de saída
Normalmente o gcc o programa sai com o código 1 se qualquer fase do compilador retornar
um código de retorno sem sucesso. Se você especificar -códigos de saída, gcc programa ao invés
retorna com o erro numericamente mais alto produzido por qualquer fase, retornando um erro
indicação. Os front ends C, C ++ e Fortran retornam 4 se um erro interno do compilador
é encontrado.

Se você quiser apenas algumas das etapas de compilação, você pode usar -x (ou sufixos de nome de arquivo)
contar gcc por onde começar e uma das opções -c, -Sou -E para dizer onde gcc é
Pare. Observe que algumas combinações (por exemplo, -x saída cpp -E) instruir gcc façam
nada mesmo.

-c Compile ou monte os arquivos de origem, mas não os vincule. O estágio de vinculação é simplesmente
não realizado. A saída final está na forma de um arquivo de objeto para cada arquivo de origem.

Por padrão, o nome do arquivo de objeto para um arquivo de origem é feito substituindo o sufixo .c,
.i, .s, etc., com .o.

Arquivos de entrada não reconhecidos, que não requerem compilação ou montagem, são ignorados.

-S Pare após a fase de compilação propriamente dita; não monte. A saída está no
forma de um arquivo de código assembler para cada arquivo de entrada não assembler especificado.

Por padrão, o nome do arquivo assembler para um arquivo de origem é feito substituindo o sufixo
.c, .i, etc., com .s.

Os arquivos de entrada que não requerem compilação são ignorados.

-E Pare após a etapa de pré-processamento; não execute o compilador adequado. A saída está em
a forma de código-fonte pré-processado, que é enviado para a saída padrão.

Os arquivos de entrada que não requerem pré-processamento são ignorados.

-o filete
Coloque a saída no arquivo filete. Isso se aplica a qualquer tipo de saída que está sendo produzida,
seja um arquivo executável, um arquivo de objeto, um arquivo assembler ou C pré-processado
código.

If -o não for especificado, o padrão é colocar um arquivo executável em a.out, o objeto
arquivo para fonte.sufixo in fonte.o, seu arquivo assembler em fontes, um pré-compilado
arquivo de cabeçalho em fonte.sufixo.gche todas as fontes C pré-processadas na saída padrão.

-v Imprimir (na saída de erro padrão) os comandos executados para executar as etapas de
compilação. Imprima também o número da versão do programa do driver do compilador e do
pré-processador e o compilador adequado.

- ###
Gostar -v exceto que os comandos não são executados e os argumentos são colocados entre aspas, a menos que eles
conter apenas caracteres alfanuméricos ou "./-_". Isso é útil para scripts de shell para
capturar as linhas de comando geradas pelo driver.

-tubo
Use canais em vez de arquivos temporários para a comunicação entre as várias fases do
compilação. Isso não funciona em alguns sistemas onde o montador é incapaz de ler
de um tubo; mas o GNU assembler não tem problemas.

--Socorro
Imprime (na saída padrão) uma descrição das opções de linha de comando compreendidas por
gcc. Se o -v opção também é especificada então --Socorro também é passado para os vários
processos invocados por gcc, para que eles possam exibir as opções de linha de comando que eles
aceitar. Se o -Wextra opção também foi especificada (antes do --Socorro opção),
então as opções de linha de comando que não têm documentação associada a elas também são
exibido.

--alvo-ajuda
Imprime (na saída padrão) uma descrição das opções de linha de comando específicas do destino
para cada ferramenta. Para alguns alvos, informações adicionais específicas do alvo também podem ser
impresso.

--help = {classe|[^]qualificador}[, ...]
Imprime (na saída padrão) uma descrição das opções de linha de comando compreendidas por
o compilador que se encaixa em todas as classes e qualificadores especificados. Estes são os
aulas com suporte:

otimizadores
Exibe todas as opções de otimização suportadas pelo compilador.

avisos
Exibe todas as opções que controlam as mensagens de aviso produzidas pelo compilador.

alvo
Exibir opções específicas do alvo. Ao contrário do --alvo-ajuda opção no entanto, alvo-
opções específicas do vinculador e montador não são exibidas. Isto é porque
essas ferramentas não suportam atualmente a extensão --help = sintaxe.

params
Exibir os valores reconhecidos pelo --param opção.

língua
Exibir as opções com suporte para língua, Onde língua é o nome de um de
os idiomas suportados nesta versão do GCC.

comum
Exiba as opções comuns a todos os idiomas.

Estes são os qualificadores suportados:

não documentado
Exibe apenas as opções que não estão documentadas.

ingressou
Exibir opções usando um argumento que aparece após um sinal de igual no mesmo
pedaço contínuo de texto, como: --help = target.

separado
Exibir opções usando um argumento que aparece como uma palavra separada após o
opção original, como: -o arquivo de saída.

Assim, por exemplo, para exibir todos os interruptores específicos do alvo não documentados suportados por
o compilador, use:

--help = alvo, não documentado

O sentido de um qualificador pode ser invertido prefixando-o com o ^ personagem, então para
exemplo para exibir todas as opções binárias de aviso (ou seja, aquelas que estão ligadas ou desligadas
e que não levam um argumento) que têm uma descrição, use:

--help = avisos, ^ juntou-se, ^ não documentado

O argumento para --help = não deve consistir apenas em qualificadores invertidos.

Combinar várias classes é possível, embora isso geralmente restrinja a saída para
muito que não há nada para exibir. Um caso em que funciona, no entanto, é quando
uma das aulas é alvo. Por exemplo, para exibir todos os específicos de destino
opções de otimização, use:

--help = alvo, otimizadores

A --help = opção pode ser repetida na linha de comando. Cada uso sucessivo exibe
sua classe de opções solicitada, ignorando aquelas que já foram exibidas.

Se o -Q opção aparece na linha de comando antes do --help = opção, então o
texto descritivo exibido por --help = Mudou. Em vez de descrever o
opções, uma indicação é dada se a opção está habilitada, desabilitada ou definida
a um valor específico (assumindo que o compilador sabe disso no ponto onde o
--help = opção é usada).

Aqui está um exemplo truncado da porta ARM de gcc:

% gcc -Q -mabi = 2 --help = target -c
As seguintes opções são específicas do alvo:
-mabi = 2
-mabort-on-noreturn [desativado]
-mapcs [desativado]

A saída é sensível aos efeitos das opções de linha de comando anteriores, portanto, para
exemplo, é possível descobrir quais otimizações estão habilitadas em -O2 usando:

-Q -O2 --help = otimizadores

Alternativamente, você pode descobrir quais otimizações binárias são habilitadas por -O3 usando:

gcc -c -Q -O3 --help = otimizadores> / tmp / O3-opts
gcc -c -Q -O2 --help = otimizadores> / tmp / O2-opts
diff / tmp / O2-opts / tmp / O3-opts | grep habilitado

-no-canonical-prefixes
Não expanda nenhum link simbólico, resolva as referências para /../ or /./, ou faça o caminho
absoluto ao gerar um prefixo relativo.

--versão
Exibe o número da versão e os direitos autorais do GCC invocado.

-embrulho
Chame todos os subcomandos em um programa wrapper. O nome do programa wrapper e
seus parâmetros são passados ​​como uma lista separada por vírgulas.

gcc -c tc -wrapper gdb, - args

Isso invoca todos os subprogramas de gcc para gdb --args, portanto, a invocação de cc1 is
gdb --args cc1 ....

-fplugin =nome.assim
Carregue o código do plugin no arquivo nome.so, assumido ser um objeto compartilhado a ser aberto por
o compilador. O nome base do arquivo de objeto compartilhado é usado para identificar o plugin
para fins de análise de argumento (Veja -fplugin-arg-nome-chave=valor abaixo). Cada
O plug-in deve definir as funções de retorno de chamada especificadas na API de plug-ins.

-fplugin-arg-nome-chave=valor
Defina um argumento chamado chave com um valor de valor para o plugin chamado nome.

-fdump-ada-spec[-fino]
Para fontes C e C ++ e arquivos de inclusão, gere as especificações Ada correspondentes.

-fada-spec-parent =unidade
Em conjunção com -fdump-ada-spec[-fino] acima, gere especificações Ada como unidades filho de
principal unidade.

-fdump-go-spec =filete
Para arquivos de entrada em qualquer idioma, gere declarações Go correspondentes em filete. Este
gera declarações Go "const", "type", "var" e "func" que podem ser uma forma útil
para começar a escrever uma interface Go para o código escrito em alguma outra linguagem.

@filete
Leia as opções de linha de comando de filete. As opções lidas são inseridas no lugar do
original @filete opção. Se filete não existe ou não pode ser lido, então a opção
será tratado literalmente e não removido.

Opções em filete são separados por espaços em branco. Um caractere de espaço em branco pode ser incluído
em uma opção, colocando toda a opção entre aspas simples ou duplas. Algum
caractere (incluindo uma barra invertida) pode ser incluído prefixando o caractere a ser
incluído com uma barra invertida. o filete pode conter @ adicionaisfilete opções; algum
essas opções serão processadas recursivamente.

Compilando C + + Programas
Arquivos de origem C ++ convencionalmente usam um dos sufixos .C, . Cc, .cpp, .CPP, .c ++, .cpou
.cxx; Arquivos de cabeçalho C ++ costumam usar .hh, .hpp, .H, ou (para código de modelo compartilhado) .tcc; E
arquivos C ++ pré-processados ​​usam o sufixo .ii. O GCC reconhece arquivos com esses nomes e
compila-os como programas C ++ mesmo se você chamar o compilador da mesma forma que para compilar
Programas C (geralmente com o nome gcc).

No entanto, o uso de gcc não adiciona a biblioteca C ++. g ++ é um programa que chama GCC e
especifica automaticamente a vinculação com a biblioteca C ++. Trata .c, .h e assim .i arquivos como
Arquivos de origem C ++ em vez de arquivos de origem C, a menos que -x é usado. Este programa também é útil
ao pré-compilar um arquivo de cabeçalho C com um .h extensão para uso em compilações C ++. Sobre
muitos sistemas, g ++ também é instalado com o nome c ++.

Ao compilar programas C ++, você pode especificar muitas das mesmas opções de linha de comando que
você usa para compilar programas em qualquer linguagem; ou opções de linha de comando significativas para C
e línguas relacionadas; ou opções que são significativas apenas para programas C ++.

Opções Controlador C Dialeto
As opções a seguir controlam o dialeto de C (ou linguagens derivadas de C, como C ++,
Objective-C e Objective-C ++) que o compilador aceita:

-ansi
No modo C, isso é equivalente a -std = c90. No modo C ++, é equivalente a
-std = c ++ 98.

Isso desativa certos recursos do GCC que são incompatíveis com ISO C90 (quando
compilar código C), ou de C ++ padrão (ao compilar código C ++), como o "asm" e
palavras-chave "typeof" e macros predefinidas como "unix" e "vax" que identificam o
tipo de sistema que você está usando. Também permite o ISO indesejável e raramente usado
recurso trigraph. Para o compilador C, desativa o reconhecimento do estilo C ++ //
comentários, bem como a palavra-chave "inline".

As palavras-chave alternativas "__asm__", "__extension__", "__inline__" e "__typeof__"
continue a trabalhar apesar de -ansi. Você não gostaria de usá-los em um programa ISO C,
claro, mas é útil colocá-los em arquivos de cabeçalho que podem ser incluídos em
compilações feitas com -ansi. Macros predefinidas alternativas, como "__unix__" e
"__vax__" também estão disponíveis, com ou sem -ansi.

A -ansi opção não faz com que programas não ISO sejam rejeitados gratuitamente. Para
que, -Wpedantic é necessário além de -ansi.

A macro "__STRICT_ANSI__" é predefinida quando o -ansi opção é usada. Algum cabeçalho
arquivos podem notar esta macro e evitar declarar certas funções ou definir
certas macros que o padrão ISO não exige; isso é para evitar interferir
com quaisquer programas que possam usar esses nomes para outras coisas.

Funções que são normalmente integradas, mas não têm semântica definida pelo ISO C (como
como "alloca" e "ffs") não são funções integradas quando -ansi é usado.

-std =
Determine o padrão do idioma. Esta opção é atualmente suportada apenas quando
compilar C ou C ++.

O compilador pode aceitar vários padrões básicos, como c90 or c ++ 98e dialetos GNU
desses padrões, como gnu90 or gnu ++ 98. Quando um padrão básico é especificado, o
O compilador aceita todos os programas que seguem esse padrão mais aqueles que usam extensões GNU
que não o contradiz. Por exemplo, -std = c90 desativa certos recursos do GCC
que são incompatíveis com ISO C90, como as palavras-chave "asm" e "typeof", mas não
outras extensões GNU que não têm um significado no ISO C90, como omitir o
termo do meio de uma expressão "?:". Por outro lado, quando um dialeto GNU de um padrão
é especificado, todos os recursos suportados pelo compilador são ativados, mesmo quando aqueles
os recursos mudam o significado do padrão básico. Como resultado, algumas conformidades estritas
programas podem ser rejeitados. O padrão particular é usado por -Wpedantic para identificar
quais recursos são extensões GNU para aquela versão do padrão. Por exemplo
-std = gnu90 -Wpedantic avisa sobre o estilo C ++ // comentários, enquanto -std = gnu99 -Wpedantic
não.

Um valor para esta opção deve ser fornecido; valores possíveis são

c90
c89
iso9899: 1990
Suporta todos os programas ISO C90 (certas extensões GNU que entram em conflito com ISO C90
estão desativados). Igual a -ansi para o código C.

iso9899: 199409
ISO C90 conforme modificado na alteração 1.

c99
c9x
iso9899: 1999
iso9899: 199x
ISO C99. Este padrão é substancialmente completamente suportado, modulo bugs e
problemas de ponto flutuante (principalmente, mas não inteiramente relacionados aos recursos opcionais do C99
dos Anexos F e G). Verhttp://gcc.gnu.org/c99status.html> para mais
em formação. Os nomes c9x e assim iso9899: 199x estão obsoletos.

c11
c1x
iso9899: 2011
ISO C11, a revisão de 2011 do padrão ISO C. Este padrão é substancialmente
completamente suportado, bugs de módulo, problemas de ponto flutuante (principalmente, mas não inteiramente
relativos aos recursos opcionais C11 dos Anexos F e G) e os Anexos opcionais K
(Interfaces de verificação de limites) e L (capacidade de análise). O nome c1x está obsoleto.

gnu90
gnu89
Dialeto GNU do ISO C90 (incluindo alguns recursos do C99).

gnu99
gnu9x
Dialeto GNU de ISO C99. O nome gnu9x está obsoleto.

gnu11
gnu1x
Dialeto GNU de ISO C11. Este é o padrão para o código C. O nome gnu1x is
descontinuada.

c ++ 98
c ++ 03
O padrão ISO C ++ de 1998 mais a retificação técnica de 2003 e algumas
relatórios de defeitos. Igual a -ansi para código C ++.

gnu ++ 98
gnu ++ 03
Dialeto GNU de -std = c ++ 98. Este é o padrão para o código C ++.

c ++ 11
c ++ 0x
O padrão ISO C ++ de 2011 mais emendas. O nome c ++ 0x está obsoleto.

gnu ++ 11
gnu ++ 0x
Dialeto GNU de -std = c ++ 11. O nome gnu ++ 0x está obsoleto.

c ++ 14
c ++ 1y
O padrão ISO C ++ de 2014 mais emendas. O nome c ++ 1y está obsoleto.

gnu ++ 14
gnu ++ 1y
Dialeto GNU de -std = c ++ 14. O nome gnu ++ 1y está obsoleto.

c ++ 1z
A próxima revisão do padrão ISO C ++, provisoriamente planejada para 2017. Suporte
é altamente experimental, e quase certamente mudará de maneiras incompatíveis em
lançamentos futuros.

gnu ++ 1z
Dialeto GNU de -std = c ++ 1z. O suporte é altamente experimental e quase
certamente mudará de maneiras incompatíveis em versões futuras.

-fgnu89-inline
A opção -fgnu89-inline diz ao GCC para usar a semântica GNU tradicional para "inline"
funções quando no modo C99.

Usar esta opção é aproximadamente equivalente a adicionar o atributo de função "gnu_inline"
para todas as funções inline.

A opção -fno-gnu89-inline diz explicitamente ao GCC para usar a semântica C99 para
"inline" quando no modo C99 ou GNU99 (ou seja, especifica o comportamento padrão). Esse
opção não é suportada em -std = c90 or -std = gnu90 modo.

As macros de pré-processador "__GNUC_GNU_INLINE__" e "__GNUC_STDC_INLINE__" podem ser usadas
para verificar qual semântica está em vigor para funções "inline".

-aux-info nome do arquivo
Saída para as declarações prototipadas de nome de arquivo fornecido para todas as funções declaradas e / ou
definido em uma unidade de tradução, incluindo aqueles em arquivos de cabeçalho. Esta opção é
silenciosamente ignorado em qualquer idioma diferente de C.

Além das declarações, o arquivo indica, nos comentários, a origem de cada declaração
(arquivo fonte e linha), se a declaração era implícita, prototipada ou
desprotipado (I, N para novo ou O para velho, respectivamente, no primeiro caractere após
o número da linha e os dois pontos), e se veio de uma declaração ou definição
(C or F, respectivamente, no caractere seguinte). No caso de função
definições, uma lista de argumentos no estilo K&R seguida por suas declarações também é
fornecidos, dentro dos comentários, após a declaração.

-funções variádicas sem parâmetros de pousio
Aceite funções variáveis ​​sem parâmetros nomeados.

Embora seja possível definir tal função, isso não é muito útil, pois é
não é possível ler os argumentos. Isso só é compatível com C, pois esta construção é
permitido por C ++.

-fno-asm
Não reconheça "asm", "inline" ou "typeof" como uma palavra-chave, para que o código possa usar esses
palavras como identificadores. Você pode usar as palavras-chave "__asm__", "__inline__" e
"__typeof__" em vez disso. -ansi implica -fno-asm.

Em C ++, essa opção afeta apenas a palavra-chave "typeof", uma vez que "asm" e "inline" são
palavras-chave padrão. Você pode querer usar o -fno-gnu-palavras-chave sinalizar em vez disso, que tem
o mesmo efeito. No modo C99 (-std = c99 or -std = gnu99), essa mudança afeta apenas o
palavras-chave "asm" e "typeof", visto que "inline" é uma palavra-chave padrão no ISO C99.

-fno-builtin
-fno-builtin-função
Não reconheça funções integradas que não comecem com __construídas em_ como prefixo.

GCC normalmente gera código especial para lidar com certas funções embutidas mais
eficientemente; por exemplo, chamadas para "alloca" podem se tornar instruções únicas que
ajuste a pilha diretamente e as chamadas para "memcpy" podem se tornar loops de cópia em linha. o
o código resultante é geralmente menor e mais rápido, mas como a função não chama
mais aparecem como tal, você não pode definir um ponto de interrupção nessas chamadas, nem pode alterar
o comportamento das funções vinculando-se a uma biblioteca diferente. Além disso, quando
uma função é reconhecida como uma função embutida, o GCC pode usar informações sobre isso
função para avisar sobre problemas com chamadas para essa função, ou para gerar mais
código eficiente, mesmo se o código resultante ainda contiver chamadas para essa função. Para
exemplo, os avisos são dados com -Wformato para chamadas ruins para "printf" quando "printf" é
embutido e "strlen" é conhecido por não modificar a memória global.

Com o -fno-builtin-função opção apenas a função embutida função está desabilitado.
função não deve começar com __construídas em_. Se for nomeada uma função que não está embutida
nesta versão do GCC, esta opção é ignorada. Não há correspondência
-fbuiltin-função opção; se você deseja habilitar funções integradas seletivamente quando
utilização -fno-builtin or -freestanding, você pode definir macros como:

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

-fhosted
Afirme que a compilação visa um ambiente hospedado. Isso implica -fbuiltin. UMA
ambiente hospedado é aquele em que toda a biblioteca padrão está disponível, e em
qual "main" tem um tipo de retorno de "int". Os exemplos são quase tudo, exceto um
núcleo. Isso é equivalente a -fno-autônomo.

-freestanding
Afirme que a compilação visa um ambiente independente. Isso implica
-fno-builtin. Um ambiente independente é aquele em que a biblioteca padrão não pode
existem, e a inicialização do programa pode não ser necessariamente em "principal". O exemplo mais óbvio
é um kernel do sistema operacional. Isso é equivalente a -fno-hospedado.

-fopenac
Habilite o manuseio das diretivas OpenACC "#pragma acc" em C / C ++ e "! $ Acc" em Fortran.
Quando -fopenac é especificado, o compilador gera código acelerado de acordo com o
Interface de programação de aplicativos OpenACC v2.0http://www.openacc.org/>. Esta opção
implica -pthreade, portanto, só é compatível com destinos que tenham suporte para
-pthread.

Observe que este é um recurso experimental, incompleto e sujeito a alterações no futuro
versões do GCC. Verhttps://gcc.gnu.org/wiki/OpenACC> para mais informações.

-fopenmp
Habilite o manuseio das diretivas OpenMP "#pragma omp" em C / C ++ e "! $ Omp" em Fortran.
Quando -fopenmp é especificado, o compilador gera código paralelo de acordo com o
Interface de programa de aplicativo OpenMP v4.0http://www.openmp.org/>. Esta opção
implica -pthreade, portanto, só é compatível com destinos que tenham suporte para
-pthread. -fopenmp implica -fopenmp-simd.

-fopenmp-simd
Habilite o manuseio das diretivas SIMD do OpenMP com "#pragma omp" em C / C ++ e "! $ Omp" em
Fortran. Outras diretivas OpenMP são ignoradas.

-fcilkplus
Habilite o uso de recursos de extensão de linguagem Cilk Plus para C / C ++. Quando a opção
-fcilkplus for especificado, habilite o uso dos recursos de extensão da linguagem Cilk Plus
para C / C ++. A presente implementação segue ABI versão 1.2. Isto é um
recurso experimental que está apenas parcialmente completo e cuja interface pode mudar
em versões futuras do GCC conforme as especificações oficiais mudam. Atualmente, todos
recursos, mas "_Cilk_for" foram implementados.

-fgnu-tm
Quando a opção -fgnu-tm é especificado, o compilador gera código para o Linux
variante do documento de especificação ABI de memória transacional atual da Intel (revisão
1.1, 6 de maio de 2009). Este é um recurso experimental cuja interface pode mudar em
versões futuras do GCC, conforme a especificação oficial muda. Por favor, note que não
todas as arquiteturas são suportadas para este recurso.

Para obter mais informações sobre o suporte do GCC para memória transacional,

Observe que o recurso de memória transacional não é compatível com exceções sem chamada
(-fnon-call-exceptions).

-fms-extensions
Aceite algumas construções não padrão usadas em arquivos de cabeçalho da Microsoft.

No código C ++, isso permite que nomes de membros em estruturas sejam semelhantes aos tipos anteriores
declarações.

typedef int UOW;
estrutura ABC {
UOU UOU;
};

Alguns casos de campos sem nome em estruturas e uniões só são aceitos com este
opção.

Observe que esta opção está desativada para todos os destinos, exceto os destinos x86 usando ms-abi.

-fplan9-extensions
Aceite algumas construções não padrão usadas no código do Plano 9.

Isso permite -fms-extensions, permite passar ponteiros para estruturas com anônimos
campos para funções que esperam ponteiros para elementos do tipo do campo, e
permite referir-se a campos anônimos declarados usando um typedef. Este é apenas
com suporte para C, não C ++.

-trígrafos
Suporta trigraphs ISO C. o -ansi opção (e -std opções para ISO C estrito
conformidade) implica -trígrafos.

-tradicional
-tradicional-cpp
Anteriormente, essas opções faziam com que o GCC tentasse emular um compilador C pré-padrão.
Eles agora são suportados apenas com o -E trocar. O pré-processador continua a oferecer suporte
um modo pré-padrão. Veja o manual GNU CPP para detalhes.

-fcond-incompatibilidade
Permitir expressões condicionais com tipos incompatíveis no segundo e terceiro argumentos.
O valor de tal expressão é nulo. Esta opção não é compatível com C ++.

-flax-vector-conversões
Permitir conversões implícitas entre vetores com diferentes números de elementos e / ou
tipos de elementos incompatíveis. Esta opção não deve ser usada para novo código.

-funsigned-char
Deixe o tipo "char" sem sinal, como "unsigned char".

Cada tipo de máquina tem um padrão para o que "char" deve ser. É como
"unsigned char" por padrão ou como "assinado char" por padrão.

Idealmente, um programa portátil deve sempre usar "assinado char" ou "unsigned char" quando
depende da assinatura de um objeto. Mas muitos programas foram escritos para usar
simplesmente "char" e espera que seja assinado, ou espera que não seja, dependendo do
máquinas para as quais foram escritos. Esta opção, e seu inverso, permitem que você faça um
programa funcione com o padrão oposto.

O tipo "char" é sempre um tipo distinto de cada um de "char assinado" ou "unsigned
char ", embora seu comportamento seja sempre igual a um desses dois.

-fsigned-char
Deixe o tipo "char" ser assinado, como "char assinado".

Observe que isso é equivalente a -fno-unsigned-char, que é a forma negativa de
-funsigned-char. Da mesma forma, a opção -fno-assinado-char é equivalente a
-funsigned-char.

-fsigned-bitfields
-funsigned-bitfields
-fno-assinado-bitfields
-fno-unsigned-bitfields
Essas opções controlam se um campo de bits é assinado ou não, quando a declaração
não usa "assinado" ou "não assinado". Por padrão, esse campo de bits é assinado,
porque isso é consistente: os tipos inteiros básicos, como "int", são tipos com sinal.

Opções Controlador C + + Dialeto
Esta seção descreve as opções de linha de comando que são significativas apenas para programas C ++.
Você também pode usar a maioria das opções do compilador GNU, independentemente do idioma do seu programa
está em. Por exemplo, você pode compilar um arquivo firstClass.C como isso:

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

Neste exemplo, apenas -frepo é uma opção destinada apenas a programas C ++; você pode usar o
outras opções com qualquer idioma suportado pelo GCC.

Aqui está uma lista de opções que são para compilar programas C ++:

-fabi-version =n
Use a versão n do C ++ ABI. O padrão é a versão 0.

A versão 0 refere-se à versão que mais se aproxima da especificação C ++ ABI.
Portanto, o ABI obtido usando a versão 0 mudará em diferentes versões do G ++
pois os bugs ABI são corrigidos.

A versão 1 é a versão do C ++ ABI que apareceu pela primeira vez no G ++ 3.2.

A versão 2 é a versão do C ++ ABI que apareceu pela primeira vez no G ++ 3.4, e foi o
padrão por meio do G ++ 4.9.

A versão 3 corrige um erro ao mutilar um endereço constante como um argumento de modelo.

A versão 4, que apareceu pela primeira vez no G ++ 4.5, implementa um mangling padrão para vetor
tipos.

A versão 5, que apareceu pela primeira vez no G ++ 4.6, corrige a mutilação do atributo
const / volatile em tipos de ponteiro de função, tipo de decl de um decl simples e uso de um
parâmetro de função na declaração de outro parâmetro.

A versão 6, que apareceu pela primeira vez no G ++ 4.7, corrige o comportamento de promoção do C ++ 11
enums com escopo definido e mutilação de pacotes de argumentos de modelo, const / static_cast, prefixo ++
e -, e uma função de escopo de classe usada como um argumento de modelo.

Versão 7, que apareceu pela primeira vez no G ++ 4.8, que trata nullptr_t como um tipo integrado
e corrige a mutilação de lambdas no escopo do argumento padrão.

A versão 8, que apareceu pela primeira vez no G ++ 4.9, corrige o comportamento de substituição de
tipos de função com qualificadores cv de função.

Veja também -Wabi.

-fabi-compat-version =n
Em alvos que suportam aliases fortes, o G ++ contorna alterações mutiladas criando
um alias com o nome mutilado correto ao definir um símbolo com um
nome mutilado. Essa opção especifica qual versão ABI usar para o alias.

Com -fabi-version = 0 (o padrão), o padrão é 2. Se outra versão ABI for
selecionado explicitamente, o padrão é 0.

A versão de compatibilidade também é definida por -Wabi =n.

-fno-controle de acesso
Desative todas as verificações de acesso. Esta opção é útil principalmente para contornar bugs em
o código de controle de acesso.

-fcheck-novo
Verifique se o ponteiro retornado por "operador novo" não é nulo antes de tentar
modificar o armazenamento alocado. Esta verificação é normalmente desnecessária porque o C ++
padrão especifica que "operador novo" só retorna 0 se for declarado "lançar ()", em
caso em que o compilador sempre verifica o valor de retorno, mesmo sem esta opção. No
todos os outros casos, quando "operador novo" tem uma especificação de exceção não vazia, memória
a exaustão é sinalizada lançando "std :: bad_alloc". Veja também novo (nothrow).

-fconstexpr-depth =n
Defina a profundidade de avaliação aninhada máxima para funções constexpr do C ++ 11 para n. Um limite
é necessário para detectar recursão infinita durante a avaliação de expressão constante. o
mínimo especificado pelo padrão é 512.

-fdeduce-init-list
Habilite a dedução de um parâmetro de tipo de modelo como "std :: initializer_list" de uma chave
lista de inicializadores inclusa, ou seja

modelo encaminhamento automático (T t) -> decltype (realfn (t))
{
retornar realfn(t);
}

void f ()
{
para a frente ({1,2}); // reencaminhamento de chamadas >
}

Esta dedução foi implementada como uma possível extensão ao originalmente proposto
semântica para o padrão C ++ 11, mas não fazia parte do padrão final, então é
desativado por padrão. Esta opção está obsoleta e pode ser removida no futuro
versão do G ++.

-injeção de amigo
Injetar funções de amigo no namespace delimitador, de modo que fiquem visíveis fora
o escopo da classe em que são declarados. As funções de amigo foram documentadas
para trabalhar dessa maneira no antigo Manual de Referência Anotado C ++. No entanto, em ISO C ++ a
função amiga que não é declarada em um escopo delimitador só pode ser encontrada usando
pesquisa dependente de argumento. O padrão do GCC é o comportamento padrão.

Esta opção é para compatibilidade e pode ser removida em uma versão futura do G ++.

-fno-elide-construtores
O padrão C ++ permite que uma implementação omita a criação de um temporário que é apenas
usado para inicializar outro objeto do mesmo tipo. Especificar esta opção desativa
essa otimização e força o G ++ a chamar o construtor de cópia em todos os casos.

-fno-enforce-eh-specs
Não gere código para verificar a violação das especificações de exceção em tempo de execução.
Esta opção viola o padrão C ++, mas pode ser útil para reduzir o tamanho do código em
builds de produção, bem como definir "NDEBUG". Isso não fornece o código do usuário
permissão para lançar exceções que violem as especificações de exceção; a
compilador ainda otimiza com base nas especificações, lançando um
exceção resulta em comportamento indefinido em tempo de execução.

-fextern-tls-init
-fno-extern-tls-init
Os padrões C ++ 11 e OpenMP permitem que variáveis ​​"thread_local" e "threadprivate"
tem inicialização dinâmica (tempo de execução). Para apoiar isso, qualquer uso de tal variável
passa por uma função de invólucro que executa qualquer inicialização necessária. Quando o
uso e definição da variável estão na mesma unidade de tradução, esta sobrecarga pode
ser otimizado, mas quando o uso é em uma unidade de tradução diferente, há
sobrecarga significativa, mesmo se a variável não precisa realmente de dinâmica
inicialização. Se o programador pode ter certeza de que nenhum uso da variável em um
definir TU precisa acionar a inicialização dinâmica (ou porque a variável é
inicializado estaticamente, ou um uso da variável na definição da TU será executado
antes de qualquer uso em outra TU), eles podem evitar essa sobrecarga com o
-fno-extern-tls-init opção.

Em destinos que suportam aliases de símbolo, o padrão é -fextern-tls-init. Em alvos
que não suportam aliases de símbolo, o padrão é -fno-extern-tls-init.

-ffor-scope
-fno-para-escopo
If -ffor-scope é especificado, o escopo das variáveis ​​declaradas em um instrução for-init
é limitado ao próprio loop "for", conforme especificado pelo padrão C ++. Se
-fno-para-escopo é especificado, o escopo das variáveis ​​declaradas em um instrução for-init
estende-se até o final do escopo, como era o caso nas versões antigas do G ++, e
outras implementações (tradicionais) de C ++.

Se nenhuma bandeira for fornecida, o padrão é seguir o padrão, mas permitir e fornecer
um aviso para código antigo que de outra forma seria inválido ou teria
comportamento.

-fno-gnu-palavras-chave
Não reconheço "typeof" como uma palavra-chave, de modo que o código pode usar essa palavra como um
identificador. Você pode usar a palavra-chave "__typeof__" em seu lugar. -ansi implica
-fno-gnu-palavras-chave.

-fno-implícito-templates
Nunca emita código para modelos não embutidos que são instanciados implicitamente (ou seja, por
usar); apenas emita código para instanciações explícitas.

-FNO-implícito-modelos em linha
Também não emita código para instanciações implícitas de modelos embutidos. O padrão
é lidar com inlines de maneira diferente para que a compilação com e sem a necessidade de otimização
o mesmo conjunto de instanciações explícitas.

-fno-implement-inlines
Para economizar espaço, não emita cópias fora de linha de funções em linha controladas por
"implementação #pragma". Isso causa erros do vinculador se essas funções não forem
inline em todos os lugares em que são chamados.

-fms-extensions
Desative os avisos Wpedantic sobre construções usadas no MFC, como int implícito e
obter um ponteiro para a função de membro por meio de sintaxe não padrão.

-fno-nonansi-builtins
Desative as declarações integradas de funções que não são exigidas pelo ANSI / ISO C. Estes
incluem "ffs", "alloca", "_exit", "index", "bzero", "conjf" e outros relacionados
funções.

-fnothrow-opt
Trate uma especificação de exceção "throw ()" como se fosse uma especificação "noexcept" para
reduza ou elimine a sobrecarga do tamanho do texto em relação a uma função, sem exceção
especificação. Se a função tiver variáveis ​​locais de tipos com não triviais
destruidores, a especificação de exceção torna a função menor porque
as limpezas EH para essas variáveis ​​podem ser otimizadas. O efeito semântico é
que uma exceção lançada de uma função com tal especificação de exceção
resulta em uma chamada para "encerrar" em vez de "inesperado".

-fno-operator-names
Não trate as palavras-chave do nome do operador "e", "bitand", "bitor", "compl", "não", "ou"
e "xor" como sinônimos e palavras-chave.

-fno-opcional-diags
Desative os diagnósticos que o padrão diz que um compilador não precisa emitir.
Atualmente, o único diagnóstico emitido pelo G ++ é aquele para um nome tendo
múltiplos significados dentro de uma classe.

-fpermissivo
Faça downgrade de alguns diagnósticos sobre códigos não conformes de erros para avisos. Assim,
utilização -fpermissivo permite que algum código não conforme seja compilado.

-fno-pretty-templates
Quando uma mensagem de erro se refere a uma especialização de um modelo de função, o compilador
normalmente imprime a assinatura do modelo seguida pelos argumentos do modelo e
quaisquer typedefs ou nomes de tipo na assinatura (por exemplo, "void f (T) [com T = int]" em vez
do que "void f (int)") para que fique claro qual modelo está envolvido. Quando um erro
mensagem se refere a uma especialização de um modelo de classe, o compilador omite qualquer
argumentos de modelo que correspondem aos argumentos de modelo padrão para esse modelo. Se
qualquer um desses comportamentos torna mais difícil entender a mensagem de erro, em vez de
mais fácil, você pode usar -fno-pretty-templates para desativá-los.

-frepo
Habilite a instanciação automática do modelo no momento do link. Esta opção também implica
-fno-implícito-templates.

-fno-rtti
Desative a geração de informações sobre cada classe com funções virtuais para uso por
os recursos de identificação de tipo em tempo de execução C ++ ("dynamic_cast" e "typeid"). Se você
não use essas partes da linguagem, você pode economizar algum espaço usando este sinalizador.
Observe que o tratamento de exceções usa as mesmas informações, mas G ++ as gera como
precisava. O operador "dynamic_cast" ainda pode ser usado para conversões que não requerem
informações de tipo em tempo de execução, ou seja, projeções para "void *" ou para classes básicas não ambíguas.

-fsized-desalocação
Habilite as declarações globais integradas

operador void delete (void *, std :: size_t) noexcept;
operador void delete [] (void *, std :: size_t) noexcept;

conforme apresentado em C ++ 14. Isso é útil para desalocação de substituição definida pelo usuário
funções que, por exemplo, usam o tamanho do objeto para tornar a desalocação mais rápida.
Ativado por padrão em -std = c ++ 14 e acima. A bandeira -Desalocação de tamanho grande adverte
sobre lugares que podem querer adicionar uma definição.

-fstats
Emita estatísticas sobre o processamento de front-end no final da compilação. Esse
as informações geralmente são úteis apenas para a equipe de desenvolvimento do G ++.

-fstrict-enums
Permita que o compilador otimize usando a suposição de que um valor do tipo enumerado
só pode ser um dos valores da enumeração (conforme definido no padrão C ++;
basicamente, um valor que pode ser representado no número mínimo de bits necessários para
representam todos os enumeradores). Esta suposição pode não ser válida se o programa usar
um elenco para converter um valor inteiro arbitrário para o tipo enumerado.

-ftemplate-backtrace-limit =n
Defina o número máximo de notas de instanciação do modelo para um único aviso ou erro
para n. O valor padrão é 10.

-ftemplate-depth =n
Defina a profundidade máxima de instanciação para classes de modelo para n. Um limite no
a profundidade da instanciação do template é necessária para detectar recursões infinitas durante o template
instanciação de classe. Os programas em conformidade com ANSI / ISO C ++ não devem depender de um máximo
profundidade maior que 17 (alterado para 1024 em C ++ 11). O valor padrão é 900, pois o
o compilador pode ficar sem espaço de pilha antes de atingir 1024 em algumas situações.

-fno-threadsafe-statics
Não emita o código extra para usar as rotinas especificadas no C ++ ABI para thread-
inicialização segura de estática local. Você pode usar esta opção para reduzir o tamanho do código
ligeiramente em código que não precisa ser thread-safe.

-fuse-cxa-atexit
Registre destruidores para objetos com duração de armazenamento estático com o "__cxa_atexit"
função em vez da função "atexit". Esta opção é necessária para
manipulação de destruidores estáticos em conformidade com os padrões, mas só funciona se sua biblioteca C
suporta "__cxa_atexit".

-fno-use-cxa-get-exception-ptr
Não use a rotina de tempo de execução "__cxa_get_exception_ptr". Isso faz com que
"std :: uncaught_exception" esteja incorreto, mas é necessário se a rotina de tempo de execução for
não está disponível.

-fvisibility-inlines-hidden
Esta opção declara que o usuário não tenta comparar ponteiros para inline
funções ou métodos onde os endereços das duas funções são tomados em diferentes
objetos compartilhados.

O efeito disso é que o GCC pode, efetivamente, marcar métodos inline com
"__attribute__ ((visibility (" hidden ")))" para que não apareçam na exportação
tabela de um DSO e não requerem uma indireção PLT quando usados ​​dentro do DSO.
Ativar esta opção pode ter um efeito dramático nos tempos de carregamento e link de um DSO, pois
reduz enormemente o tamanho da tabela de exportação dinâmica quando a biblioteca torna-se pesada
uso de modelos.

O comportamento desta opção não é exatamente o mesmo que marcar os métodos como ocultos
diretamente, porque não afeta as variáveis ​​estáticas locais para a função ou causa
o compilador para deduzir que a função é definida em apenas um objeto compartilhado.

Você pode marcar um método como tendo uma visibilidade explicitamente para negar o efeito do
mudar para esse método. Por exemplo, se você deseja comparar os ponteiros para um
método inline particular, você pode marcá-lo como tendo visibilidade padrão. Marcando o
cercar a classe com visibilidade explícita não tem efeito.

Métodos embutidos explicitamente instanciados não são afetados por esta opção como sua ligação
pode, de outra forma, cruzar o limite de uma biblioteca compartilhada.

-fvisibility-ms-compat
Este sinalizador tenta usar as configurações de visibilidade para fazer o modelo de ligação C ++ do GCC
compatível com o do Microsoft Visual Studio.

O sinalizador faz essas alterações no modelo de ligação do GCC:

1. Ele define a visibilidade padrão para "oculto", como -fvisibility = oculto.

2. Tipos, mas não seus membros, não são ocultados por padrão.

3. A regra de definição única é relaxada para tipos sem visibilidade explícita
especificações que são definidas em mais de um objeto compartilhado: essas declarações
são permitidos se forem permitidos quando esta opção não for usada.

No novo código, é melhor usar -fvisibility = oculto e exportar as classes que são
pretende ser externamente visível. Infelizmente, é possível que o código confie,
talvez acidentalmente, no comportamento do Visual Studio.

Entre as consequências dessas mudanças estão que os membros de dados estáticos do mesmo tipo
com o mesmo nome, mas definidos em diferentes objetos compartilhados são diferentes, portanto, mudando
um não muda o outro; e que ponteiros para membros de função definidos em
objetos compartilhados diferentes podem não ser iguais. Quando este sinalizador é dado, é um
violação do ODR para definir tipos com o mesmo nome de forma diferente.

-fvtable-verify =[std|pré-iniciar|Nenhum]
Ligue (ou desligue, se estiver usando -fvtable-verify = nenhum) o recurso de segurança que verifica em
tempo de execução, para cada chamada virtual, que o ponteiro vtable por meio do qual a chamada é
feito é válido para o tipo de objeto e não foi corrompido ou sobrescrito.
Se um ponteiro vtable inválido for detectado em tempo de execução, um erro será relatado e
a execução do programa é imediatamente interrompida.

Esta opção faz com que as estruturas de dados de tempo de execução sejam construídas na inicialização do programa, que são
usado para verificar os ponteiros vtable. As opções std e assim pré-iniciar controlar o
tempo de quando essas estruturas de dados são construídas. Em ambos os casos, as estruturas de dados são
construído antes que a execução alcance "principal". Usando -fvtable-verify = std faz com que os dados
estruturas a serem construídas após as bibliotecas compartilhadas terem sido carregadas e inicializadas.
-fvtable-verify = preinit faz com que sejam construídos antes que as bibliotecas compartilhadas tenham sido
carregado e inicializado.

Se esta opção aparecer várias vezes na linha de comando com valores diferentes
Especificadas, Nenhum tem maior prioridade sobre ambos std e assim pré-iniciar; pré-iniciar toma
prioridade sobre std.

-fvtv-debug
Quando usado em conjunto com -fvtable-verify = std or -fvtable-verify = preinit, causas
depurar versões das funções de tempo de execução para que o recurso de verificação vtable seja
chamado. Este sinalizador também faz com que o compilador registre informações sobre qual vtable
ponteiros que encontra para cada classe. Esta informação é gravada em um arquivo chamado
vtv_set_ptr_data.log no diretório nomeado pela variável de ambiente VTV_LOGS_DIR
se estiver definido ou o diretório de trabalho atual, caso contrário.

Nota: este recurso acrescenta dados para o arquivo de log. Se você quiser um novo arquivo de log, seja
certifique-se de excluir qualquer um existente.

-contagens de fvtv
Este é um sinalizador de depuração. Quando usado em conjunto com -fvtable-verify = std or
-fvtable-verify = preinit, isso faz com que o compilador acompanhe o número total de
chamadas virtuais que encontra e o número de verificações que insere. Isso também
conta o número de chamadas para certas funções de biblioteca de tempo de execução que ele insere e
registra essas informações para cada unidade de compilação. O compilador escreve esta informação
para um arquivo chamado vtv_count_data.log no diretório nomeado pela variável de ambiente
VTV_LOGS_DIR se estiver definido ou o diretório de trabalho atual, caso contrário. Isso também
conta o tamanho dos conjuntos de ponteiros vtable para cada classe e grava essas informações
para vtv_class_set_sizes.log No mesmo diretório.

Nota: este recurso acrescenta dados para os arquivos de log. Para obter novos arquivos de log, certifique-se de
exclua qualquer um existente.

-não-fraco
Não use suporte de símbolo fraco, mesmo se for fornecido pelo vinculador. Por padrão, G ++
usa símbolos fracos, se estiverem disponíveis. Esta opção existe apenas para teste e
não deve ser usado por usuários finais; isso resulta em um código inferior e não tem benefícios.
Esta opção pode ser removida em uma versão futura do G ++.

-nostdinc ++
Não procure por arquivos de cabeçalho nos diretórios padrão específicos para C ++, mas faça
ainda pesquise os outros diretórios padrão. (Esta opção é usada ao construir o
Biblioteca C ++.)

Além disso, essas opções de otimização, aviso e geração de código têm apenas significados
para programas C ++:

-Wabi (C, Objective-C, C ++ e Objective-C ++ apenas)
Quando um explícito -fabi-version =n opção é usada, faz com que o G ++ avise quando gerar
código que provavelmente não é compatível com o C ++ ABI neutro do fornecedor. Desde G ++ agora
o padrão é -fabi-version = 0, -Wabi não tem efeito, a menos que uma versão anterior de ABI seja
selecionado (com -fabi-version =n) ou uma versão de compatibilidade mais antiga é selecionada (com
-Wabi =n or -fabi-compat-version =n).

Embora tenha sido feito um esforço para alertar sobre todos esses casos, provavelmente existem alguns
casos que não são avisados, embora G ++ esteja gerando código incompatível.
Também pode haver casos em que avisos são emitidos, mesmo que o código que é
gerado é compatível.

Você deve reescrever seu código para evitar esses avisos se estiver preocupado com o
fato de que o código gerado por G ++ pode não ser binário compatível com o código gerado por
outros compiladores.

-Wabi também pode ser usado com um número de versão explícito para avisar sobre compatibilidade
com um particular -fabi-versão nível, por exemplo -Wabi = 2 para avisar sobre mudanças em relação a
-fabi-version = 2. Especificar um número de versão também define -fabi-compat-version =n.

As incompatibilidades conhecidas em -fabi-version = 2 (que era o padrão do GCC 3.4 para
4.9) incluem:

* Um modelo com um parâmetro de modelo não-tipo do tipo de referência foi mutilado
incorretamente:

externo int N;
modelo struct S {};
void n (S ) {2}

Isso foi corrigido em -fabi-version = 3.

* Os tipos de vetor SIMD declarados usando "__attribute ((vector_size))" foram mutilados em um
forma não padrão que não permite a sobrecarga de funções tomando vetores
de tamanhos diferentes.

A mutilação foi alterada em -fabi-version = 4.

* "__attribute ((const))" e "noreturn" foram mutilados como qualificadores de tipo, e
"decltype" de uma declaração simples foi dobrado.

Esses problemas de mutilação foram corrigidos em -fabi-version = 5.

* Enumeradores com escopo passado como argumentos para uma função variável são promovidos como
enumeradores sem escopo, fazendo com que "va_arg" reclame. Na maioria dos alvos, isso não
realmente afetam o parâmetro que passa ABI, pois não há como passar um argumento
menor que "int".

Além disso, a ABI alterou a destruição dos pacotes de argumentos do modelo, "const_cast",
"static_cast", incremento / decremento de prefixo e uma função de escopo de classe usada como um
argumento do modelo.

Esses problemas foram corrigidos em -fabi-version = 6.

* Lambdas no escopo do argumento padrão foram mutilados incorretamente e a ABI foi alterada
a mutilação de "nullptr_t".

Esses problemas foram corrigidos em -fabi-version = 7.

* Ao mutilar um tipo de função com qualificadores cv de função, o não qualificado
o tipo de função foi tratado incorretamente como um candidato a substituição.

Isso foi corrigido em -fabi-version = 8.

Ele também avisa sobre alterações relacionadas ao psABI. O psABI conhecido muda neste ponto
incluem:

* Para SysV / x86-64, uniões com membros "long double" são passados ​​na memória como
especificado em psABI. Por exemplo:

união U {
longo duplo ld;
int i;
};

"união U" é sempre passada na memória.

-Wabi-tag (Apenas C ++ e Objective-C ++)
Avisa quando um tipo com uma tag ABI é usado em um contexto que não tem essa tag ABI.
Vejo C + + Atributos para obter mais informações sobre tags ABI.

-Wctor-dtor-privacidade (Apenas C ++ e Objective-C ++)
Avisa quando uma classe parece inutilizável porque todos os construtores ou destruidores naquele
classes são privadas e não tem amigos nem funções de membro estáticas públicas.
Também avisa se não houver métodos não privados e se houver pelo menos um membro privado
função que não é um construtor ou destruidor.

-Delete-não-virtual-dtor (Apenas C ++ e Objective-C ++)
Avisa quando "delete" é usado para destruir uma instância de uma classe que possui
funções e destruidor não virtual. Não é seguro excluir uma instância de um derivado
classe por meio de um ponteiro para uma classe base se a classe base não tiver um virtual
destruidor. Este aviso é habilitado por -Parede.

-Wliteral-sufixo (Apenas C ++ e Objective-C ++)
Avisa quando uma string ou literal de caractere é seguido por um sufixo ud que não
comece com um sublinhado. Como uma extensão em conformidade, o GCC trata esses sufixos como
tokens de pré-processamento separados para manter a compatibilidade com versões anteriores do código
que usa macros de formatação de " ". Por exemplo:

#define __STDC_FORMAT_MACROS
#incluir
#includes

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

Nesse caso, "PRId64" é tratado como um token de pré-processamento separado.

Este aviso é habilitado por padrão.

-Aviso (Apenas C ++ e Objective-C ++)
Avisar quando uma conversão de estreitamento proibida por C ++ 11 ocorre dentro { }, por exemplo

int i = {2.2}; // erro: estreitando de duplo para interno

Esta bandeira está incluída em -Parede e assim -Wc ++ 11-compat.

Com -std = c ++ 11, -Wno-estreitando suprime o diagnóstico exigido pelo padrão.
Observe que isso não afeta o significado do código bem formado; redução de conversões
ainda são considerados mal formados no contexto SFINAE.

-Wnoexceto (Apenas C ++ e Objective-C ++)
Avisa quando uma expressão noexcept é avaliada como falsa devido a uma chamada para uma função
que não tem uma especificação de exceção de não lançamento (ou seja, "throw ()" ou
"noexcept"), mas é conhecido pelo compilador por nunca lançar uma exceção.

-Wnon-virtual-dtor (Apenas C ++ e Objective-C ++)
Avisa quando uma classe tem funções virtuais e um destruidor não virtual acessível
em si ou em uma classe base polimórfica acessível, caso em que é possível, mas
inseguro excluir uma instância de uma classe derivada por meio de um ponteiro para a própria classe
ou classe base. Este aviso é ativado automaticamente se -Weffc ++ é especificado.

-Encomendar (Apenas C ++ e Objective-C ++)
Avisa quando a ordem dos inicializadores de membro fornecida no código não corresponde à ordem
em que devem ser executados. Por exemplo:

estrutura A {
int i;
int j;
A (): j (0), i (1) {}
};

O compilador reorganiza os inicializadores de membro para "i" e "j" para corresponder ao
declaração de ordem dos associados, emitindo advertência nesse sentido. Este aviso é
ativado por -Parede.

-fext-numeric-literais (Apenas C ++ e Objective-C ++)
Aceite sufixos de números literais imaginários, de ponto fixo ou definidos por máquina como GNU
extensões. Quando esta opção está desativada, esses sufixos são tratados como usuários do C ++ 11
sufixos numéricos literais definidos. Está ativado por padrão para todos os dialetos pré-C ++ 11
e todos os dialetos GNU: -std = c ++ 98, -std = gnu ++ 98, -std = gnu ++ 11, -std = gnu ++ 14. Este
opção está desativada por padrão para ISO C ++ 11 em diante (-std = c ++ 11, ...).

Os seguintes -C... as opções não são afetadas por -Parede.

-Weffc ++ (Apenas C ++ e Objective-C ++)
Avisar sobre violações das seguintes diretrizes de estilo de Scott Meyers ' Eficaz
C + + série de livros:

* Defina um construtor de cópia e um operador de atribuição para classes com dinamicamente
memória alocada.

* Prefira a inicialização para atribuição em construtores.

* Faça com que "operator =" retorne uma referência * a isso.

* Não tente retornar uma referência quando você deve retornar um objeto.

* Distinguir entre formas prefixadas e pós-fixadas de operadores de incremento e decremento.

* Nunca sobrecarregue "&&", "||" ou ",".

Esta opção também permite -Wnon-virtual-dtor, que também é um dos eficazes C ++
recomendações. No entanto, a verificação é estendida para alertar sobre a falta de
destruidor em classes de bases não polimórficas acessíveis também.

Ao selecionar esta opção, esteja ciente de que os cabeçalhos da biblioteca padrão não obedecem a todos
dessas diretrizes; usar grep -v para filtrar esses avisos.

-Wstrict-null-sentinela (Apenas C ++ e Objective-C ++)
Avisar sobre o uso de um "NULL" não lançado como sentinela. Ao compilar apenas com GCC
esta é uma sentinela válida, pois "NULL" é definido como "__null". Embora seja um nulo
constante de ponteiro em vez de um ponteiro nulo, é garantido que seja do mesmo tamanho
como um ponteiro. Mas esse uso não é portátil em diferentes compiladores.

-Não-não-amigo-modelo (Apenas C ++ e Objective-C ++)
Desative os avisos quando funções de amigo não padronizadas forem declaradas em um modelo.
Desde o advento do suporte de especificação de modelo explícito em G ++, se o nome do
amigo é um id não qualificado (ou seja, amigos foo (int)), a especificação da linguagem C ++
exige que o amigo declare ou defina uma função comum, não-modelo. (Seção
14.5.3). Antes de G ++ implementar a especificação explícita, unqualified-ids poderiam ser
interpretado como uma especialização particular de uma função modelada. Porque isso
comportamento não conforme não é mais o comportamento padrão para G ++,
-Wnon-modelo-amigo permite que o compilador verifique o código existente para problemas em potencial
pontos e está ativado por padrão. Este novo comportamento do compilador pode ser desativado com
-Não-não-amigo-modelo, que mantém o código do compilador em conformidade, mas desativa o
aviso útil.

-Estilo antigo (Apenas C ++ e Objective-C ++)
Avisa se uma conversão de estilo antigo (estilo C) para um tipo não vazio é usada em um programa C ++.
O novo estilo de conversão ("dynamic_cast", "static_cast", "reinterpret_cast" e
"const_cast") são menos vulneráveis ​​a efeitos indesejados e muito mais fáceis de pesquisar.

-Woverloaded-virtual (Apenas C ++ e Objective-C ++)
Avisa quando uma declaração de função oculta funções virtuais de uma classe base. Para
exemplo, em:

estrutura A {
vazio virtual f ();
};

struct B: public A {
void f (int);
};

a versão de classe "A" de "f" está oculta em "B" e codifica como:

B * b;
b-> f ();

falha ao compilar.

-Wno-pmf-conversões (Apenas C ++ e Objective-C ++)
Desative o diagnóstico para converter um ponteiro vinculado para uma função de membro em um simples
ponteiro.

-Wsign-promo (Apenas C ++ e Objective-C ++)
Avisa quando a resolução de sobrecarga escolhe uma promoção de tipo não assinado ou enumerado para
um tipo assinado, sobre uma conversão para um tipo não assinado do mesmo tamanho. Anterior
versões do G ++ tentaram preservar a não sinalização, mas o padrão exige que o atual
comportamento.

Opções Controlador Objective-C e assim Objective-C ++ Dialetos
(NOTA: Este manual não descreve as linguagens Objective-C e Objective-C ++
si mesmos.

Esta seção descreve as opções de linha de comando que são significativas apenas para Objective-C
e programas Objective-C ++. Você também pode usar a maior parte do GNU independente de linguagem
opções do compilador. Por exemplo, você pode compilar um arquivo some_class.m como isso:

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

Neste exemplo, -fgnu-runtime é uma opção destinada apenas para Objective-C e Objective-C ++
programas; você pode usar as outras opções com qualquer idioma suportado pelo GCC.

Observe que, como Objective-C é uma extensão da linguagem C, as compilações Objective-C
também pode usar opções específicas para o front-end C (por exemplo, -Wtradicional). Da mesma forma,
Compilações Objective-C ++ podem usar opções específicas de C ++ (por exemplo, -Wabi).

Aqui está uma lista de opções que são para compilar Objective-C e Objective-C ++
programas:

-fconstant-string-class =nome da classe
Utilize nome da classe como o nome da classe a instanciar para cada string literal
especificado com a sintaxe "@" ... "". O nome da classe padrão é "NXConstantString" se
o runtime GNU está sendo usado, e "NSConstantString" se o runtime NeXT está sendo
usado (veja abaixo). o -fconstant-cfstrings opção, se também estiver presente, substitui o
-fconstant-string-class definir e fazer com que literais "@" ... "" sejam dispostos como constantes
Strings CoreFoundation.

-fgnu-runtime
Gere código de objeto compatível com o tempo de execução GNU Objective-C padrão. Isto é
o padrão para a maioria dos tipos de sistemas.

-fnext-runtime
Gere saída compatível com o tempo de execução NeXT. Este é o padrão para baseado em NeXT
sistemas, incluindo Darwin e Mac OS X. A macro "__NEXT_RUNTIME__" é predefinida se
(e somente se) esta opção for usada.

-fno-nil-receptores
Suponha que todas as mensagens Objective-C despachadas ("[mensagem do receptor: arg]") neste
unidade de tradução certifique-se de que o receptor não seja "nulo". Isso permite mais
pontos de entrada eficientes no tempo de execução a serem usados. Esta opção está disponível apenas em
conjunto com o tempo de execução NeXT e ABI versão 0 ou 1.

-fobjc-abi-version =n
Use a versão n do Objective-C ABI para o tempo de execução selecionado. Esta opção é
atualmente com suporte apenas para o tempo de execução NeXT. Nesse caso, a versão 0 é o
ABI tradicional (32 bits) sem suporte para propriedades e outros Objective-C 2.0
aditivos. A versão 1 é a ABI tradicional (32 bits) com suporte para propriedades e
outras adições Objective-C 2.0. A versão 2 é a ABI moderna (64 bits). Se nada for
especificado, o padrão é a Versão 0 em máquinas de destino de 32 bits e a Versão 2 em 64 bits
máquinas-alvo.

-fobjc-call-cxx-cdtors
Para cada classe Objective-C, verifique se alguma de suas variáveis ​​de instância é um objeto C ++
com um construtor padrão não trivial. Em caso afirmativo, sintetize um "- (id) especial
.cxx_construct "método de instância que executa construtores padrão não triviais em qualquer
tais variáveis ​​de instância, em ordem, e então retornam "self". Da mesma forma, verifique se algum
variável de instância é um objeto C ++ com um destruidor não trivial e, em caso afirmativo, sintetizar
um método especial "- (void) .cxx_destruct" que executa todos esses destruidores padrão, em
ordem reversa.

Os métodos "- (id) .cxx_construct" e "- (void) .cxx_destruct", portanto, gerados apenas
operam em variáveis ​​de instância declaradas na classe Objective-C atual, e não aquelas
herdado de superclasses. É responsabilidade do tempo de execução do Objective-C
invocar todos esses métodos na hierarquia de herança de um objeto. O ID)
Os métodos .cxx_construct "são chamados pelo tempo de execução imediatamente após um novo objeto
instância é alocada; os métodos "- (void) .cxx_destruct" são invocados imediatamente
antes que o tempo de execução desaloque uma instância do objeto.

No momento em que este livro foi escrito, apenas o tempo de execução NeXT no Mac OS X 10.4 e posterior tem suporte para
invocando os métodos "- (id) .cxx_construct" e "- (void) .cxx_destruct".

-fobjc-direct-dispatch
Permitir saltos rápidos para o despachante de mensagens. Em Darwin, isso é feito por meio do
página de comunicação.

-fobjc-exceções
Habilite o suporte sintático para manipulação de exceção estruturada em Objective-C, semelhante a
o que é oferecido por C ++ e Java. Esta opção é necessária para usar o Objective-C
palavras-chave @try, @throw, @catch, @finally e @synchronized. Esta opção está disponível
com o GNU runtime e o NeXT runtime (mas não disponível em conjunto com
o tempo de execução NeXT no Mac OS X 10.2 e anterior).

-fobjc-gc
Habilite a coleta de lixo (GC) nos programas Objective-C e Objective-C ++. Esta opção
está disponível apenas com o tempo de execução NeXT; o tempo de execução GNU tem um lixo diferente
implementação de coleção que não requer sinalizadores de compilador especiais.

-fobjc-nilcheck
Para o tempo de execução NeXT com a versão 2 da ABI, verifique se há um receptor nulo no método
chamadas antes de fazer a chamada do método real. Este é o padrão e pode ser
desabilitado usando -fno-objc-nilcheck. Métodos de classe e super chamadas nunca são verificados
para nil dessa forma, não importa como esse sinalizador esteja definido. Atualmente esta bandeira faz
nada quando o tempo de execução GNU, ou uma versão mais antiga do ABI de tempo de execução NeXT, é usado.

-fobjc-std = objc1
Esteja em conformidade com a sintaxe da linguagem Objective-C 1.0, a linguagem reconhecida pelo GCC 4.0.
Isso afeta apenas as adições Objective-C à linguagem C / C ++; não afeta
conformidade com os padrões C / C ++, que é controlada pelo dialeto C / C ++ separado
sinalizadores de opção. Quando esta opção é usada com Objective-C ou Objective-C ++
compilador, qualquer sintaxe Objective-C que não seja reconhecida pelo GCC 4.0 é rejeitada. Esse
é útil se você precisa ter certeza de que seu código Objective-C pode ser compilado com
versões mais antigas do GCC.

-freplace-objc-classes
Emita um marcador especial de instrução ld(1) não vincular estaticamente ao objeto resultante
arquivo e permitir dyld(1) para carregá-lo em tempo de execução. Isso é usado em
conjunto com o modo de depuração Fix-and-Continue, onde o arquivo de objeto está
a questão pode ser recompilada e recarregada dinamicamente no decorrer do programa
execução, sem a necessidade de reiniciar o próprio programa. Atualmente, Fix-and-
A funcionalidade Continuar está disponível apenas em conjunto com o tempo de execução NeXT no Mac
OS X 10.3 e posterior.

-fzero-link
Ao compilar para o tempo de execução NeXT, o compilador normalmente substitui as chamadas para
"objc_getClass (" ... ")" (quando o nome da classe é conhecido em tempo de compilação) com
referências de classe estáticas que são inicializadas no momento do carregamento, o que melhora o tempo de execução
atuação. Especificando o -fzero-link sinalizar suprime esse comportamento e causa
chamadas para "objc_getClass (" ... ")" para serem retidas. Isso é útil no Zero-Link
modo de depuração, uma vez que permite que implementações de classes individuais sejam modificadas
durante a execução do programa. O tempo de execução GNU atualmente sempre mantém chamadas para
"objc_get_class (" ... ")" independentemente das opções de linha de comando.

-fno-local-ivars
Por padrão, as variáveis ​​de instância em Objective-C podem ser acessadas como se fossem locais
variáveis ​​de dentro dos métodos da classe em que são declaradas. Isso pode levar a
sombreamento entre variáveis ​​de instância e outras variáveis ​​declaradas localmente
dentro de um método de classe ou globalmente com o mesmo nome. Especificando o -fno-local-ivars
sinalizador desativa este comportamento, evitando assim problemas de sombreamento variável.

-fivar-visibility =[público|protegido|privado|pacote]
Defina a visibilidade da variável de instância padrão para a opção especificada para que a instância
variáveis ​​declaradas fora do escopo de quaisquer diretivas de modificador de acesso padrão para o
visibilidade especificada.

-gen-decls
Despejar declarações de interface para todas as classes vistas no arquivo de origem para um arquivo denominado
sourcename.decl.

-Watribuir-interceptar (Objective-C e Objective-C ++ apenas)
Avisa sempre que uma atribuição Objective-C está sendo interceptada pelo coletor de lixo.

-Wno-protocolo (Objective-C e Objective-C ++ apenas)
Se uma classe é declarada para implementar um protocolo, um aviso é emitido para cada método
no protocolo que não é implementado pela classe. O comportamento padrão é
emitir um aviso para cada método não explicitamente implementado na classe, mesmo se um
a implementação do método é herdada da superclasse. Se você usar o -Wno-protocolo
opção, então os métodos herdados da superclasse são considerados para serem implementados,
e nenhum aviso é emitido para eles.

-Seletor (Objective-C e Objective-C ++ apenas)
Avisar se vários métodos de tipos diferentes para o mesmo seletor forem encontrados durante
compilação. A verificação é realizada na lista de métodos na fase final de
compilação. Além disso, uma verificação é realizada para cada seletor que aparece em um
expressão "@selector (...)", e um método correspondente para esse seletor foi
encontrado durante a compilação. Porque essas verificações examinam a tabela de métodos apenas no final
de compilação, esses avisos não são produzidos se o estágio final de compilação for
não alcançado, por exemplo, porque um erro foi encontrado durante a compilação, ou porque o
-fsyntax-only opção está sendo usada.

-Wstrict-selector-match (Objective-C e Objective-C ++ apenas)
Avisa se vários métodos com argumentos e / ou tipos de retorno diferentes são encontrados para um
determinado seletor ao tentar enviar uma mensagem usando este seletor para um receptor de
digite "id" ou "Class". Quando este sinalizador está desligado (que é o comportamento padrão), o
o compilador omite tais avisos se quaisquer diferenças encontradas estiverem confinadas aos tipos que compartilham
o mesmo tamanho e alinhamento.

-Seletor Wundeclared (Objective-C e Objective-C ++ apenas)
Avisa se uma expressão "@selector (...)" referindo-se a um seletor não declarado for encontrada. UMA
o seletor é considerado não declarado se nenhum método com esse nome foi declarado antes
a expressão "@selector (...)", explicitamente em uma @interface ou @protocol
declaração, ou implicitamente em uma seção @implementation. Esta opção sempre funciona
suas verificações assim que uma expressão "@selector (...)" for encontrada, enquanto -Seletor
executa suas verificações na fase final de compilação. Isso também reforça a codificação
convenção de estilo de que os métodos e seletores devem ser declarados antes de serem usados.

-print-objc-runtime-info
Gera cabeçalho C que descreve a maior estrutura que é passada por valor, se houver.

Opções para Controlo Diagnóstico Mensagens formatação
Tradicionalmente, as mensagens de diagnóstico são formatadas independentemente do dispositivo de saída
aspecto (por exemplo, sua largura, ...). Você pode usar as opções descritas abaixo para controlar o
algoritmo de formatação para mensagens de diagnóstico, por exemplo, quantos caracteres por linha, com que freqüência
as informações de localização da fonte devem ser relatadas. Observe que alguns front ends de idioma podem
não honrar essas opções.

-fmessage-length =n
Tente formatar mensagens de erro para que caibam em linhas de cerca de n personagens. Se n is
zero, então nenhuma quebra de linha é feita; cada mensagem de erro aparece em uma única linha.
Este é o padrão para todos os front ends.

-fdiagnostics-show-location = once
Significativo apenas no modo de quebra de linha. Instrui o relator de mensagens de diagnóstico a
emitir informações de localização da fonte uma vez; ou seja, no caso de a mensagem ser muito longa para caber
em uma única linha física e precisa ser agrupada, o local de origem não será emitido
(como prefixo) novamente, continuamente, nas linhas de continuação subsequentes. Isto é o
comportamento padrão.

-fdiagnostics-show-location = every-line
Significativo apenas no modo de quebra de linha. Instrui o relator de mensagens de diagnóstico a
emitem as mesmas informações de localização de origem (como prefixo) para linhas físicas que resultam
do processo de quebra de uma mensagem que é muito longa para caber em uma única linha.

-fdiagnostics-color [=QUANDO]
-fno-diagnostics-color
Use cores em diagnósticos. QUANDO is nunca, sempreou auto. O padrão depende de como
o compilador foi configurado, pode ser qualquer um dos anteriores QUANDO opções ou também
nunca if GCC_COLORS variável de ambiente não está presente no ambiente, e auto
de outra forma. auto significa usar cores apenas quando o erro padrão for um terminal. o
formas -fdiagnostics-color e assim -fno-diagnostics-color são apelidos para
-fdiagnostics-color = always e assim -fdiagnostics-color = never, Respectivamente.

As cores são definidas pela variável de ambiente GCC_COLORS. Seu valor é dois pontos-
lista separada de recursos e substrings Select Graphic Rendition (SGR). SGR
os comandos são interpretados pelo terminal ou emulador de terminal. (Veja a seção em
a documentação do seu terminal de texto para os valores permitidos e seus significados como
atributos de caracteres.) Esses valores de substring são inteiros em representação decimal
e pode ser concatenado com ponto e vírgula. Valores comuns para concatenar incluem 1 por
negrito, 4 para sublinhado, 5 para piscar, 7 para inverso, 39 para a cor de primeiro plano padrão, 30
para 37 para cores de primeiro plano, 90 para 97 para cores de primeiro plano do modo de 16 cores, 38, 5, 0 para
38, 5, 255 para os modos de 88 cores e 256 cores de primeiro plano, 49 para o fundo padrão
cor, 40 para 47 para cores de fundo, 100 para 107 para cores de fundo do modo de 16 cores,
e assim 48, 5, 0 para 48, 5, 255 para cores de fundo dos modos de 88 cores e 256 cores.

O padrão GCC_COLORS is

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

onde 01, 31 é vermelho em negrito, 01, 35 é magenta em negrito, 01, 36 é ciano em negrito, 01, 32 é ousado
verde e 01 é ousado. Configuração GCC_COLORS para a string vazia desativa as cores.
Os recursos suportados são os seguintes.

"erro ="
Subcadeia SGR para erro: marcadores.

"aviso ="
Substring SGR para aviso: marcadores.

"nota ="
Substring SGR para nota: marcadores.

"acento circunflexo ="
Substring SGR para linha circunflexo.

"locus ="
Substring SGR para informações de localização, arquivo: linha or arquivo: linha: coluna etc.

"citação ="
Substring SGR para informações impressas entre aspas.

-fno-diagnostics-show-option
Por padrão, cada diagnóstico emitido inclui texto indicando a opção de linha de comando
que controla diretamente o diagnóstico (se tal opção for conhecida pelo diagnóstico
máquinas). Especificando o -fno-diagnostics-show-option bandeira suprime isso
comportamento.

-fno-diagnostics-show-caret
Por padrão, cada diagnóstico emitido inclui a linha de origem original e um acento circunflexo '^'
indicando a coluna. Esta opção suprime essas informações. A linha de origem é
truncado para n personagens, se o -fmessage-length = n opção é fornecida. Quando a saída
é feito para o terminal, a largura é limitada à largura dada pelo COLUNAS
variável de ambiente ou, se não for definida, para a largura do terminal.

Opções para SOLICITE or Suprimir Advertências
Os avisos são mensagens de diagnóstico que relatam construções que não são inerentemente
erradas, mas que são arriscadas ou sugerem que pode ter havido um erro.

As seguintes opções independentes de idioma não permitem avisos específicos, mas controlam o
tipos de diagnósticos produzidos pelo GCC.

-fsyntax-only
Verifique se há erros de sintaxe no código, mas não faça nada além disso.

-fmax-errors =n
Limita o número máximo de mensagens de erro a n, ponto em que o GCC se recupera em vez
do que tentar continuar processando o código-fonte. Se n é 0 (o padrão),
não há limite para o número de mensagens de erro produzidas. Se -Wfatal-errors É também
especificado, então -Wfatal-errors tem precedência sobre esta opção.

-w Iniba todas as mensagens de aviso.

-Erro
Transforme todos os avisos em erros.

-Werror =
Transforme o aviso especificado em um erro. O especificador de um aviso é anexado;
por exemplo -Werror = switch transforma os avisos controlados por -Mudar em erros.
Esta opção assume uma forma negativa, para ser usada para negar -Erro para avisos específicos;
por exemplo -Wno-error = switch faz -Mudar os avisos não são erros, mesmo quando -Erro
está em vigor.

A mensagem de aviso para cada aviso controlável inclui a opção que controla
O aviso. Essa opção pode então ser usada com -Werror = e assim -Wno-error = Como descrito
acima de. (A impressão da opção na mensagem de aviso pode ser desativada usando o
-fno-diagnostics-show-option bandeira.)

Observe que especificar -Werror =Foo implica automaticamente -WFoo. Porém, -Wno-error =Foo
não implica nada.

-Wfatal-errors
Esta opção faz com que o compilador aborte a compilação no primeiro erro ocorrido
em vez de tentar continuar e imprimir outras mensagens de erro.

Você pode solicitar muitos avisos específicos com opções que começam com -W, Por exemplo
-Wimplicit para solicitar avisos sobre declarações implícitas. Cada um desses avisos específicos
options também tem um início de forma negativa -Não- para desligar os avisos; por exemplo,
-Wno-implícito. Este manual lista apenas um dos dois formulários, o que não for o padrão.
Para outras opções específicas do idioma, consulte também C + + Dialeto Opções e assim Objective-C
e assim Objective-C ++ Dialeto Opções.

Algumas opções, como -Parede e assim -Wextra, ative outras opções, como -Não usado, o qual
pode ativar outras opções, como -Wunused-value. O efeito combinado de positivo e
formas negativas é que as opções mais específicas têm prioridade sobre as menos específicas,
independentemente de sua posição na linha de comando. Para opções da mesma especificidade,
o último entra em vigor. As opções habilitadas ou desabilitadas por meio de pragmas têm efeito como se estivessem
apareceu no final da linha de comando.

Quando uma opção de aviso não reconhecida é solicitada (por exemplo, -Wunknown-warning), O GCC emite um
diagnóstico informando que a opção não é reconhecida. No entanto, se o -Não- formulário é usado,
o comportamento é ligeiramente diferente: nenhum diagnóstico é produzido para -Wno-unknown-warning
a menos que outros diagnósticos estejam sendo produzidos. Isso permite o uso de novos -Não- opções
com compiladores antigos, mas se algo der errado, o compilador avisa que um
opção está presente.

-Wpedantic
-pedante
Emitir todos os avisos exigidos por ISO C e ISO C ++ estritos; rejeitar todos os programas que
usar extensões proibidas e alguns outros programas que não seguem ISO C e ISO
C ++. Para ISO C, segue a versão do padrão ISO C especificado por qualquer -std
opção usada.

Os programas ISO C e ISO C ++ válidos devem ser compilados corretamente com ou sem esta opção
(embora alguns raros exijam -ansi ou um -std opção especificando a versão necessária de
ISO C). No entanto, sem esta opção, certas extensões GNU e C e tradicionais
Recursos C ++ também são suportados. Com esta opção, eles são rejeitados.

-Wpedantic não causa mensagens de aviso para o uso de palavras-chave alternativas cujo
nomes começam e terminam com __. Avisos pedantes também estão desabilitados na expressão
que segue "__extension__". No entanto, apenas os arquivos de cabeçalho do sistema devem usar esses
rotas de fuga; os programas de aplicação devem evitá-los.

Alguns usuários tentam usar -Wpedantic para verificar se os programas estão em conformidade com o ISO C estrito. Elas
logo descobrirá que não faz exatamente o que eles querem: encontra algumas práticas não ISO,
mas não todos --- apenas aqueles para os quais ISO C exige um diagnóstico, e alguns outros para
quais diagnósticos foram adicionados.

Um recurso para relatar qualquer falha em conformidade com o ISO C pode ser útil em alguns casos,
mas exigiria um trabalho adicional considerável e seria bastante diferente de
-Wpedantic. Não temos planos de oferecer suporte a esse recurso em um futuro próximo.

Onde o padrão especificado com -std representa um dialeto estendido GNU de C, como
gnu90 or gnu99, há um correspondente base padrão, a versão do ISO C em que
o dialeto estendido GNU é baseado. Avisos de -Wpedantic são dados onde estão
exigido pelo padrão básico. (Não faz sentido que tais avisos sejam dados
apenas para recursos que não estão no dialeto GNU C especificado, uma vez que, por definição, o GNU
dialetos de C incluem todos os recursos que o compilador suporta com a opção fornecida, e
não haveria nada para avisar.)

-erros-pedantes
Dê um erro sempre que o base padrão (Vejo -Wpedantic) requer um diagnóstico, em
alguns casos onde há um comportamento indefinido em tempo de compilação e em alguns outros casos
que não impedem a compilação de programas válidos de acordo com o padrão.
Isso não é equivalente a -Werror = pedante, uma vez que existem erros habilitados por este
opção e não habilitado por este último e vice-versa.

-Parede
Isso ativa todos os avisos sobre construções que alguns usuários consideram
questionáveis ​​e fáceis de evitar (ou modificar para evitar o aviso), mesmo em
conjunção com macros. Isso também permite alguns avisos específicos do idioma descritos
in C + + Dialeto Opções e assim Objective-C e assim Objective-C ++ Dialeto Opções.

-Parede ativa os seguintes sinalizadores de aviso:

-Endereço -Warray-bounds = 1 (somente com -O2) -Wc ++ 11-compat -Wc ++ 14-compat
-Wchar-subscripts -Wenum-compare (em C / ObjC; ativado por padrão em C ++)
-Wimplicit-int (C e Objective-C apenas) -Declaração de função explícita (C e
Objective-C apenas) -Comentário -Wformato -Wmain (apenas para C / ObjC e a menos que
-freestanding) -Wtalvez não inicializado - Suspensórios (apenas para C / ObjC) -Wnonnull
-Wopenmp-simd -Parênteses -Wpointer-sinal -Encomendar -Tipo de retrocesso -Ponto de sequência
-Wsign-compare (apenas em C ++) -Wstrict-aliasing -Wstrict-overflow = 1 -Mudar
-Wtrigraphs -W não inicializado -Wunknown-pragmas -Função não usada -Wunused-rótulo
-Wunused-value -Wunused-variable -Wvolatile-register-var

Observe que alguns sinalizadores de aviso não estão implícitos em -Parede. Alguns deles alertam sobre
construções que os usuários geralmente não consideram questionáveis, mas que
ocasionalmente você pode querer verificar; outros alertam sobre construções que são
necessário ou difícil de evitar em alguns casos, e não há uma maneira simples de modificar o
código para suprimir o aviso. Alguns deles são habilitados por -Wextra mas muitos deles
deve ser ativado individualmente.

-Wextra
Isso ativa alguns sinalizadores de aviso extras que não são ativados por -Parede. (Esta opção usada
ser chamado -W. O nome mais antigo ainda é compatível, mas o nome mais recente é mais
descritivo.)

-Wclobbered -Corpo-vazio -Wignored-qualifiers -Wmissing-field-inicializadores
- Tipo de parâmetro ausente (Apenas C) -Declaração de estilo antigo (Apenas C) -Woverride-init
-Wsign-compare -Limites de tipo -W não inicializado -Wunused-parâmetro (somente com -Não usado or
-Parede) -Wunused-mas-set-parameter (somente com -Não usado or -Parede)

A opção -Wextra também imprime mensagens de aviso para os seguintes casos:

* Um ponteiro é comparado ao zero inteiro com "<", "<=", ">" ou "> =".

* (Somente C ++) Um enumerador e um não enumerador aparecem em um condicional
expressão.

* (Somente C ++) Bases virtuais ambíguas.

* (Somente C ++) Assinatura de uma matriz que foi declarada como "registro".

* (Somente C ++) Obtendo o endereço de uma variável que foi declarada como "registro".

* (Somente C ++) Uma classe base não é inicializada no construtor de cópia de uma classe derivada.

-Wchar-subscripts
Avisa se um subscrito de array possui o tipo "char". Esta é uma causa comum de erro, pois
os programadores freqüentemente esquecem que esse tipo é assinado em algumas máquinas. Este aviso é
ativado por -Parede.

-Comentário
Avisar sempre que uma sequência de início de comentário /* aparece em um /* comentário, ou sempre que um
Barra invertida-nova linha aparece em um // Comente. Este aviso é habilitado por -Parede.

- Incompatibilidade de cobertura sem correspondência
Avisa se os perfis de feedback não correspondem ao usar o -fprofile-use opção. Se um
arquivo fonte é alterado entre a compilação com -fprofile-gen e com -fprofile-use,
os arquivos com o feedback do perfil podem não corresponder ao arquivo de origem e o GCC não pode
usar as informações de feedback do perfil. Por padrão, este aviso está habilitado e é
tratado como um erro. - Incompatibilidade de cobertura sem correspondência pode ser usado para desativar o aviso ou
-Wno-error = cobertura-incompatibilidade pode ser usado para desativar o erro. Desativando o erro
para este aviso pode resultar em código mal otimizado e é útil apenas no caso de
mudanças muito pequenas, como correções de bugs em uma base de código existente. Desativando completamente
o aviso não é recomendado.

-Wno-cpp
(C, Objective-C, C ++, Objective-C ++ e Fortran apenas)

Suprime as mensagens de aviso emitidas pelas diretivas "#warning".

-Dupla promoção (Apenas C, C ++, Objective-C e Objective-C ++)
Dê um aviso quando um valor do tipo "float" for implicitamente promovido a "double". CPUs
com uma unidade de ponto flutuante de "precisão única" de 32 bits implementa "flutuação" no hardware,
mas emular "double" no software. Em tal máquina, fazer cálculos usando
valores "duplos" são muito mais caros devido à sobrecarga necessária para o software
emulação.

É fácil fazer cálculos acidentalmente com "double" porque o ponto flutuante
literais são implicitamente do tipo "duplo". Por exemplo, em:

área de flutuação (raio de flutuação)
{
return 3.14159 * raio * raio;
}

o compilador executa todo o cálculo com "double" porque o ponto flutuante
literal é um "duplo".

-Wformato
-Wformat =n
Verifique as chamadas para "printf" e "scanf", etc., para se certificar de que os argumentos fornecidos
têm tipos apropriados para a string de formato especificada, e que as conversões
especificado na string de formato faz sentido. Isso inclui funções padrão e
outros especificados por atributos de formato, em "printf", "scanf", "strftime" e
"strfmon" (uma extensão X / Open, não no padrão C) famílias (ou outro alvo-
famílias específicas). Quais funções são verificadas sem que os atributos de formato tenham sido
especificado depende da versão padrão selecionada, e tais verificações de funções
sem o atributo especificado são desativados por -freestanding or -fno-builtin.

Os formatos são verificados em relação aos recursos de formato suportados pelo GNU libc versão 2.2.
Isso inclui todos os recursos ISO C90 e C99, bem como recursos do Single Unix
Especificação e algumas extensões BSD e GNU. Outras implementações de biblioteca não podem
suporte a todos esses recursos; O GCC não oferece suporte a avisos sobre recursos que vão além
limitações de uma biblioteca particular. No entanto, se -Wpedantic é usado com -Wformato,
avisos são dados sobre recursos de formato que não estão na versão padrão selecionada (mas não
para formatos "strfmon", uma vez que não estão em nenhuma versão do padrão C).

-Wformat = 1
-Wformato
Opção -Wformato é equivalente a -Wformat = 1e -Formato Wno é equivalente a
-Wformat = 0. Desde -Wformato também verifica se há argumentos de formato nulo para vários
funções, -Wformato também implica -Wnonnull. Alguns aspectos deste nível de formato
a verificação pode ser desabilitada pelas opções: -Wno-format-contém-nul,
-Wno-format-extra-argse -Wno-formato-zero-comprimento. -Wformato é habilitado por
-Parede.

-Wno-format-contém-nul
If -Wformato for especificado, não avisa sobre strings de formato que contêm bytes NUL.

-Wno-format-extra-args
If -Wformato for especificado, não avisa sobre o excesso de argumentos para um "printf" ou
função de formato "scanf". O padrão C especifica que tais argumentos são
ignorado.

Onde os argumentos não usados ​​ficam entre os argumentos usados ​​que são especificados com $
especificações de número de operando, normalmente avisos ainda são dados, uma vez que o
implementação não poderia saber que tipo passar para "va_arg" para pular o não utilizado
argumentos. No entanto, no caso de formatos "scanf", esta opção suprime o
avisando se os argumentos não utilizados são todos ponteiros, uma vez que o único Unix
A especificação diz que tais argumentos não utilizados são permitidos.

-Wno-formato-zero-comprimento
If -Wformato for especificado, não avisa sobre formatos de comprimento zero. O padrão C
especifica que formatos de comprimento zero são permitidos.

-Wformat = 2
permitir -Wformato além de verificações de formato adicionais. Atualmente equivalente a -Wformato
-Wformat-nonliteral -Wformato-segurança -Wformat-y2k.

-Wformat-nonliteral
If -Wformato é especificado, também avisa se a string de formato não é uma string literal
e, portanto, não pode ser verificado, a menos que a função de formato receba seus argumentos de formato como
uma "va_list".

-Wformato-segurança
If -Wformato é especificado, também avisa sobre o uso de funções de formato que representam
possíveis problemas de segurança. No momento, isso avisa sobre chamadas para "printf" e
funções "scanf" em que a string de formato não é uma string literal e não há
argumentos de formato, como em "printf (foo);". Isso pode ser uma brecha de segurança se o
string de formato veio de uma entrada não confiável e contém %n. (Este é atualmente um
subconjunto do que -Wformat-nonliteral avisa sobre, mas no futuro os avisos podem ser
Adicionado a -Wformato-segurança que não estão incluídos em -Wformat-nonliteral.)

-Wformat-assinatura
If -Wformato for especificado, também avisa se a string de formato requer um não assinado
argumento e o argumento é assinado e vice-versa.

NOTA: No Ubuntu 8.10 e versões posteriores, esta opção é habilitada por padrão para C,
C ++, ObjC, ObjC ++. Para desativar, use -Wno-formato-segurançaou desative todos os formatos
avisos com -Wformat = 0. Para tornar fatais os avisos de segurança de formato, especifique
-Werror = format-security.

-Wformat-y2k
If -Wformato é especificado, também avisa sobre os formatos "strftime" que podem produzir apenas um
ano de dois dígitos.

-Wnonnull
Avisar sobre a passagem de um ponteiro nulo para argumentos marcados como exigindo um valor não nulo
pelo atributo de função "não nula".

-Wnonnull está incluído no -Parede e assim -Wformato. Pode ser desativado com o -Wno-nonnull
opção.

-Winit-self (Apenas C, C ++, Objective-C e Objective-C ++)
Avisa sobre variáveis ​​não inicializadas que são inicializadas com elas mesmas. Observe isso
opção só pode ser usada com a -W não inicializado opção.

Por exemplo, o GCC avisa sobre o "i" não ser inicializado apenas no seguinte snippet
quando -Winit-self foi especificado:

int f ()
{
int = i;
retorno eu;
}

Este aviso é habilitado por -Parede em C ++.

-Wimplicit-int (C e Objective-C apenas)
Avisa quando uma declaração não especifica um tipo. Este aviso é habilitado por -Parede.

-Declaração de função explícita (C e Objective-C apenas)
Dê um aviso sempre que uma função for usada antes de ser declarada. No modo C99
(-std = c99 or -std = gnu99), este aviso é habilitado por padrão e é transformado em um
erro de -erros-pedantes. Este aviso também é habilitado por -Parede.

-Wimplicit (C e Objective-C apenas)
Igual a -Wimplicit-int e assim -Declaração de função explícita. Este aviso está habilitado
by -Parede.

-Wignored-qualifiers (Somente C e C ++)
Avisa se o tipo de retorno de uma função possui um qualificador de tipo como "const". Para ISO C
tal qualificador de tipo não tem efeito, uma vez que o valor retornado por uma função não é um
lvalue. Para C ++, o aviso é emitido apenas para tipos escalares ou "void". ISO C
proíbe tipos de retorno "nulos" qualificados em definições de função, portanto, tais tipos de retorno
sempre recebe um aviso, mesmo sem essa opção.

Este aviso também é habilitado por -Wextra.

-Wmain
Avisa se o tipo de "principal" é suspeito. "principal" deve ser uma função externa
ligação, retornando int, recebendo nenhum argumento, dois ou três argumentos de
tipos apropriados. Este aviso é habilitado por padrão em C ++ e é habilitado por qualquer
-Parede or -Wpedantic.

- Suspensórios
Avisa se um inicializador de agregação ou união não está totalmente entre colchetes. Na sequência
exemplo, o inicializador de "a" não está totalmente entre colchetes, mas o de "b" está totalmente
entre colchetes. Este aviso é habilitado por -Parede em C.

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

Este aviso é habilitado por -Parede.

-Wmissing-include-dirs (Apenas C, C ++, Objective-C e Objective-C ++)
Avisa se um diretório de inclusão fornecido pelo usuário não existe.

-Parênteses
Avisa se os parênteses são omitidos em certos contextos, como quando há um
atribuição em um contexto onde um valor verdadeiro é esperado ou quando os operadores estão aninhados
cuja precedência as pessoas costumam ficar confusas.

Também avisa se uma comparação como "x <= y <= z" aparece; isso é equivalente a "(x <= y? 1:
0) <= z ", que é uma interpretação diferente da matemática comum
notação.

Também avise sobre construções onde pode haver confusão para qual declaração "if" um
O ramo "else" pertence. Aqui está um exemplo de tal caso:

{
se um)
se (b)
fo ();
outro
Barra ();
}

Em C / C ++, cada branch "else" pertence à instrução "if" mais interna possível, que
neste exemplo é "if (b)". Muitas vezes não é o que o programador esperava, pois
ilustrado no exemplo acima por indentação que o programador escolheu. Quando há
potencial para esta confusão, o GCC emite um aviso quando este sinalizador é especificado.
Para eliminar o aviso, adicione colchetes explícitos ao redor da instrução "if" mais interna para
não há como o "outro" pertencer ao "se" delimitador. O código resultante parece
como isso:

{
se um)
{
se (b)
fo ();
outro
Barra ();
}
}

Também avisa sobre usos perigosos da extensão GNU para "?:" Com operando do meio omitido.
Quando a condição no operador "?": É uma expressão booleana, o valor omitido é
sempre 1. Freqüentemente, os programadores esperam que seja um valor calculado dentro do condicional
expressão em vez disso.

Este aviso é habilitado por -Parede.

-Ponto de sequência
Avisar sobre código que pode ter semântica indefinida devido a violações de sequência
regras de ponto nos padrões C e C ++.

Os padrões C e C ++ definem a ordem em que as expressões em um programa C / C ++ são
avaliado em termos de seqüência pontos, que representam uma ordenação parcial entre os
execução de partes do programa: aquelas executadas antes do ponto de sequência, e aquelas
executado depois disso. Estes ocorrem após a avaliação de uma expressão completa (aquela que
não faz parte de uma expressão maior), após a avaliação do primeiro operando de um
"&&", "||", "?:" ou "," operador (vírgula), antes de uma função ser chamada (mas após o
avaliação de seus argumentos e a expressão que denota a função chamada), e em
certos outros lugares. Diferente do expresso pelas regras de ponto de sequência, a ordem
de avaliação de subexpressões de uma expressão não é especificado. Todas essas regras
descrever apenas um pedido parcial em vez de um pedido total, uma vez que, por exemplo, se dois
funções são chamadas dentro de uma expressão sem nenhum ponto de sequência entre elas, o
a ordem em que as funções são chamadas não é especificada. No entanto, os padrões
comitê decidiu que as chamadas de função não se sobrepõem.

Não é especificado quando entre pontos de sequência modificações nos valores de
objetos entram em vigor. Programas cujo comportamento depende disso têm comportamento indefinido;
os padrões C e C ++ especificam que "Entre o ponto de sequência anterior e seguinte
objeto deve ter seu valor armazenado modificado no máximo uma vez pela avaliação de um
expressão. Além disso, o valor anterior deve ser lido apenas para determinar o valor para
ser armazenado. ". Se um programa quebrar essas regras, os resultados em qualquer
implementação são totalmente imprevisíveis.

Exemplos de código com comportamento indefinido são "a = a ++;", "a [n] = b [n ++]" e "a [i ++] =
i; ". Alguns casos mais complicados não são diagnosticados por esta opção, e pode dar um
resultado falso positivo ocasional, mas em geral foi considerado bastante eficaz em
detectar esse tipo de problema em programas.

O padrão é redigido de forma confusa, portanto, há algum debate sobre o
significado das regras de ponto de sequência em casos sutis. Links para discussões do
problema, incluindo as definições formais propostas, pode ser encontrado na página de leituras do GCC,
nohttp://gcc.gnu.org/readings.html>.

Este aviso é habilitado por -Parede para C e C ++.

-Wno-return-local-addr
Não avise sobre o retorno de um ponteiro (ou em C ++, uma referência) para uma variável que vai
fora do escopo após o retorno da função.

-Tipo de retrocesso
Avisa sempre que uma função é definida com um tipo de retorno cujo padrão é "int". Também
avisar sobre qualquer instrução de "retorno" sem valor de retorno em uma função cujo tipo de retorno
não é "vazio" (cair do final do corpo da função é considerado retorno
sem um valor), e sobre uma declaração de "retorno" com uma expressão em uma função
cujo tipo de retorno é "vazio".

Para C ++, uma função sem tipo de retorno sempre produz uma mensagem de diagnóstico, mesmo
quando -Wno-retorno-tipo é especificado. As únicas exceções são "principal" e funções
definido nos cabeçalhos do sistema.

Este aviso é habilitado por -Parede.

-Wshift-contagem-negativa
Avisa se a contagem de turnos é negativa. Este aviso é habilitado por padrão.

-Wshift-count-overflow
Avisa se contagem de deslocamento> = largura do tipo. Este aviso é habilitado por padrão.

-Mudar
Avisa sempre que uma instrução "switch" tem um índice do tipo enumerado e não tem um "caso"
para um ou mais dos códigos nomeados dessa enumeração. (A presença de um "padrão"
rótulo evita esse aviso.) rótulos de "caso" fora do intervalo de enumeração também
provocar avisos quando esta opção for usada (mesmo se houver um rótulo "padrão"). Esse
aviso é habilitado por -Parede.

-Wswitch-default
Avisa sempre que uma instrução "switch" não tem um caso "padrão".

-Wswitch-enum
Avisa sempre que uma instrução "switch" tem um índice do tipo enumerado e não tem um "caso"
para um ou mais dos códigos nomeados dessa enumeração. rótulos de "caso" fora do
intervalo de enumeração também provoca avisos quando esta opção é usada. A única diferença
entre -Mudar e esta opção é que esta opção dá um aviso sobre um omitido
código de enumeração, mesmo se houver um rótulo "padrão".

-Wswitch-bool
Avisa sempre que uma instrução "switch" tem um índice do tipo booleano. É possível
suprimir este aviso convertendo a expressão de controle para um tipo diferente
"bool". Por exemplo:

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

Este aviso é habilitado por padrão para programas C e C ++.

-Wsync-nand (Somente C e C ++)
Avisa quando as funções integradas "__sync_fetch_and_nand" e "__sync_nand_and_fetch" são
usado. Essas funções mudaram a semântica no GCC 4.4.

-Wtrigraphs
Avisa se forem encontrados trígrafos que possam mudar o significado do programa
(trigraphs nos comentários não são avisados). Este aviso é habilitado por -Parede.

-Wunused-mas-set-parameter
Avisa sempre que um parâmetro de função é atribuído, mas não utilizado (exceto
sua declaração).

Para suprimir esse aviso, use o atributo "não utilizado".

Este aviso também é habilitado por -Não usado Juntamente com -Wextra.

-Wunused-but-set-variable
Avisa sempre que uma variável local é atribuída a, mas de outra forma não utilizada (além de seu
declaração). Este aviso é habilitado por -Parede.

Para suprimir esse aviso, use o atributo "não utilizado".

Este aviso também é habilitado por -Não usado, que é habilitado por -Parede.

-Função não usada
Avisar sempre que uma função estática for declarada, mas não definida ou uma função estática não inline
função não é usada. Este aviso é habilitado por -Parede.

-Wunused-rótulo
Avisa sempre que um rótulo é declarado, mas não usado. Este aviso é habilitado por -Parede.

Para suprimir esse aviso, use o atributo "não utilizado".

-Wunused-local-typedefs (C, Objective-C, C ++ e Objective-C ++ apenas)
Avisa quando um typedef definido localmente em uma função não é usado. Este aviso é
ativado por -Parede.

-Wunused-parâmetro
Avisa sempre que um parâmetro de função não é usado, além de sua declaração.

Para suprimir esse aviso, use o atributo "não utilizado".

-Wno-unused-result
Não avise se um chamador de uma função marcada com o atributo "warn_unused_result" faz
não use seu valor de retorno. O padrão é -Resultado não usado.

-Wunused-variable
Avisar sempre que uma variável local ou variável estática não constante não for usada, exceto
sua declaração. Este aviso é habilitado por -Parede.

Para suprimir esse aviso, use o atributo "não utilizado".

-Wunused-value
Avisa sempre que uma instrução calcula um resultado que não é explicitamente usado. Suprimir
este aviso transformou a expressão não utilizada em "vazio". Isso inclui uma expressão
declaração ou o lado esquerdo de uma expressão de vírgula que não contém efeitos colaterais.
Por exemplo, uma expressão como "x [i, j]" causa um aviso, enquanto "x [(void) i, j]"
não.

Este aviso é habilitado por -Parede.

-Não usado
Todos acima -Não usado opções combinadas.

Para receber um aviso sobre um parâmetro de função não utilizado, você deve especificar
-Wextra -Não usado (Observe que -Parede implica -Não usado), ou especificar separadamente
-Wunused-parâmetro.

-W não inicializado
Avisa se uma variável automática é usada sem primeiro ser inicializada ou se uma variável
pode ser superado por uma chamada "setjmp". Em C ++, avisa se uma referência não estática ou não
O membro "const" estático aparece em uma classe sem construtores.

Se você quiser avisar sobre o código que usa o valor não inicializado da variável em
seu próprio inicializador, use o -Winit-self opção.

Esses avisos ocorrem para elementos individuais não inicializados ou destruídos da estrutura,
variáveis ​​de união ou matriz, bem como para variáveis ​​não inicializadas ou superadas
como um todo. Eles não ocorrem para variáveis ​​ou elementos declarados "voláteis". Porque
esses avisos dependem da otimização, das variáveis ​​ou elementos exatos para os quais
Esses avisos dependem das opções de otimização precisas e da versão do GCC usado.

Observe que pode não haver nenhum aviso sobre uma variável que é usada apenas para calcular um
valor que nunca é usado, porque tais cálculos podem ser excluídos pelo fluxo de dados
análise antes de os avisos serem impressos.

-Wtalvez não inicializado
Para uma variável automática, se houver um caminho da entrada da função para um uso de
a variável que é inicializada, mas existem alguns outros caminhos para os quais o
variável não é inicializada, o compilador emite um aviso se não puder provar o
caminhos não inicializados não são executados em tempo de execução. Esses avisos são opcionais
porque o GCC não é inteligente o suficiente para ver todos os motivos pelos quais o código pode estar correto
apesar de parecer haver um erro. Aqui está um exemplo de como isso pode acontecer:

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

Se o valor de "y" é sempre 1, 2 ou 3, então "x" é sempre inicializado, mas GCC
não sabe disso. Para suprimir o aviso, você precisa fornecer um caso padrão com
afirmar(0) ou código semelhante.

Esta opção também avisa quando uma variável automática não volátil pode ser alterada por um
ligue para "longjmp". Esses avisos também são possíveis apenas na otimização
compilação.

O compilador vê apenas as chamadas para "setjmp". Ele não pode saber onde "longjmp" estará
chamado; na verdade, um manipulador de sinal poderia chamá-lo em qualquer ponto do código. Como um
resultado, você pode receber um aviso mesmo quando não há nenhum problema porque "longjmp"
não pode, de fato, ser chamado no local que causaria um problema.

Alguns avisos falsos podem ser evitados se você declarar todas as funções que usa que
nunca retorne como "noreturn".

Este aviso é habilitado por -Parede or -Wextra.

-Wunknown-pragmas
Avisa quando uma diretiva "#pragma" é encontrada e não é compreendida pelo GCC. Se este
opção de linha de comando é usada, avisos são até mesmo emitidos para pragmas desconhecidos no sistema
arquivos de cabeçalho. Este não é o caso se os avisos só forem ativados pelo -Parede
opção de linha de comando.

-Wno-pragmas
Não avise sobre o uso indevido de pragmas, como parâmetros incorretos, sintaxe inválida ou
conflitos entre pragmas. Veja também -Wunknown-pragmas.

-Wstrict-aliasing
Esta opção só está ativa quando -fstrict-aliasing está ativo. Ele avisa sobre o código que
pode quebrar as regras estritas de aliasing que o compilador está usando para otimização.
O aviso não captura todos os casos, mas tenta capturar os mais comuns
armadilhas. Está incluído em -Parede. É equivalente a -Wstrict-aliasing = 3

-Wstrict-aliasing = n
Esta opção só está ativa quando -fstrict-aliasing está ativo. Ele avisa sobre o código que
pode quebrar as regras estritas de aliasing que o compilador está usando para otimização.
Níveis mais altos correspondem a maior precisão (menos falsos positivos). Níveis mais altos
também correspondem a mais esforço, semelhante à maneira -O obras. -Wstrict-aliasing is
equivalente a -Wstrict-aliasing = 3.

Nível 1: mais agressivo, rápido, menos preciso. Possivelmente útil quando níveis mais altos
não avisar mas -fstrict-aliasing ainda quebra o código, pois tem muito poucos falsos
negativos. No entanto, ele tem muitos falsos positivos. Avisa para todas as conversões de ponteiro
entre tipos possivelmente incompatíveis, mesmo que nunca tenham sido desreferenciados. Corre na frente
fim apenas.

Nível 2: agressivo, rápido, não muito preciso. Pode ainda ter muitos falsos positivos (não
embora tantos quanto o nível 1), e poucos falsos negativos (mas possivelmente mais do que o nível 1).
Ao contrário do nível 1, ele só avisa quando um endereço é obtido. Avisa sobre tipos incompletos.
É executado apenas no front-end.

Nível 3 (padrão para -Wstrict-aliasing): Deve ter muito poucos falsos positivos e poucos
falsos negativos. Um pouco mais lento do que os níveis 1 ou 2 quando a otimização está ativada.
Cuida do padrão comum de trocadilho + desreferência no front end:
"* (int *) & some_float". Se a otimização estiver habilitada, ela também será executada no back end, onde
ele lida com vários casos de instrução usando informações de pontos sensíveis ao fluxo.
Avisa apenas quando o ponteiro convertido é desreferenciado. Não avisa sobre incompleto
tipos.

-Wstrict-overflow
-Wstrict-overflow =n
Esta opção só está ativa quando -fstrict-overflow está ativo. Avisa sobre casos
onde o compilador otimiza com base na suposição de que o estouro assinado não
ocorrer. Observe que ele não avisa sobre todos os casos em que o código pode estourar: ele
apenas avisa sobre os casos em que o compilador implementa alguma otimização. Portanto, este
o aviso depende do nível de otimização.

Uma otimização que assume que o estouro assinado não ocorre é perfeitamente segura se
os valores das variáveis ​​envolvidas são tais que o estouro nunca, de fato,
ocorrer. Portanto, este aviso pode facilmente dar um falso positivo: um aviso sobre o código
isso não é realmente um problema. Para ajudar a focar em questões importantes, vários avisos
os níveis são definidos. Nenhum aviso é emitido para o uso de estouro assinado indefinido
ao estimar quantas iterações um loop requer, em particular ao determinar
se um loop será executado.

-Wstrict-overflow = 1
Avise sobre casos questionáveis ​​e fáceis de evitar. Por exemplo, com
-fstrict-overflow, o compilador simplifica "x + 1> x" para 1. Este nível de
-Wstrict-overflow é habilitado por -Parede; níveis mais altos não são, e devem ser
solicitado explicitamente.

-Wstrict-overflow = 2
Também avise sobre outros casos em que uma comparação é simplificada para uma constante. Para
exemplo: "abs (x)> = 0". Isso só pode ser simplificado quando -fstrict-overflow é em
efeito, porque "abs (INT_MIN)" transborda para "INT_MIN", que é menor que zero.
-Wstrict-overflow (sem nível) é o mesmo que -Wstrict-overflow = 2.

-Wstrict-overflow = 3
Avise também sobre outros casos em que a comparação é simplificada. Por exemplo: "x + 1
> 1 "é simplificado para" x> 0 ".

-Wstrict-overflow = 4
Alertar também sobre outras simplificações não contempladas nos casos acima. Para
exemplo: "(x * 10) / 5" é simplificado para "x * 2".

-Wstrict-overflow = 5
Também avisa sobre os casos em que o compilador reduz a magnitude de uma constante
envolvidos em uma comparação. Por exemplo: "x + 2> y" é simplificado para "x + 1> = y".
Isso é relatado apenas no nível de aviso mais alto porque esta simplificação
se aplica a muitas comparações, portanto, este nível de aviso fornece um número muito grande de
falso-positivo.

-Wsuggest-attribute =[puro|const|Noreturn|formato]
Avise sobre os casos em que adicionar um atributo pode ser benéfico. Os atributos atualmente
suportados estão listados abaixo.

-Wsuggest-attribute = pure
-Wsuggest-attribute = const
-Wsuggest-attribute = noreturn
Avisar sobre funções que podem ser candidatas aos atributos "puro", "const" ou
"noreturn". O compilador só avisa para funções visíveis em outra compilação
unidades ou (no caso de "puro" e "const") se não puder provar que a função
retorna normalmente. Uma função retorna normalmente se não contiver um infinito
loop ou retorno anormal ao lançar, chamar "abort" ou trapping. Esta análise
requer opção -fipa-puro-const, que é habilitado por padrão em -O e mais alto.
Níveis de otimização mais altos melhoram a precisão da análise.

-Wsuggest-attribute = format
- Atributo de formato de saudação
Avise sobre ponteiros de função que podem ser candidatos a atributos de "formato".
Observe que esses são apenas candidatos possíveis, não absolutos. GCC adivinha que
ponteiros de função com atributos de "formato" que são usados ​​na atribuição,
inicialização, passagem de parâmetro ou instruções de retorno devem ter um correspondente
Atributo "format" no tipo resultante. Ou seja, o lado esquerdo do
atribuição ou inicialização, o tipo da variável de parâmetro ou o retorno
o tipo da função contida, respectivamente, também deve ter um atributo "formato"
para evitar o aviso.

O GCC também avisa sobre as definições de função que podem ser candidatas a "formato"
atributos. Novamente, esses são apenas candidatos possíveis. GCC adivinha que "formato"
atributos podem ser apropriados para qualquer função que chame uma função como
"vprintf" ou "vscanf", mas pode nem sempre ser o caso, e algumas funções
para os quais os atributos de "formato" são apropriados podem não ser detectados.

-Wsuggest-final-types
Avise sobre tipos com métodos virtuais onde a qualidade do código seria melhorada se o tipo
foram declarados com o especificador "final" do C ++ 11, ou, se possível, declarados em um
namespace anônimo. Isso permite que o GCC desvirtualize de forma mais agressiva o polimórfico
chamadas. Este aviso é mais eficaz com otimização de tempo de link, onde o
as informações sobre o gráfico de hierarquia de classes são mais completas.

-Wsuggest-final-methods
Avise sobre métodos virtuais onde a qualidade do código seria melhorada se o método fosse
declarado com o especificador "final" do C ++ 11, ou, se possível, seu tipo foi declarado em
um namespace anônimo ou com o especificador "final". Este aviso é mais eficaz
com otimização de tempo de link, onde as informações sobre o gráfico de hierarquia de classes são
mais completo. Recomenda-se primeiro considerar sugestões de
-Wsuggest-final-types e depois reconstruir com novas anotações.

-Wsuggest-override
Avisa sobre a substituição de funções virtuais que não estão marcadas com a palavra-chave override.

- Limites da guerra
-Warray-bounds =n
Esta opção só está ativa quando -ftree-vrp está ativo (padrão para -O2 e acima). Isto
avisa sobre subscritos para matrizes que estão sempre fora dos limites. Este aviso é
ativado por -Parede.

-Warray-bounds = 1
Este é o nível de aviso de - Limites da guerra e é habilitado por -Parede; níveis mais altos
não são e devem ser solicitados explicitamente.

-Warray-bounds = 2
Este nível de aviso também avisa sobre o acesso fora dos limites para matrizes no final de
uma estrutura e para matrizes acessadas por meio de ponteiros. Este nível de aviso pode dar um
maior número de falsos positivos e é desativado por padrão.

-Wbool-compare
Avisa sobre a expressão booleana em comparação com um valor inteiro diferente de
"verdadeiro falso". Por exemplo, a seguinte comparação é sempre falsa:

int n = 5;
...
if ((n> 1) == 2) {...}

Este aviso é habilitado por -Parede.

-Wno-descartados-qualificadores (C e Objective-C apenas)
Não avise se os qualificadores de tipo em ponteiros estão sendo descartados. Normalmente, o
o compilador avisa se uma variável "const char *" é passada para uma função que recebe um "char
* "parâmetro. Esta opção pode ser usada para suprimir tal aviso.

-Wno-discarded-array-qualifiers (C e Objective-C apenas)
Não avise se os qualificadores de tipo em matrizes que são alvos de ponteiro estão sendo
descartado. Normalmente, o compilador avisa se uma variável "const int (*) []" é passada para
uma função que leva um parâmetro "int (*) []". Esta opção pode ser usada para suprimir
tal aviso.

-Wno-incompatível-tipos de ponteiro (C e Objective-C apenas)
Não avise quando houver uma conversão entre ponteiros que possuem tipos incompatíveis.
Este aviso é para casos não cobertos por -Wno-sinal de ponteiro, que alerta para ponteiro
passagem de argumento ou atribuição com sinalização diferente.

-Wno-int-conversion (C e Objective-C apenas)
Não avise sobre conversões de inteiro para ponteiro incompatíveis e de ponteiro para inteiro.
Este aviso é sobre conversões implícitas; para conversões explícitas, os avisos
-Wno-int-to-pointer-cast e assim -Wno-pointer-to-int-cast pode ser usado.

-Wno-div-por-zero
Não avise sobre a divisão inteira em tempo de compilação por zero. Divisão de ponto flutuante por
zero não é avisado, pois pode ser uma forma legítima de obter infinitos e
NaNs.

-Wsystem-headers
Imprimir mensagens de aviso para construções encontradas em arquivos de cabeçalho do sistema. Avisos de
cabeçalhos do sistema são normalmente suprimidos, na suposição de que geralmente não
indicam problemas reais e apenas tornam a saída do compilador mais difícil de ler. Usando
esta opção de linha de comando diz ao GCC para emitir avisos dos cabeçalhos do sistema como se eles
ocorreu no código do usuário. No entanto, observe que usar -Parede em conjunto com esta opção
parece não avisar sobre pragmas desconhecidos nos cabeçalhos do sistema --- para isso, -Wunknown-pragmas
também deve ser usado.

-Wtrampolins
Avisar sobre trampolins gerados para ponteiros para funções aninhadas. Um trampolim é um
pequeno pedaço de dados ou código que é criado em tempo de execução na pilha quando o endereço
de uma função aninhada é obtido e é usado para chamar a função aninhada indiretamente.
Para alguns alvos, ele é composto apenas de dados e, portanto, não requer nenhum tratamento especial.
Mas, para a maioria dos alvos, é feito de código e, portanto, requer que a pilha seja feita
executável para que o programa funcione corretamente.

-Wfloat-igual
Avisa se valores de ponto flutuante são usados ​​em comparações de igualdade.

A ideia por trás disso é que às vezes é conveniente (para o programador)
considere os valores de ponto flutuante como aproximações de números reais infinitamente precisos.
Se você está fazendo isso, você precisa calcular (analisando o código, ou em algum
outra forma) o erro máximo ou provável máximo que o cálculo introduz, e
permitir isso ao realizar comparações (e ao produzir saída, mas isso é um
problema diferente). Em particular, em vez de testar a igualdade, você deve verificar
para ver se os dois valores têm intervalos que se sobrepõem; e isso é feito com o
operadores relacionais, portanto, as comparações de igualdade provavelmente estão erradas.

-Wtradicional (C e Objective-C apenas)
Avise sobre certas construções que se comportam de maneira diferente no tradicional e no ISO C. Também
avisar sobre construções ISO C que não têm equivalente C tradicional e / ou problemático
construções que devem ser evitadas.

* Parâmetros de macro que aparecem dentro de literais de string no corpo da macro. No
substituição de macro C tradicional ocorre dentro de literais de string, mas em ISO C
isso não.

* No C tradicional, algumas diretivas de pré-processador não existiam. Tradicional
pré-processadores apenas consideram uma linha como uma diretiva se o # apareceu na coluna
1 na linha. Portanto -Wtradicional avisa sobre as diretivas que o C tradicional
entende, mas ignora porque o # não aparece como o primeiro personagem em
a linha. Também sugere que você oculte diretivas como "#pragma" não compreendidas por
C tradicional recuando-os. Algumas implementações tradicionais não
reconhecer "#elif", então esta opção sugere evitá-lo completamente.

* Uma macro semelhante a uma função que aparece sem argumentos.

* O operador mais unário.

* O U sufixo constante inteiro, ou o F or L sufixos constantes de ponto flutuante.
(C tradicional suporta o L sufixo em constantes inteiras.) Observe, estes
sufixos aparecem em macros definidas nos cabeçalhos de sistema da maioria dos sistemas modernos,
por exemplo, o _MIN/_MAX macros em " ". O uso dessas macros no código do usuário pode
normalmente levam a avisos falsos, no entanto, o pré-processador integrado do GCC tem
contexto suficiente para evitar avisos nesses casos.

* Uma função declarada externa em um bloco e então usada após o final do
bloquear.

* Uma instrução "switch" possui um operando do tipo "long".

* Uma declaração de função não "estática" segue uma declaração "estática". Esta construção não é
aceito por alguns compiladores C tradicionais.

* O tipo ISO de uma constante inteira tem uma largura ou sinal diferente de seu
tipo tradicional. Este aviso só é emitido se a base da constante for dez.
Ou seja, valores hexadecimais ou octais, que normalmente representam padrões de bits, não são
alertado sobre.

* Foi detectado o uso de concatenação de string ISO.

* Inicialização de agregados automáticos.

* O identificador está em conflito com os rótulos. C tradicional carece de um namespace separado para
etiquetas.

* Inicialização de sindicatos. Se o inicializador for zero, o aviso será omitido.
Isso é feito supondo que o inicializador zero no código do usuário apareça
condicionado, por exemplo, "__STDC__" para evitar a falta de avisos do inicializador e depende de
inicialização padrão para zero no caso C tradicional.

* Conversões por protótipos entre valores de ponto flutuante / fixo e vice-versa. o
ausência desses protótipos ao compilar com C tradicional causa sérios
problemas. Este é um subconjunto dos avisos de conversão possíveis; para o conjunto completo
usar -Wtraditional-conversion.

* Uso de definições de função de estilo ISO C. Este aviso é intencionalmente não emitido
para declarações de protótipo ou funções variáveis ​​porque esses recursos ISO C
aparecem em seu código ao usar macros de compatibilidade C tradicionais da libiberty,
"PARAMS" e "VPARAMS". Este aviso também é ignorado para funções aninhadas
porque esse recurso já é uma extensão do GCC e, portanto, não é relevante para
compatibilidade C tradicional.

-Wtraditional-conversion (C e Objective-C apenas)
Avisa se um protótipo causa uma conversão de tipo diferente do que aconteceria
ao mesmo argumento na ausência de um protótipo. Isso inclui conversões de
ponto fixo para flutuante e vice-versa, e conversões alterando a largura ou
assinatura de um argumento de ponto fixo, exceto quando o mesmo que a promoção padrão.

-Wdeclaration-after-statement (C e Objective-C apenas)
Avisa quando uma declaração é encontrada após uma declaração em um bloco. Esta construção, conhecida
do C ++, foi introduzido com ISO C99 e é permitido por padrão no GCC. Não é
compatível com ISO C90.

-Wundef
Avisa se um identificador indefinido é avaliado em uma diretiva "#if".

-Wno-endif-labels
Não avise sempre que "#else" ou "#endif" forem seguidos por texto.

-Sombra
Avisa sempre que uma variável local ou declaração de tipo obscurece outra variável,
parâmetro, tipo, membro de classe (em C ++) ou variável de instância (em Objective-C) ou
sempre que uma função embutida é obscurecida. Observe que em C ++, o compilador avisa se um
a variável local sombreia um typedef explícito, mas não se sombreia um struct / class / enum.

-Wno-sombra-ivar (Apenas Objective-C)
Não avise sempre que uma variável local sombreia uma variável de instância em um Objective-C
método.

-Maior que =len
Avisar sempre que um objeto maior que len bytes é definido.

-Wframe-maior-que =len
Avisa se o tamanho de um quadro de função é maior que len bytes. O cálculo feito
para determinar o tamanho do quadro da pilha é aproximado e não conservador. O real
os requisitos podem ser um pouco maiores do que len mesmo se você não receber um aviso. No
além disso, qualquer espaço alocado por meio de "alloca", matrizes de comprimento variável ou
construções não são incluídas pelo compilador ao determinar se deve ou não emitir um
Atenção.

-Wno-free-nonheap-object
Não avise ao tentar liberar um objeto que não foi alocado no heap.

-Wstack-usage =len
Avisa se o uso da pilha de uma função pode ser maior do que len bytes. O cálculo
feito para determinar o uso da pilha é conservador. Qualquer espaço alocado via "alloca",
matrizes de comprimento variável ou construções relacionadas são incluídas pelo compilador quando
determinar se deve ou não emitir um aviso.

A mensagem está de acordo com a saída de -fstack-usage.

* Se o uso da pilha for totalmente estático, mas exceder a quantidade especificada, é:

aviso: o uso da pilha é 1120 bytes

* Se o uso da pilha for (parcialmente) dinâmico, mas limitado, é:

aviso: o uso da pilha pode ser 1648 bytes

* Se o uso da pilha for (parcialmente) dinâmico e não limitado, é:

aviso: o uso da pilha pode ser ilimitado

-Wunsafe-loop-otimizações
Avisa se o loop não pode ser otimizado porque o compilador não pode assumir nada em
os limites dos índices do loop. Com -funsafe-loop-otimizations avisar se o compilador
faz tais suposições.

- Formato Wno-pedante-ms (Apenas alvos MinGW)
Quando usado em combinação com -Wformato e assim -pedante sem extensões GNU, este
opção desativa os avisos sobre especificadores de largura de formato "printf" / "scanf" não ISO
"I32", "I64" e "I" usados ​​em destinos Windows, que dependem do tempo de execução do MS.

-Wpointer-arith
Avise sobre qualquer coisa que dependa do "tamanho" de um tipo de função ou de "vazio". GNU C
atribui a esses tipos um tamanho de 1, por conveniência em cálculos com "void *"
ponteiros e ponteiros para funções. Em C ++, avisa também quando uma operação aritmética
envolve "NULL". Este aviso também é habilitado por -Wpedantic.

-Limites de tipo
Avisa se uma comparação é sempre verdadeira ou sempre falsa devido ao intervalo limitado do
tipo de dados, mas não avisa sobre expressões constantes. Por exemplo, avisar se um não assinado
a variável é comparada com zero com "<" ou "> =". Este aviso também é habilitado por
-Wextra.

-Wbad-função-cast (C e Objective-C apenas)
Avisa quando uma chamada de função é convertida em um tipo não correspondente. Por exemplo, avisa se uma chamada
para uma função que retorna um tipo inteiro é convertido em um tipo de ponteiro.

-Wc90-c99-compat (C e Objective-C apenas)
Avisar sobre recursos não presentes no ISO C90, mas presentes no ISO C99. Por exemplo,
avisar sobre o uso de matrizes de comprimento variável, tipo "long long", tipo "bool", composto
literais, inicializadores designados e assim por diante. Esta opção é independente do
modo de padrões. Os avisos são desativados na expressão que segue "__extension__".

-Wc99-c11-compat (C e Objective-C apenas)
Avisar sobre recursos não presentes no ISO C99, mas presentes no ISO C11. Por exemplo,
avisar sobre o uso de estruturas anônimas e uniões, qualificador de tipo "_Atomic",
Especificador de classe de armazenamento "_Thread_local", especificador "_Alignas", operador "Alignof",
Palavra-chave "_Generic" e assim por diante. Esta opção é independente do modo padrão.
Os avisos são desativados na expressão que segue "__extension__".

-Wc ++ - compat (C e Objective-C apenas)
Avisar sobre construções ISO C que estão fora do subconjunto comum de ISO C e ISO
C ++, por exemplo, solicitação de conversão implícita de "void *" para um ponteiro para não "nulo"
tipo.

-Wc ++ 11-compat (Apenas C ++ e Objective-C ++)
Avisar sobre construções C ++ cujo significado difere entre ISO C ++ 1998 e ISO C ++ 2011,
por exemplo, identificadores em ISO C ++ 1998 que são palavras-chave em ISO C ++ 2011. Este aviso
liga -Aviso e é habilitado por -Parede.

-Wc ++ 14-compat (Apenas C ++ e Objective-C ++)
Avise sobre construções C ++ cujo significado difere entre ISO C ++ 2011 e ISO C ++ 2014.
Este aviso é habilitado por -Parede.

-qualidade wcast
Avisa sempre que um ponteiro é lançado para remover um qualificador de tipo do tipo de destino.
Por exemplo, avisa se um "const char *" é convertido em um "char *" comum.

Também avisa ao fazer uma conversão que introduz um qualificador de tipo de maneira insegura. Para
exemplo, lançar "char **" para "const char **" não é seguro, como neste exemplo:

/ * p é o valor char **. * /
const char ** q = (const char **) p;
/ * Atribuição de string somente leitura para const char * está OK. * /
* q = "string";
/ * Agora o ponteiro char ** aponta para a memória somente leitura. * /
** p = 'b';

-Wcast-align
Avisa sempre que um ponteiro é lançado de forma que o alinhamento necessário do alvo seja
aumentou. Por exemplo, avisa se um "char *" é convertido para um "int *" em máquinas onde
inteiros só podem ser acessados ​​em limites de dois ou quatro bytes.

-Wwrite-strings
Ao compilar C, dê às constantes de string o tipo "const char [comprimento]" de modo que copiar
o endereço de um em um ponteiro não "const" "char *" produz um aviso. Esses
avisos ajudam a encontrar em tempo de compilação o código que pode tentar escrever em uma string
constante, mas apenas se você tiver sido muito cuidadoso ao usar "const" nas declarações
e protótipos. Caso contrário, é apenas um incômodo. É por isso que não fizemos -Parede
solicitar esses avisos.

Ao compilar C ++, avise sobre a conversão obsoleta de literais de string para "char
* ". Este aviso é ativado por padrão para programas C ++.

-Wclobbered
Avisa sobre variáveis ​​que podem ser alteradas por "longjmp" ou "vfork". Este aviso é
também habilitado por -Wextra.

-W com suporte condicional (Apenas C ++ e Objective-C ++)
Avisar para construções suportadas condicionalmente (C ++ 11 [intro.defs]).

-Wconversão
Avisa para conversões implícitas que podem alterar um valor. Isso inclui conversões
entre real e inteiro, como "abs (x)" quando "x" é "duplo"; conversões entre
assinado e não assinado, como "unsigned ui = -1"; e conversões para tipos menores, como
"sqrtf (M_PI)". Não avise para conversões explícitas como "abs ((int) x)" e "ui =
(sem sinal) -1 ", ou se o valor não for alterado pela conversão como em" abs (2.0) ".
Avisos sobre conversões entre inteiros assinados e não assinados podem ser desativados por
utilização -Wno-sign-conversão.

Para C ++, também avise para resolução de sobrecarga confusa para conversões definidas pelo usuário; e
conversões que nunca usam um operador de conversão de tipo: conversões para "void", o mesmo
tipo, uma classe base ou uma referência a eles. Avisos sobre conversões entre assinados
e inteiros sem sinal são desabilitados por padrão em C ++, a menos que -Conversão de sinal is
explicitamente habilitado.

-Wno-conversion-null (Apenas C ++ e Objective-C ++)
Não avise sobre conversões entre os tipos "NULL" e não apontadores. -Wconversion-null is
habilitado por padrão.

-Wzero-as-null-ponteiro-constante (Apenas C ++ e Objective-C ++)
Avisa quando um '0' literal é usado como constante de ponteiro nulo. Isso pode ser útil para
facilitar a conversão para "nullptr" em C ++ 11.

-Hora
Avisar quando as macros "__TIME__", "__DATE__" ou "__TIMESTAMP__" forem encontradas como
pode impedir compilações reproduzíveis bit a bit idênticas.

-Wdelete-incompleto (Apenas C ++ e Objective-C ++)
Avisar ao excluir um ponteiro para um tipo incompleto, o que pode causar um comportamento indefinido em
tempo de execução. Este aviso é habilitado por padrão.

-Wuseless-cast (Apenas C ++ e Objective-C ++)
Avisa quando uma expressão é convertida em seu próprio tipo.

-Corpo-vazio
Avisa se um corpo vazio ocorre em uma instrução "if", "else" ou "do while". Este aviso
também é habilitado por -Wextra.

-Wenum-compare
Avise sobre uma comparação entre valores de diferentes tipos enumerados. Em C ++ enumeral
incompatibilidades em expressões condicionais também são diagnosticadas e o aviso é habilitado por
predefinição. Em C, este aviso é habilitado por -Parede.

-Wjump-misses-init (C, Objective-C apenas)
Avisa se uma instrução "goto" ou uma instrução "switch" salta para a frente no
inicialização de uma variável ou salta para trás para um rótulo após a variável ter sido
inicializado. Isso só avisa sobre variáveis ​​que são inicializadas quando são
declarado. Este aviso é compatível apenas com C e Objective-C; em C ++ este tipo de
ramo é um erro em qualquer caso.

-Wjump-misses-init está incluído no -Wc ++ - compat. Pode ser desativado com o
-Wno-jump-misses-init opção.

-Wsign-compare
Avisa quando uma comparação entre valores com e sem sinal pode produzir um erro
resultado quando o valor com sinal é convertido em sem sinal. Este aviso também está habilitado
by -Wextra; para obter os outros avisos de -Wextra sem este aviso, use -Wextra
-Wno-sign-compare.

-Conversão de sinal
Avisar sobre conversões implícitas que podem alterar o sinal de um valor inteiro, como
atribuir uma expressão de número inteiro com sinal a uma variável de número inteiro sem sinal. Um explícito
elenco silencia o aviso. Em C, esta opção é habilitada também por -Wconversão.

-Wfloat-conversão
Avisa para conversões implícitas que reduzem a precisão de um valor real. Esse
inclui conversões de real para inteiro, e de real de maior precisão para menor
valores reais de precisão. Esta opção também é habilitada por -Wconversão.

-Desalocação de tamanho grande (Apenas C ++ e Objective-C ++)
Avisar sobre a definição de uma função de desalocação não dimensionada

operador void delete (void *) noexcept;
operador void delete [] (void *) noexcept;

sem uma definição da função de desalocação de tamanho correspondente

operador void delete (void *, std :: size_t) noexcept;
operador void delete [] (void *, std :: size_t) noexcept;

ou vice-versa. Ativado por -Wextra e o -fsized-desalocação.

-Wsizeof-pointer-memaccess
Avisar sobre parâmetros de comprimento suspeitos para certas funções integradas de string e memória
se o argumento usar "sizeof". Este aviso avisa, por exemplo, sobre "memset (ptr, 0, sizeof
(ptr)); "if" ptr "não é uma matriz, mas um ponteiro e sugere uma possível correção, ou
sobre "memcpy (& foo, ptr, sizeof (& foo));". Este aviso é habilitado por -Parede.

-Wsizeof-array-argument
Avisa quando o operador "sizeof" é aplicado a um parâmetro que é declarado como uma matriz
em uma definição de função. Esse aviso é habilitado por padrão para programas C e C ++.

-Wmemset-transposed-args
Avisa sobre chamadas suspeitas para a função integrada "memset", se o segundo argumento for
não zero e o terceiro argumento é zero. Isso avisa, por exemplo, @ sobre "memset (buf, sizeof
buf, 0) "onde provavelmente" memset (buf, 0, sizeof buf) "se referia.
o diagnóstico só é emitido se o terceiro argumento for zero literal. Se for algum
expressão que é dobrada para zero, uma conversão de zero para algum tipo, etc., é muito menos
provável que o usuário tenha trocado os argumentos por engano e nenhum aviso seja emitido.
Este aviso é habilitado por -Parede.

-Endereço
Avise sobre usos suspeitos de endereços de memória. Isso inclui o uso do endereço de um
função em uma expressão condicional, como "void func (void); if (func)", e
comparações com o endereço de memória de um literal de string, como "if (x ==" abc ")".
Esses usos normalmente indicam um erro do programador: o endereço de uma função sempre
avalia como verdadeiro, então seu uso em uma condição geralmente indica que o programador
esqueceu os parênteses em uma chamada de função; e comparações com literais de string
resultam em comportamento não especificado e não são portáteis em C, então eles geralmente indicam
que o programador pretendia usar "strcmp". Este aviso é habilitado por -Parede.

-Wlogical-op
Avise sobre usos suspeitos de operadores lógicos em expressões. Isso inclui o uso de
operadores lógicos em contextos onde um operador bit a bit é provavelmente esperado.

-Wlógico-não-parênteses
Avisa sobre o operando lógico não usado no lado esquerdo de uma comparação. Esse
a opção não avisa se o operando RHS é do tipo booleano. Seu propósito é
detecte código suspeito como o seguinte:

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

É possível suprimir o aviso envolvendo o LHS entre parênteses:

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

Este aviso é habilitado por -Parede.

-Waggregate-retorno
Avisa se alguma função que retorna estruturas ou uniões é definida ou chamada. (No
linguagens em que você pode retornar uma matriz, isso também provoca um aviso.)

-Otimizações de loop agressivo-wno
Avisa se em um loop com número constante de iterações o compilador detecta indefinido
comportamento em alguma instrução durante uma ou mais das iterações.

-Wno-atributos
Não avise se um "__attribute__" inesperado for usado, como atributos não reconhecidos,
atributos de função aplicados a variáveis, etc. Isso não impede erros para
uso incorreto de atributos suportados.

-Wno-builtin-macro-redefinido
Não avise se certas macros integradas forem redefinidas. Isso suprime avisos para
redefinição de "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__" e
"__BASE_FILE__".

-Wstrict-protótipos (C e Objective-C apenas)
Avisa se uma função é declarada ou definida sem especificar os tipos de argumento. (Um
a definição de função no estilo antigo é permitida sem aviso se precedida por um
declaração que especifica os tipos de argumento.)

-Declaração de estilo antigo (C e Objective-C apenas)
Avisar sobre utilizações obsoletas, de acordo com a Norma C, em declaração. Para
exemplo, avisar se especificadores de classe de armazenamento como "estático" não são as primeiras coisas em um
declaração. Este aviso também é habilitado por -Wextra.

-Definição de estilo antigo (C e Objective-C apenas)
Avisa se uma definição de função no estilo antigo é usada. Um aviso é dado mesmo se houver
um protótipo anterior.

- Tipo de parâmetro ausente (C e Objective-C apenas)
Um parâmetro de função é declarado sem um especificador de tipo nas funções de estilo K e R:

void foo (bar) {}

Este aviso também é habilitado por -Wextra.

-Protótipos-saudade (C e Objective-C apenas)
Avisa se uma função global é definida sem uma declaração de protótipo anterior. Esse
o aviso é emitido mesmo se a própria definição fornecer um protótipo. Use esta opção
para detectar funções globais que não têm uma declaração de protótipo correspondente em um
arquivo de cabeçalho. Esta opção não é válida para C ++ porque todas as declarações de função
fornecer protótipos e uma declaração não correspondente declara uma sobrecarga em vez de
conflito com uma declaração anterior. Usar -Declarações-saudações para detectar falta
declarações em C ++.

-Declarações-saudações
Avisa se uma função global é definida sem uma declaração prévia. Faça isso mesmo se
a própria definição fornece um protótipo. Use esta opção para detectar global
funções que não são declaradas em arquivos de cabeçalho. Em C, nenhum aviso é emitido para
funções com declarações anteriores de não-protótipo; usar -Protótipos-saudade para detectar
protótipos ausentes. Em C ++, nenhum aviso é emitido para modelos de função ou para
funções embutidas ou para funções em namespaces anônimos.

-Wmissing-field-inicializadores
Avisa se o inicializador de uma estrutura tem alguns campos faltando. Por exemplo, o seguinte
código causa esse aviso, porque "xh" é implicitamente zero:

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

Esta opção não avisa sobre inicializadores designados, então a seguinte modificação
não dispara um aviso:

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

Em C ++, essa opção também não avisa sobre o inicializador {} vazio, por exemplo:

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

Este aviso está incluído em -Wextra. Para conseguir outro -Wextra avisos sem este,
usar -Wextra -Wno-missing-field-inicializadores.

-Wno-multichar
Não avise se uma constante de vários caracteres ('FOOF') é usado. Normalmente eles indicam um
erro de digitação no código do usuário, pois eles têm valores definidos pela implementação e não devem ser
usado em código portátil.

-Wnormalizado[=<Nenhum|id|nfc|nfkc>]
Em ISO C e ISO C ++, dois identificadores são diferentes se forem sequências diferentes de
personagens. No entanto, às vezes quando os caracteres fora do conjunto de caracteres ASCII básico
são usados, você pode ter duas sequências de caracteres diferentes que parecem iguais. Evitar
confusão, o padrão ISO 10646 estabelece alguns normalização regras que quando aplicado
certifique-se de que duas sequências que parecem iguais sejam transformadas na mesma sequência. GCC
pode avisá-lo se você estiver usando identificadores que não foram normalizados; esta opção
controla esse aviso.

Existem quatro níveis de aviso suportados pelo GCC. O padrão é -Wnormalized = nfc,
que avisa sobre qualquer identificador que não esteja na forma normalizada ISO 10646 "C",
NFC. NFC é a forma recomendada para a maioria dos usos. É equivalente a -Wnormalizado.

Infelizmente, existem alguns caracteres permitidos em identificadores por ISO C e ISO C ++
que, quando transformados em NFC, não são permitidos nos identificadores. Ou seja, não tem como
para usar esses símbolos em ISO C ou C ++ portátil e ter todos os seus identificadores em NFC.
-Wnormalized = id suprime o aviso para esses caracteres. Espera-se que o futuro
versões dos padrões envolvidos irão corrigir isso, razão pela qual esta opção não é
o padrão.

Você pode desligar o aviso para todos os caracteres, escrevendo -Wnormalized = nenhum or
-Wno-normalizado. Você só deve fazer isso se estiver usando alguma outra normalização
esquema (como "D"), porque caso contrário, você pode facilmente criar bugs que são literalmente
impossível de ver.

Alguns caracteres em ISO 10646 têm significados distintos, mas parecem idênticos em algumas fontes
ou metodologias de exibição, especialmente depois que a formatação foi aplicada. Por exemplo
"\ u207F", "SUPERSCRIPT LATIN SMALL LETTER N", é exibido como um "n" normal que
foi colocado em um sobrescrito. ISO 10646 define o NFKC esquema de normalização para
converter tudo isso em um formato padrão também, e o GCC avisa se o seu código não estiver em
NFKC se você usar -Wnormalized = nfkc. Este aviso é comparável ao aviso sobre cada
identificador que contém a letra O porque pode ser confundido com o dígito 0,
e, portanto, não é o padrão, mas pode ser útil como uma convenção de codificação local se o
o ambiente de programação não pode ser corrigido para exibir esses caracteres de maneira distinta.

-Wno-obsoleto
Não avise sobre o uso de recursos obsoletos.

-Wno-declarações-depreciadas
Não avise sobre o uso de funções, variáveis ​​e tipos marcados como obsoletos por
usando o atributo "obsoleto".

-Wno-overflow
Não avise sobre estouro de tempo de compilação em expressões constantes.

-Wno-odr
Avisar sobre violações da regra de definição única durante a otimização de tempo de link. Requer
-flto-odr-type-merging para ser habilitado. Ativado por padrão.

-Wopenmp-simd
Avisar se o modelo de custo do vetorizador substitui a diretiva simd OpenMP ou Cilk Plus
definido pelo usuário. o -fsimd-cost-model = ilimitado opção pode ser usada para relaxar o custo
modelo.

-Woverride-init (C e Objective-C apenas)
Avisa se um campo inicializado sem efeitos colaterais é sobrescrito ao usar o
inicializadores.

Este aviso está incluído em -Wextra. Para conseguir outro -Wextra avisos sem este,
usar -Wextra -Wno-override-init.

-Embalado
Avisa se uma estrutura recebe o atributo empacotado, mas o atributo empacotado não tem
efeito sobre o layout ou tamanho da estrutura. Essas estruturas podem estar desalinhadas para
pouco benefício. Por exemplo, neste código, a variável "fx" em "struct bar" é
desalinhado, embora "struct bar" não tenha o atributo compactado:

estrutura foo {
int x;
caracter a, b, c, d;
} __attribute __ ((embalado));
barra de estrutura {
caractere z;
struct foo f;
};

-Wpacked-bitfield-compat
As séries 4.1, 4.2 e 4.3 do GCC ignoram o atributo "compactado" em campos de bits do tipo
"Caracteres". Isso foi corrigido no GCC 4.4, mas a mudança pode levar a diferenças no
layout da estrutura. O GCC informa quando o deslocamento de tal campo mudou no GCC
4.4. Por exemplo, não há mais um preenchimento de 4 bits entre os campos "a" e "b" neste
estrutura:

estrutura foo
{
char a: 4;
char b: 8;
} __attribute__ ((embalado));

Este aviso é habilitado por padrão. Usar -Wno-pack-bitfield-compat para desabilitar isso
Atenção.

-W acolchoado
Avisa se o preenchimento está incluído em uma estrutura, seja para alinhar um elemento do
estrutura ou para alinhar toda a estrutura. Às vezes, quando isso acontece, é possível
para reorganizar os campos da estrutura para reduzir o preenchimento e assim fazer o
estrutura menor.

-Wredundant-decls
Avisa se algo for declarado mais de uma vez no mesmo escopo, mesmo nos casos em que
declaração múltipla é válida e não muda nada.

-Wnested-externs (C e Objective-C apenas)
Avisa se uma declaração "externa" for encontrada em uma função.

-Wno-herdado-variadic-ctor
Suprimir avisos sobre o uso de construtores herdados do C ++ 11 quando a classe base
herdado de tem um construtor C variadic; o aviso está ativado por padrão porque o
reticências não são herdadas.

-Winline
Avisa se uma função declarada como embutida não pode ser embutida. Mesmo com isso
opção, o compilador não avisa sobre falhas nas funções inline declaradas em
cabeçalhos do sistema.

O compilador usa uma variedade de heurísticas para determinar se deve ou não embutir um
função. Por exemplo, o compilador leva em consideração o tamanho da função que está sendo
inline e a quantidade de inline que já foi feita na função atual.
Portanto, mudanças aparentemente insignificantes no programa de origem podem causar o
avisos produzidos por -Winline aparecer ou desaparecer.

-Wno-invalid-offsetof (Apenas C ++ e Objective-C ++)
Suprime os avisos de aplicação da macro "offsetof" a um tipo não POD. De acordo com
o padrão ISO C ++ de 2014, aplicar "offsetof" a um tipo de layout não padrão é
Indefinido. Em implementações C ++ existentes, no entanto, "offsetof" normalmente fornece
resultados significativos. Este sinalizador é para usuários que sabem que estão escrevendo
código não portável e que escolheram deliberadamente ignorar o aviso sobre ele.

As restrições sobre "offsetof" podem ser relaxadas em uma versão futura do padrão C ++.

-Wno-int-to-pointer-cast
Suprime os avisos de conversões para o tipo de ponteiro de um inteiro de tamanho diferente. No
C ++, converter para um tipo de ponteiro de tamanho menor é um erro. Elenco de Wint para ponteiro is
habilitado por padrão.

-Wno-pointer-to-int-cast (C e Objective-C apenas)
Suprime os avisos de projeções de um ponteiro para um tipo inteiro de tamanho diferente.

-Winvalid-pch
Avisa se um cabeçalho pré-compilado for encontrado no caminho de pesquisa, mas não puder ser usado.

-Muito longo
Avisa se o tipo "longo longo" é usado. Isso é habilitado por qualquer -Wpedantic or
-Wtradicional nos modos ISO C90 e C ++ 98. Para inibir as mensagens de aviso, use
-Wno-long-long.

-Wvariádicos-macros
Avisa se macros variáveis ​​são usadas no modo ISO C90, ou se a sintaxe alternativa GNU é
usado no modo ISO C99. Isso é habilitado por qualquer -Wpedantic or -Wtradicional. Para
inibir as mensagens de aviso, use -Wno-variádicos-macros.

-Wvarargs
Avisar sobre o uso questionável das macros usadas para lidar com argumentos variáveis ​​como
"va_start". Este é o padrão. Para inibir as mensagens de aviso, use -Wno-varargs.

-Wector-operation-performance
Avisa se a operação do vetor não é implementada por meio dos recursos SIMD da arquitetura.
Principalmente útil para o ajuste de desempenho. A operação vetorial pode ser implementada
"por partes", o que significa que a operação escalar é realizada em cada vetor
elemento; "em paralelo", o que significa que a operação vetorial é implementada usando
escalares de tipo mais amplo, que normalmente é mais eficiente em termos de desempenho; e "como um único
escalar ", o que significa que o vetor se ajusta a um tipo escalar.

-Wno-virtual-move-atribuir
Suprimir avisos sobre a herança de uma base virtual com uma movimentação não trivial de C ++ 11
operador de atribuição. Isso é perigoso porque se a base virtual for alcançável ao longo
mais de um caminho, ele é movido várias vezes, o que pode significar que ambos os objetos acabam em
o estado movido. Se o operador de atribuição de movimentação for escrito para evitar a movimentação de
um objeto movido, este aviso pode ser desabilitado.

-Wvla
Avisa se a matriz de comprimento variável é usada no código. -Wno-vla impede o -Wpedantic
aviso da matriz de comprimento variável.

-Wvolatile-register-var
Avisa se uma variável de registro é declarada volátil. O modificador volátil não
inibir todas as otimizações que podem eliminar leituras e / ou gravações para registrar
variáveis. Este aviso é habilitado por -Parede.

-Wdisabled-otimização
Avisa se um passo de otimização solicitado está desabilitado. Este aviso geralmente não
indicar que há algo errado com seu código; simplesmente indica que o GCC
otimizadores são incapazes de lidar com o código de forma eficaz. Muitas vezes, o problema é que seu
o código é muito grande ou muito complexo; GCC se recusa a otimizar programas quando a otimização
em si é provável que leve uma quantidade excessiva de tempo.

-Wpointer-sinal (C e Objective-C apenas)
Avisa para passagem de argumento de ponteiro ou atribuição com sinalização diferente. Esse
opção só é suportada para C e Objective-C. Está implícito por -Parede e por
-Wpedantic, que pode ser desativado com -Wno-sinal de ponteiro.

-Wstack-protetor
Esta opção só está ativa quando -fstack-protector está ativo. Avisa sobre funções
que não são protegidos contra destruição de pilha.

-Woverlength-strings
Avisar sobre constantes de string maiores que o comprimento "máximo mínimo"
especificado no padrão C. Compiladores modernos geralmente permitem constantes de string que
são muito mais longos do que o limite mínimo do padrão, mas programas muito portáteis devem
evite usar strings mais longas.

O limite se aplica depois de concatenação de constante de string, e não conta o
NUL. No C90, o limite era de 509 caracteres; em C99, foi aumentado para 4095. C ++ 98
não especificar um máximo mínimo normativo, portanto, não diagnosticamos strings de comprimento excessivo em
C ++.

Esta opção está implícita em -Wpedantic, e pode ser desativado com
-Wno-overlength-strings.

-Wunsuffixed-float-constantes (C e Objective-C apenas)
Emita um aviso para qualquer constante flutuante que não tenha um sufixo. Quando usado
Juntamente com -Wsystem-headers ele avisa sobre essas constantes nos arquivos de cabeçalho do sistema.
Isso pode ser útil ao preparar o código para usar com o pragma "FLOAT_CONST_DECIMAL64"
da extensão de ponto flutuante decimal para C99.

-Wno-designado-init (C e Objective-C apenas)
Suprime os avisos quando um inicializador posicional é usado para inicializar uma estrutura que
foi marcado com o atributo "design_init".

Opções por depuração As tuas Agenda or GCC
O GCC tem várias opções especiais que são usadas para depurar seu programa ou GCC:

-g Produzir informações de depuração no formato nativo do sistema operacional (stabs, COFF,
XCOFF ou DWARF 2). O GDB pode trabalhar com essas informações de depuração.

Na maioria dos sistemas que usam o formato stabs, -g permite o uso de informações extras de depuração
que apenas GDB pode usar; esta informação extra faz com que a depuração funcione melhor no GDB, mas
provavelmente faz com que outros depuradores travem ou se recusem a ler o programa. Se você quiser
controle com certeza se deve gerar as informações extras, use -gstabs +, -gstabs,
-gxcoff +, -gxcoffou -gvms (ver abaixo).

GCC permite que você use -g com -O. Os atalhos tomados pelo código otimizado podem
ocasionalmente produzem resultados surpreendentes: algumas variáveis ​​que você declarou podem não existir em
tudo; o fluxo de controle pode mover-se brevemente para onde você não esperava; algumas declarações podem
não podem ser executados porque calculam resultados constantes ou seus valores já estão em
mão; algumas instruções podem ser executadas em lugares diferentes porque foram removidas
de loops.

No entanto, é possível depurar a saída otimizada. Isso o torna razoável
para usar o otimizador para programas que podem ter bugs.

As seguintes opções são úteis quando o GCC é gerado com a capacidade de mais
de um formato de depuração.

-gsplit-anão
Separe o máximo possível de informações de depuração de anões em um arquivo de saída separado
com a extensão .dwo. Esta opção permite que o sistema de construção evite vincular arquivos
com informações de depuração. Para ser útil, esta opção requer um depurador capaz de
lendo arquivos .dwo.

-ggdb
Produza informações de depuração para uso pelo GDB. Isso significa usar o mais expressivo
formato disponível (DWARF 2, stabs, ou o formato nativo se nenhum deles for
suportado), incluindo extensões GDB, se possível.

-gpubnames
Gere as seções dwarf .debug_pubnames e .debug_pubtypes.

-ggnu-pubnames
Gere seções .debug_pubnames e .debug_pubtypes em um formato adequado para
conversão em um índice GDB. Esta opção só é útil com um vinculador que pode
produzir o índice GDB versão 7.

-gstabs
Produzir informações de depuração em formato stabs (se houver suporte), sem GDB
extensões. Este é o formato usado pelo DBX na maioria dos sistemas BSD. No MIPS, Alpha e
Sistemas System V Release 4, esta opção produz uma saída de depuração de stabs que não é
compreendido por DBX ou SDB. Em sistemas System V Release 4, esta opção requer o GNU
para montar.

-feliminate-unused-debug-symbols
Produz informações de depuração em formato stabs (se houver suporte), apenas para símbolos
que são realmente usados.

-femit-class-debug-always
Em vez de emitir informações de depuração para uma classe C ++ em apenas um arquivo de objeto,
emita-o em todos os arquivos de objeto que usam a classe. Esta opção deve ser usada apenas com
depuradores que são incapazes de lidar com a maneira como o GCC normalmente emite informações de depuração
para classes porque usar esta opção aumenta o tamanho das informações de depuração em
tanto quanto um fator de dois.

-fdebug-types-seção
Ao usar DWARF versão 4 ou superior, DIEs de tipo podem ser colocados em seus próprios
seção ".debug_types" em vez de torná-los parte da seção ".debug_info". Isto
é mais eficiente colocá-los em seções separadas do comdat, pois o vinculador pode
remova duplicatas. Mas nem todos os consumidores DWARF suportam seções ".debug_types" ainda
e em alguns objetos ".debug_types" produz uma depuração maior em vez de menor
informações.

-gstabs +
Produza informações de depuração em formato stabs (se houver suporte), usando GNU
extensões compreendidas apenas pelo depurador GNU (GDB). O uso dessas extensões é
provavelmente fará outros depuradores travarem ou se recusarem a ler o programa.

-gcoff
Produza informações de depuração no formato COFF (se houver suporte). Isto é o
formato usado pelo SDB na maioria dos sistemas System V antes do System V Release 4.

-gxcoff
Produza informações de depuração no formato XCOFF (se houver suporte). Isto é o
formato usado pelo depurador DBX em sistemas IBM RS / 6000.

-gxcoff +
Produza informações de depuração no formato XCOFF (se houver suporte), usando GNU
extensões compreendidas apenas pelo depurador GNU (GDB). O uso dessas extensões é
provavelmente fará outros depuradores travarem ou se recusarem a ler o programa, e pode causar
assemblers diferentes do GNU assembler (GAS) falharão com um erro.

-gdwarf-versão
Produza informações de depuração no formato DWARF (se houver suporte). O valor de
versão pode ser 2, 3, 4 ou 5; a versão padrão para a maioria dos destinos é 4. DWARF
A versão 5 é apenas experimental.

Observe que com o DWARF Versão 2, algumas portas exigem e sempre usam alguns
Extensões DWARF 3 nas tabelas de desenrolamento.

A versão 4 pode exigir GDB 7.0 e -fvar-tracking-assignments para o benefício máximo.

-grecord-gcc-switches
Esta opção faz com que as opções de linha de comando usadas para invocar o compilador que pode
afetar a geração de código a ser anexado ao atributo DW_AT_producer em DWARF
informações de depuração. As opções são concatenadas com espaços separando-as do
uns aos outros e da versão do compilador. Veja também -frecord-gcc-switches para outro
maneira de armazenar opções do compilador no arquivo de objeto. Este é o padrão.

-gno-record-gcc-switches
Não permitir o acréscimo de opções de linha de comando ao atributo DW_AT_producer em DWARF
informações de depuração.

-gstrict-anão
Não permitir o uso de extensões da versão padrão DWARF posterior à selecionada com
-gdwarf-versão. Na maioria dos alvos usando extensões DWARF não conflitantes posteriores
versões padrão são permitidas.

-gno-estrito-anão
Permitir o uso de extensões da versão padrão DWARF posterior à selecionada com
-gdwarf-versão.

-gz[=tipo]
Produza seções de depuração compactadas no formato DWARF, se houver suporte. Se tipo is
não fornecido, o tipo padrão depende dos recursos do montador e do vinculador
usava. tipo pode ser um de Nenhum (não comprima seções de depuração), zlib (use zlib
compressão no formato ELF gABI), ou zlib-gnu (use a compressão zlib no GNU tradicional
formato). Se o vinculador não suportar a gravação de seções de depuração compactadas, a opção
é rejeitado. Caso contrário, se o montador não os suportar, -gz é silencioso
ignorado ao produzir arquivos de objeto.

-gvms
Produza informações de depuração no formato de depuração Alpha / VMS (se houver suporte). Esse
é o formato usado pelo DEBUG em sistemas Alpha / VMS.

-gnível
-ggdbnível
-gstabsnível
-gcoffnível
-gxcoffnível
-gvmsnível
Solicite informações de depuração e também use nível para especificar quanta informação. o
o nível padrão é 2.

O nível 0 não produz nenhuma informação de depuração. Assim, -g0 nega -g.

O nível 1 produz informações mínimas, o suficiente para fazer retrocessos em partes do
programa que você não planeja depurar. Isso inclui descrições de funções e
variáveis ​​externas e tabelas de número de linha, mas nenhuma informação sobre variáveis ​​locais.

O nível 3 inclui informações extras, como todas as definições de macro presentes no
programa. Alguns depuradores suportam expansão de macro quando você usa -g3.

-gdwarf-2 não aceita um nível de depuração concatenado, porque o GCC costumava oferecer suporte a um
opção -anão que pretendia gerar informações de depuração na versão 1 do DWARF
formato (que é muito diferente da versão 2), e teria sido muito confuso.
Esse formato de depuração está obsoleto há muito tempo, mas a opção não pode ser alterada agora. Em vez disso, use
um adicional -gnível opção para alterar o nível de depuração para DWARF.

-gtoggle
Desative a geração de informações de depuração, se deixar esta opção gerá-la, ou ative-a
no nível 2 caso contrário. A posição deste argumento na linha de comando não
matéria; ele entra em vigor depois que todas as outras opções são processadas e faz isso apenas
uma vez, não importa quantas vezes seja dado. Destina-se principalmente a ser usado com
-fcompare-debug.

-fsanitize = endereço
Habilite o AddressSanitizer, um detector rápido de erros de memória. As instruções de acesso à memória são
instrumentado para detectar bugs out-of-bounds e use-after-free. Ver
<https://github.com/google/sanitizers/wiki/AddressSanitizer> para mais detalhes. o
o comportamento em tempo de execução pode ser influenciado usando o ASAN_OPTIONS variável de ambiente. Quando
definido como "help = 1", as opções disponíveis são mostradas na inicialização do instrumento
programa. Ver
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> para um
lista de opções com suporte.

-fsanitize = kernel-address
Habilite AddressSanitizer para kernel Linux. Verhttps://github.com/google/kasan/wiki>
para mais detalhes.

-fsanitize = thread
Habilite ThreadSanitizer, um detector de corrida de dados rápido. As instruções de acesso à memória são
instrumentado para detectar bugs de corrida de dados. Ver
<https://github.com/google/sanitizers/wiki#threadsanitizer> para mais detalhes. A corrida-
o comportamento do tempo pode ser influenciado usando o TSAN_OPTIONS variável de ambiente; Vejo
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> para uma lista de
opções com suporte.

-fsanitize = vazamento
Habilite o LeakSanitizer, um detector de vazamento de memória. Esta opção só importa para vinculação de
executáveis ​​e se nenhum -fsanitize = endereço nem -fsanitize = thread é usado. Naquilo
caso o executável esteja vinculado a uma biblioteca que substitui "malloc" e outros
funções de alocador. Ver
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> para mais
detalhes. O comportamento do tempo de execução pode ser influenciado usando o LSAN_OPTIONS meio Ambiente
variável.

-fsanitize = undefined
Habilite UndefinedBehaviorSanitizer, um detector rápido de comportamento indefinido. Vários
cálculos são instrumentados para detectar comportamento indefinido em tempo de execução. Atual
as subopções são:

-fsanitize = shift
Esta opção permite verificar se o resultado de uma operação de turno não é
Indefinido. Observe que o que exatamente é considerado indefinido difere um pouco
entre C e C ++, bem como entre ISO C90 e C99, etc.

-fsanitize = inteiro-dividido por zero
Detecta divisão inteira por zero, bem como divisão "INT_MIN / -1".

-fsanitize = inacessível
Com esta opção, o compilador transforma a chamada "__builtin_unreachable" em um
chamada de mensagem de diagnóstico. Ao alcançar a chamada "__builtin_unreachable",
o comportamento é indefinido.

-fsanitize = vla-bound
Esta opção instrui o compilador a verificar se o tamanho de um comprimento variável
array é positivo.

-fsanitize = null
Esta opção ativa a verificação do ponteiro. Particularmente, o aplicativo desenvolvido com
esta opção ativada emitirá uma mensagem de erro quando tentar cancelar a referência de um
Ponteiro NULL, ou se uma referência (possivelmente uma referência rvalue) está ligada a um NULL
ponteiro, ou se um método é invocado em um objeto apontado por um ponteiro NULL.

-fsanitize = return
Esta opção ativa a verificação da instrução de retorno. Programas construídos com esta opção
ligado irá emitir uma mensagem de erro quando o fim de uma função não vazia for
alcançado sem realmente retornar um valor. Esta opção funciona apenas em C ++.

-fsanitize = estouro de inteiro assinado
Esta opção ativa a verificação de estouro de inteiros assinados. Nós verificamos se o resultado de
"+", "*" e ambos unários e binários "-" não transbordam no sinal
aritmética. Observe que as regras de promoção de inteiros devem ser levadas em consideração. Isso é,
o seguinte não é um estouro:

char assinado a = SCHAR_MAX;
a ++;

-fsanitize = limites
Esta opção permite a instrumentação de limites de array. Vários fora dos limites
acessos são detectados. Membros de matriz flexível, matrizes semelhantes a membros de matriz flexível,
e inicializadores de variáveis ​​com armazenamento estático não são instrumentados.

-fsanitize = alinhamento
Esta opção permite verificar o alinhamento dos ponteiros quando eles são desreferenciados,
ou quando uma referência está ligada a um alvo insuficientemente alinhado, ou quando um método ou
o construtor é invocado em um objeto insuficientemente alinhado.

-fsanitize = tamanho do objeto
Esta opção ativa a instrumentação de referências de memória usando o
função "__builtin_object_size". Vários acessos de ponteiro fora dos limites são
detectado.

-fsanitize = float-divide-by-zero
Detecta divisão de ponto flutuante por zero. Ao contrário de outras opções semelhantes,
-fsanitize = float-divide-by-zero não está habilitado por -fsanitize = undefined, Desde
divisão de ponto flutuante por zero pode ser uma forma legítima de obter infinitos
e NaNs.

-fsanitize = float-cast-overflow
Esta opção ativa o tipo de ponto flutuante para a verificação de conversão de inteiro. Nós verificamos
que o resultado da conversão não transborde. Ao contrário de outros semelhantes
opções, -fsanitize = float-cast-overflow não está habilitado por -fsanitize = undefined.
Esta opção não funciona bem com as exceções "FE_INVALID" habilitadas.

-fsanitize = atributo não nulo
Esta opção habilita a instrumentação de chamadas, verificando se os valores nulos não são
passado para argumentos marcados como exigindo um valor não nulo pela função "não nulo"
atributo.

-fsanitize = return-nonnull-attribute
Esta opção permite a instrumentação de declarações de retorno em funções marcadas com
Atributo da função "return_nonnull", para detectar o retorno de valores nulos de tal
funções.

-fsanitize = bool
Esta opção habilita a instrumentação de cargas do bool. Se um valor diferente de 0/1
for carregado, um erro de tempo de execução será emitido.

-fsanitize = enum
Esta opção permite a instrumentação de cargas de um tipo enum. Se um valor
fora do intervalo de valores para o tipo enum for carregado, um erro em tempo de execução é
emitido.

-fsanitize = vptr
Esta opção permite a instrumentação de chamadas de função de membro C ++, acessos de membro
e algumas conversões entre ponteiros para classes base e derivadas, para verificar o
o objeto referenciado tem o tipo dinâmico correto.

Enquanto -ftrapv faz com que armadilhas para overflows assinados sejam emitidos, -fsanitize = undefined
dá uma mensagem de diagnóstico. Atualmente, isso funciona apenas para a família C de linguagens.

-fno-sanitize = all
Esta opção desativa todos os higienizadores habilitados anteriormente. -fsanitize = all não é
permitido, pois alguns desinfetantes não podem ser usados ​​juntos.

-fasan-shadow-offset =número
Esta opção força o GCC a usar o deslocamento de sombra personalizado nas verificações do AddressSanitizer. Isto é
útil para experimentar diferentes layouts de memória sombra no Kernel
Endereço Sanitizer.

-fsanitize-recover[=opta]
-fsanitize-recover = controla o modo de recuperação de erro para higienizadores mencionados na vírgula
lista separada de opta. Ativar esta opção para um componente higienizador faz com que ele
tente continuar executando o programa como se nenhum erro tivesse acontecido. Isso significa múltiplo
os erros de tempo de execução podem ser relatados em uma única execução do programa e o código de saída do
programa pode indicar sucesso mesmo quando os erros foram relatados. o
-fno-sanitize-recover = opção pode ser usada para alterar este comportamento: apenas o primeiro
o erro detectado é relatado e o programa sai com um código de saída diferente de zero.

Atualmente, este recurso só funciona para -fsanitize = undefined (e suas subopções exceto
por -fsanitize = inacessível e assim -fsanitize = return), -fsanitize = float-cast-overflow,
-fsanitize = float-divide-by-zero e assim -fsanitize = kernel-address. Para esses desinfetantes
a recuperação de erros é ativada por padrão. -fsanitize-recover = all e assim
-fno-sanitize-recover = all também é aceito, o primeiro permite a recuperação para todos
desinfetantes que o suportam, este último desabilita a recuperação para todos os desinfetantes que
apoie isso.

Sintaxe sem explícita opta parâmetro está obsoleto. É equivalente a

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

Similarmente -fno-sanitize-recover é equivalente a

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

-fsanitize-undefined-trap-on-error
A -fsanitize-undefined-trap-on-error opção instrui o compilador a relatar
comportamento indefinido usando "__builtin_trap" em vez de uma rotina de biblioteca "libubsan".
A vantagem disso é que a biblioteca "libubsan" não é necessária e não está vinculada
em, portanto, pode ser usado mesmo em ambientes independentes.

-fcheck-pointer-bounds
Habilite a instrumentação do Pointer Bounds Checker. Cada referência de memória é instrumentada
com verificações do ponteiro usado para acesso à memória em relação aos limites associados àquele
ponteiro.

Atualmente, há apenas uma implementação para Intel MPX disponível, portanto, x86 target e
-mmpx são necessários para habilitar este recurso. A instrumentação baseada em MPX requer um
biblioteca de tempo de execução para habilitar MPX em hardware e lidar com sinais de violação de limites. Por
padrão quando -fcheck-pointer-bounds e assim -mmpx opções são usadas para vincular um programa, o
Links de driver GCC contra o libmpx biblioteca de tempo de execução e libmpxwrappers biblioteca. Isto
também passa '-z bndplt' para um linker caso ele suporte esta opção (que está marcada
na configuração libmpx). Observe que as versões antigas do vinculador podem ignorar a opção. Ouro
o vinculador não suporta a opção '-z bndplt'. Sem suporte '-z bndplt' no linker, todos
chamadas para bibliotecas dinâmicas perdem os limites ultrapassados, reduzindo o nível de proteção geral. Isso é
altamente recomendado usar o linker com suporte '-z bndplt'. No caso de tal vinculador não ser
disponível é aconselhável usar sempre -static-libmpxwrappers para melhor proteção
nível ou uso -estático para evitar completamente chamadas externas para bibliotecas dinâmicas. MPX-
instrumentação baseada pode ser usada para depuração e também pode ser incluída na produção
código para aumentar a segurança do programa. Dependendo do uso, você pode ter diferentes
requisitos para a biblioteca de tempo de execução. A versão atual da biblioteca de tempo de execução MPX
é mais orientado para uso como ferramenta de depuração. O uso da biblioteca de tempo de execução MPX implica
-lpthread. Veja também -static-libmpx. O comportamento da biblioteca em tempo de execução pode ser influenciado
usando vários CHKP_RT_ * variáveis ​​ambientais. Ver
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> para mais
Detalhes.

A instrumentação gerada pode ser controlada por vários -fchkp- * opções e pelo
Atributo de campo de estrutura "bnd_variable_size" e "bnd_legacy" e "bnd_instrument"
atributos de função. O GCC também fornece uma série de funções integradas para controlar
o verificador de limites do ponteiro.

-fchkp-check-incompleto-type
Gerar verificações de limites de ponteiro para variáveis ​​com tipo incompleto. Ativado por
padrão.

-fchkp-limites estreitos
Controla os limites usados ​​pelo Pointer Bounds Checker para ponteiros para campos de objetos. Se
o estreitamento é habilitado e os limites do campo são usados. Caso contrário, os limites do objeto são usados.
Veja também -fchkp-narrow-to-innermost-array e assim -fchkp-first-field-tem-próprio-limites.
Ativado por padrão.

-fchkp-first-field-tem-próprio-limites
Força o verificador de limites do ponteiro a usar limites estreitos para o endereço do primeiro
campo na estrutura. Por padrão, um ponteiro para o primeiro campo tem os mesmos limites
como um ponteiro para toda a estrutura.

-fchkp-narrow-to-innermost-array
Força o Pointer Bounds Checker a usar os limites dos arrays mais internos em caso de aninhamento
acesso à matriz estática. Por padrão, esta opção está desabilitada e os limites do mais externo
array são usados.

-fchkp-optimize
Ativa otimizações do Pointer Bounds Checker. Ativado por padrão na otimização
níveis -O, -O2, -O3.

-fchkp-use-fast-string-functions
Permite o uso de * _nobnd versões de funções de string (não copiando limites) por Pointer
Verificador de limites. Desativado por padrão.

-fchkp-use-nochk-string-funções
Permite o uso de versões * _nochk de funções de string (sem verificar limites) por Pointer
Verificador de limites. Desativado por padrão.

-fchkp-use-static-bounds
Permitir que o Pointer Bounds Checker gere limites estáticos mantendo os limites estáticos
variáveis. Ativado por padrão.

-fchkp-use-static-const-bounds
Use limites inicializados estaticamente para limites constantes em vez de gerá-los cada
tempo em que são necessários. Por padrão habilitado quando -fchkp-use-static-bounds está ativado.

-fchkp-treat-zero-dynamic-size-as-infinite
Com esta opção, objetos com tipo incompleto cujo tamanho obtido dinamicamente é zero
são tratados como tendo tamanho infinito em vez do Pointer Bounds Checker. Esta opção
pode ser útil se um programa estiver vinculado a uma biblioteca com informações de tamanho faltando para alguns
símbolos. Desativado por padrão.

-fchkp-check-read
Instrui o Pointer Bounds Checker a gerar verificações para todos os acessos de leitura à memória.
Ativado por padrão.

-fchkp-check-write
Instrui o Pointer Bounds Checker a gerar verificações para todos os acessos de gravação à memória.
Ativado por padrão.

-fchkp-store-bounds
Instrui o Pointer Bounds Checker a gerar armazenamentos de limites para gravações de ponteiro.
Ativado por padrão.

-fchkp-instrument-calls
Instrui o verificador de limites de ponteiro para passar limites de ponteiro para chamadas. Ativado por padrão.

-fchkp-instrument-mark-only
Instrui o Pointer Bounds Checker a instrumentar apenas as funções marcadas com o
Atributo "bnd_instrument". Desativado por padrão.

-fchkp-use-wrappers
Permite que o Pointer Bounds Checker substitua chamadas para funções integradas por chamadas para
funções de invólucro. Quando -fchkp-use-wrappers é usado para ligar um programa, o driver GCC
links automaticamente contra libmpxwrappers. Veja também -static-libmpxwrappers. Habilitado
por padrão.

-fdump-final-insns[=filete]
Despeje a representação interna final (RTL) para filete. Se o argumento opcional for
omitido (ou se filete é "."), o nome do arquivo de despejo é determinado anexando
".gkd" para o nome do arquivo de saída da compilação.

-fcompare-debug[=opta]
Se nenhum erro ocorrer durante a compilação, execute o compilador uma segunda vez, adicionando opta e assim
-fcompare-debug-second aos argumentos passados ​​para a segunda compilação. Jogue o
representação interna final em ambas as compilações e imprime um erro se forem diferentes.

Se o sinal de igual for omitido, o padrão -gtoggle é usado.

A variável de ambiente GCC_COMPARE_DEBUG, se definido, não vazio e diferente de zero,
habilita implicitamente -fcompare-debug. Se GCC_COMPARE_DEBUG é definido como uma string
começando com um traço, então é usado para opta, caso contrário, o padrão -gtoggle is
usava.

-fcompare-debug =, com o sinal de igual, mas sem opta, é equivalente a
-fno-compare-debug, o que desabilita o despejo da representação final e do
segunda compilação, impedindo até GCC_COMPARE_DEBUG de fazer efeito.

Para verificar a cobertura total durante -fcompare-debug teste, conjunto GCC_COMPARE_DEBUG dizer
-fcompare-debug-not-overridden, que o GCC rejeita como uma opção inválida em qualquer
compilação (em vez de pré-processamento, montagem ou vinculação). Para obter apenas um aviso,
fixação GCC_COMPARE_DEBUG para -w% n-fcompare-debug não sobrescrito vai fazer.

-fcompare-debug-second
Esta opção é passada implicitamente ao compilador para a segunda compilação solicitada
by -fcompare-debug, junto com opções para silenciar avisos e omitir outras opções
que causaria saídas do compilador de efeito colateral para arquivos ou para a saída padrão.
Arquivos de despejo e arquivos temporários preservados são renomeados para conter o ".gk"
extensão adicional durante a segunda compilação, para evitar sobrescrever aqueles
gerado pelo primeiro.

Quando esta opção é passada para o driver do compilador, faz com que o primeiro compilação para
ser ignorado, o que o torna útil apenas para depurar o compilador adequado.

-feliminate-dwarf2-dups
Compacte as informações de depuração DWARF 2, eliminando informações duplicadas sobre
cada símbolo. Esta opção só faz sentido ao gerar depuração DWARF 2
informação com -gdwarf-2.

-femit-struct-debug-baseonly
Emita informações de depuração para tipos semelhantes a estruturas apenas quando o nome de base do
o arquivo de origem da compilação corresponde ao nome base do arquivo no qual a estrutura está definida.

Esta opção reduz substancialmente o tamanho das informações de depuração, mas em
perda potencial significativa de informações de tipo para o depurador. Ver
-femit-struct-debug-reduced para uma opção menos agressiva. Ver
-femit-struct-debug-Detailed para um controle mais detalhado.

Esta opção funciona apenas com DWARF 2.

-femit-struct-debug-reduced
Emita informações de depuração para tipos semelhantes a estruturas apenas quando o nome de base do
arquivo fonte de compilação corresponde ao nome de base do arquivo no qual o tipo é definido,
a menos que a estrutura seja um modelo ou definida em um cabeçalho do sistema.

Esta opção reduz significativamente o tamanho das informações de depuração, com alguns
perda potencial de informações de tipo para o depurador. Ver -femit-struct-debug-baseonly
para uma opção mais agressiva. Ver -femit-struct-debug-Detailed para mais detalhado
controlar.

Esta opção funciona apenas com DWARF 2.

-femit-struct-debug-Detailed[=lista de especificações]
Especifique os tipos de estrutura para os quais o compilador gera informações de depuração. o
a intenção é reduzir as informações de depuração de estrutura duplicadas entre diferentes arquivos de objeto
dentro do mesmo programa.

Esta opção é uma versão detalhada de -femit-struct-debug-reduced e assim
-femit-struct-debug-baseonly, que atende à maioria das necessidades.

Uma especificação tem a sintaxe [é:|ind:][ordem:|gênero:](qualquer|sys|base|Nenhum)

A primeira palavra opcional limita a especificação às estruturas que são usadas diretamente
(é:) ou usado indiretamente (ind:) Um tipo de estrutura é usado diretamente quando é o tipo
de uma variável, membro. Os usos indiretos surgem por meio de indicadores para estruturas. Isso é,
quando o uso de uma estrutura incompleta é válido, o uso é indireto. Um exemplo é struct
um direto; struct dois * indireto;.

A segunda palavra opcional limita a especificação de estruturas comuns (ordem:) ou
estruturas genéricas (gênero:) Estruturas genéricas são um pouco complicadas de explicar. Para C ++,
essas são especializações não explícitas de classes de modelo ou classes não de modelo
dentro do acima. Outras linguagens de programação têm genéricos, mas
-femit-struct-debug-Detailed ainda não os implementa.

A terceira palavra especifica os arquivos de origem para aquelas estruturas para as quais o compilador
deve emitir informações de depuração. Os valores Nenhum e assim qualquer tem o significado normal. o
valor base significa que a base do nome do arquivo em que a declaração de tipo
aparece deve corresponder à base do nome do arquivo de compilação principal. Na prática,
isso significa que ao compilar foo.c, as informações de depuração são geradas para os tipos
declarado naquele arquivo e foo.h, mas não outros arquivos de cabeçalho. O valor que sys significa
esses tipos satisfazem base ou declarado nos cabeçalhos do sistema ou do compilador.

Você pode precisar fazer experiências para determinar as melhores configurações para seu aplicativo.

O padrão é -femit-struct-debug-Detailed = all.

Esta opção funciona apenas com DWARF 2.

-fno-merge-debug-strings
Direcione o vinculador para não mesclar strings nas informações de depuração que são
idênticos em diferentes arquivos de objeto. A mesclagem não é suportada por todos os montadores ou
linkers. A fusão diminui o tamanho das informações de depuração no arquivo de saída em
o custo de aumentar o tempo de processamento do link. A mesclagem está habilitada por padrão.

-fdebug-prefix-map =velho=novo
Ao compilar arquivos no diretório velho, registre informações de depuração descrevendo-as como
in novo ao invés.

-fno-dwarf2-cfi-asm
Emita informações de desenrolamento DWARF 2 conforme a seção ".eh_frame" gerada pelo compilador em vez de usar
Diretivas GAS ".cfi_ *".

-p Gere código extra para escrever informações de perfil adequadas para o programa de análise
prof. Você deve usar esta opção ao compilar os arquivos de origem sobre os quais deseja dados,
e você também deve usá-lo ao vincular.

-pg Gere código extra para escrever informações de perfil adequadas para o programa de análise
gprof. Você deve usar esta opção ao compilar os arquivos de origem sobre os quais deseja dados,
e você também deve usá-lo ao vincular.

-Q Faz com que o compilador imprima cada nome de função à medida que é compilado e imprime alguns
estatísticas sobre cada passagem quando ela termina.

-ftime-report
Faz com que o compilador imprima algumas estatísticas sobre o tempo consumido por cada passagem quando
termina.

-fmem-relatório
Faz com que o compilador imprima algumas estatísticas sobre a alocação de memória permanente quando
termina.

-fmem-report-wpa
Faz com que o compilador imprima algumas estatísticas sobre a alocação de memória permanente para o WPA
fase apenas.

-fpre-ipa-mem-relatório
-fpost-ipa-mem-report
Faz com que o compilador imprima algumas estatísticas sobre a alocação de memória permanente antes ou
após a otimização interprocedural.

-fprofile-report
Faz com que o compilador imprima algumas estatísticas sobre a consistência do perfil (estimado)
e efeito de passes individuais.

-fstack-usage
Faz com que o compilador produza informações de uso da pilha para o programa, por função
base. O nome do arquivo para o despejo é feito anexando .su ao nome auxiliar. nome auxiliar is
gerado a partir do nome do arquivo de saída, se especificado explicitamente e não é um
executável, caso contrário, é o nome de base do arquivo de origem. Uma entrada é composta de
três campos:

* O nome da função.

* Vários bytes.

* Um ou mais qualificadores: "estático", "dinâmico", "limitado".

O qualificador "estático" significa que a função manipula a pilha estaticamente: a
número fixo de bytes são alocados para o quadro na entrada da função e liberados na
saída de função; nenhum ajuste de pilha é feito de outra forma na função. O segundo
campo é este número fixo de bytes.

O qualificador "dinâmico" significa que a função manipula a pilha dinamicamente: em
além da alocação estática descrita acima, os ajustes de pilha são feitos no
corpo da função, por exemplo, para empurrar / pop argumentos em torno das chamadas de função. Se o
qualificador "limitado" também está presente, o valor desses ajustes é limitado a
tempo de compilação e o segundo campo é um limite superior da quantidade total de pilha usada
pela função. Se não estiver presente, o valor desses ajustes não é limitado
em tempo de compilação e o segundo campo representa apenas a parte limitada.

-fprofile-arcs
Adicione o código para que o fluxo do programa arcos são instrumentados. Durante a execução do programa
registra quantas vezes cada ramal e chamada é executada e quantas vezes é realizada
ou retorna. Quando o programa compilado sai, ele salva esses dados em um arquivo chamado
auxname.gcda para cada arquivo de origem. Os dados podem ser usados ​​para direcionados a perfis
otimizações (-fbranch-probabilities), ou para análise de cobertura de teste
(-teste-cobertura) Cada arquivo de objeto nome auxiliar é gerado a partir do nome do
arquivo de saída, se especificado explicitamente e não é o executável final, caso contrário,
é o nome de base do arquivo de origem. Em ambos os casos, qualquer sufixo é removido (por exemplo
foo.gcda para arquivo de entrada dir / foo.cou dir / foo.gcda para arquivo de saída especificado como -o
dir / foo.o).

--cobertura
Esta opção é usada para compilar e vincular o código instrumentado para análise de cobertura. o
opção é um sinônimo de -fprofile-arcs -teste-cobertura (ao compilar) e -lgcov
(ao vincular). Consulte a documentação dessas opções para obter mais detalhes.

* Compile os arquivos de origem com -fprofile-arcs além de otimização e geração de código
opções. Para análise de cobertura de teste, use o adicional -teste-cobertura opção.
Você não precisa criar o perfil de cada arquivo de origem em um programa.

* Vincule seus arquivos de objeto com -lgcov or -fprofile-arcs (o último implica o
antigo).

* Execute o programa em uma carga de trabalho representativa para gerar o perfil do arco
em formação. Isso pode ser repetido várias vezes. Você pode executar simultaneamente
instâncias do seu programa, e desde que o sistema de arquivos suporte bloqueio, o
os arquivos de dados serão atualizados corretamente. Além disso, chamadas "fork" são detectadas e
tratada corretamente (contagem dupla não acontecerá).

* Para otimizações direcionadas ao perfil, compile os arquivos de origem novamente com o mesmo
opções de otimização e geração de código mais -fbranch-probabilities.

* Para análise de cobertura de teste, use gcov para produzir informações legíveis por humanos de
do .gcno e assim .gcda arquivos. Consulte o gcov documentação para mais
informações.

Com -fprofile-arcs, para cada função do seu programa, o GCC cria um fluxo de programa
gráfico, em seguida, encontra uma árvore de abrangência para o gráfico. Apenas arcos que não estão no
árvore de abrangência deve ser instrumentada: o compilador adiciona código para contar o número de
vezes que esses arcos são executados. Quando um arco é a única saída ou única entrada para
um bloco, o código de instrumentação pode ser adicionado ao bloco; caso contrário, um novo básico
bloco deve ser criado para conter o código de instrumentação.

-teste-cobertura
Produza um arquivo de notas que o gcov o utilitário de cobertura de código pode usar para mostrar o programa
cobertura. Cada arquivo de nota do arquivo fonte é chamado auxname.gcno. Consulte o
-fprofile-arcs opção acima para uma descrição de nome auxiliar e instruções sobre como
gerar dados de cobertura de teste. Os dados de cobertura correspondem mais aos arquivos de origem se
você não otimiza.

-fdbg-cnt-list
Imprima o nome e o limite superior do contador para todos os contadores de depuração.

-fdbg-cnt =lista de contra-valores
Defina o limite superior do contador de depuração interno. lista de contra-valores é um separado por vírgulas
lista de nome:valor pares que define o limite superior de cada contador de depuração nome para
valor. Todos os contadores de depuração têm o limite superior inicial de "UINT_MAX"; portanto, "dbg_cnt"
retorna verdadeiro sempre, a menos que o limite superior seja definido por esta opção. Por exemplo, com
-fdbg-cnt = dce: 10, tail_call: 0, "dbg_cnt (dce)" retorna verdadeiro apenas para os primeiros 10
invocações.

-fenável-tipo-passar
-fdisable-tipo-passar=lista de alcance
Este é um conjunto de opções que são usadas para desabilitar / habilitar explicitamente a otimização
passes. Essas opções são destinadas ao uso para depuração do GCC. Os usuários do compilador devem
use opções regulares para habilitar / desabilitar passes.

-fdisable-ipa-passar
Desativar passe IPA passar. passar é o nome do passe. Se a mesma passagem for estaticamente
chamado no compilador várias vezes, o nome da passagem deve ser anexado com um
número sequencial começando em 1.

-fdisable-rtl-passar
-fdisable-rtl-passar=lista de alcance
Desativar passagem RTL passar. passar é o nome do passe. Se a mesma passagem for estaticamente
chamado no compilador várias vezes, o nome da passagem deve ser anexado com um
número sequencial começando em 1. lista de alcance é uma lista separada por vírgulas de
intervalos de função ou nomes de assembler. Cada intervalo é um par de números separados por um
cólon. O intervalo é inclusivo em ambas as extremidades. Se o intervalo for trivial, o número
par pode ser simplificado como um único número. Se o nó do gráfico de chamada da função
uid cai dentro de um dos intervalos especificados, o passar está desabilitado para isso
função. o uid é mostrado no cabeçalho da função de um arquivo de despejo, e a passagem
os nomes podem ser despejados usando a opção -fdump-passes.

-fdisable-tree-passar
-fdisable-tree-passar=lista de alcance
Desativar passagem de árvore passar. Ver -fdisable-rtl para a descrição da opção
argumentos.

-fenable-ipa-passar
Habilitar passe IPA passar. passar é o nome do passe. Se a mesma passagem for estaticamente
chamado no compilador várias vezes, o nome da passagem deve ser anexado com um
número sequencial começando em 1.

-fenable-rtl-passar
-fenable-rtl-passar=lista de alcance
Habilitar passagem RTL passar. Ver -fdisable-rtl para a descrição do argumento da opção e
exemplos.

-fore-árvore-passar
-fore-árvore-passar=lista de alcance
Habilitar passagem de árvore passar. Ver -fdisable-rtl para a descrição dos argumentos da opção.

Aqui estão alguns exemplos que mostram os usos dessas opções.

# desativar ccp1 para todas as funções
-fdisable-tree-ccp1
# desativa o desenrolar completo para a função cujo nó cgraph uid é 1
-fenable-tree-cunroll = 1
# desativar gcse2 para funções nos seguintes intervalos [1,1],
# [300,400] e [400,1000]
# disable gcse2 para as funções foo e foo2
-fdisable-rtl-gcse2 = foo, foo2
# desativar o inlining inicial
-fdisable-tree-einline
# desabilita o inlining do ipa
-fdisable-ipa-inline
# ativar o desenrolar completo da árvore
-fenable-tree-unroll

-dletras
-fdump-rtl-passar
-fdump-rtl-passar=nome do arquivo
Diz para fazer despejos de depuração durante a compilação em momentos especificados por letras. Este
é usado para depurar as passagens baseadas em RTL do compilador. Os nomes de arquivo para a maioria
dos despejos são feitos anexando um número de passagem e uma palavra ao nome de despejo, e as
os arquivos são criados no diretório do arquivo de saída. No caso de =nome do arquivo opção,
o despejo é gerado no arquivo fornecido em vez dos arquivos de despejo numerados da passagem. Observação
que o número do passe é calculado estaticamente conforme os passes são registrados no passe
Gerente. Assim, a numeração não está relacionada com a ordem dinâmica de execução de
passes. Em particular, um passe instalado por um plug-in pode ter um número superior a 200, mesmo
se for executado bem cedo. nome de despejo é gerado a partir do nome do arquivo de saída,
se especificado explicitamente e não é um executável, caso contrário, é o nome de base de
o arquivo de origem. Essas opções podem ter efeitos diferentes quando -E é usado para
pré-processando.

Depurar despejos podem ser habilitados com um -fdump-rtl mudar ou algum -d opção letras. Aqui
são as letras possíveis para uso em passar e assim letras, e seus significados:

-fdump-rtl-alignments
Despejar depois que os alinhamentos de ramificação foram calculados.

-fdump-rtl-asmcons
Despeje depois de corrigir as declarações rtl que têm restrições de entrada / saída insatisfeitas.

-fdump-rtl-auto_inc_dec
Despejar após descoberta auto-inc-dec. Este passe só é executado em arquiteturas que
tem instruções de auto inc ou auto dec.

-fdump-rtl-barreiras
Despeje depois de limpar as instruções de barreira.

-fdump-rtl-bbpart
Despeje após particionar blocos básicos quentes e frios.

-fdump-rtl-bbro
Despejar após reordenar o bloco.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 e assim -fdump-rtl-btl2 habilitar o despejo após o alvo de dois ramos
otimização de carga passa.

-fdump-rtl-bypass
Despeje após ignorar salto e otimizações de fluxo de controle.

-fdump-rtl-combine
Despeje após a aprovação da combinação de instruções RTL.

-fdump-rtl-compgotos
Despeje após duplicar os gotos computados.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2e -fdump-rtl-ce3 permitir o despejo após os três
se a conversão for aprovada.

-fdump-rtl-cprop_hardreg
Despejar após a propagação da cópia de registro físico.

-fdump-rtl-csa
Despeje após combinar os ajustes da pilha.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 e assim -fdump-rtl-cse2 permitir o despejo após os dois
a eliminação da subexpressão passa.

-fdump-rtl-dce
Despeje após a eliminação do código morto autônomo.

-fdump-rtl-dbr
Despejar após agendamento de filial atrasado.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 e assim -fdump-rtl-dce2 permitir o despejo após os dois depósitos mortos
eliminação passa.

-fdump-rtl-eh
Despejar após a finalização do código de tratamento EH.

-fdump-rtl-eh_ranges
Despejar após a conversão das regiões de alcance de manuseio EH.

-fdump-rtl-expandir
Despejar após a geração do RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 e assim -fdump-rtl-fwprop2 permitir o despejo após os dois para a frente
passagem de propagação.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 e assim -fdump-rtl-gcse2 habilitar despejo após comum global
eliminação de subexpressão.

-fdump-rtl-init-regs
Dump após a inicialização dos registros.

-fdump-rtl-initvals
Despeje após o cálculo dos conjuntos de valores iniciais.

-fdump-rtl-into_cfglayout
Despeje após converter para o modo cfglayout.

-fdump-rtl-ira
Despejar após alocação de registro iterada.

-fdump-rtl-jump
Despeje após a segunda otimização de salto.

-fdump-rtl-loop2
-fdump-rtl-loop2 permite o despejo após a otimização do loop rtl passar.

-fdump-rtl-mach
Despeje depois de executar o passo de reorganização dependente da máquina, se esse passo
existe.

-fdump-rtl-mode_sw
Despeje após remover os interruptores de modo redundante.

-fdump-rtl-rnreg
Despejar após a renumeração do registro.

-fdump-rtl-outof_cfglayout
Despeje após converter do modo cfglayout.

-fdump-rtl-peephole2
Despeje após a passagem do olho mágico.

-fdump-rtl-postreload
Despeje após otimizações pós-recarregamento.

-fdump-rtl-pro_and_epilogue
Despeje após gerar os prólogos e epílogos da função.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 e assim -fdump-rtl-sched2 permitir despejo após o bloco básico
agendamento de passes.

-fdump-rtl-ree
Dump após eliminação de sinal / extensão zero.

-fdump-rtl-seqabstr
Despejar após a descoberta de sequência comum.

-fdump-rtl-encurtar
Despeje após encurtar ramos.

-fdump-rtl-irmão
Despejar após otimizações de chamadas de irmãos.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
Essas opções permitem o despejo após cinco rodadas de divisão de instruções.

-fdump-rtl-sms
Despejar após o agendamento do módulo. Este passe só é executado em algumas arquiteturas.

-fdump-rtl-stack
Despejar após a conversão dos registros de "arquivo de registro plano" do GCC para os registros do x87
registradores tipo pilha. Esta passagem só é executada em variantes x86.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 e assim -fdump-rtl-subreg2 permitir o despejo após os dois sub-regs
expansão passa.

-fdump-rtl-unshare
Despejar depois que todos os rtl foram descompartilhados.

-fdump-rtl-vartrack
Despejar após o rastreamento de variável.

-fdump-rtl-vregs
Despeje após converter registros virtuais em registros físicos.

-fdump-rtl-web
Despejar após a divisão da faixa ao vivo.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Esses dumps são definidos, mas sempre produzem arquivos vazios.

-in
-fdump-rtl-all
Produza todos os despejos listados acima.

-dA Anote a saída do assembler com diversas informações de depuração.

-dD Despeje todas as definições de macro, no final do pré-processamento, além do normal
saída.

-dH Produza um dump de memória sempre que ocorrer um erro.

-dp Anote a saída do montador com um comentário indicando qual padrão e
alternativa é usada. O comprimento de cada instrução também é impresso.

-dP Despeje o RTL na saída do montador como um comentário antes de cada instrução. Também
liga -dp anotação.

-dx Apenas gere RTL para uma função em vez de compilá-la. Normalmente usado com
-fdump-rtl-expandir.

-fdump-noaddr
Ao fazer despejos de depuração, suprima a saída de endereço. Isso torna mais viável
use diff na depuração de dumps para invocações do compilador com diferentes binários do compilador
e / ou locais de início text / bss / data / heap / stack / dso diferentes.

-freport-bug
Colete e despeje as informações de depuração em um arquivo temporário se houver ICE no compilador C / C ++
ocorreu.

-fdump-unnumbered
Ao fazer despejos de depuração, suprima os números das instruções e a saída do endereço. Esse
torna mais viável o uso de diff em despejos de depuração para invocações do compilador com
opções diferentes, em particular com e sem -g.

-fdump-unnumbered-links
Ao fazer despejos de depuração (veja -d opção acima), suprimir números de instrução para o
links para as instruções anteriores e seguintes em uma sequência.

-fdump-translation-unit (Apenas C ++)
-fdump-translation-unit-opções (Apenas C ++)
Despeje uma representação da estrutura em árvore de toda a unidade de tradução para um arquivo.
O nome do arquivo é feito anexando .tu ao nome do arquivo de origem, e o arquivo é
criado no mesmo diretório do arquivo de saída. Se o -opções formulário é usado,
opções controla os detalhes do despejo conforme descrito para o -fdump-tree opções.

-fdump-class-hierarquia (Apenas C ++)
-fdump-class-hierarchy-opções (Apenas C ++)
Despeje uma representação da hierarquia de cada classe e layout da tabela de função virtual para um
Arquivo. O nome do arquivo é feito anexando .classe ao nome do arquivo de origem, e o arquivo
é criado no mesmo diretório do arquivo de saída. Se o -opções formulário é usado,
opções controla os detalhes do despejo conforme descrito para o -fdump-tree opções.

-fdump-ipa-interruptor
Controle o despejo em vários estágios da árvore de linguagem de análise entre procedimentos para um
Arquivo. O nome do arquivo é gerado anexando um sufixo específico do switch à fonte
nome do arquivo, e o arquivo é criado no mesmo diretório do arquivo de saída. o
os seguintes despejos são possíveis:

todos os Ativa todos os despejos de análise entre procedimentos.

gráfico
Despeja informações sobre otimização de gráfico de chamada, remoção de função não utilizada e
decisões inlining.

em linha
Despejo após inlining de função.

-fdump-passes
Despeje a lista de passos de otimização que são ativados e desativados pelo atual
opções de linha de comando.

-fdump-statistics-opção
Habilite e controle o despejo de estatísticas de aprovação em um arquivo separado. O nome do arquivo é
gerado anexando um sufixo terminando em .Estatisticas ao nome do arquivo de origem, e o
O arquivo é criado no mesmo diretório do arquivo de saída. Se o -opção forma é
usava, -Estatísticas faz com que os contadores sejam somados em toda a unidade de compilação enquanto
-detalhes despeja todos os eventos à medida que os passes os geram. O padrão sem opção é
para somar contadores para cada função compilada.

-fdump-tree-interruptor
-fdump-tree-interruptor-opções
-fdump-tree-interruptor-opções=nome do arquivo
Controle o despejo em vários estágios de processamento da árvore de linguagem intermediária para
um arquivo. O nome do arquivo é gerado anexando um sufixo específico do switch ao
nome do arquivo de origem e o arquivo é criado no mesmo diretório do arquivo de saída. No
caso de =nome do arquivo opção, o dump é gerado no arquivo fornecido em vez do arquivo automático
arquivos de despejo nomeados. Se o -opções formulário é usado, opções é uma lista de - separado
opções que controlam os detalhes do despejo. Nem todas as opções são aplicáveis ​​a todos
lixões; aqueles que não são significativos são ignorados. As seguintes opções estão disponíveis

endereço
Imprima o endereço de cada nó. Normalmente, isso não é significativo, pois muda
de acordo com o ambiente e o arquivo fonte. Seu uso principal é para amarrar um
arquivo de despejo com um ambiente de depuração.

asmname
Se "DECL_ASSEMBLER_NAME" foi definido para um determinado declínio, use-o no despejo
em vez de "DECL_NAME". Seu uso principal é a facilidade de uso trabalhando para trás a partir de
nomes mutilados no arquivo de montagem.

fino
Ao despejar representações intermediárias de front-end, iniba o despejo de membros de
um escopo ou corpo de uma função simplesmente porque esse escopo foi alcançado. Somente
descartar esses itens quando eles estiverem diretamente acessíveis por algum outro caminho.

Ao despejar árvores bem impressas, esta opção inibe despejar os corpos de
estruturas de controle.

Ao despejar RTL, imprima o RTL em formato fino (condensado) em vez do padrão
Representação semelhante a LISP.

cru Imprima uma representação bruta da árvore. Por padrão, as árvores são bem impressas em
uma representação semelhante a C.

detalhes
Habilite despejos mais detalhados (não respeitados por todas as opções de despejo). Incluir também
informações das passagens de otimização.

stats
Habilita o despejo de várias estatísticas sobre a passagem (não respeitado por todos os despejos
opção).

blocos
Habilite a exibição de limites de bloco básicos (desabilitado em despejos brutos).

gráfico
Para cada um dos outros arquivos de despejo indicados (-fdump-rtl-passar), despeje um
representação do gráfico de fluxo de controle adequado para visualização com GraphViz para
arquivo.passid.pass.dot. Cada função no arquivo é impressa como um subgráfico,
para que o GraphViz possa renderizá-los todos em um único gráfico.

Esta opção atualmente só funciona para despejos RTL, e o RTL é sempre despejado em
forma esguia.

vops
Habilite a exibição de operandos virtuais para cada instrução.

linha
Habilite a exibição de números de linha para declarações.

uid Habilite a exibição do ID único ("DECL_UID") para cada variável.

detalhado
Ative a exibição do despejo da árvore para cada instrução.

eh Habilite a exibição do número da região EH que contém cada instrução.

scev
Ative a exibição de detalhes da análise de evolução escalar.

otimizado
Habilite a exibição de informações de otimização (disponível apenas em alguns passes).

perdido
Habilite a exibição de informações de otimização perdidas (disponível apenas em alguns passes).

nota
Habilite outras informações de otimização detalhadas (disponível apenas em alguns passes).

=nome do arquivo
Em vez de um arquivo de despejo nomeado automaticamente, a saída para o nome de arquivo fornecido. O arquivo
nomes stdout e assim stderr são tratados de forma especial e são considerados já abertos
fluxos padrão. Por exemplo,

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks = foo.dump
-fdump-tree-pre = stderr file.c

gera o despejo do vetorizador em foo.dump, enquanto o dump PRE é enviado para stderr.
Se dois nomes de arquivo de despejo conflitantes forem fornecidos para a mesma passagem, o último
opção substitui a anterior.

todos os Ative todas as opções, exceto cru, fino, detalhado e assim linha.

optall
Ative todas as opções de otimização, ou seja, otimizado, perdidoe nota.

Os seguintes despejos de árvore são possíveis:

original
Despeje antes de qualquer otimização baseada em árvore, para arquivo.original.

otimizado
Despeje após toda a otimização baseada em árvore, para arquivo.otimizado.

ondulante
Despeje cada função antes e depois da passagem de simplificação para um arquivo. O arquivo
nome é feito anexando .gimple ao nome do arquivo de origem.

cfg Despeje o gráfico de fluxo de controle de cada função em um arquivo. O nome do arquivo é feito por
acrescentando .cfg ao nome do arquivo de origem.

ch Despeje cada função após copiar os cabeçalhos do loop. O nome do arquivo é feito anexando
.ch ao nome do arquivo de origem.

ssa Despeje as informações relacionadas ao SSA em um arquivo. O nome do arquivo é feito anexando .ssa
ao nome do arquivo de origem.

aliás
Despeja as informações de aliasing para cada função. O nome do arquivo é feito anexando
.alias ao nome do arquivo de origem.

CCP Despeje cada função após o CCP. O nome do arquivo é feito anexando .ccp ao
nome do arquivo de origem.

Storeccp
Descarregue cada função após STORE-CCP. O nome do arquivo é feito anexando .storeccp
ao nome do arquivo de origem.

pré Despeje as árvores após a eliminação parcial da redundância. O nome do arquivo é feito por
acrescentando .pré ao nome do arquivo de origem.

fre Despeje as árvores após a eliminação total da redundância. O nome do arquivo é feito anexando
.fre ao nome do arquivo de origem.

copyprop
Despeje as árvores após a propagação da cópia. O nome do arquivo é feito anexando .copyprop
ao nome do arquivo de origem.

store_copyprop
Despeje as árvores após a propagação da cópia da loja. O nome do arquivo é feito anexando
.store_copyprop ao nome do arquivo de origem.

dce Despeje cada função após a eliminação do código morto. O nome do arquivo é feito por
acrescentando .dce ao nome do arquivo de origem.

sra Despeje cada função após realizar a substituição escalar dos agregados. O arquivo
nome é feito anexando .sra ao nome do arquivo de origem.

lavatório
Despeje cada função após realizar o rastreamento de código. O nome do arquivo é feito por
acrescentando .Pia ao nome do arquivo de origem.

Sol Despeje cada função após aplicar as otimizações da árvore dominadora. O nome do arquivo é
feito anexando .dom ao nome do arquivo de origem.

DSE Despeje cada função após aplicar a eliminação de armazenamento morto. O nome do arquivo é feito
anexando .dse ao nome do arquivo de origem.

fiop
Despeje cada função após otimizar os nós PHI em código linear. O arquivo
nome é feito anexando .phiopt ao nome do arquivo de origem.

Forwprop
Despeje cada função após a propagação direta das variáveis ​​de uso único. O nome do arquivo
é feito anexando .forwprop ao nome do arquivo de origem.

copyrename
Despeje cada função após aplicar a otimização de renomeação de cópia. O nome do arquivo é
feito anexando .copyrename ao nome do arquivo de origem.

nrv Despeje cada função após aplicar a otimização do valor de retorno nomeado no genérico
árvores. O nome do arquivo é feito anexando .nrv ao nome do arquivo de origem.

vetor
Despeje cada função após aplicar a vetorização de loops. O nome do arquivo é feito
anexando .vect ao nome do arquivo de origem.

slp Despeje cada função após aplicar a vetorização dos blocos básicos. O nome do arquivo é
feito anexando .slp ao nome do arquivo de origem.

vrp Despeje cada função após a propagação do intervalo de valores (VRP). O nome do arquivo é feito por
acrescentando .vrp ao nome do arquivo de origem.

todos os Habilite todos os dumps de árvore disponíveis com os sinalizadores fornecidos nesta opção.

-fopt-info
-fopt-info-opções
-fopt-info-opções=nome do arquivo
Controla os despejos de otimização de várias passagens de otimização. Se o -opções forma é
usava, opções é uma lista de - palavras-chave de opção separadas para selecionar os detalhes de despejo e
otimizações.

A opções pode ser dividido em dois grupos: opções que descrevem a verbosidade do
despejo e opções que descrevem quais otimizações devem ser incluídas. As opções de
ambos os grupos podem ser misturados livremente, uma vez que não se sobrepõem. No entanto, no caso de
quaisquer conflitos, as opções posteriores substituem as opções anteriores na linha de comando.

As seguintes opções controlam o detalhamento do despejo:

otimizado
Imprima informações quando uma otimização for aplicada com sucesso. Depende de um passe
para decidir quais informações são relevantes. Por exemplo, o vetorizador passa a impressão
a localização de origem dos loops que são vetorizados com sucesso.

perdido
Imprima informações sobre otimizações perdidas. Os passes individuais controlam quais
informações a serem incluídas na saída.

nota
Imprima informações detalhadas sobre otimizações, como certas transformações,
mensagens mais detalhadas sobre decisões etc.

todos os Imprima informações detalhadas de otimização. Isso inclui otimizado, perdidoe
nota.

Uma ou mais das seguintes palavras-chave de opção podem ser usadas para descrever um grupo de
otimizações:

ipa Habilite despejos de todas as otimizações interprocedurais.

laço
Habilite dumps de todas as otimizações de loop.

em linha
Habilite despejos de todas as otimizações inlining.

vec Habilite despejos de todas as otimizações de vetorização.

optall
Habilite despejos de todas as otimizações. Este é um superconjunto dos grupos de otimização
listado acima.

If opções é omitido, o padrão é optativo otimizado, o que significa despejar todas as informações
sobre otimizações bem-sucedidas de todos os passes.

Se o nome do arquivo é fornecido, então os dumps de todas as otimizações aplicáveis ​​são
concatenado no nome do arquivo. Caso contrário, o dump é enviado para stderr. Embora
múltiplo -fopt-info opções são aceitas, apenas uma delas pode incluir um nome do arquivo. Se
outros nomes de arquivo são fornecidos e, em seguida, todas as opções, exceto a primeira, são ignoradas.

Observe que a saída nome do arquivo é sobrescrito no caso de várias unidades de tradução. Se
uma saída combinada de várias unidades de tradução é desejada, stderr deve ser usado
ao invés.

No exemplo a seguir, as informações de otimização são enviadas para stderr:

gcc -O3 -fopt-info

Este exemplo:

gcc -O3 -fopt-info-lost = lost.all

gera relatório de otimização perdido de todas as passagens para perdeu.todos, e este:

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

imprime informações sobre oportunidades de otimização perdidas de passes de vetorização
on stderr. Observe que -fopt-info-vec-lost é equivalente a -fopt-info-lost-vec.

Como outro exemplo,

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

produz informações sobre otimizações perdidas, bem como localizações otimizadas de todos
o inlining passa para inline.txt.

Finalmente, considere:

gcc -fopt-info-vec-lost = vec.miss -fopt-info-loop-optimized = loop.opt

Aqui, os dois nomes de arquivo de saída saudade e assim loop.opt estão em conflito já que apenas um
arquivo de saída é permitido. Neste caso, apenas a primeira opção entra em vigor e o
as opções subsequentes são ignoradas. Portanto, apenas saudade é produzido que contém lixeiras
do vetorizador sobre oportunidades perdidas.

-frandom-seed =número
Esta opção fornece uma semente que o GCC usa no lugar de números aleatórios na geração
certos nomes de símbolo que devem ser diferentes em cada arquivo compilado. Isso é também
usado para colocar carimbos exclusivos em arquivos de dados de cobertura e os arquivos de objetos que produzem
eles. Você pode usar o -semente-frando opção de produzir objeto reproduzivelmente idêntico
arquivos.

A número deve ser diferente para cada arquivo que você compilar.

-fsched-verbose =n
Em alvos que usam programação de instrução, esta opção controla a quantidade de
saída de depuração que o planejador imprime. Esta informação é gravada no erro padrão,
a menos que -fdump-rtl-sched1 or -fdump-rtl-sched2 é especificado, caso em que é a saída
para o arquivo de lista de despejo normal, .sched1 or .sched2 respectivamente. Porém para n
maior que nove, a saída é sempre impressa com erro padrão.

Para se qualificar para o n maior que zero, -fsched-verbose produz as mesmas informações que
-fdump-rtl-sched1 e assim -fdump-rtl-sched2. Para n maior do que um, também tem saída básica
probabilidades de bloco, informações detalhadas da lista pronta e informações da unidade / insn. Para n
maior que dois, inclui RTL no ponto de aborto, fluxo de controle e informações de regiões. E
por n mais de quatro, -fsched-verbose também inclui informações de dependência.

-save-temps
-save-temps = cwd
Armazene os arquivos intermediários "temporários" usuais permanentemente; coloque-os na corrente
e nomeie-os com base no arquivo de origem. Assim, compilar foo.c com -c
-save-temps produz arquivos foo.i e assim foo.s, assim como foo.o. Isso cria um
pré-processado foo.i arquivo de saída, embora o compilador agora normalmente use um
pré-processador integrado.

Quando usado em combinação com o -x opção de linha de comando, -save-temps é sensato
o suficiente para evitar sobrescrever um arquivo de origem de entrada com a mesma extensão de um
arquivo intermediário. O arquivo intermediário correspondente pode ser obtido renomeando
o arquivo de origem antes de usar -save-temps.

Se você invocar o GCC em paralelo, compilando vários arquivos de origem diferentes que compartilham um
nome de base comum em subdiretórios diferentes ou o mesmo arquivo de origem compilado para
múltiplos destinos de saída, é provável que os diferentes compiladores paralelos
interferem uns com os outros e sobrescrevem os arquivos temporários. Por exemplo:

gcc -save-temps -o outdir1 / foo.o indir1 / foo.c &
gcc -save-temps -o outdir2 / foo.o indir2 / foo.c &

pode resultar em foo.i e assim foo.o sendo gravados simultaneamente por ambos os compiladores.

-save-temps = obj
Armazene os arquivos intermediários "temporários" usuais permanentemente. Se o -o opção é usada,
os arquivos temporários são baseados no arquivo objeto. Se o -o opção não é usada, o
-save-temps = obj switch se comporta como -save-temps.

Por exemplo:

gcc -save-temps = obj -c foo.c
gcc -save-temps = obj -c bar.c -o dir / xbar.o
gcc -save-temps = obj foobar.c -o dir2 / yfoobar

cria foo.i, foo.s, dir / xbar.i, dir / xbar.s, dir2 / yfoobar.i, dir2 / yfoobar.se
dir2 / yfoobar.o.

-Tempo[=filete]
Relate o tempo de CPU gasto por cada subprocesso na seqüência de compilação. Para C
arquivos de origem, este é o compilador apropriado e assembler (mais o linker se o link for
feito).

Sem a especificação de um arquivo de saída, a saída se parece com isto:

# cc1 0.12 0.01
# como 0.00 0.01

O primeiro número em cada linha é o "tempo do usuário", ou seja, o tempo gasto para executar o
programa em si. O segundo número é "hora do sistema", tempo gasto na execução operacional
rotinas do sistema em nome do programa. Ambos os números estão em segundos.

Com a especificação de um arquivo de saída, a saída é anexada ao arquivo nomeado,
e é assim:

0.12 0.01 cc1
0.00 0.01 como

A "hora do usuário" e a "hora do sistema" são movidas antes do nome do programa, e o
opções passadas para o programa são exibidas, para que se possa saber mais tarde qual arquivo foi
sendo compilado e com quais opções.

-fvar-tracking
Execute a passagem de rastreamento variável. Ele calcula onde as variáveis ​​são armazenadas em cada posição
em código. Melhores informações de depuração são então geradas (se as informações de depuração
formato suporta esta informação).

Está habilitado por padrão ao compilar com otimização (-Os, -O, -O2, ...),
informações de depuração (-g) e o formato de informações de depuração o suporta.

-fvar-tracking-assignments
Anote atribuições a variáveis ​​de usuário no início da compilação e tente transportar
as anotações ao longo da compilação até o final, em uma tentativa
para melhorar as informações de depuração durante a otimização. Uso de -gdwarf-4 é recomendado junto
com isto.

Pode ser habilitado mesmo se var-tracking estiver desabilitado, caso em que as anotações são
criado e mantido, mas descartado no final. Por padrão, este sinalizador está habilitado
Juntamente com -fvar-tracking, exceto quando o agendamento seletivo está ativado.

-fvar-tracking-assignments-toggle
Alterne -fvar-tracking-assignments, da mesma maneira que -gtoggle alterna -g.

-print-file-name =biblioteca
Imprime o nome absoluto completo do arquivo de biblioteca biblioteca isso seria usado quando
ligando --- e não faça mais nada. Com esta opção, o GCC não compila ou vincula
nada; apenas imprime o nome do arquivo.

-print-multi-diretório
Imprime o nome do diretório correspondente ao multilib selecionado por qualquer outra opção
presente na linha de comando. Este diretório deve existir em GCC_EXEC_PREFIX.

-print-multi-lib
Imprima o mapeamento de nomes de diretório multilib para opções de compilador que os habilitam.
O nome do diretório é separado das opções por ;, e cada mudança começa com um
@ ao invés de -, sem espaços entre vários interruptores. Isso é suposto
facilitar o processamento do shell.

-print-multi-os-directory
Imprime o caminho para as bibliotecas do sistema operacional para o multilib selecionado, em relação a alguns lib
subdiretório. Se as bibliotecas do sistema operacional estiverem presentes no lib subdiretório e sem multilibs
são usados, isso geralmente é apenas ., se as bibliotecas do sistema operacional estiverem presentes em libsuffix irmão
diretórios que isso imprime, por exemplo ../ lib64, ../ lib or ../ lib32, ou se as bibliotecas do sistema operacional são
presente em lib / subdir subdiretórios que imprime, por exemplo amd64, sparcv9 or ev6.

-print-multiarch
Imprime o caminho para as bibliotecas do sistema operacional para o multiarch selecionado, em relação a alguns lib
subdiretório.

-print-prog-name =programa
Gostar -impressão-nome-do-arquivo, mas procura um programa como cpp.

-print-libgcc-nome-do-arquivo
Igual a -print-file-name = libgcc.a.

Isso é útil quando você usa -nostdlib or -nodefaultlibs mas você quer se conectar com
libgcc.a. Você pode fazer:

gcc -nostdlib ... `gcc -print-libgcc-file-name`

-print-search-dirs
Imprime o nome do diretório de instalação configurado e uma lista de programas e
diretórios de biblioteca gcc pesquisa --- e não faça mais nada.

Isso é útil quando gcc imprime a mensagem de erro instalação problema, não podes exec
cpp0: Não tal filete or anuário. Para resolver isso, você precisa colocar cpp0 e o
outros componentes do compilador onde gcc espera encontrá-los, ou você pode definir o
variável de ambiente GCC_EXEC_PREFIX para o diretório onde você os instalou. Não
esqueça o rastro /.

-print-sysroot
Imprima o diretório sysroot de destino usado durante a compilação. Isto é o
alvo sysroot especificado no tempo de configuração ou usando o --sysroot opção,
possivelmente com um sufixo extra que depende das opções de compilação. Se não houver alvo
sysroot é especificado, a opção não imprime nada.

-print-sysroot-headers-suffix
Imprima o sufixo adicionado ao sysroot de destino ao pesquisar cabeçalhos ou forneça um
erro se o compilador não estiver configurado com esse sufixo --- e não faça nada
outro.

-máquina de despejo
Imprima a máquina alvo do compilador (por exemplo, i686-pc-linux-gnu) --- e não faça
algo mais.

-versão de despejo
Imprima a versão do compilador (por exemplo, 3.0) --- e não faça mais nada.

-dumpspecs
Imprima as especificações internas do compilador --- e não faça mais nada. (Isso é usado quando
O próprio GCC está sendo construído.)

-fno-eliminar-unused-debug-types
Normalmente, ao produzir saída DWARF 2, o GCC evita produzir saída de símbolo de depuração para
tipos que não são usados ​​em nenhum lugar no arquivo de origem que está sendo compilado. Às vezes é útil
fazer com que o GCC emita informações de depuração para todos os tipos declarados em uma unidade de compilação,
independentemente de serem ou não realmente usados ​​nessa unidade de compilação, para
exemplo se, no depurador, você deseja converter um valor para um tipo que não é realmente
usado em seu programa (mas é declarado). Mais frequentemente, no entanto, isso resulta em um
quantidade significativa de espaço desperdiçado.

Opções Êxtase Controlo Otimização
Essas opções controlam vários tipos de otimizações.

Sem qualquer opção de otimização, o objetivo do compilador é reduzir o custo de compilação
e fazer com que a depuração produza os resultados esperados. As declarações são independentes: se você
pare o programa com um ponto de interrupção entre as instruções, você pode então atribuir um novo valor para
qualquer variável ou altere o contador do programa para qualquer outra instrução na função e obtenha
exatamente os resultados que você espera do código-fonte.

Ativar sinalizadores de otimização faz com que o compilador tente melhorar o desempenho e / ou
tamanho do código em detrimento do tempo de compilação e, possivelmente, a capacidade de depurar o
.

O compilador realiza a otimização com base no conhecimento que possui do programa.
Compilar vários arquivos de uma vez em um único modo de arquivo de saída permite que o compilador use
informações obtidas de todos os arquivos ao compilar cada um deles.

Nem todas as otimizações são controladas diretamente por um sinalizador. Somente otimizações que têm um
sinalizadores estão listados nesta seção.

A maioria das otimizações só são ativadas se um -O nível é definido na linha de comando. De outra forma
eles são desabilitados, mesmo se os sinalizadores de otimização individuais forem especificados.

Dependendo do destino e de como o GCC foi configurado, um conjunto ligeiramente diferente de
otimizações podem ser habilitadas em cada -O nível do que aqueles listados aqui. Você pode invocar o GCC
com -Q --help = otimizadores para descobrir o conjunto exato de otimizações que estão habilitadas em
cada nível.

-O
-O1 Otimize. Otimizar a compilação leva um pouco mais de tempo e muito mais memória para
uma grande função.

Com -O, o compilador tenta reduzir o tamanho do código e o tempo de execução, sem realizar
quaisquer otimizações que demandem muito tempo de compilação.

-O ativa os seguintes sinalizadores de otimização:

-fauto-inc-dec -fbranch-count-reg -fcombine-stack-settings -fcompare-elim
-fcprop-registers -fdce -fdefer-pop -fdelayed-branch -fdse -fforward-propagate
-f adivinhar-probabilidade-ramo -fif-conversion2 -fif-conversão
-finline-functions-called-once -fipa-puro-const -fipa-perfil -fipa-referência
-fmerge-constantes -fmove-loop-invariants -fshrink-wrap -fsplit-wide-types
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftree-ch -ftree-copy-prop -ftree-copyrename
-ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -sem árvores -ftree-phiprop
-ftree-sink -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -funit-at-a-time

-O também liga -fomit-frame-pointer em máquinas onde isso não interfira
com depuração.

-O2 Otimize ainda mais. O GCC realiza quase todas as otimizações com suporte que não
envolvem uma compensação espaço-velocidade. Em comparação com -O, esta opção aumenta tanto
tempo de compilação e o desempenho do código gerado.

-O2 ativa todos os sinalizadores de otimização especificados por -O. Também ativa o seguinte
sinalizadores de otimização: -fthread-jumps -falign-funções -falign-saltos -falign-loops
-falign-rótulos -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -fdesvirtualize -fdevirtualizar-especulativamente
-otimizações caras -fgcse -fgcse-lm -fhoist-adjacente-cargas
-finline-pequenas-funções -findirect-inlining -fipa-cp -fipa-cp-align -fipa-sra
-fipa-icf -fisolate-erroneous-path-dereference -flra-remat -foptimize-sibling-calls
-foptimize-strlen -fpartial-inlining -fpeephole2 -freorder-blocks
-freorder-blocks-and-partition -funções-freorder -frerun-cse-após-loop
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing
-fstrict-overflow -ftree-builtin-call-dce -ftree-switch-conversion -ftree-tail-merge
-ftree-pre -ftree-vrp -fipa-ra

Observe o aviso em -fgcse sobre invocar -O2 em programas que usam computador
Vá para s.

NOTA: No Ubuntu 8.10 e versões posteriores, -D_FORTIFY_SOURCE = 2 é definido por padrão, e é
ativado quando -O é definido como 2 ou superior. Isso permite tempo de compilação adicional e
verificações em tempo de execução para várias funções libc. Para desativar, especifique
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE = 0.

-O3 Otimize ainda mais. -O3 ativa todas as otimizações especificadas por -O2 e também liga
do -funções-finline, -funswitch-loops, -fpredictive-commoning, -fgcse-após-recarregar,
-ftree-loop-vetorize, -ftree-loop-distrib-patterns, -ftree-slp-vetorize,
-fvect-cost-model, -ftree-partial-pre e assim -fipa-cp-clone opções.

-O0 Reduza o tempo de compilação e faça com que a depuração produza os resultados esperados. Isto é o
padrão.

-Os Otimize para o tamanho. -Os habilita todos -O2 otimizações que normalmente não aumentam
tamanho do código. Ele também executa otimizações adicionais projetadas para reduzir o tamanho do código.

-Os desativa os seguintes sinalizadores de otimização: -falign-funções -falign-saltos
-falign-loops -falign-rótulos -freorder-blocks -freorder-blocks-and-partition
-fprefetch-loop-arrays

-Rápido
Desconsidere o cumprimento de padrões estritos. -Rápido habilita todos -O3 otimizações. Isso também
permite otimizações que não são válidas para todos os programas em conformidade com o padrão. Isto
liga -rápida matemática e o específico do Fortran -fno-protect-parens e assim -fstack-arrays.

-Og Otimize a experiência de depuração. -Og permite otimizações que não interferem com
depuração. Deve ser o nível de otimização de escolha para a edição padrão
ciclo de compilação-depuração, oferecendo um nível razoável de otimização, mantendo
compilação rápida e uma boa experiência de depuração.

Se você usar vários -O opções, com ou sem números de nível, a última dessas opções é
aquele que é eficaz.

Opções do formulário -fbandeira especificar sinalizadores independentes de máquina. A maioria das bandeiras tem ambos
formas positivas e negativas; a forma negativa de -ffoo is -fno-foo. Na tabela abaixo,
apenas um dos formulários é listado --- aquele que você normalmente usa. Você pode descobrir o outro
formulário removendo no- ou adicionando.

As opções a seguir controlam otimizações específicas. Eles são ativados por -O
opções ou estão relacionadas com as que são. Você pode usar as seguintes sinalizações nas raras
casos em que o "ajuste fino" das otimizações a serem realizadas é desejado.

-fno-adiar-pop
Sempre coloque os argumentos para cada chamada de função assim que essa função retornar. Para
máquinas que devem exibir argumentos após uma chamada de função, o compilador normalmente permite
argumentos se acumulam na pilha para várias chamadas de função e os exibe todos em
uma vez.

Desativado em níveis -O, -O2, -O3, -Os.

-fforward-propagate
Execute uma propagação direta no RTL. O passe tenta combinar duas instruções
e verifica se o resultado pode ser simplificado. Se o desenrolamento do loop estiver ativo, duas passagens
são executados e o segundo é agendado após o desenrolamento do loop.

Esta opção é habilitada por padrão nos níveis de otimização -O, -O2, -O3, -Os.

-ffp-contract =estilo
-ffp-contract = off desativa a contração da expressão de ponto flutuante. -ffp-contract = fast
permite a contração da expressão de ponto flutuante, como a formação de multiplicação-adição fundida
operações se o destino tiver suporte nativo para eles. -ffp-contract = on permite
contração de expressão de ponto flutuante se permitido pelo padrão de linguagem. Isto é
atualmente não implementado e tratado igual a -ffp-contract = off.

O padrão é -ffp-contract = fast.

-fomit-frame-pointer
Não mantenha o ponteiro do frame em um registro para funções que não precisam de um. Esse
evita as instruções para salvar, configurar e restaurar ponteiros de quadro; também faz um
registro extra disponível em muitas funções. It tb faz depuração impossível on
alguns máquinas.

Em algumas máquinas, como o VAX, este sinalizador não tem efeito, porque o padrão
a sequência de chamada lida automaticamente com o ponteiro do quadro e nada é salvo por
fingindo que não existe. A macro de descrição da máquina "FRAME_POINTER_REQUIRED"
controla se uma máquina de destino suporta este sinalizador.

A configuração padrão (quando não otimizado para tamanho) para GNU / Linux x32 de 86 bits e 32 bits
Os alvos Darwin x86 são -fomit-frame-pointer. Você pode configurar o GCC com o
--enable-frame-pointer configure a opção para alterar o padrão.

Habilitado em níveis -O, -O2, -O3, -Os.

-foptimize-sibling-calls
Otimize chamadas de irmãos e recursivas.

Habilitado em níveis -O2, -O3, -Os.

-foptimize-strlen
Otimize várias funções de string C padrão (por exemplo, "strlen", "strchr" ou "strcpy") e
suas contrapartes "_FORTIFY_SOURCE" em alternativas mais rápidas.

Habilitado em níveis -O2, -O3.

-fno-inline
Não expanda nenhuma função inline além das marcadas com "always_inline"
atributo. Este é o padrão quando não está otimizando.

Funções únicas podem ser isentas de inlining, marcando-as com "noinline"
atributo.

-finline-pequenas-funções
Integre funções em seus chamadores quando seu corpo for menor do que o esperado
código de chamada de função (para que o tamanho geral do programa fique menor). O compilador
decide heuristicamente quais funções são simples o suficiente para valer a pena integrar em
Por aqui. Esse inline se aplica a todas as funções, mesmo aquelas não declaradas inline.

Ativado no nível -O2.

-findirect-inlining
Inline também chamadas indiretas que são conhecidas em tempo de compilação graças a
inlining anterior. Esta opção só tem efeito quando o próprio inlining está ligado
pelo -funções-finline or -finline-pequenas-funções opções.

Ativado no nível -O2.

-funções-finline
Considere todas as funções para inline, mesmo se não forem declaradas inline. o
O compilador decide heuristicamente quais funções valem a pena integrar dessa maneira.

Se todas as chamadas para uma determinada função são integradas e a função é declarada
"estática", então a função normalmente não é produzida como código assembler por si só.

Ativado no nível -O3.

-finline-functions-called-once
Considere todas as funções "estáticas" chamadas uma vez para inlining em seu chamador, mesmo se
eles não são marcados como "embutidos". Se uma chamada para uma determinada função for integrada, o
a função não é produzida como código assembler por si só.

Habilitado em níveis -O1, -O2, -O3 e assim -Os.

-com medo
Funções embutidas marcadas por "always_inline" e funções cujo corpo parece menor que
a sobrecarga da chamada de função antes de fazer -fprofile-generate instrumentação e
passe inlining real. Isso torna a criação de perfil significativamente mais barata e geralmente
inlining mais rápido em programas com grandes cadeias de funções de invólucro aninhadas.

Ativado por padrão.

-fipa-sra
Realizar substituição escalar interprocedural de agregados, remoção de parâmetros não utilizados
e substituição de parâmetros passados ​​por referência por parâmetros passados ​​por valor.

Habilitado em níveis -O2, -O3 e assim -Os.

-finline-limit =n
Por padrão, o GCC limita o tamanho das funções que podem ser embutidas. Esta bandeira permite
controle grosseiro deste limite. n é o tamanho das funções que podem ser embutidas em
número de pseudo instruções.

Inlining é, na verdade, controlado por uma série de parâmetros, que podem ser especificados
individualmente usando --param nome=valor. o -finline-limit =n opção define alguns dos
esses parâmetros da seguinte forma:

max-inline-insns-single
está definido para n/ 2.

max-inline-insns-auto
está definido para n/ 2.

Veja abaixo a documentação dos parâmetros individuais controlando inlining e
para os padrões desses parâmetros.

Observação: pode não haver valor para -finline-limit que resulta em comportamento padrão.

Observação: pseudo instrução representa, neste contexto particular, um resumo
medição do tamanho da função. De forma alguma representa uma contagem de montagem
instruções e, como tal, seu significado exato pode mudar de uma versão para uma
outro.

-fno-keep-inline-dllexport
Esta é uma versão mais refinada de -fkeep-inline-functions, que se aplica apenas a
funções que são declaradas usando o atributo "dllexport" ou declspec

-fkeep-inline-functions
Em C, emita funções "estáticas" que são declaradas "inline" no arquivo de objeto, mesmo se
a função foi embutida em todos os seus chamadores. Esta mudança não afeta
funções usando a extensão "extern inline" no GNU C90. Em C ++, emita todo e qualquer
funções embutidas no arquivo de objeto.

-fkeep-static-consts
Variáveis ​​de emissão declaradas "const estático" quando a otimização não está ativada, mesmo se o
variáveis ​​não são referenciadas.

O GCC habilita essa opção por padrão. Se você quiser forçar o compilador a verificar se um
variável é referenciada, independentemente de a otimização estar ou não ativada, use
do -fno-keep-static-consts opção.

-fmerge-constantes
Tentar mesclar constantes idênticas (constantes de string e constantes de ponto flutuante)
em unidades de compilação.

Esta opção é o padrão para a compilação otimizada se o montador e o vinculador
apoie isso. Usar -fno-merge-constantes para inibir esse comportamento.

Habilitado em níveis -O, -O2, -O3, -Os.

-fmerge-all-constantes
Tente mesclar constantes idênticas e variáveis ​​idênticas.

Esta opção implica -fmerge-constantes. Além de -fmerge-constantes isto
considera, por exemplo, até matrizes inicializadas constantes ou variáveis ​​constantes inicializadas com
tipos integrais ou de ponto flutuante. Linguagens como C ou C ++ requerem cada variável,
incluindo várias instâncias da mesma variável em chamadas recursivas, para ter
locais, portanto, usar esta opção resulta em comportamento não conforme.

-fmodulo-sched
Execute o agendamento do módulo de swing imediatamente antes da primeira passagem de agendamento. Esse
passar olha para os loops mais internos e reordena suas instruções sobrepondo diferentes
iterações.

-fmodulo-sched-allow-regmoves
Execute um agendamento de módulo baseado em SMS mais agressivo com movimentos de registro permitidos. Por
definindo este sinalizador, certas arestas anti-dependências são excluídas, o que aciona o
geração de movimentos regulares com base na análise do intervalo de vida. Esta opção é eficaz
somente com -fmodulo-sched ativado.

-fno-branch-count-reg
Não use as instruções de "decremento e desvio" em um registro de contagem, mas em vez disso
gerar uma sequência de instruções que diminuem um registro, compare-o com
zero, então ramifique com base no resultado. Esta opção só é significativa em
arquiteturas que suportam tais instruções, que incluem x86, PowerPC, IA-64 e
S / 390

Ativado por padrão em -O1 e mais alto.

O padrão é -fbranch-count-reg.

-fno-função-cse
Não coloque endereços de função em registradores; faça cada instrução que chama um
a função constante contém o endereço da função explicitamente.

Esta opção resulta em um código menos eficiente, mas alguns hacks estranhos que alteram o
a saída do assembler pode ser confundida pelas otimizações realizadas quando esta opção é
não usado.

O padrão é -função-cse

-fno-zero-inicializado-em-bss
Se o destino suporta uma seção BSS, o GCC por padrão coloca variáveis ​​que são
inicializado em zero no BSS. Isso pode economizar espaço no código resultante.

Esta opção desativa este comportamento porque alguns programas dependem explicitamente de variáveis
indo para a seção de dados --- por exemplo, para que o executável resultante possa encontrar o
início dessa seção e / ou fazer suposições com base nisso.

O padrão é -fzero-inicializado-em-bss.

-fthread-jumps
Execute otimizações que verificam se um salto ramifica para um local onde outro
a comparação subsumida pela primeira é encontrada. Nesse caso, o primeiro branch é redirecionado para
ou o destino da segunda ramificação ou um ponto imediatamente a seguir,
dependendo se a condição é conhecida como verdadeira ou falsa.

Habilitado em níveis -O2, -O3, -Os.

-fsplit-wide-types
Ao usar um tipo que ocupa vários registros, como "long long" em um de 32 bits
sistema, separar os registros e alocá-los de forma independente. Isso normalmente
gera um código melhor para esses tipos, mas pode tornar a depuração mais difícil.

Habilitado em níveis -O, -O2, -O3, -Os.

-fcse-follow-jumps
Na eliminação de subexpressão comum (CSE), examine as instruções de salto quando o
o alvo do salto não é alcançado por nenhum outro caminho. Por exemplo, quando o CSE encontra
uma instrução "if" com uma cláusula "else", o CSE segue o salto quando a condição
testado é falso.

Habilitado em níveis -O2, -O3, -Os.

-fcse-skip-blocks
Isso é semelhante a -fcse-follow-jumps, mas faz com que o CSE siga os saltos que
pular blocos condicionalmente. Quando o CSE encontra uma instrução "if" simples sem
cláusula else, -fcse-skip-blocks faz com que o CSE siga o salto em torno do corpo do
"E se".

Habilitado em níveis -O2, -O3, -Os.

-frerun-cse-após-loop
Execute novamente a eliminação de subexpressão comum depois que as otimizações de loop forem realizadas.

Habilitado em níveis -O2, -O3, -Os.

-fgcse
Execute uma passagem de eliminação de subexpressão comum global. Este passe também executa
constante global e propagação de cópia.

Observação: Ao compilar um programa usando gotos computados, uma extensão GCC, você pode obter
melhor desempenho de tempo de execução se você desativar a eliminação de subexpressão comum global
passar adicionando -fno-gcse para a linha de comando.

Habilitado em níveis -O2, -O3, -Os.

-fgcse-lm
Quando -fgcse-lm está habilitado, a eliminação de subexpressão comum global tenta mover
cargas que são eliminadas apenas pelas lojas em si mesmas. Isso permite um loop contendo um
carregar / armazenar a sequência a ser alterada para uma carga fora do loop, e uma cópia / armazenar dentro
o laço.

Ativado por padrão quando -fgcse está ativado.

-fgcse-sm
Quando -fgcse-sm está habilitado, uma passagem de movimento de armazenamento é executada após o comum global
eliminação de subexpressão. Esta passagem tenta mover as lojas para fora dos loops. Quando usado
em conjunção com -fgcse-lm, os loops contendo uma sequência de carregamento / armazenamento podem ser alterados
para uma carga antes do loop e uma loja após o loop.

Não habilitado em nenhum nível de otimização.

-fgcse-las
Quando -fgcse-las está habilitado, o passo de eliminação de subexpressão comum global
elimina cargas redundantes que vêm depois de armazenamentos no mesmo local de memória (ambos
redundâncias parciais e totais).

Não habilitado em nenhum nível de otimização.

-fgcse-após-recarregar
Quando -fgcse-após-recarregar está habilitado, uma passagem de eliminação de carga redundante é executada
após recarregar. O objetivo desta passagem é limpar derramamentos redundantes.

-faggressive-loop-otimizations
Esta opção diz ao otimizador de loop para usar restrições de linguagem para derivar limites para
o número de iterações de um loop. Isso pressupõe que o código de loop não invoca
comportamento indefinido, por exemplo, causando estouros de inteiros assinados ou fora do limite
acessos de matriz. Os limites para o número de iterações de um loop são usados ​​para guiar
loop unrolling e peeling e otimizações de teste de saída de loop. Esta opção está habilitada
por padrão.

-funsafe-loop-otimizations
Esta opção diz ao otimizador de loop para assumir que os índices de loop não estouram, e
que os loops com condição de saída não trivial não são infinitos. Isso permite uma ampla
gama de otimizações de loop, mesmo se o próprio otimizador de loop não puder provar que estes
suposições são válidas. Se você usar -Wunsafe-loop-otimizações, o compilador avisa você
se encontrar este tipo de loop.

-fcrossjumping
Execute a transformação de salto cruzado. Esta transformação unifica código equivalente e
salva o tamanho do código. O código resultante pode ou não ter um desempenho melhor do que sem
pulando.

Habilitado em níveis -O2, -O3, -Os.

-fauto-inc-dec
Combine incrementos ou decrementos de endereços com acessos à memória. Este passe é
sempre pulado em arquiteturas que não têm instruções para oferecer suporte a isso.
Ativado por padrão em -O e superior em arquiteturas que suportam isso.

-fdce
Execute a eliminação de código morto (DCE) em RTL. Ativado por padrão em -O e mais alto.

-fdse
Execute a eliminação de armazenamento morto (DSE) em RTL. Ativado por padrão em -O e mais alto.

-fif-conversão
Tente transformar saltos condicionais em equivalentes sem ramificação. Isso inclui
uso de movimentos condicionais, min, max, set flags e instruções abdominais, e alguns truques
factível pela aritmética padrão. O uso de execução condicional em chips onde está
disponível é controlado por -fif-conversion2.

Habilitado em níveis -O, -O2, -O3, -Os.

-fif-conversion2
Use a execução condicional (quando disponível) para transformar saltos condicionais em
equivalentes sem ramificação.

Habilitado em níveis -O, -O2, -O3, -Os.

-fdeclone-ctor-dtor
O C ++ ABI requer vários pontos de entrada para construtores e destruidores: um para um
subobjeto base, um para um objeto completo e outro para um destruidor virtual que chama
operador excluir depois. Para uma hierarquia com bases virtuais, a base e completa
as variantes são clones, o que significa duas cópias da função. Com esta opção, o
as variantes base e completa são alteradas para serem thunks que chamam uma implementação comum.

Ativado por -Os.

-fdelete-null-pointer-checks
Suponha que os programas não possam remover a referência de ponteiros nulos com segurança e que nenhum código ou dado
elemento reside lá. Isso permite otimizações simples e constantes de dobra em tudo
níveis de otimização. Além disso, outras passagens de otimização no GCC usam este sinalizador para
controlar análises de fluxo de dados globais que eliminam verificações inúteis de ponteiros nulos;
estes assumem que se um ponteiro for verificado depois de já ter sido desreferenciado, ele
não pode ser nulo.

Observe, entretanto, que em alguns ambientes essa suposição não é verdadeira. Usar
-fno-delete-null-pointer-checks para desativar esta otimização para programas que dependem
sobre esse comportamento.

Alguns destinos, especialmente os incorporados, desabilitam essa opção em todos os níveis. De outra forma
está habilitado em todos os níveis: -O0, -O1, -O2, -O3, -Os. Cartões que usam as informações
são ativados de forma independente em diferentes níveis de otimização.

-fdesvirtualize
Tente converter chamadas em funções virtuais para chamadas diretas. Isso é feito tanto
dentro de um procedimento e interproceduralmente como parte do inlining indireto
(-findirect-inlining) e propagação de constante interprocedural (-fipa-cp) Habilitado em
níveis -O2, -O3, -Os.

-fdevirtualizar-especulativamente
Tente converter chamadas para funções virtuais em chamadas diretas especulativas. Baseado em
a análise do gráfico de herança de tipo, determine para uma determinada chamada o conjunto de
alvos prováveis. Se o conjunto for pequeno, de preferência de tamanho 1, mude a chamada para um
decisão condicional entre chamadas diretas e indiretas. As chamadas especulativas permitem
mais otimizações, como inlining. Quando eles parecem inúteis depois de mais
otimização, eles são convertidos de volta à forma original.

-fdevirtualize-at-ltrans
Transmita informações extras necessárias para desvirtualização agressiva ao executar o link-
otimizador de tempo no modo de transformação local. Esta opção permite mais
desvirtualização, mas aumenta significativamente o tamanho dos dados transmitidos. Por esta
razão pela qual ele está desabilitado por padrão.

-otimizações caras
Execute uma série de pequenas otimizações que são relativamente caras.

Habilitado em níveis -O2, -O3, -Os.

-livre
Tente remover as instruções de extensão redundantes. Isso é especialmente útil para
a arquitetura x86-64, que implicitamente se estende a zero em registros de 64 bits após
gravando na metade inferior de 32 bits.

Habilitado para Alpha, AArch64 e x86 em níveis -O2, -O3, -Os.

-fno-lifetime-dse
Em C ++, o valor de um objeto só é afetado por mudanças durante o seu tempo de vida: quando
o construtor começa, o objeto tem um valor indeterminado e quaisquer mudanças durante
o tempo de vida do objeto está morto quando o objeto é destruído. Loja normalmente morta
a eliminação vai tirar vantagem disso; se o seu código depende do valor do
armazenamento de objeto persistindo além do tempo de vida do objeto, você pode usar este sinalizador para
desative esta otimização.

-flive-range-encolhimento
Tentar diminuir a pressão do registro por meio da redução da faixa ao vivo do registro. Isto é
útil para processadores rápidos com conjuntos de registros de tamanho pequeno ou moderado.

-fira-algorithm =algoritmo
Use o algoritmo de coloração especificado para o alocador de registro integrado. o
algoritmo argumento pode ser prioridade, que especifica a coloração prioritária de Chow, ou CB,
que especifica a coloração Chaitin-Briggs. A coloração Chaitin-Briggs não foi implementada
para todas as arquiteturas, mas para aqueles alvos que oferecem suporte, é o padrão
porque gera um código melhor.

-fira-region =região
Use regiões especificadas para o alocador de registro integrado. o região argumento
deve ser um dos seguintes:

todos os Use todos os loops como regiões de alocação de registro. Isso pode dar os melhores resultados para
máquinas com um conjunto de registros pequeno e / ou irregular.

misto
Use todos os loops, exceto os loops com pequena pressão de registro como regiões. Esse
valor geralmente dá os melhores resultados na maioria dos casos e para a maioria das arquiteturas, e
está habilitado por padrão ao compilar com otimização para velocidade (-O, -O2, ...).

um Use todas as funções como uma única região. Isso normalmente resulta no menor código
tamanho, e está habilitado por padrão para -Os or -O0.

-fira-grua-pressão
Use IRA para avaliar a pressão de registro na passagem de içamento do código para decisões de içar
expressões. Esta opção geralmente resulta em um código menor, mas pode retardar o
compilador para baixo.

Esta opção está habilitada no nível -Os para todos os alvos.

-fira-loop-pressão
Use IRA para avaliar a pressão de registro em loops para decisões de mover invariantes de loop.
Esta opção geralmente resulta na geração de código mais rápido e menor em máquinas com
arquivos de registro grandes (> = 32 registros), mas pode tornar o compilador lento.

Esta opção está habilitada no nível -O3 para alguns alvos.

-fno-ira-share-save-slots
Desative o compartilhamento de slots de pilha usados ​​para salvar registros permanentes de chamadas usadas
uma chamada. Cada registro rígido recebe um slot de pilha separado e, como resultado, a pilha de funções
os quadros são maiores.

-Fno-IRA-Share-Spill-Slots
Desative o compartilhamento de slots de pilha alocados para pseudo-registros. Cada pseudo-registro
que não obtém um registro rígido obtém um slot de pilha separado e, como resultado, a função
os frames da pilha são maiores.

-fira-verbose =n
Controle o detalhamento do arquivo de despejo para o alocador de registro integrado. o
o valor padrão é 5. Se o valor n for maior ou igual a 10, a saída de despejo é enviada
para stderr usando o mesmo formato que n menos 10.

-flra-remat
Ative a rematerialização sensível a CFG no LRA. Em vez de carregar valores de derramado
pseudos, o LRA tenta rematerializar (recalcular) os valores se for lucrativo.

Habilitado em níveis -O2, -O3, -Os.

-fdelayed-branch
Se houver suporte para a máquina de destino, tente reordenar as instruções para explorar
slots de instrução disponíveis após instruções de desvio atrasadas.

Habilitado em níveis -O, -O2, -O3, -Os.

-fschedule-insns
Se compatível com a máquina de destino, tente reordenar as instruções para eliminar
a execução é paralisada devido à indisponibilidade dos dados necessários. Isso ajuda as máquinas que
têm ponto flutuante lento ou instruções de carregamento de memória, permitindo que outras instruções
ser emitido até que o resultado da instrução de carga ou de ponto flutuante seja necessário.

Habilitado em níveis -O2, -O3.

-fschedule-insns2
Semelhante a -fschedule-insns, mas solicita uma passagem adicional de agendamento de instrução
após a alocação do registro. Isso é especialmente útil em máquinas com um
número relativamente pequeno de registros e onde as instruções de carregamento de memória levam mais do que
um ciclo.

Habilitado em níveis -O2, -O3, -Os.

-fno-sched-interblock
Não agende instruções em blocos básicos. Normalmente está habilitado por padrão
ao agendar antes da alocação de registro, ou seja, com -fschedule-insns ou em -O2 or
superior.

-fno-sched-spec
Não permita o movimento especulativo de instruções sem carga. Isso normalmente é habilitado por
padrão ao programar antes da alocação do registro, ou seja, com -fschedule-insns ou em
-O2 ou superior.

-fsched-pressão
Habilite o agendamento insn sensível à pressão do registro antes da alocação do registro. Esse
só faz sentido quando o agendamento antes que a alocação de registro seja habilitada, ou seja, com
-fschedule-insns ou em -O2 ou mais alto. O uso desta opção pode melhorar o
codificar e diminuir seu tamanho, evitando o aumento da pressão de registro acima do número
de registros físicos disponíveis e vazamentos subsequentes na alocação de registros.

-fsched-spec-load
Permitir movimento especulativo de algumas instruções de carga. Isso só faz sentido quando
agendamento antes da alocação de registro, ou seja, com -fschedule-insns ou em -O2 ou superior.

-fsched-spec-load-perigoso
Permitir movimento especulativo de mais instruções de carga. Isso só faz sentido quando
agendamento antes da alocação de registro, ou seja, com -fschedule-insns ou em -O2 ou superior.

-fsched-stalled-insns
-fsched-stalled-insns =n
Defina quantos insns (se houver) podem ser movidos prematuramente da fila de bloqueados
insns na lista pronta durante a segunda passagem de agendamento. -fno-sched-stalled-insns
significa que nenhum insns é movido prematuramente, -fsched-stalled-insns = 0 significa que não há
limite de quantos insns enfileirados podem ser movidos prematuramente. -fsched-stalled-insns
sem um valor é equivalente a -fsched-stalled-insns = 1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep =n
Defina quantos grupos insn (ciclos) são examinados quanto à dependência de um insn paralisado
isso é um candidato para remoção prematura da fila de insns paralisados. Este tem
um efeito apenas durante a segunda passagem de agendamento, e somente se -fsched-stalled-insns is
usava. -fno-sched-stalled-insns-dep é equivalente a -fsched-stalled-insns-dep = 0.
-fsched-stalled-insns-dep sem um valor é equivalente a
-fsched-stalled-insns-dep = 1.

-fsched2-use-superblocks
Ao programar após a alocação de registro, use o escalonamento de superbloco. Isso permite
movimento através dos limites básicos do bloco, resultando em agendamentos mais rápidos. Esta opção é
experimental, já que nem todas as descrições de máquina usadas pelo GCC modelam a CPU de maneira suficientemente próxima
para evitar resultados não confiáveis ​​do algoritmo.

Isso só faz sentido ao agendar após a alocação de registro, ou seja, com
-fschedule-insns2 ou em -O2 ou superior.

-fsched-group-heuristic
Habilite a heurística de grupo no agendador. Esta heurística favorece a instrução
que pertence a um grupo de programação. Isso é habilitado por padrão quando o agendamento é
habilitado, ou seja, com -fschedule-insns or -fschedule-insns2 ou em -O2 ou superior.

-fsched-critical-path-heuristic
Ative a heurística de caminho crítico no agendador. Esta heurística favorece
instruções sobre o caminho crítico. Isso é habilitado por padrão quando o agendamento é
habilitado, ou seja, com -fschedule-insns or -fschedule-insns2 ou em -O2 ou superior.

-fsched-spec-insn-heuristic
Habilite a heurística de instrução especulativa no escalonador. Esta heurística favorece
instruções especulativas com maior fraqueza de dependência. Isto está ativado por padrão
quando o agendamento está habilitado, ou seja, com -fschedule-insns or -fschedule-insns2 ou em -O2
ou superior.

-fsched-rank-heuristic
Habilite a heurística de classificação no planejador. Esta heurística favorece a instrução
pertencente a um bloco básico com maior tamanho ou frequência. Isto está ativado por padrão
quando o agendamento está habilitado, ou seja, com -fschedule-insns or -fschedule-insns2 ou em -O2
ou superior.

-fsched-last-insn-heuristic
Habilite a heurística da última instrução no escalonador. Esta heurística favorece o
instrução que é menos dependente da última instrução agendada. Isso está habilitado
por padrão, quando o agendamento está habilitado, ou seja, com -fschedule-insns or -fschedule-insns2
ou em -O2 ou superior.

-fsched-dep-count-heuristic
Ative a heurística de contagem dependente no agendador. Esta heurística favorece o
instrução que tem mais instruções dependendo dela. Isto está ativado por padrão
quando o agendamento está habilitado, ou seja, com -fschedule-insns or -fschedule-insns2 ou em -O2
ou superior.

-freschedule-modulo-Schedules-loops
A programação do módulo é executada antes da programação tradicional. Se um loop for módulo
agendada, as passagens de agendamento posteriores podem alterar sua agenda. Use esta opção para
controlar esse comportamento.

- agendamento seletivo
Agende instruções usando algoritmo de agendamento seletivo. Execuções de programação seletiva
em vez da primeira passagem do planejador.

- agendamento seletivo 2
Agende instruções usando algoritmo de agendamento seletivo. Execuções de programação seletiva
em vez da segunda passagem do planejador.

-fsel-sched-pipelining
Habilite o pipelining de software dos loops mais internos durante o agendamento seletivo. Esse
opção não tem efeito a menos que um dos - agendamento seletivo or - agendamento seletivo 2
está ligado.

-fsel-sched-pipelining-outer-loops
Ao canalizar loops durante o agendamento seletivo, também canalize os loops externos. Esse
opção não tem efeito a menos -fsel-sched-pipelining está ligado.

-fsemantic-interposition
Alguns formatos de objeto, como ELF, permitem a interposição de símbolos pelo vinculador dinâmico.
Isso significa que para símbolos exportados do DSO, o compilador não pode executar
propagação interprocedural, inlining e outras otimizações em antecipação que o
função ou variável em questão pode mudar. Embora esse recurso seja útil, para
exemplo, para reescrever funções de alocação de memória por uma implementação de depuração, é
caro em termos de qualidade de código. Com -fno-semântica-interposição o compilador
assume que se a interposição acontecer para as funções, a função de substituição terá
precisamente a mesma semântica (e efeitos colaterais). Da mesma forma, se a interposição acontecer
para variáveis, o construtor da variável será o mesmo. A bandeira não tem
efeito para funções explicitamente declaradas inline (onde nunca é permitido para
interposição para alterar a semântica) e para símbolos explicitamente declarados fracos.

-fshrink-wrap
Emita prólogos de função apenas antes das partes da função que precisam deles, ao invés de
o topo da função. Este sinalizador é habilitado por padrão em -O e mais alto.

-fcaller-saves
Habilite a alocação de valores para registros que são substituídos por chamadas de função, por
emitindo instruções extras para salvar e restaurar os registros em torno de tais chamadas. Tal
a alocação é feita apenas quando parece resultar em um código melhor.

Esta opção está sempre habilitada por padrão em certas máquinas, geralmente aquelas que têm
nenhum registro preservado de chamada para usar em seu lugar.

Habilitado em níveis -O2, -O3, -Os.

-fcombine-stack-settings
Rastreia ajustes de pilha (pushes e pops) e empilha referências de memória e, em seguida, tenta
para encontrar maneiras de combiná-los.

Ativado por padrão em -O1 e mais alto.

-fipa-ra
Use registradores salvos do chamador para alocação se esses registradores não forem usados ​​por nenhum dos chamados
função. Nesse caso, não é necessário salvá-los e restaurá-los ao redor das chamadas.
Isso só é possível se as funções chamadas fizerem parte da mesma unidade de compilação da atual
função e são compilados antes dela.

Habilitado em níveis -O2, -O3, -Os.

-fconserve-stack
Tente minimizar o uso da pilha. O compilador tenta usar menos espaço de pilha, mesmo
se isso torna o programa mais lento. Esta opção implica definir o estrutura de pilha grande
parâmetro para 100 e o crescimento de frame de pilha grande parâmetro para 400.

-ftree-reassoc
Realize a reassociação nas árvores. Este sinalizador é habilitado por padrão em -O e mais alto.

-ftree-pre
Execute a eliminação de redundância parcial (PRE) nas árvores. Este sinalizador é habilitado por
padrão em -O2 e assim -O3.

-ftree-partial-pre
Torne a eliminação de redundância parcial (PRE) mais agressiva. Este sinalizador é habilitado por
padrão em -O3.

-ftree-forwprop
Realize a propagação direta nas árvores. Este sinalizador é habilitado por padrão em -O e assim
superior.

-sem árvores
Execute a eliminação total de redundância (FRE) nas árvores. A diferença entre FRE e
PRE é que FRE considera apenas expressões que são calculadas em todos os caminhos que levam a
a computação redundante. Esta análise é mais rápida do que PRE, embora exponha menos
redundâncias. Este sinalizador é habilitado por padrão em -O e mais alto.

-ftree-phiprop
Realize o içamento de cargas a partir de ponteiros condicionais nas árvores. Este passe é habilitado por
padrão em -O e mais alto.

-fhoist-adjacente-cargas
Içar cargas especulativamente de ambos os ramos de um if-then-else se as cargas forem de
locais adjacentes na mesma estrutura e a arquitetura alvo tem um condicional
instrução de movimento. Este sinalizador é habilitado por padrão em -O2 e mais alto.

-ftree-copy-prop
Execute a propagação de cópias nas árvores. Essa passagem elimina operações de cópia desnecessárias.
Este sinalizador é habilitado por padrão em -O e mais alto.

-fipa-puro-const
Descubra quais funções são puras ou constantes. Ativado por padrão em -O e mais alto.

-fipa-referência
Descubra quais variáveis ​​estáticas não escapam da unidade de compilação. Ativado por
padrão em -O e mais alto.

-fipa-pta
Realizar análise de ponteiro interprocedural e modificação interprocedural e
análise de referência. Esta opção pode causar memória excessiva e uso de tempo de compilação em
grandes unidades de compilação. Não é habilitado por padrão em nenhum nível de otimização.

-fipa-perfil
Realize a propagação do perfil interprocedural. As funções chamadas apenas a partir do frio
funções são marcadas como frias. Também funções executadas uma vez (como "frio",
"noreturn", construtores estáticos ou destruidores) são identificados. Funções frias e
Loop menos partes das funções executadas uma vez são então otimizadas para tamanho. Ativado por
padrão em -O e mais alto.

-fipa-cp
Execute a propagação da constante interprocedural. Esta otimização analisa o programa
para determinar quando os valores passados ​​para as funções são constantes e, em seguida, otimiza
adequadamente. Esta otimização pode aumentar substancialmente o desempenho se o
aplicativo tem constantes passadas para funções. Este sinalizador é habilitado por padrão em
-O2, -Os e assim -O3.

-fipa-cp-clone
Execute a clonagem de funções para tornar a propagação da constante interprocedural mais forte. Quando
ativada, a propagação de constante interprocedural realiza clonagem de função quando
função externamente visível pode ser chamada com argumentos constantes. Porque isso
a otimização pode criar várias cópias de funções, pode aumentar significativamente
tamanho do código (ver --param ipcp-unit-growth =valor) Este sinalizador é habilitado por padrão em
-O3.

-fipa-cp-align
Quando ativada, esta otimização propaga o alinhamento dos parâmetros da função para oferecer suporte
melhor vetorização e operações de string.

Este sinalizador é habilitado por padrão em -O2 e assim -Os. Requer que -fipa-cp está ativado.

-fipa-icf
Execute o dobramento de código idêntico para funções e variáveis ​​somente leitura. o
a otimização reduz o tamanho do código e pode perturbar as pilhas de desenrolamento, substituindo uma função
por um equivalente com um nome diferente. A otimização funciona de forma mais eficaz com
otimização de tempo de link habilitada.

No entanto, o comportamento é semelhante à otimização do Gold Linker ICF, o GCC ICF trabalha em
níveis diferentes e, portanto, as otimizações não são as mesmas - há equivalências que
são encontrados apenas por GCC e equivalências encontradas apenas por Gold.

Este sinalizador é habilitado por padrão em -O2 e assim -Os.

-fisolate-erroneous-path-dereference
Detecta caminhos que acionam comportamento errôneo ou indefinido devido ao cancelamento da referência de um nulo
ponteiro. Isole esses caminhos do fluxo de controle principal e transforme a instrução com
comportamento errôneo ou indefinido em uma armadilha. Este sinalizador é habilitado por padrão em -O2
e mais alto.

-fisolate-erroneous-path-attribute
Detecta caminhos que desencadeiam comportamento errôneo ou indefinido devido a um valor nulo sendo usado
de uma forma proibida por um atributo "return_nonnull" ou "nonnull". Isole esses caminhos
do fluxo de controle principal e transformar a instrução com comportamento errôneo ou indefinido
em uma armadilha. Isso não está habilitado no momento, mas pode ser habilitado por -O2 no futuro.

-ftree-sink
Execute o movimento de armazenamento para a frente nas árvores. Este sinalizador é habilitado por padrão em -O e assim
superior.

-ftree-bit-ccp
Executa propagação de constante de bit condicional esparsa em árvores e ponteiro de propagação
informações de alinhamento. Esta passagem opera apenas em variáveis ​​escalares locais e é
habilitado por padrão em -O e mais alto. Requer que -ftree-ccp está ativado.

-ftree-ccp
Execute propagação constante condicional esparsa (CCP) nas árvores. Este passe apenas
opera em variáveis ​​escalares locais e é habilitado por padrão em -O e mais alto.

-fssa-phiopt
Execute a correspondência de padrões em nós SSA PHI para otimizar o código condicional. Este passe é
habilitado por padrão em -O e mais alto.

-ftree-switch-conversion
Realize a conversão de inicializações simples em um switch para inicializações de um
matriz escalar. Este sinalizador é habilitado por padrão em -O2 e mais alto.

-ftree-tail-merge
Procure sequências de código idênticas. Quando encontrado, substitua um com um salto para o outro.
Essa otimização é conhecida como fusão de cauda ou salto cruzado. Este sinalizador é habilitado por
padrão em -O2 e mais alto. O tempo de compilação neste passo pode ser limitado usando
max-tail-merge-comparations parâmetro e max-tail-merge-iterações parâmetro.

-ftree-dce
Execute a eliminação de código morto (DCE) nas árvores. Este sinalizador é habilitado por padrão em -O
e mais alto.

-ftree-builtin-call-dce
Realizar eliminação condicional de código morto (DCE) para chamadas para funções integradas que
podem definir "errno", mas, de outra forma, não têm efeitos colaterais. Este sinalizador está habilitado por padrão
at -O2 e superior se -Os também não é especificado.

-ftree-dominator-opts
Execute uma variedade de limpezas escalares simples (propagação constante / cópia, redundância
eliminação, propagação de alcance e simplificação de expressão) com base em um dominador
travessia de árvore. Isso também executa jump threading (para reduzir saltos em saltos). Esse
sinalizador é habilitado por padrão em -O e mais alto.

-ftree-dse
Execute a eliminação de armazenamento morto (DSE) nas árvores. Uma loja morta é uma loja em uma memória
local que é posteriormente substituído por outra loja sem quaisquer cargas intermediárias. No
neste caso, o armazenamento anterior pode ser excluído. Este sinalizador é habilitado por padrão em -O e assim
superior.

-ftree-ch
Execute a cópia do cabeçalho do loop nas árvores. Isso é benéfico, pois aumenta
eficácia das otimizações de movimento do código. Ele também economiza um salto. Esta bandeira é
habilitado por padrão em -O e mais alto. Não está habilitado para -Os, uma vez que normalmente
aumenta o tamanho do código.

-ftree-loop-optimize
Realize otimizações de loop em árvores. Este sinalizador é habilitado por padrão em -O e assim
superior.

-ftree-loop-linear
Execute transformações de intercâmbio de loop na árvore. Igual a -intercâmbio-floop. Usar
esta transformação de código, o GCC deve ser configurado com --com-isl para habilitar o
Infraestrutura de transformação de loop de grafite.

-intercâmbio-floop
Execute transformações de intercâmbio de loop em loops. Intercâmbio de dois loops aninhados
alterna os loops interno e externo. Por exemplo, dado um loop como:

DO J = 1, M
DO I = 1, N
A (J, I) = A (J, I) * C
FIM
FIM

O loop interchange transforma o loop como se tivesse sido escrito:

DO I = 1, N
DO J = 1, M
A (J, I) = A (J, I) * C
FIM
FIM

o que pode ser benéfico quando "N" é maior do que os caches, porque em Fortran, o
elementos de uma matriz são armazenados na memória de forma contígua por coluna, e o original
o loop itera sobre as linhas, potencialmente criando a cada acesso um erro de cache. Esse
a otimização se aplica a todos os idiomas suportados pelo GCC e não se limita a
Fortran. Para usar esta transformação de código, o GCC deve ser configurado com --com-isl para
habilitar a infraestrutura de transformação de loop de grafite.

-floop-strip-mine
Execute transformações de mineração de loop strip em loops. A mineração strip divide um loop em
dois loops aninhados. O loop externo tem passadas iguais ao tamanho da tira e o interno
loop tem passadas do loop original dentro de uma faixa. O comprimento da tira pode ser alterado
usando o loop-block-tile-size parâmetro. Por exemplo, dado um loop como:

DO I = 1, N
A (I) = A (I) + C
FIM

a mineração de loop strip transforma o loop como se estivesse escrito:

DO II = 1, N, 51
DO I = II, min (II + 50, N)
A (I) = A (I) + C
FIM
FIM

Esta otimização se aplica a todos os idiomas suportados pelo GCC e não se limita a
Fortran. Para usar esta transformação de código, o GCC deve ser configurado com --com-isl para
habilitar a infraestrutura de transformação de loop de grafite.

-bloop-block
Execute transformações de bloqueio de loop em loops. A tira de bloqueio extrai cada ciclo no
aninhamento de loops de forma que os acessos à memória dos loops do elemento caibam dentro dos caches. o
o comprimento da tira pode ser alterado usando o loop-block-tile-size parâmetro. Por exemplo,
dado um loop como:

DO I = 1, N
DO J = 1, M
A (J, I) = B (I) + C (J)
FIM
FIM

o bloqueio de loop transforma o loop como se tivesse sido escrito:

DO II = 1, N, 51
DO JJ = 1, M, 51
DO I = II, min (II + 50, N)
DO J = JJ, min (JJ + 50, M)
A (J, I) = B (I) + C (J)
FIM
FIM
FIM
FIM

o que pode ser benéfico quando "M" é maior do que os caches, porque o loop mais interno
itera sobre uma quantidade menor de dados que podem ser mantidos nos caches. Esse
a otimização se aplica a todos os idiomas suportados pelo GCC e não se limita a
Fortran. Para usar esta transformação de código, o GCC deve ser configurado com --com-isl para
habilitar a infraestrutura de transformação de loop de grafite.

-fgraphite-identity
Ative a transformação de identidade para grafite. Para cada SCoP, geramos o
representação poliédrica e transformá-la novamente em gimple. Usando -fgraphite-identity
podemos verificar os custos ou benefícios da transformação GIMPLE -> GRAFITE -> GIMPLE.
Algumas otimizações mínimas também são realizadas pelo gerador de código ISL, como índice
divisão e eliminação de código morto em loops.

-floop-nest-optimize
Habilite o otimizador de aninhamento de loop baseado em ISL. Este é um otimizador genérico de loop nest baseado
nos algoritmos de otimização de Plutão. Ele calcula uma estrutura de loop otimizada para
localidade de dados e paralelismo. Esta opção é experimental.

-floop-unroll-and-jam
Habilite unroll and jam para o otimizador de loop nest baseado em ISL. O fator de desenrolar pode ser
mudou usando o Loop-Deslizamento-Jam-Size parâmetro. A dimensão desenrolada (contando
do mais interno) pode ser alterado usando o loop-unroll-jam-profundidade parâmetro.
.

-floop-parallelize-all
Use a análise de dependência de dados Graphite para identificar loops que podem ser paralelizados.
Paralelizar todos os loops que podem ser analisados ​​para não conter dependências transportadas pelo loop
sem verificar se é lucrativo paralelizar os loops.

-fcheck-data-deps
Compare os resultados de vários analisadores de dependência de dados. Esta opção é usada para
depurar os analisadores de dependência de dados.

-ftree-loop-if-convert
Tentar transformar saltos condicionais nos loops mais internos em sem ramificações
equivalentes. A intenção é remover o fluxo de controle dos loops mais internos para
para melhorar a capacidade do passo de vetorização para lidar com esses loops. Isto é
habilitado por padrão se a vetorização estiver habilitada.

-ftree-loop-if-convert-stores
Tente também if-converter saltos condicionais contendo gravações de memória. Esse
transformação pode ser insegura para programas multi-threaded, pois transforma condicional
a memória grava em gravações de memória incondicional. Por exemplo,

para (i = 0; i <N; i ++)
se (cond.)
A [i] = expr;

é transformado em

para (i = 0; i <N; i ++)
A [i] = cond? expr: A [i];

potencialmente produzindo corridas de dados.

-ftree-loop-distribuição
Execute a distribuição do loop. Este sinalizador pode melhorar o desempenho do cache em grandes corpos de loop
e permitir que outras otimizações de loop, como paralelização ou vetorização, tomem
Lugar, colocar. Por exemplo, o loop

DO I = 1, N
A (I) = B (I) + C
D (I) = E (I) * F
FIM

é transformado em

DO I = 1, N
A (I) = B (I) + C
FIM
DO I = 1, N
D (I) = E (I) * F
FIM

-ftree-loop-distrib-patterns
Execute a distribuição de loop de padrões que podem ser gerados por código com chamadas para um
biblioteca. Este sinalizador é habilitado por padrão em -O3.

Esta passagem distribui os loops de inicialização e gera uma chamada para o conjunto memset zero.
Por exemplo, o loop

DO I = 1, N
A (I) = 0
B (I) = A (I) + I
FIM

é transformado em

DO I = 1, N
A (I) = 0
FIM
DO I = 1, N
B (I) = A (I) + I
FIM

e o loop de inicialização é transformado em uma chamada para o conjunto memset zero.

-ftree-loop-im
Execute o movimento invariável do loop nas árvores. Este passe move apenas invariantes que são difíceis
para lidar com o nível RTL (chamadas de função, operações que se expandem para sequências não triviais
de insns). Com -funswitch-loops também move operandos de condições que são
invariante fora do loop, de modo que podemos usar apenas a análise de invariante trivial em
loop unswitching. O passe também inclui o movimento da loja.

-ftree-loop-ivcanon
Crie um contador canônico para o número de iterações em loops para os quais
número de iterações requer uma análise complicada. Otimizações posteriores podem
determine o número facilmente. Útil especialmente em conexão com o desenrolamento.

-cincopts
Realize otimizações de variáveis ​​de indução (redução de força, variável de indução
fusão e eliminação da variável de indução) nas árvores.

-ftree-parallelize-loops = n
Paralelizar loops, ou seja, dividir seu espaço de iteração para rodar em n threads. Isto é
só é possível para loops cujas iterações são independentes e podem ser arbitrariamente
reordenado. A otimização só é lucrativa em máquinas com multiprocessador, para loops
que consomem muita CPU, em vez de serem limitados, por exemplo, pela largura de banda da memória. Esta opção
implica -pthreade, portanto, só é compatível com destinos que tenham suporte para
-pthread.

-ftree-pta
Execute a análise de pontos locais de função nas árvores. Este sinalizador está habilitado por padrão
at -O e mais alto.

-ftree-sra
Execute a substituição escalar de agregados. Este passe substitui referências de estrutura
com escalares para evitar a confirmação de estruturas na memória muito cedo. Esta bandeira é
habilitado por padrão em -O e mais alto.

-ftree-copyrename
Execute a renomeação de cópias nas árvores. Esta passagem tenta renomear os temporários do compilador para
outras variáveis ​​em locais de cópia, geralmente resultando em nomes de variáveis ​​que mais
assemelham-se muito às variáveis ​​originais. Este sinalizador é habilitado por padrão em -O e assim
superior.

-ftree-coalesce-inline-vars
Diga a passagem do copyrename (veja -ftree-copyrename) para tentar combinar pequenos usuários
variáveis ​​definidas também, mas apenas se forem sequenciadas de outras funções. É um
forma mais limitada de -ftree-coalesce-vars. Isso pode prejudicar as informações de depuração de tais
variáveis ​​embutidas, mas mantém as variáveis ​​da função embutida separadas de cada
outro, de modo que seja mais provável que contenham os valores esperados em uma depuração
sessão.

-ftree-coalesce-vars
Diga a passagem do copyrename (veja -ftree-copyrename) para tentar combinar pequenos usuários
variáveis ​​definidas também, em vez de apenas temporárias do compilador. Isso pode limitar severamente
a capacidade de depurar um programa otimizado compilado com -fno-var-tracking-assignments.
Na forma negada, este sinalizador impede a coalescência SSA de variáveis ​​de usuário, incluindo
os inline. Essa opção é ativada por padrão.

-ftree-ter
Realize a substituição temporária da expressão durante a fase SSA-> normal. Solteiro
temporários de uso / definição única são substituídos em seu local de uso com sua definição
expressão. Isso resulta em um código não-GIMPLE, mas dá aos expansores muito mais
árvores complexas para trabalhar resultando em uma melhor geração de RTL. Isso é habilitado por
padrão em -O e mais alto.

-ftree-slsr
Realize redução de força em linha reta em árvores. Isso reconhece
expressões que envolvem multiplicações e as substitui por cálculos menos caros
quando possivel. Isso é habilitado por padrão em -O e mais alto.

-ftree-vetorize
Realize a vetorização em árvores. Este sinalizador permite -ftree-loop-vetorize e assim
-ftree-slp-vetorize se não for especificado explicitamente.

-ftree-loop-vetorize
Execute a vetorização em loop nas árvores. Este sinalizador é habilitado por padrão em -O3 e quando
-ftree-vetorize está ativado.

-ftree-slp-vetorize
Execute a vetorização de blocos básicos em árvores. Este sinalizador é habilitado por padrão em -O3 e assim
quando -ftree-vetorize está ativado.

-fvect-cost-model =modelo
Altere o modelo de custo usado para vetorização. o modelo argumento deve ser um de
ilimitado, dinâmico or barato. Com o ilimitado modelar o caminho do código vetorizado é
presumido ser lucrativo, enquanto com o dinâmico modelar uma verificação de tempo de execução protege o
caminho de código vetorizado para habilitá-lo apenas para contagens de iteração que provavelmente serão executadas
mais rápido do que ao executar o loop escalar original. o barato modelo desativa
vetorização de loops onde fazê-lo teria um custo proibitivo, por exemplo, devido a
o tempo de execução necessário verifica a dependência ou alinhamento dos dados, mas de outra forma é igual ao
dinâmico modelo. O modelo de custo padrão depende de outros sinalizadores de otimização e é
ou dinâmico or barato.

-fsimd-cost-model =modelo
Alterar o modelo de custo usado para vetorização de loops marcados com o OpenMP ou Cilk
Além da diretiva simd. o modelo argumento deve ser um de ilimitado, dinâmico, barato.
Todos os valores de modelo têm o mesmo significado conforme descrito em -fvect-cost-model e por
padrão um modelo de custo definido com -fvect-cost-model é usado.

-ftree-vrp
Execute a propagação do intervalo de valores nas árvores. Isso é semelhante à propagação constante
passar, mas em vez de valores, intervalos de valores são propagados. Isso permite que o
otimizadores para remover verificações de intervalo desnecessárias, como verificações de limite de matriz e ponteiro nulo
Verificações. Isso é habilitado por padrão em -O2 e mais alto. Eliminação de verificação de ponteiro nulo
só é feito se -fdelete-null-pointer-checks está ativado.

-fsplit-ivs-in-unroller
Permite a expressão de valores de variáveis ​​de indução em iterações posteriores do
loop desenrolado usando o valor na primeira iteração. Isso quebra a longa dependência
correntes, melhorando assim a eficiência das passagens de programação.

Uma combinação de -fweb e o CSE costuma ser suficiente para obter o mesmo efeito.
No entanto, isso não é confiável nos casos em que o corpo do loop é mais complicado do que um
bloco básico único. Também não funciona em algumas arquiteturas devido a
restrições no passe CSE.

Esta otimização é habilitada por padrão.

-fvariable-expansion-in-unroller
Com esta opção, o compilador cria várias cópias de algumas variáveis ​​locais quando
desenrolando um loop, o que pode resultar em um código superior.

-fpartial-inlining
Partes embutidas de funções. Esta opção tem qualquer efeito apenas quando o próprio inlining é
ligado pelo -funções-finline or -finline-pequenas-funções opções.

Ativado no nível -O2.

-fpredictive-commoning
Realize a otimização de commoning preditiva, ou seja, reutilizando cálculos (especialmente
cargas e armazenamentos de memória) realizados em iterações anteriores de loops.

Esta opção está habilitada no nível -O3.

-fprefetch-loop-arrays
Se compatível com a máquina de destino, gere instruções para pré-buscar memória para
melhorar o desempenho de loops que acessam grandes arrays.

Esta opção pode gerar código melhor ou pior; os resultados são altamente dependentes do
estrutura de loops dentro do código-fonte.

Desativado no nível -Os.

-fno-olho mágico
-fno-olho mágico2
Desative todas as otimizações de olho mágico específicas da máquina. A diferença entre
-fno-olho mágico e assim -fno-olho mágico2 está em como eles são implementados no compilador; algum
alvos usam um, alguns usam o outro, alguns usam ambos.

-fpeephole está habilitado por padrão. -fpeephole2 habilitado em níveis -O2, -O3, -Os.

-fno-adivinha-probabilidade-ramo
Não adivinhe as probabilidades do ramo usando heurísticas.

O GCC usa heurísticas para adivinhar as probabilidades do ramo, caso não sejam fornecidas por
feedback de perfil (-fprofile-arcs) Essas heurísticas são baseadas no fluxo de controle
gráfico. Se algumas probabilidades de ramificação forem especificadas por "__builtin_expect", então o
heurísticas são usadas para adivinhar probabilidades de ramificação para o resto do fluxo de controle
gráfico, levando em consideração as informações de "__builtin_expect". As interações entre o
heurísticas e "__builtin_expect" podem ser complexas e, em alguns casos, podem ser úteis
para desabilitar a heurística para que os efeitos de "__builtin_expect" sejam mais fáceis de
Compreendo.

O padrão é -f adivinhar-probabilidade-ramo em níveis -O, -O2, -O3, -Os.

-freorder-blocks
Reordene os blocos básicos na função compilada, a fim de reduzir o número de tomadas
ramos e melhorar a localidade do código.

Habilitado em níveis -O2, -O3.

-freorder-blocks-and-partition
Além de reordenar blocos básicos na função compilada, a fim de reduzir
número de ramos retirados, partições de blocos básicos quentes e frios em seções separadas
dos arquivos assembly e .o, para melhorar a paginação e o desempenho de localidade do cache.

Essa otimização é automaticamente desativada na presença de tratamento de exceções,
para seções linkonce, para funções com um atributo de seção definido pelo usuário e em qualquer
arquitetura que não oferece suporte a seções nomeadas.

Ativado para x86 em níveis -O2, -O3.

-funções-freorder
Reordene funções no arquivo de objeto para melhorar a localidade do código. Isto é
implementado usando subseções especiais ".text.hot" para executadas com mais freqüência
funções e ".texto.unlprovável" para funções executadas improváveis. O reordenamento é feito por
o vinculador, de modo que o formato do arquivo de objeto deve oferecer suporte a seções nomeadas e o vinculador deve colocar
de uma forma razoável.

Além disso, o feedback do perfil deve estar disponível para tornar esta opção eficaz. Ver
-fprofile-arcs para obter detalhes.

Habilitado em níveis -O2, -O3, -Os.

-fstrict-aliasing
Permitir que o compilador assuma as regras de alias mais estritas aplicáveis ​​à linguagem
sendo compilado. Para C (e C ++), isso ativa otimizações com base no tipo de
expressões. Em particular, presume-se que um objeto de um tipo nunca resida no
mesmo endereço de um objeto de um tipo diferente, a menos que os tipos sejam quase os mesmos.
Por exemplo, um "unsigned int" pode ser apelidado de "int", mas não um "void *" ou "double". UMA
tipo de caractere pode ser apelido de qualquer outro tipo.

Preste atenção especial a códigos como este:

união a_union {
int i;
duplo d;
};

int f () {
união a_union t;
td = 3.0;
return ti;
}

A prática de ler de um sindicalista diferente do mais recente
escrito para (chamado de "trocadilho") é comum. Mesmo com -fstrict-aliasing, modelo-
trocadilhos é permitido, desde que a memória seja acessada através do tipo união. Então o
o código acima funciona conforme o esperado. No entanto, este código pode não:

int f () {
união a_union t;
int * ip;
td = 3.0;
ip = & t.i;
return * ip;
}

Da mesma forma, acesse pegando o endereço, lançando o ponteiro resultante e
desreferenciar o resultado tem um comportamento indefinido, mesmo se o elenco usar um tipo de união,
por exemplo:

int f () {
duplo d = 3.0;
return ((união a_union *) & d) -> i;
}

A -fstrict-aliasing opção está habilitada em níveis -O2, -O3, -Os.

-fstrict-overflow
Permitir que o compilador assuma regras estritas de estouro de assinatura, dependendo do idioma
sendo compilado. Para C (e C ++), isso significa que estouro ao fazer aritmética com
números com sinais são indefinidos, o que significa que o compilador pode assumir que não
acontecer. Isso permite várias otimizações. Por exemplo, o compilador assume que
uma expressão como "i + 10> i" é sempre verdadeira para "i" com sinal. Esta suposição é
válido apenas se o estouro de sinal for indefinido, pois a expressão é falsa se "i + 10"
transborda ao usar aritmética de complemento de dois. Quando esta opção está em vigor, qualquer
tentativa de determinar se uma operação em transbordamentos de números assinados deve ser escrita
com cuidado para não envolver realmente o estouro.

Esta opção também permite que o compilador assuma semântica estrita de ponteiro: dado um
ponteiro para um objeto, se adicionar um deslocamento a esse ponteiro não produz um ponteiro
para o mesmo objeto, a adição é indefinida. Isso permite que o compilador conclua
que "p + u> p" é sempre verdadeiro para um ponteiro "p" e um inteiro sem sinal "u". Esse
suposição só é válida porque o contorno do ponteiro é indefinido, pois a expressão é
falso se "p + u" estourar usando aritmética de complemento de dois.

Veja também o -fwrapv opção. Usando -fwrapv significa que o estouro de sinal inteiro é
totalmente definido: ele envolve. Quando -fwrapv é usado, não há diferença entre
-fstrict-overflow e assim -fno-strict-overflow para inteiros. Com -fwrapv certos tipos
de estouro são permitidos. Por exemplo, se o compilador obtiver um estouro ao fazer
aritmética em constantes, o valor transbordado ainda pode ser usado com -fwrapv, Mas não
de outra forma.

A -fstrict-overflow opção está habilitada em níveis -O2, -O3, -Os.

-falign-funções
-falign-functions =n
Alinha o início das funções com a próxima potência de dois maior que n, pulando para n
bytes. Por exemplo, -falign-functions = 32 alinha funções para os próximos 32 bytes
limite, mas -falign-functions = 24 alinha-se com o próximo limite de 32 bytes apenas se este
pode ser feito pulando 23 bytes ou menos.

-fno-align-functions e assim -falign-functions = 1 são equivalentes e significam que funções
não estão alinhados.

Alguns montadores só suportam este sinalizador quando n é uma potência de dois; nesse caso, é
arredondado.

If n não for especificado ou for zero, use um padrão dependente da máquina.

Habilitado em níveis -O2, -O3.

-falign-rótulos
-falign-labels =n
Alinha todos os alvos de ramificação a um limite de potência de dois, pulando até n bytes como
-falign-funções. Esta opção pode facilmente tornar o código mais lento, porque deve inserir
operações fictícias para quando o destino da ramificação é alcançado no fluxo normal do código.

-fno-align-labels e assim -falign-labels = 1 são equivalentes e significam que os rótulos não são
alinhado.

If -falign-loops or -falign-saltos são aplicáveis ​​e são maiores do que este valor, então
seus valores são usados ​​em seu lugar.

If n não é especificado ou é zero, use um padrão dependente da máquina que é muito provável
ser 1, significando nenhum alinhamento.

Habilitado em níveis -O2, -O3.

-falign-loops
-falign-loops =n
Alinha os loops para um limite de potência de dois, pulando até n bytes como -falign-funções.
Se os loops são executados muitas vezes, isso compensa qualquer execução do modelo
operações.

-fno-align-loops e assim -falign-loops = 1 são equivalentes e significam que os loops não são
alinhado.

If n não for especificado ou for zero, use um padrão dependente da máquina.

Habilitado em níveis -O2, -O3.

-falign-saltos
-falign-jumps =n
Alinha alvos ramificados a um limite de potência de dois, para alvos ramificados onde os alvos
só pode ser alcançado saltando, saltando até n bytes como -falign-funções. em
neste caso, nenhuma operação fictícia precisa ser executada.

-fno-align-jumps e assim -falign-jumps = 1 são equivalentes e significam que os loops não são
alinhado.

If n não for especificado ou for zero, use um padrão dependente da máquina.

Habilitado em níveis -O2, -O3.

-funit-at-a-time
Esta opção foi deixada por motivos de compatibilidade. -funit-at-a-time não tem efeito, enquanto
-fno-unit-at-a-time implica -fno-toplevel-reorder e assim -fno-seção-âncoras.

Ativado por padrão.

-fno-toplevel-reorder
Não reordene funções de nível superior, variáveis ​​e instruções "asm". Produzi-los em
na mesma ordem em que aparecem no arquivo de entrada. Quando esta opção é usada,
variáveis ​​estáticas não referenciadas não são removidas. Esta opção destina-se a apoiar
código existente que depende de uma ordem específica. Para novo código, é melhor usar
atributos quando possível.

Ativado no nível -O0. Quando desativado explicitamente, também implica -fno-seção-âncoras,
que de outra forma está habilitado em -O0 em alguns alvos.

-fweb
Constrói web como comumente usado para fins de alocação de registro e atribui cada web
pseudo-registro individual. Isso permite que a passagem de alocação de registro opere
pseudos diretamente, mas também fortalece vários outros passos de otimização, como CSE,
otimizador de loop e removedor de código morto trivial. Pode, no entanto, fazer a depuração
impossível, uma vez que as variáveis ​​não ficam mais em um "registro doméstico".

Ativado por padrão com -funroll-loops.

-fwhole-programa
Suponha que a unidade de compilação atual represente todo o programa sendo compilado.
Todas as funções e variáveis ​​públicas, com exceção de "principal" e aquelas mescladas por
atributo "externally_visible" tornam-se funções estáticas e, de fato, são otimizadas
mais agressivamente por otimizadores interprocedurais.

Esta opção não deve ser usada em combinação com -flto. Em vez de depender de um vinculador
plugin deve fornecer informações mais seguras e precisas.

-flto [=n]
Esta opção executa o otimizador de tempo de link padrão. Quando invocado com o código-fonte,
gera GIMPLE (uma das representações internas do GCC) e grava em ELF especial
seções no arquivo de objeto. Quando os arquivos de objeto estão vinculados, todos os
corpos de função são lidos a partir dessas seções ELF e instanciados como se tivessem sido
parte da mesma unidade de tradução.

Para usar o otimizador de tempo de link, -flto e as opções de otimização devem ser especificadas em
tempo de compilação e durante o link final. Por exemplo:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

As duas primeiras invocações para o GCC salvam uma representação bytecode do GIMPLE em especial
Seções ELF dentro foo.o e assim bar.o. A invocação final lê o bytecode GIMPLE
de foo.o e assim bar.o, mescla os dois arquivos em uma única imagem interna e compila
o resultado, como de costume. Desde ambos foo.o e assim bar.o são mesclados em uma única imagem, este
faz com que todas as análises e otimizações interprocedurais no GCC funcionem em todo o
dois arquivos como se fossem um só. Isso significa, por exemplo, que o inliner é
capaz de incorporar funções em bar.o em funções em foo.o e vice versa.

Outra maneira (mais simples) de habilitar a otimização de tempo de link é:

gcc -o myprog -flto -O2 foo.c bar.c

O código acima gera bytecode para foo.c e assim bar.c, os mescla em um único
Representação GIMPLE e otimiza-os como de costume para produzir myprog.

A única coisa importante a ter em mente é que, para permitir otimizações de tempo de link, você
precisa usar o driver GCC para realizar a etapa de link. O GCC executa automaticamente
otimização de tempo de conexão se qualquer um dos objetos envolvidos foi compilado com o -flto
opção de linha de comando. Você geralmente deve especificar as opções de otimização a serem usadas
para otimização de tempo de link, embora o GCC tente ser inteligente em adivinhar uma otimização
nível a ser usado a partir das opções usadas em tempo de compilação se você falhar em especificar um no link-
Tempo. Você sempre pode substituir a decisão automática de fazer a otimização de tempo de link em
link-time passando -fno-lto ao comando link.

Para tornar a otimização de todo o programa eficaz, é necessário certificar-se de que todo
suposições do programa. O compilador precisa saber quais funções e variáveis ​​podem ser
acessado por bibliotecas e tempo de execução fora da unidade otimizada de tempo de link. Quando
suportado pelo vinculador, o plug-in do vinculador (consulte -plug-in de ligação de fusível) passa
informações para o compilador sobre símbolos usados ​​e visíveis externamente. Quando o
o plugin do vinculador não está disponível, -fwhole-programa deve ser usado para permitir que o compilador
fazer essas suposições, o que leva a decisões de otimização mais agressivas.

Quando -plug-in de ligação de fusível não está habilitado então, quando um arquivo é compilado com -flto,
o arquivo de objeto gerado é maior do que um arquivo de objeto regular porque contém GIMPLE
bytecodes e o código final usual (ver -ffat-lto-objects. Isso significa que o objeto
arquivos com informações LTO podem ser vinculados como arquivos de objeto normais; E se -fno-lto passou
ao vinculador, nenhuma otimização interprocedural é aplicada. Observe que quando
-fno-fat-lto-objects está habilitado, o estágio de compilação é mais rápido, mas você não pode realizar um
link regular não LTO neles.

Além disso, os sinalizadores de otimização usados ​​para compilar arquivos individuais não são
necessariamente relacionados aos usados ​​no momento do link. Por exemplo,

gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objetos -flto bar.c
gcc -o myprog -O3 foo.o bar.o

Isso produz arquivos de objeto individuais com código assembler não otimizado, mas o
binário resultante myprog é otimizado em -O3. Se, em vez disso, o binário final for
gerado com -fno-lto, Em seguida myprog não é otimizado.

Ao produzir o binário final, o GCC aplica apenas otimizações de tempo de link para aqueles
arquivos que contêm bytecode. Portanto, você pode misturar e combinar arquivos de objetos e
bibliotecas com bytecodes GIMPLE e código de objeto final. GCC seleciona automaticamente
quais arquivos otimizar no modo LTO e quais arquivos vincular sem mais
processamento.

Existem alguns sinalizadores de geração de código preservados pelo GCC ao gerar bytecodes, como
eles precisam ser usados ​​durante o estágio final do link. Geralmente opções especificadas em
link-time override aqueles especificados em tempo de compilação.

Se você não especificar uma opção de nível de otimização -O no tempo de link, então o GCC calcula
um baseado nos níveis de otimização usados ​​ao compilar os arquivos de objeto. o
o nível de otimização mais alto vence aqui.

Atualmente, as seguintes opções e suas configurações são tiradas do primeiro arquivo de objeto
que especificou explicitamente: -fPIC, -fpic, -fpie, -fcomum, -fexceções,
-fnon-call-exceptions, -fgnu-tm e todo o -m sinalizadores de destino.

Certos sinalizadores de alteração de ABI são necessários para corresponder em todas as unidades de compilação e tentar
para substituir isso no momento do link com um valor conflitante é ignorado. Isso inclui
opções como -freg-struct-return e assim -fpcc-struct-return.

Outras opções como -ffp-contrato, -fno-strict-overflow, -fwrapv, -fno-trapv or
-fno-strict-aliasing são passados ​​para o estágio de link e mesclados de forma conservadora
para unidades de tradução conflitantes. Especificamente -fno-strict-overflow, -fwrapv e assim
-fno-trapv têm precedência e por exemplo -ffp-contract = off tem precedência sobre
-ffp-contract = fast. Você pode substituí-los em tempo de linha.

Recomenda-se que você compile todos os arquivos que participam do mesmo link com
as mesmas opções e também especificar essas opções no momento do link.

Se o LTO encontrar objetos com ligação C declarada com tipos incompatíveis em separado
unidades de tradução a serem ligadas entre si (comportamento indefinido de acordo com ISO C99
6.2.7), um diagnóstico não fatal pode ser emitido. O comportamento ainda é indefinido na execução
Tempo. Diagnósticos semelhantes podem ser levantados para outros idiomas.

Outra característica do LTO é que é possível aplicar otimizações interprocedurais
em arquivos escritos em diferentes idiomas:

gcc -c -flto foo.c
g ++ -c -flto bar.cc
gfortran -c -flto baz.f90
g ++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

Observe que o link final é feito com g ++ para obter as bibliotecas de tempo de execução C ++ e
-lgfortran é adicionado para obter as bibliotecas de tempo de execução Fortran. Em geral, ao misturar
idiomas no modo LTO, você deve usar as mesmas opções de comando de link de quando mixar
linguagens em uma compilação regular (não LTO).

Se os arquivos de objeto contendo bytecode GIMPLE forem armazenados em um arquivo de biblioteca, digamos
libfoo.a, é possível extraí-los e usá-los em um link LTO se você estiver usando um
vinculador com suporte a plug-ins. Para criar bibliotecas estáticas adequadas para LTO, use gcc-ar
e assim gcc-ranlib em vez de ar e assim ranlib; para mostrar os símbolos dos arquivos objeto com
Bytecode GIMPLE, use gcc-nm. Esses comandos exigem que ar, ranlib e assim nm têm sido
compilado com suporte a plugins. No momento do link, use a bandeira -plug-in de ligação de fusível para
garantir que a biblioteca participe do processo de otimização LTO:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

Com o plug-in do vinculador ativado, o vinculador extrai os arquivos GIMPLE necessários de
libfoo.a e os passa para o GCC em execução para torná-los parte do agregado
Imagem GIMPLE a ser otimizada.

Se você não estiver usando um vinculador com suporte para plug-in e / ou não habilite o vinculador
plugin, então os objetos dentro libfoo.a são extraídos e vinculados como de costume, mas eles
não participe do processo de otimização LTO. Para fazer uma biblioteca estática
adequado para otimização LTO e ligação normal, compilar seus arquivos de objeto com
-flto -ffat-lto-objects.

As otimizações de tempo de link não requerem a presença de todo o programa para operar.
Se o programa não requer a exportação de nenhum símbolo, é possível combinar
-flto e assim -fwhole-programa para permitir que os otimizadores interprocedurais usem mais
suposições agressivas que podem levar a melhores oportunidades de otimização. Uso de
-fwhole-programa não é necessário quando o plugin do linker está ativo (veja -plug-in de ligação de fusível).

A implementação atual de LTO não faz nenhuma tentativa de gerar bytecode que seja
portátil entre diferentes tipos de hosts. Os arquivos bytecode são versionados e aí
é uma verificação de versão estrita, portanto, os arquivos bytecode gerados em uma versão do GCC não
trabalhar com uma versão mais antiga ou mais recente do GCC.

A otimização de tempo de link não funciona bem com a geração de informações de depuração.
Combinando -flto com -g é atualmente experimental e deve produzir resultados inesperados
resultados.

Se você especificar o opcional n, a otimização e geração de código feita no momento do link
é executado em paralelo usando n trabalhos paralelos, utilizando um instalado fazer .
A variável de ambiente FAÇA pode ser usado para substituir o programa usado. O padrão
valor para n é 1.

Você também pode especificar -flto = jobserver usar o modo de servidor de trabalho do GNU make para determinar
o número de trabalhos paralelos. Isso é útil quando o Makefile que chama o GCC já está
executando em paralelo. Você deve preceder um + para a receita do comando no pai
Makefile para que isso funcione. Esta opção provavelmente só funciona se FAÇA é GNU make.

-flto-partição =alg
Especifique o algoritmo de particionamento usado pelo otimizador de tempo de link. O valor é
ou 1to1 para especificar um particionamento que espelhe os arquivos de origem originais ou balanced
para especificar o particionamento em blocos de tamanhos iguais (sempre que possível) ou max para criar
nova partição para cada símbolo, sempre que possível. Especificando Nenhum como um algoritmo
desativa o particionamento e streaming completamente. o valor padrão é balanced. Enquanto
1to1 pode ser usado como uma solução alternativa para vários problemas de pedido de código, o max
o particionamento destina-se apenas a testes internos. O valor que um especifica que
exatamente uma partição deve ser usada enquanto o valor Nenhum ignora o particionamento e
executa a etapa de otimização de tempo de link diretamente da fase WPA.

-flto-odr-type-merging
Ativar streaming de nomes de tipos mutilados de tipos C ++ e sua unificação em
linktime. Isso aumenta o tamanho dos arquivos de objeto LTO, mas permite o diagnóstico sobre um
Violações da regra de definição.

-flto-compression-level =n
Esta opção especifica o nível de compressão usado para linguagem intermediária escrita
para arquivos de objeto LTO, e só é significativo em conjunto com o modo LTO (-flto).
Os valores válidos são 0 (sem compactação) a 9 (compactação máxima). Valores fora deste
intervalo são fixados em 0 ou 9. Se a opção não for fornecida, um padrão balanceado
configuração de compressão é usada.

-flto-reportar
Imprime um relatório com detalhes internos sobre o funcionamento do otimizador de tempo de link. o
o conteúdo deste relatório varia de versão para versão. Destina-se a ser útil para o GCC
desenvolvedores ao processar arquivos de objeto no modo LTO (via -flto).

Desativado por padrão.

-flto-report-wpa
Gostar -flto-reportar, mas imprime apenas para a fase WPA da Otimização do tempo de link.

-plug-in de ligação de fusível
Permite o uso de um plug-in de vinculação durante a otimização de tempo de link. Esta opção depende
no suporte a plugins no linker, que está disponível em ouro ou em GNU ld 2.21 ou
mais recente.

Esta opção permite a extração de arquivos de objeto com bytecode GIMPLE fora da biblioteca
arquivos. Isso melhora a qualidade da otimização, expondo mais código para o link
otimizador de tempo. Esta informação especifica quais símbolos podem ser acessados ​​externamente
(por objeto não-LTO ou durante a vinculação dinâmica). Melhorias de qualidade de código resultantes em
binários (e bibliotecas compartilhadas que usam visibilidade oculta) são semelhantes a
-fwhole-programa. Ver -flto para uma descrição do efeito deste sinalizador e como
use-o.

Esta opção é habilitada por padrão quando o suporte LTO no GCC está habilitado e o GCC estava
configurado para uso com um linker que suporte plug-ins (GNU ld 2.21 ou mais recente ou ouro).

-ffat-lto-objects
Objetos Fat LTO são arquivos-objeto que contêm tanto a linguagem intermediária quanto a
código do objeto. Isso os torna utilizáveis ​​para vinculação LTO e vinculação normal. Esse
opção é eficaz apenas ao compilar com -flto e é ignorado no momento do link.

-fno-fat-lto-objects melhora o tempo de compilação em relação ao LTO simples, mas requer o
conjunto de ferramentas completo para estar ciente do LTO. Requer um vinculador com suporte para plug-in de vinculação
para funcionalidades básicas. Adicionalmente, nm, ar e assim ranlib preciso oferecer suporte ao linker
plug-ins para permitir um ambiente de construção completo (capaz de construir
bibliotecas, etc.). GCC fornece o gcc-ar, gcc-nm, gcc-ranlib invólucros para passar o
opções certas para essas ferramentas. Com LTO sem gordura, os makefiles precisam ser modificados para uso
Eles.

O padrão é -fno-fat-lto-objects em destinos com suporte a plug-in de vinculação.

-fcompare-elim
Após a alocação de registro e divisão de instrução de alocação pós-registro, identifique
instruções aritméticas que calculam sinalizadores de processador semelhantes a uma operação de comparação
com base nessa aritmética. Se possível, elimine a operação de comparação explícita.

Esta passagem se aplica apenas a certos alvos que não podem representar explicitamente o
operação de comparação antes que a alocação de registro seja concluída.

Habilitado em níveis -O, -O2, -O3, -Os.

-fcprop-registers
Após a alocação de registro e divisão de instrução de alocação pós-registro, execute
uma passagem de propagação de cópia para tentar reduzir as dependências de agendamento e, ocasionalmente,
elimine a cópia.

Habilitado em níveis -O, -O2, -O3, -Os.

- correção de perfil
Perfis coletados usando um binário instrumentado para programas multi-threaded podem ser
inconsistente devido a atualizações do contador perdidas. Quando esta opção é especificada, o GCC usa
heurísticas para corrigir ou suavizar tais inconsistências. Por padrão, o GCC emite um
mensagem de erro quando um perfil inconsistente é detectado.

-fprofile-dir =caminho
Defina o diretório para pesquisar os arquivos de dados de perfil em caminho. Esta opção
afeta apenas os dados de perfil gerados por -fprofile-generate, -teste-cobertura,
-fprofile-arcs e usado por -fprofile-use e assim -fbranch-probabilities e seus relacionados
opções. Ambos os caminhos absolutos e relativos podem ser usados. Por padrão, o GCC usa o
diretório atual como caminho, portanto, o arquivo de dados do perfil aparece no mesmo diretório que
o arquivo objeto.

-fprofile-generate
-fprofile-generate =caminho
Habilite as opções normalmente usadas para o aplicativo de instrumentação para produzir um perfil útil
para posterior recompilação com otimização baseada em feedback de perfil. Você deve usar
-fprofile-generate tanto ao compilar quanto ao vincular seu programa.

As seguintes opções estão ativadas: -fprofile-arcs, -fprofile-values, -fvpt.

If caminho é especificado, o GCC olha para o caminho para encontrar os arquivos de dados de feedback do perfil.
Vejo -fprofile-dir.

-fprofile-use
-fprofile-use =caminho
Habilite otimizações direcionadas a comentários de perfil e as seguintes otimizações que
geralmente são lucrativos apenas com o feedback do perfil disponível: -fbranch-probabilities,
-fvpt, -funroll-loops, -fpeel-loops, -ftracer, -ftree-vetorizee ftree-loop-
distribuir padrões.

Por padrão, o GCC emite uma mensagem de erro se os perfis de feedback não corresponderem ao
Código fonte. Este erro pode ser transformado em um aviso usando -Wcoverage-inmatch.
Observe que isso pode resultar em um código mal otimizado.

If caminho é especificado, o GCC olha para o caminho para encontrar os arquivos de dados de feedback do perfil.
Vejo -fprofile-dir.

-fauto-profile
-fauto-profile =caminho
Ative otimizações direcionadas por feedback com base em amostragem e as seguintes otimizações
que geralmente são lucrativos apenas com o feedback do perfil disponível:
-fbranch-probabilities, -fvpt, -funroll-loops, -fpeel-loops, -ftracer,
-ftree-vetorize, -funções-finline, -fipa-cp, -fipa-cp-clone,
-fpredictive-commoning, -funswitch-loops, -fgcse-após-recarregare
-ftree-loop-distrib-patterns.

caminho é o nome de um arquivo que contém informações de perfil AutoFDO. Se omitido,
o padrão é fbdata.afdo no diretório atual.

A produção de um arquivo de dados de perfil AutoFDO requer a execução de seu programa com o perf
utilitário em um sistema de destino GNU / Linux com suporte. Para mais informações, veja
<https://perf.wiki.kernel.org/>.

Por exemplo

registro de perf -e br_inst_retired: near_taken -b -o perf.data \
- seu_programa

Então use o create_gcov ferramenta para converter os dados brutos do perfil em um formato que pode ser
usado pelo GCC. Você também deve fornecer o binário não eliminado para o seu programa para este
ferramenta. Verhttps://github.com/google/autofdo>.

Por exemplo

create_gcov --binary = your_program.unstripped --profile = perf.data \
--gcov = profile.afdo

As opções a seguir controlam o comportamento do compilador em relação à aritmética de ponto flutuante.
Essas opções são negociadas entre velocidade e correção. Todos devem ser ativados especificamente.

-loat-store
Não armazene variáveis ​​de ponto flutuante em registros e iniba outras opções que
pode alterar se um valor de ponto flutuante é obtido de um registro ou memória.

Esta opção evita excesso de precisão indesejável em máquinas como a 68000 onde
os registradores flutuantes (do 68881) mantêm mais precisão do que um "duplo" é suposto
Ter. Da mesma forma para a arquitetura x86. Para a maioria dos programas, o excesso de precisão
só funciona bem, mas alguns programas dependem da definição precisa de flutuação IEEE
apontar. Usar -loat-store para tais programas, depois de modificá-los para armazenar todos
cálculos intermediários pertinentes em variáveis.

-fexcess-precision =estilo
Esta opção permite maior controle sobre o excesso de precisão em máquinas onde
registradores de ponto têm mais precisão do que os tipos IEEE "float" e "double" e os
o processador não suporta operações de arredondamento para esses tipos. Por padrão,
-fexcess-precision = fast está em vigor; isso significa que as operações são realizadas em
a precisão dos registros e que é imprevisível ao arredondar para os tipos
especificado no código-fonte ocorre. Ao compilar C, se
-fexcess-precision = standard é especificado, então o excesso de precisão segue as regras
especificado na ISO C99; em particular, tanto as projeções quanto as atribuições fazem com que os valores sejam
arredondado para seus tipos semânticos (enquanto -loat-store afeta apenas as atribuições).
Esta opção é habilitada por padrão para C se uma opção de conformidade estrita, como
-std = c99 é usado.

-fexcess-precision = standard não é implementado para linguagens diferentes de C e não tem
efeito se -funsafe-math-otimizations or -rápida matemática é especificado. No x86,
também não tem efeito se -mfpmath = sse or -mfpmath = sse + 387 é especificado; na antiga
caso, a semântica IEEE se aplica sem precisão excessiva, e no último, o arredondamento é
imprevisível.

-rápida matemática
Define as opções -fno-math-errno, -funsafe-math-otimizations, -finite-matemática-apenas,
-não-arredondamento-matemática, -fno-signaling-nans e assim -fcx-limited-range.

Esta opção faz com que a macro do pré-processador "__FAST_MATH__" seja definida.

Esta opção não é ativada por nenhum -O opção além de -Rápido uma vez que pode resultar em
saída incorreta para programas que dependem de uma implementação exata de IEEE ou ISO
regras / especificações para funções matemáticas. Pode, no entanto, gerar um código mais rápido para
programas que não requerem as garantias dessas especificações.

-fno-math-errno
Não defina "errno" após chamar funções matemáticas que são executadas com um único
instrução, por exemplo, "sqrt". Um programa que se baseia em exceções IEEE para erros matemáticos
manipulação pode querer usar este sinalizador para velocidade enquanto mantém a aritmética IEEE
compatibilidade.

Esta opção não é ativada por nenhum -O opção, pois pode resultar em saída incorreta
para programas que dependem de uma implementação exata de IEEE ou ISO
regras / especificações para funções matemáticas. Pode, no entanto, gerar um código mais rápido para
programas que não requerem as garantias dessas especificações.

O padrão é -fmath-errno.

Em sistemas Darwin, a biblioteca matemática nunca define "errno". Portanto, não há razão
para o compilador considerar a possibilidade de que possa, e -fno-math-errno é o
padrão.

-funsafe-math-otimizations
Permitir otimizações para aritmética de ponto flutuante que (a) assume que os argumentos e
os resultados são válidos e (b) podem violar os padrões IEEE ou ANSI. Quando usado no link-time,
pode incluir bibliotecas ou arquivos de inicialização que alteram a palavra de controle FPU padrão ou
outras otimizações semelhantes.

Esta opção não é ativada por nenhum -O opção, pois pode resultar em saída incorreta
para programas que dependem de uma implementação exata de IEEE ou ISO
regras / especificações para funções matemáticas. Pode, no entanto, gerar um código mais rápido para
programas que não requerem as garantias dessas especificações. Possibilita
-não-zeros assinados, -fno-trapping-math, -fassociativa-matemática e assim -frecíproca-matemática.

O padrão é -fno-unsafe-math-otimizations.

-fassociativa-matemática
Permite a reassociação de operandos em uma série de operações de ponto flutuante. Esse
viola o padrão de linguagem ISO C e C ++, possivelmente alterando o resultado do cálculo.
NOTA: o reordenamento pode alterar o sinal de zero, bem como ignorar NaNs e inibir ou
criar underflow ou overflow (e, portanto, não pode ser usado em código que depende de arredondamento
comportamento como "(x + 2 ** 52) - 2 ** 52". Também pode reordenar comparações de ponto flutuante e
portanto, não pode ser usado quando comparações ordenadas são necessárias. Esta opção requer que
ambos -não-zeros assinados e assim -fno-trapping-math estar em vigor. Além disso, não faz
muito sentido com -matriz-matemática. Para Fortran, a opção é ativada automaticamente quando
ambos -não-zeros assinados e assim -fno-trapping-math estão em vigor.

O padrão é -não-matemática-associativa.

-frecíproca-matemática
Permitir que o recíproco de um valor seja usado em vez de dividir pelo valor se este
permite otimizações. Por exemplo, "x / y" pode ser substituído por "x * (1 / y)", que é
útil se "(1 / y)" estiver sujeito à eliminação de subexpressão comum. Observe que este
perde a precisão e aumenta o número de flops operando no valor.

O padrão é -fno-matemática-recíproca.

-finite-matemática-apenas
Permitir otimizações para aritmética de ponto flutuante que assume que os argumentos e
os resultados não são NaNs ou + -Infs.

Esta opção não é ativada por nenhum -O opção, pois pode resultar em saída incorreta
para programas que dependem de uma implementação exata de IEEE ou ISO
regras / especificações para funções matemáticas. Pode, no entanto, gerar um código mais rápido para
programas que não requerem as garantias dessas especificações.

O padrão é -não-finito-matemática-apenas.

-não-zeros assinados
Permitir otimizações para aritmética de ponto flutuante que ignora a sinalização de zero.
A aritmética IEEE especifica o comportamento de valores distintos de +0.0 e -0.0, que então
proíbe a simplificação de expressões como x + 0.0 ou 0.0 * x (mesmo com
-finite-matemática-apenas) Esta opção implica que o sinal de um resultado zero não é
significativo.

O padrão é -fsigned-zeros.

-fno-trapping-math
Compile o código presumindo que as operações de ponto flutuante não podem gerar dados visíveis ao usuário
armadilhas. Essas armadilhas incluem divisão por zero, estouro, estouro negativo, resultado inexato e
operação inválida. Esta opção requer que -fno-signaling-nans estar em vigor.
Definir esta opção pode permitir um código mais rápido se depender da aritmética IEEE "ininterrupta",
por exemplo.

Esta opção nunca deve ser ativada por qualquer -O opção, uma vez que pode resultar em
saída incorreta para programas que dependem de uma implementação exata de IEEE ou ISO
regras / especificações para funções matemáticas.

O padrão é -fttrapping-matemática.

-matriz-matemática
Desative as transformações e otimizações que assumem o arredondamento de ponto flutuante padrão
comportamento. Isso é arredondado para zero para todas as conversões de ponto flutuante para inteiros, e
arredondar para o mais próximo para todos os outros truncamentos aritméticos. Esta opção deve ser
especificado para programas que alteram o modo de arredondamento FP dinamicamente, ou que podem ser
executado com um modo de arredondamento não padrão. Esta opção desativa o dobramento constante de
expressões de ponto flutuante em tempo de compilação (que podem ser afetadas pelo modo de arredondamento)
e transformações aritméticas que não são seguras na presença de
modos de arredondamento.

O padrão é -não-arredondamento-matemática.

Esta opção é experimental e atualmente não garante a desativação de todos os GCC
otimizações que são afetadas pelo modo de arredondamento. Versões futuras do GCC podem fornecer
controle mais preciso dessa configuração usando o pragma "FENV_ACCESS" do C99. Esta linha de comando
opção será usada para especificar o estado padrão para "FENV_ACCESS".

-fsignaling-nans
Compilar o código assumindo que os NaNs de sinalização IEEE podem gerar armadilhas visíveis ao usuário durante
operações de ponto flutuante. Definir esta opção desativa otimizações que podem mudar
o número de exceções visíveis com NaNs de sinalização. Esta opção implica
-fttrapping-matemática.

Esta opção faz com que a macro do pré-processador "__SUPPORT_SNAN__" seja definida.

O padrão é -fno-signaling-nans.

Esta opção é experimental e atualmente não garante a desativação de todos os GCC
otimizações que afetam o comportamento da sinalização do NaN.

-fsingle-precision-constant
Trate constantes de ponto flutuante como precisão única em vez de converter implicitamente
-los para constantes de precisão dupla.

-fcx-limited-range
Quando ativada, esta opção afirma que uma etapa de redução de faixa não é necessária quando
realizando divisão complexa. Além disso, não há como verificar se o resultado de um
multiplicação ou divisão complexa é "NaN + I * NaN", com uma tentativa de resgatar o
situação nesse caso. O padrão é -fno-cx-limited-range, mas é habilitado por
-rápida matemática.

Esta opção controla a configuração padrão do pragma ISO C99 "CX_LIMITED_RANGE".
No entanto, a opção se aplica a todos os idiomas.

-fcx-fortran-regras
A multiplicação e divisão complexa seguem as regras do Fortran. A redução do intervalo é feita como
parte da divisão complexa, mas não há verificação se o resultado de uma divisão complexa
multiplicação ou divisão é "NaN + I * NaN", com uma tentativa de resgatar a situação
nesse caso.

O padrão é -fno-cx-fortran-rules.

As seguintes opções controlam otimizações que podem melhorar o desempenho, mas não são
habilitado por qualquer -O opções. Esta seção inclui opções experimentais que podem produzir
código quebrado.

-fbranch-probabilities
Depois de executar um programa compilado com -fprofile-arcs, você pode compilá-lo uma segunda vez
utilização -fbranch-probabilities, para melhorar as otimizações com base no número de vezes
cada ramo foi tomado. Quando um programa compilado com -fprofile-arcs sai, salva
a execução do arco conta para um arquivo chamado sourcename.gcda para cada arquivo de origem. o
as informações neste arquivo de dados são muito dependentes da estrutura do
código, então você deve usar o mesmo código-fonte e as mesmas opções de otimização para ambos
compilações.

Com -fbranch-probabilities, O GCC coloca um REG_BR_PROB nota em cada JUMP_INSN e assim
CALL_INSN. Eles podem ser usados ​​para melhorar a otimização. Atualmente, eles são usados ​​apenas
em um lugar: em reorg.c, em vez de adivinhar qual caminho um ramo tem mais probabilidade de
levar a REG_BR_PROB os valores são usados ​​para determinar exatamente qual caminho é seguido mais
frequentemente.

-fprofile-values
Se combinado com -fprofile-arcs, adiciona código para que alguns dados sobre valores de
expressões no programa são reunidas.

Com -fbranch-probabilities, ele lê de volta os dados coletados a partir de valores de criação de perfil de
expressões para uso em otimizações.

Habilitado com -fprofile-generate e assim -fprofile-use.

-fprofile-reorder-functions
O reordenamento de funções com base na instrumentação de perfil coleta o primeiro tempo de execução
de uma função e ordena essas funções em ordem crescente.

Habilitado com -fprofile-use.

-fvpt
Se combinado com -fprofile-arcs, esta opção instrui o compilador a adicionar código para
reunir informações sobre os valores das expressões.

Com -fbranch-probabilities, ele lê de volta os dados coletados e realmente executa o
otimizações com base neles. Atualmente, as otimizações incluem especialização de
operações de divisão usando o conhecimento sobre o valor do denominador.

-frename-registers
Tentar evitar dependências falsas no código programado, usando os registros restantes
após a alocação do registro. Esta otimização beneficia muitos processadores com lotes
de registros. Dependendo do formato de informações de depuração adotado pelo destino,
no entanto, pode tornar a depuração impossível, uma vez que as variáveis ​​não ficam mais em uma "casa
registro".

Ativado por padrão com -funroll-loops e assim -fpeel-loops.

-fschedule-fusion
Executa uma passagem dependente do alvo sobre o fluxo de instrução para programar instruções
do mesmo tipo juntos porque a máquina alvo pode executá-los de forma mais eficiente se eles
são adjacentes uns aos outros no fluxo de instrução.

Habilitado em níveis -O2, -O3, -Os.

-ftracer
Execute a duplicação da cauda para aumentar o tamanho do superbloco. Esta transformação simplifica
o fluxo de controle da função permitindo que outras otimizações façam um trabalho melhor.

Habilitado com -fprofile-use.

-funroll-loops
Loops de desenrolamento cujo número de iterações pode ser determinado em tempo de compilação ou após
entrada para o loop. -funroll-loops implica -frerun-cse-após-loop, -fweb e assim
-frename-registers. Ele também ativa o peeling de loop completo (ou seja, a remoção completa de
loops com um pequeno número constante de iterações). Esta opção torna o código maior e
pode ou não fazer com que funcione mais rápido.

Habilitado com -fprofile-use.

-funroll-all-loops
Desenrole todos os loops, mesmo se o número de iterações for incerto quando o loop for
entrou. Isso geralmente faz com que os programas sejam executados mais lentamente. -funroll-all-loops implica o
mesmas opções que -funroll-loops.

-fpeel-loops
Loops de casca para os quais há informações suficientes para que eles não rolem muito (de
feedback do perfil). Ele também ativa o peeling de loop completo (ou seja, a remoção completa de
loops com pequeno número constante de iterações).

Habilitado com -fprofile-use.

-fmove-loop-invariants
Ativa a passagem de movimento invariante do loop no otimizador de loop RTL. Ativado no nível
-O1

-funswitch-loops
Mova ramos com condições invariantes de loop para fora do loop, com duplicatas do
loop em ambos os ramos (modificado de acordo com o resultado da condição).

-funções-seções
-fdata-seções
Coloque cada função ou item de dados em sua própria seção no arquivo de saída se o alvo
suporta seções arbitrárias. O nome da função ou o nome do item de dados
determina o nome da seção no arquivo de saída.

Use essas opções em sistemas onde o vinculador pode realizar otimizações para melhorar
localidade de referência no espaço de instrução. A maioria dos sistemas usando o objeto ELF
format e processadores SPARC executando Solaris 2 têm linkers com essas otimizações.
O AIX pode ter essas otimizações no futuro.

Use essas opções apenas quando houver benefícios significativos em fazê-lo. Quando você
especificar essas opções, o montador e o vinculador criam um objeto maior e executável
arquivos e também são mais lentos. Você não pode usar gprof em todos os sistemas se você especificar isso
opção, e você pode ter problemas com a depuração se especificar esta opção e
-g.

-fbranch-target-load-optimize
Execute a otimização da carga do registro de destino do branch antes do encadeamento do prólogo / epílogo.
O uso de registradores de destino normalmente pode ser exposto apenas durante a recarga, elevando assim
carrega fora de loops e fazer o agendamento entre blocos precisa de uma otimização separada
passar.

-fbranch-target-load-optimize2
Execute a otimização de carregamento de registro de destino de ramificação após o encadeamento de prólogo / epílogo.

-fbtr-bb-exclusivo
Ao realizar a otimização de carga de registro de destino de ramificação, não reutilize destino de ramificação
registra em qualquer bloco básico.

-fstack-protector
Emita código extra para verificar estouros de buffer, como ataques de destruição de pilha. Esse
é feito adicionando uma variável de guarda às funções com objetos vulneráveis. Esse
inclui funções que chamam "alloca" e funções com buffers maiores que 8 bytes.
Os protetores são inicializados quando uma função é inserida e, em seguida, verificados quando o
saídas de função. Se uma verificação de guarda falhar, uma mensagem de erro é impressa e o programa
saídas.

-fstack-protector-all
Gostar -fstack-protector exceto que todas as funções são protegidas.

-fstack-protector-strong
Gostar -fstack-protector mas inclui funções adicionais a serem protegidas --- aquelas
que têm definições de array locais ou referências a endereços de quadros locais.

-fstack-protector-explicit
Gostar -fstack-protector mas apenas protege as funções que têm o
Atributo "stack_protect"

-fstdarg-opt
Otimize o prólogo de funções de argumento variadic no que diz respeito ao uso daqueles
argumentos.

NOTA: No Ubuntu 14.10 e versões posteriores, -fstack-protector-strong é habilitado por
padrão para C, C ++, ObjC, ObjC ++, se nenhum dos -fno-stack-protector, -nostdlibnem
-freestanding são encontrados.

- âncoras de seção
Tente reduzir o número de cálculos de endereços simbólicos usando "âncora" compartilhada
símbolos para abordar objetos próximos. Essa transformação pode ajudar a reduzir o número
de entradas GOT e acessos GOT em alguns destinos.

Por exemplo, a implementação da seguinte função "foo":

estático int a, b, c;
int foo (vazio) {return a + b + c; }

geralmente calcula os endereços de todas as três variáveis, mas se você compilar com
- âncoras de seção, ele acessa as variáveis ​​de um ponto de ancoragem comum. o
efeito é semelhante ao seguinte pseudocódigo (que não é válido C):

int foo (vazio)
{
registrar int * xr = & x;
return xr [& a - & x] + xr [& b - & x] + xr [& c - & x];
}

Nem todos os destinos oferecem suporte a essa opção.

--param nome=valor
Em alguns lugares, o GCC usa várias constantes para controlar a quantidade de otimização que
é feito. Por exemplo, o GCC não possui funções embutidas que contenham mais de um certo
número de instruções. Você pode controlar algumas dessas constantes na linha de comando
usando o --param opção.

Os nomes de parâmetros específicos e o significado dos valores estão vinculados ao
internos do compilador e estão sujeitos a alterações sem aviso no futuro
Lançamentos.

Em cada caso, o valor é um número inteiro. As escolhas permitidas para nome são:

resultado previsível do ramo
Quando a ramificação está prevista para ser tomada com probabilidade menor do que este limite
(em porcentagem), então é considerado bem previsível. O padrão é 10.

max-crossjump-bordas
O número máximo de arestas de entrada a considerar para salto cruzado. O algoritmo
utilizado pelo -fcrossjumping é O (N ^ 2) no número de arestas que chegam a cada bloco.
Valores crescentes significam otimização mais agressiva, tornando o tempo de compilação
aumentar com provavelmente uma pequena melhoria no tamanho do executável.

min-crossjump-insns
O número mínimo de instruções que devem ser combinadas no final de dois blocos
antes que o salto cruzado seja executado neles. Este valor é ignorado no caso
onde todas as instruções no bloco do qual está sendo feito o salto cruzado são correspondidas. o
o valor padrão é 5.

max-grow-copy-bb-insns
O fator de expansão de tamanho de código máximo ao copiar blocos básicos em vez de
pulando. A expansão é relativa a uma instrução de salto. o valor padrão é
8.

max-goto-duplication-insns
O número máximo de instruções para duplicar para um bloco que salta para um
goto calculado. Para evitar o comportamento O (N ^ 2) em uma série de passagens, os fatores GCC
computou gotos no início do processo de compilação e desatualizou-os tão tarde quanto
possível. Apenas saltos computados no final de blocos básicos com não mais do que max-
goto-duplication-insns não são fatorados. O valor padrão é 8.

max-delay-slot-insn-search
O número máximo de instruções a considerar ao procurar uma instrução para
preencher um slot de atraso. Se mais do que este número arbitrário de instruções forem
pesquisado, a economia de tempo para preencher o slot de atraso é mínima, então pare
procurando. Valores crescentes significam otimização mais agressiva, tornando o
aumento do tempo de compilação com provavelmente uma pequena melhoria no tempo de execução.

max-delay-slot-live-search
Ao tentar preencher slots de atraso, o número máximo de instruções a considerar
ao pesquisar um bloco com informações de registro ao vivo válidas. Aumentando isso
valor escolhido arbitrariamente significa otimização mais agressiva, aumentando o
tempo de compilação. Este parâmetro deve ser removido quando o código de slot de atraso é
reescrito para manter o gráfico de fluxo de controle.

max-gcse-memory
A quantidade máxima aproximada de memória que pode ser alocada para realizar
a otimização de eliminação de subexpressão comum global. Se mais memória do que
especificado é necessário, a otimização não é feita.

taxa de inserção max-gcse
Se a proporção de inserções de expressão para exclusões for maior do que este valor para
qualquer expressão, então RTL PRE insere ou remove a expressão e, portanto, sai
cálculos parcialmente redundantes no fluxo de instrução. o valor padrão é
20.

comprimento máximo da lista pendente
O número máximo de dependências pendentes que a programação permite antes de liberar o
estado atual e recomeçar. Grandes funções com poucas ramificações ou chamadas podem
criar listas excessivamente grandes que consomem memória e recursos desnecessariamente.

max-modulo-backtrack-tentativas
O número máximo de tentativas de retrocesso que o planejador deve fazer quando o módulo
agendar um loop. Valores maiores podem aumentar exponencialmente o tempo de compilação.

max-inline-insns-single
Vários parâmetros controlam o inliner da árvore usado no GCC. Este número define o
número máximo de instruções (contadas na representação interna do GCC) em um
função única que o inliner da árvore considera para inlining. Isso só afeta
funções declaradas inline e métodos implementados em uma declaração de classe (C ++).
O valor padrão é 400.

max-inline-insns-auto
Quando você usa -funções-finline (incluído em -O3), muitas funções que seriam
caso contrário, não serão considerados para embutir pelo compilador são investigados. Para
essas funções, um limite diferente (mais restritivo) em comparação com as funções
declarado embutido pode ser aplicado. O valor padrão é 40.

inline-min-speedup
Quando a melhoria de desempenho estimada do tempo de execução do chamador + receptor excede este
limite (em porcentagem), a função pode ser embutida, independentemente do limite de
--param max-inline-insns-single e assim --param max-inline-insns-auto.

grande-função-insns
O limite que especifica funções realmente grandes. Para funções maiores que este limite
após o inlining, o inlining é restringido por --param crescimento de grande função. Este
parâmetro é útil principalmente para evitar tempo de compilação extremo causado por
algoritmos lineares usados ​​pelo back end. O valor padrão é 2700.

crescimento de grande função
Especifica o crescimento máximo de função grande causada pelo inlining em porcentagens. o
o valor padrão é 100, o que limita o crescimento da função grande a 2.0 vezes o original
tamanho.

Insns de unidades grandes
O limite que especifica uma grande unidade de tradução. Crescimento causado pelo inlining de unidades
maior do que este limite é limitado por --param crescimento da unidade em linha. Para unidades pequenas
isso pode ser muito apertado. Por exemplo, considere uma unidade que consiste na função A
isto é inline e B que apenas chama A três vezes. Se B é pequeno em relação a A,
o crescimento da unidade é de 300 \% e, no entanto, esse inlining é muito lógico. Para muito grande
unidades que consistem em pequenas funções embutidas, no entanto, o crescimento geral da unidade
limite é necessário para evitar a explosão exponencial do tamanho do código. Assim, para menores
unidades, o tamanho é aumentado para --param Insns de unidades grandes antes de aplicar --param
crescimento da unidade em linha. O padrão é 10000.

crescimento da unidade em linha
Especifica o crescimento geral máximo da unidade de compilação causado pelo inlining. o
o valor padrão é 20, o que limita o crescimento da unidade a 1.2 vezes o tamanho original. Frio
funções (marcadas como frio por meio de um atributo ou por feedback de perfil) não são
contabilizados no tamanho da unidade.

crescimento da unidade ipcp
Especifica o crescimento geral máximo da unidade de compilação causado por interpretações interpretativas
propagação constante. O valor padrão é 10, o que limita o crescimento da unidade a 1.1
vezes o tamanho original.

estrutura de pilha grande
O limite que especifica quadros de pilha grandes. Enquanto inlining, o algoritmo está tentando
para não crescer muito além desse limite. O valor padrão é 256 bytes.

crescimento de frame de pilha grande
Especifica o crescimento máximo de quadros de pilha grandes causados ​​por inlining em porcentagens.
O valor padrão é 1000, o que limita o grande crescimento do frame da pilha a 11 vezes o
tamanho original.

max-inline-insns-recursive
max-inline-insns-recursive-auto
Especifica o número máximo de instruções de uma cópia fora de linha de um auto
a função embutida recursiva pode se transformar em uma função embutida recursiva.

--param max-inline-insns-recursive aplica-se a funções declaradas embutidas. Para
funções não declaradas inline, inlining recursivo acontece apenas quando
-funções-finline (incluído em -O3) está ativado; --param max-inline-insns-
auto recursivo aplica-se em vez disso. O valor padrão é 450.

profundidade máxima em linha recursiva
max-inline-recursive-depth-auto
Especifica a profundidade de recursão máxima usada para inlining recursivo.

--param profundidade máxima em linha recursiva aplica-se a funções declaradas embutidas. Para
funções não declaradas inline, inlining recursivo acontece apenas quando
-funções-finline (incluído em -O3) está ativado; --param max-inline-recursive-
profundidade auto aplica-se em vez disso. O valor padrão é 8.

probabilidade mínima recursiva em linha
O inlining recursivo é lucrativo apenas para funções com recursão profunda em
média e pode prejudicar a função com pouca profundidade de recursão, aumentando o
tamanho do prólogo ou complexidade do corpo da função para outros otimizadores.

Quando o feedback do perfil estiver disponível (consulte -fprofile-generate) a recursão real
a profundidade pode ser adivinhada a partir da probabilidade de que a função recorra por meio de uma determinada chamada
expressão. Este parâmetro limita o inlining apenas para expressões de chamada cujo
a probabilidade excede o limite fornecido (em porcentagens). O valor padrão é 10.

early-inlining-insns
Especifique o crescimento que o inliner inicial pode gerar. Com efeito, aumenta a quantidade
de inlining para código com uma grande penalidade de abstração. O valor padrão é 14.

max-early-inliner-iterations
Limite de iterações do inliner inicial. Isso basicamente limita o número de
chamadas indiretas aninhadas que o inliner inicial pode resolver. Cadeias mais profundas ainda estão
tratado por inlining tardio.

probabilidade de compartilhamento de comdat
Probabilidade (em porcentagem) de que a função inline C ++ com visibilidade comdat seja
compartilhado em várias unidades de compilação. O valor padrão é 20.

profile-func-internal-id
Um parâmetro para controlar se deve usar o id interno da função no banco de dados do perfil
olho para cima. Se o valor for 0, o compilador usa um id baseado na função
nome do assembler e nome do arquivo, o que torna os dados de perfil antigos mais tolerantes à fonte
alterações como reordenação de função, etc. O valor padrão é 0.

limite de min-vect-loop
O número mínimo de iterações sob as quais os loops não são vetorizados quando
-ftree-vetorize é usado. O número de iterações após a vetorização deve
ser maior que o valor especificado por esta opção para permitir a vetorização. o
o valor padrão é 0.

relação custo-distância-gcse
Fator de escala no cálculo da distância máxima pela qual uma expressão pode ser movida
Otimizações GCSE. No momento, isso é compatível apenas com a passagem de içamento de código.
Quanto maior a proporção, mais agressivo é o içamento de código com
expressões, ou seja, as expressões que custam menos do que gcse-irrestrito-
custo. A especificação de 0 desativa a elevação de expressões simples. o valor padrão é
10.

custo irrestrito do gcse
Custo, medido aproximadamente como o custo de uma única instrução de máquina típica, em
quais otimizações GCSE não restringem a distância que uma expressão pode viajar.
No momento, isso é compatível apenas com a passagem de içamento de código. Quanto menor o custo,
o içamento de código mais agressivo é. Especificar 0 permite que todas as expressões
viajar distâncias irrestritas. O valor padrão é 3.

profundidade máxima de elevação
A profundidade da pesquisa na árvore dominadora por expressões a serem levantadas. Isso é usado
para evitar o comportamento quadrático no algoritmo de içamento. O valor de 0 não limita
na pesquisa, mas pode retardar a compilação de funções enormes. O valor padrão
é 30.

max-tail-merge-comparations
A quantidade máxima de bbs semelhantes com os quais comparar um bb. Isso é usado para evitar
comportamento quadrático na fusão da cauda da árvore. O valor padrão é 10.

max-tail-merge-iterações
A quantidade máxima de iterações da passagem sobre a função. Isso é usado para
limite o tempo de compilação na fusão da cauda da árvore. O valor padrão é 2.

max-unrolled-insns
O número máximo de instruções que um loop pode ter para ser desenrolado. Se um loop
é desenrolado, este parâmetro também determina quantas vezes o código do loop é
desenrolado.

max-average-unrolled-insns
O número máximo de instruções influenciadas pelas probabilidades de sua execução que
um loop pode ter que ser desenrolado. Se um loop for desenrolado, este parâmetro também
determina quantas vezes o código do loop é desenrolado.

max-unroll-times
O número máximo de desdobramentos de um único loop.

max-peeled-insns
O número máximo de instruções que um loop pode ter que ser executado. Se um loop
for descascado, este parâmetro também determina quantas vezes o código de loop é descascado.

max-peel-times
O número máximo de peelings de um único loop.

max-peel-branchs
O número máximo de ramos no caminho ativo através da sequência descascada.

max-completamente-descascado-insns
O número máximo de insns de um loop completamente descascado.

tempos máximos de remoção completa
O número máximo de iterações de um loop adequado para o peeling completo.

max-completamente-peel-loop-nest-depth
A profundidade máxima de um ninho de loop adequado para o peeling completo.

max-unswitch-insns
O número máximo de insns de um loop não comutado.

nível máximo de desconexão
O número máximo de ramificações não comutadas em um único loop.

lim-caro
O custo mínimo de uma expressão cara no movimento invariante do loop.

iv-considerar-todos-os-candidatos-vinculados
Limite no número de candidatos para variáveis ​​de indução, abaixo do qual todos os candidatos
são considerados para cada uso em otimizações de variáveis ​​de indução. Se houver
mais candidatos do que isso, apenas os mais relevantes são considerados para evitar
complexidade quadrática de tempo.

iv-máx-considerado-usa
As otimizações da variável de indução desistem de loops que contêm mais indução
usos de variáveis.

iv-sempre-podar-cand-conjunto-limitado
Se o número de candidatos no conjunto for menor do que este valor, sempre tente
remova ivs desnecessários do conjunto ao adicionar um novo.

scev-max-expr-size
Limite no tamanho das expressões usadas no analisador de evoluções escalares. Grande
expressões tornam o analisador mais lento.

complexidade scev-max-expr
Vinculado à complexidade das expressões no analisador de evoluções escalares.
Expressões complexas tornam o analisador mais lento.

ômega-max-vars
O número máximo de variáveis ​​em um sistema de restrição Omega. O valor padrão
é 128.

omega-max-geqs
O número máximo de desigualdades em um sistema de restrição Omega. O padrão
o valor é 256.

omega-max-eqs
O número máximo de igualdades em um sistema de restrição Omega. O valor padrão
é 128.

omega-max-wild-cards
O número máximo de variáveis ​​curinga que o solucionador Omega é capaz de inserir.
O valor padrão é 18.

ômega-hash-table-size
O tamanho da tabela hash no solucionador Omega. O valor padrão é 550.

chaves ômega-max
O número máximo de chaves usadas pelo solucionador Omega. O valor padrão é 500.

omega-eliminar-redundant-constraints
Quando definido como 1, use métodos caros para eliminar todas as restrições redundantes. o
o valor padrão é 0.

vect-max-versão-para-verificações de alinhamento
O número máximo de verificações de tempo de execução que podem ser realizadas ao fazer o loop
controle de versão para alinhamento no vetorizador.

vect-max-version-for-alias-checks
O número máximo de verificações de tempo de execução que podem ser realizadas ao fazer o loop
controle de versão para alias no vetorizador.

vect-max-peeling-for-alinhamento
O número máximo de peels de loop para aprimorar o alinhamento de acesso para o vetorizador. Valor
-1 significa 'sem limite'.

max-iterations-to-track
O número máximo de iterações de um loop, o algoritmo de força bruta para análise
do número de iterações do loop tenta avaliar.

hot-bb-count-ws-permila
Uma contagem de perfil de bloco básico é considerada quente se contribui para o dado
permillage (ou seja, 0 ... 1000) de toda a execução do perfil.

fração de frequência quente-bb
Selecione a fração da frequência do bloco de entrada de execuções do bloco básico em
a função dada ao bloco básico precisa ser considerada quente.

iterações máximas preditas
O número máximo de iterações de loop que prevemos estaticamente. Isso é útil em
casos em que uma função contém um único loop com limite conhecido e outro loop
com limite desconhecido. O número conhecido de iterações é previsto corretamente, enquanto
o número desconhecido de iterações é em média cerca de 10. Isso significa que o loop
sem limites parece artificialmente frio em relação ao outro.

probabilidade de expectativa embutida
Controle a probabilidade da expressão ter o valor especificado. Esse
o parâmetro leva uma porcentagem (ou seja, 0 ... 100) como entrada. A probabilidade padrão
de 90 é obtido empiricamente.

alinhar-limiar
Selecione a fração da frequência máxima de execuções de um bloco básico em um
função para alinhar o bloco básico.

alinhar-loop-iterações
Um loop que deve iterar pelo menos o número selecionado de iterações é alinhado.

tracer-dynamic-cobertura
tracer-dynamic-cobertura-feedback
Este valor é usado para limitar a formação do superbloco, uma vez que a porcentagem dada de
as instruções executadas são abordadas. Isso limita a expansão desnecessária do tamanho do código.

A tracer-dynamic-cobertura-feedback parâmetro é usado apenas quando o feedback do perfil
está disponível. Os perfis reais (em oposição aos estimados estaticamente) são
muito menos equilibrado, permitindo que o limite seja um valor maior.

tracer-max-code-growth
Interrompa a duplicação da cauda assim que o crescimento do código atingir uma determinada porcentagem. Isto é um
limite bastante artificial, já que a maioria das duplicatas são eliminadas posteriormente no cruzamento
pulando, por isso pode ser definido com valores muito mais altos do que o crescimento de código desejado.

razão traçador-min-ramo
Pare o crescimento reverso quando a probabilidade reversa da melhor borda for menor que isso
limite (em porcentagem).

razão traçador-min-ramo
tracer-min-branch-ratio-feedback
Interrompa o crescimento para frente se a melhor borda tiver probabilidade inferior a este limite.

similarmente a tracer-dynamic-cobertura dois valores estão presentes, um para compilação
para feedback do perfil e outro para compilação sem. O valor para compilação
com o feedback do perfil precisa ser mais conservador (mais alto), a fim de tornar
traçador eficaz.

max-cse-path-length
O número máximo de blocos básicos no caminho que o CSE considera. O padrão é 10.

max-cse-insns
O número máximo de instruções que o CSE processa antes da descarga. O padrão é
1000.

ggc-min-expand
O GCC usa um coletor de lixo para gerenciar sua própria alocação de memória. Este parâmetro
especifica a porcentagem mínima pela qual o heap do coletor de lixo deve ser
permissão para expandir entre as coleções. Ajustar isso pode melhorar a velocidade de compilação;
não tem efeito na geração de código.

O padrão é 30% + 70% * (RAM / 1GB) com um limite superior de 100% quando RAM> = 1GB.
Se "getrlimit" estiver disponível, a noção de "RAM" é o menor da RAM real e
"RLIMIT_DATA" ou "RLIMIT_AS". Se o GCC não for capaz de calcular RAM em um determinado
plataforma, o limite inferior de 30% é usado. Definir este parâmetro e ggc-min-
tamanho da pilha para zero faz com que uma coleta completa ocorra em todas as oportunidades. Isto é
extremamente lento, mas pode ser útil para depuração.

ggc-min-heapsize
Tamanho mínimo da pilha do coletor de lixo antes de começar a se preocupar em coletar
lixo. A primeira coleta ocorre depois que o heap se expande por ggc-min-expand%
Além ggc-min-heapsize. Novamente, ajustar isso pode melhorar a velocidade de compilação, e
não tem efeito na geração de código.

O padrão é o menor de RAM / 8, RLIMIT_RSS ou um limite que tenta garantir
que RLIMIT_DATA ou RLIMIT_AS não são excedidos, mas com um limite inferior de 4096
(quatro megabytes) e um limite superior de 131072 (128 megabytes). Se o GCC não for capaz
para calcular a RAM em uma plataforma específica, o limite inferior é usado. Configurando isso
parâmetro muito grande desabilita efetivamente a coleta de lixo. Configurando isso
parâmetro e ggc-min-expand a zero faz com que uma coleção completa ocorra a cada
oportunidade.

max-reload-search-insns
O número máximo de recarga de instrução deve olhar para trás para obter o equivalente
registro. Valores crescentes significam otimização mais agressiva, tornando o
aumento do tempo de compilação com desempenho provavelmente um pouco melhor. O padrão
o valor é 100.

max-cselib-memory-locations
O número máximo de localizações de memória que o cselib deve levar em consideração.
Valores crescentes significam otimização mais agressiva, tornando o tempo de compilação
aumentar com desempenho provavelmente ligeiramente melhor. O valor padrão é 500.

reordenar-blocos-duplicar
reordenar-bloquear-duplicar-feedback
Usado pelo passe de reordenação de bloco básico para decidir se deve usar incondicional
ramificar ou duplicar o código em seu destino. O código é duplicado quando seu
o tamanho estimado é menor do que este valor multiplicado pelo tamanho estimado de
salto incondicional nos pontos quentes do programa.

A reordenar-bloquear-duplicar-feedback parâmetro é usado apenas quando o feedback do perfil
está disponível. Pode ser definido com valores maiores do que reordenar-bloquear-duplicar desde
as informações sobre os pontos críticos são mais precisas.

max-sched-ready-insns
O número máximo de instruções prontas para serem emitidas, o planejador deve
considere a qualquer momento durante a primeira passagem de agendamento. Valores crescentes
significa pesquisas mais completas, fazendo com que o tempo de compilação aumente com provavelmente
pouco benefício. O valor padrão é 100.

max-sched-region-blocks
O número máximo de blocos em uma região a ser considerada para interbloqueio
agendamento. O valor padrão é 10.

max-pipeline-region-blocks
O número máximo de blocos em uma região a ser considerado para pipelining no
agendador seletivo. O valor padrão é 15.

max-sched-region-insns
O número máximo de insns em uma região a ser considerado para interbloqueio
agendamento. O valor padrão é 100.

max-pipeline-region-insns
O número máximo de insns em uma região a ser considerado para pipelining no
agendador seletivo. O valor padrão é 200.

min-spec-prob
A probabilidade mínima (em porcentagens) de alcançar um bloco de origem para interbloco
programação especulativa. O valor padrão é 40.

max-sched-extend-region-iters
O número máximo de iterações por meio de CFG para estender regiões. Um valor de 0 (o
padrão) desativa extensões de região.

atraso máximo de agendamento-insn
O atraso máximo de conflito para um insn a ser considerado para moção especulativa.
O valor padrão é 3.

sched-spec-prob-cutoff
A probabilidade mínima de sucesso da especulação (em porcentagens), de modo que especulativo
insns são agendados. O valor padrão é 40.

sched-spec-state-edge-prob-cutoff
A probabilidade mínima que uma borda deve ter para que o planejador salve seu estado
Em frente. O valor padrão é 10.

sched-mem-true-dep-cost
Distância mínima (em ciclos de CPU) entre armazenamento e carga visando a mesma memória
Localizações. O valor padrão é 1.

selsched-max-lookahead
O tamanho máximo da janela de antevisão da programação seletiva. É uma profundidade
de pesquisa para obter as instruções disponíveis. O valor padrão é 50.

selsched-max-sched-times
O número máximo de vezes que uma instrução é agendada durante a seletiva
agendamento. Este é o limite do número de iterações através das quais o
a instrução pode ser canalizada. O valor padrão é 2.

selsched-max-insns-to-rename
O número máximo de melhores instruções na lista pronta que são consideradas para
renomear no agendador seletivo. O valor padrão é 2.

sms-min-sc
O valor mínimo da contagem de estágios que o agendador de módulo de oscilação gera. o
o valor padrão é 2.

max-last-value-rtl
O tamanho máximo medido como o número de RTLs que podem ser registrados em uma expressão
no combinador para um pseudo-registro como o último valor conhecido desse registro. o
o padrão é 10000.

max-combine-insns
O número máximo de instruções que o combinador RTL tenta combinar. O padrão
o valor é 2 em -Og e 4 caso contrário.

limite de compartilhamento inteiro
Pequenas constantes inteiras podem usar uma estrutura de dados compartilhada, reduzindo o compilador
uso de memória e aumentando sua velocidade. Isso define o valor máximo de um compartilhamento
constante inteira. O valor padrão é 256.

ssp-buffer-size
O tamanho mínimo dos buffers (ou seja, arrays) que recebem proteção contra quebra de pilha
quando -fstack-proteção é usado.

Este padrão antes do Ubuntu 10.10 era "8". Atualmente é "4", para aumentar o
número de funções protegidas pelo protetor de pilha.

tamanho mínimo para compartilhamento de pilha
O tamanho mínimo das variáveis ​​que participam do compartilhamento de slots de pilha quando não
otimizando. O valor padrão é 32.

max-jump-thread-duplication-stmts
Número máximo de declarações permitidas em um bloco que precisa ser duplicado quando
threading saltos.

max-fields-for-field-sensitive
Número máximo de campos em uma estrutura tratada de maneira sensível ao campo durante
análise de ponteiro. O padrão é zero para -O0 e assim -O1e 100 para -Os, -O2e
-O3.

pré-busca-latência
Estimar o número médio de instruções que são executadas antes da pré-busca
termina. A distância pré-esticada à frente é proporcional a essa constante.
Aumentar este número também pode levar a menos fluxos sendo pré-buscados (consulte
pré-buscas simultâneas).

pré-buscas simultâneas
Número máximo de pré-buscas que podem ser executadas ao mesmo tempo.

l1-cache-line-size
O tamanho da linha do cache no cache L1, em bytes.

l1-cache-size
O tamanho do cache L1, em kilobytes.

l2-cache-size
O tamanho do cache L2, em kilobytes.

proporção de min-insn para pré-busca
A proporção mínima entre o número de instruções e o número de pré-buscas
para ativar a pré-busca em um loop.

proporção pré-busca-min-insn-para-mem
A proporção mínima entre o número de instruções e o número de memória
referências para ativar a pré-busca em um loop.

use-canonical-types
Se o compilador deve usar o sistema de tipo "canônico". Por padrão, este
deve ser sempre 1, que usa um mecanismo interno mais eficiente para comparar
tipos em C ++ e Objective-C ++. No entanto, se os bugs no sistema de tipo canônico são
causando falhas de compilação, defina este valor como 0 para desabilitar os tipos canônicos.

switch-conversão-max-branch-ratio
A conversão de inicialização do switch se recusa a criar matrizes maiores que
switch-conversão-max-branch-ratio vezes o número de ramos no switch.

comprimento parcial máximo
Comprimento máximo do conjunto antic parcial calculado durante a árvore parcial
otimização de eliminação de redundância (-ftree-pre) ao otimizar em -O3 e acima.
Para alguns tipos de código-fonte, a eliminação de redundância parcial aprimorada
a otimização pode fugir, consumindo toda a memória disponível no host
máquina. Este parâmetro define um limite para o comprimento dos conjuntos que são calculados,
o que impede o comportamento de fuga. Definir um valor de 0 para este parâmetro
permite um comprimento de conjunto ilimitado.

sccvn-max-scc-size
Tamanho máximo de um componente fortemente conectado (SCC) durante o processamento SCCVN. Se
este limite é atingido, o processamento SCCVN para toda a função não é feito e
as otimizações que dependem dele estão desabilitadas. O tamanho máximo padrão do SCC é
10000.

sccvn-max-alias-queries-per-access
Número máximo de consultas alias-oracle que realizamos ao procurar por redundâncias
para cargas e lojas. Se este limite for atingido, a pesquisa é abortada e o carregamento ou
a loja não é considerada redundante. O número de consultas é algoritmicamente
limitado ao número de lojas em todos os caminhos, desde a carga até a entrada da função.
O número máximo padrão de consultas é 1000.

ira-max-loops-num
O IRA usa a alocação de registro regional por padrão. Se uma função contém mais
loops do que o número dado por este parâmetro, apenas no máximo o número dado de
os loops executados com mais frequência formam regiões para alocação de registro regional.
O valor padrão do parâmetro é 100.

ira-max-conflito-tabela-tamanho
Embora o IRA use um algoritmo sofisticado para compactar a tabela de conflitos, o
A mesa ainda pode exigir uma quantidade excessiva de memória para funções enormes. Se o
tabela de conflito para uma função pode ser maior do que o tamanho em MB dado por este
parâmetro, o alocador de registro, em vez disso, usa um parâmetro mais rápido, simples e
algoritmo de qualidade que não requer a construção de uma tabela de conflitos de pseudo-registro.
O valor padrão do parâmetro é 2000.

ira-loop-reserved-regs
IRA pode ser usado para avaliar pressão de registro mais precisa em loops para decisões
para mover invariantes de loop (veja -O3) O número de registros disponíveis reservados para
algumas outras finalidades são fornecidas por este parâmetro. O valor padrão do
parâmetro é 2, que é o número mínimo de registros necessários para um típico
instruções. Este valor é o melhor encontrado em vários experimentos.

lra-herança-vazante-probabilidade-corte
O LRA tenta reutilizar os valores recarregados nos registros em insns subsequentes. Esse
a otimização é chamada de herança. EBB é usado como uma região para fazer isso
otimização. O parâmetro define uma probabilidade mínima de queda na borda em
porcentagem usada para adicionar BB à herança EBB no LRA. O valor padrão do
o parâmetro é 40. O valor foi escolhido a partir de várias execuções de SPEC2000 em x86-64.

loop-invariant-max-bbs-in-loop
Movimento invariante de loop pode ser muito caro, tanto em tempo de compilação quanto em
quantidade de memória de tempo de compilação necessária, com loops muito grandes. Loops com mais
blocos básicos do que este parâmetro não terão otimização de movimento invariável de loop
realizada sobre eles. O valor padrão do parâmetro é 1000 para -O1 e 10000
por -O2 e acima.

loop-max-datarefs-for-datadeps
Construir dapendências de dados é caro para loops muito grandes. Este parâmetro
limita o número de referências de dados em loops que são considerados para dados
análise de dependência. Esses grandes loops não são manipulados pelas otimizações usando
dependências de dados de loop. O valor padrão é 1000.

max-vartrack-size
Define um número máximo de slots de hash table para usar durante o fluxo de dados de rastreamento variável
análise de qualquer função. Se este limite for excedido com rastreamento variável em
atribuições habilitadas, a análise para essa função é repetida sem ela, após
removendo todos os insns de depuração da função. Se o limite for excedido mesmo sem
debug insns, a análise de rastreamento de var é completamente desabilitada para a função.
Definir o parâmetro como zero o torna ilimitado.

max-vartrack-expr-profundidade
Define um número máximo de níveis de recursão ao tentar mapear nomes de variáveis ​​ou
depurar temporários para expressões de valor. Isso troca o tempo de compilação por mais
informações completas de depuração. Se for definido muito baixo, expressões de valor que são
disponível e poderia ser representado em informações de depuração pode acabar não sendo usado;
definir este valor mais alto pode permitir que o compilador encontre depurações mais complexas
expressões, mas o tempo de compilação e o uso de memória podem aumentar. O padrão é 12.

min-nondebug-insn-uid
Use uids começando com este parâmetro para insns não depurados. O intervalo abaixo do
parâmetro é reservado exclusivamente para debug insns criado por
-fvar-tracking-assignments, mas os insns de depuração podem obter uids (não sobrepostos) acima
se o intervalo reservado for esgotado.

ipa-sra-ptr-fator de crescimento
IPA-SRA substitui um ponteiro para um agregado com um ou mais novos parâmetros apenas
quando seu tamanho cumulativo é menor ou igual a ipa-sra-ptr-fator de crescimento vezes o
tamanho do parâmetro do ponteiro original.

sra-max-scalarization-size-Ospeed
sra-max-scalarization-size-Osize
As duas passagens de redução escalar de agregados (SRA e IPA-SRA) visam substituir
partes escalares de agregados com uso de variáveis ​​escalares independentes. Esses
parâmetros controlam o tamanho máximo, em unidades de armazenamento, de agregado que é
considerado para substituição ao compilar para velocidade (sra-max-scalarization-size-
Velocidade) ou tamanho (sra-max-scalarization-size-Osize) respectivamente.

tm-max-aggregate-size
Ao fazer cópias de variáveis ​​locais de thread em uma transação, este parâmetro
especifica o tamanho em bytes após o qual as variáveis ​​são salvas com o registro
funções em oposição a salvar / restaurar pares de sequência de código. Esta opção apenas
aplica-se ao usar -fgnu-tm.

grafite-max-nb-scop-params
Para evitar efeitos exponenciais nas transformações do loop Graphite, o número de
parâmetros em uma parte de controle estático (SCoP) são limitados. O valor padrão é 10
parâmetros. Uma variável cujo valor é desconhecido no momento da compilação e definido
fora de um SCoP é um parâmetro do SCoP.

grafite-max-bbs-por-função
Para evitar efeitos exponenciais na detecção de SCoPs, o tamanho das funções
analisado por grafite é limitado. O valor padrão é 100 blocos básicos.

loop-block-tile-size
Bloqueio de loop ou transformações de mineração de faixa, habilitadas com -bloop-block or
-floop-strip-mine, extrai cada loop no aninhamento de loop por um determinado número de
iterações. O comprimento da tira pode ser alterado usando o loop-block-tile-size
parâmetro. O valor padrão é 51 iterações.

Loop-Deslizamento-Jam-Size
Especifique o fator de desenrolar para o -floop-unroll-and-jam opção. O valor padrão
é 4.

loop-unroll-jam-profundidade
Especifique a dimensão a ser desenrolada (contando a partir do loop mais interno) para o
-floop-unroll-and-jam. O valor padrão é 2.

ipa-cp-value-list-size
O IPA-CP tenta rastrear todos os valores e tipos possíveis passados ​​para uma função
parâmetro para propagá-los e realizar a desvirtualização. valor-ipa-cp-
tamanho da lista é o número máximo de valores e tipos que ele armazena por um formal
parâmetro de uma função.

ipa-cp-eval-threshold
O IPA-CP calcula sua própria pontuação de heurísticas de lucratividade de clonagem e executa
aquelas oportunidades de clonagem com pontuações que excedem ipa-cp-eval-threshold.

penalidade de recursão ipa-cp
Penalidade percentual que as funções recursivas receberão quando forem avaliadas
para clonagem.

penalidade de ligação única ipa-cp
Funções de penalidade de porcentagem contendo uma única chamada para outra função
recebem quando são avaliados para clonagem.

itens-ipa-max-agg
IPA-CP também é capaz de propagar uma série de valores escalares passados ​​em um
agregar. itens-ipa-max-agg controla o número máximo de tais valores por um
parâmetro.

ipa-cp-loop-hint-bonus
Quando o IPA-CP determina que um candidato a clonagem faria o número de
iterações de um loop conhecido, adiciona um bônus de ipa-cp-loop-hint-bonus ao
pontuação de lucratividade do candidato.

ipa-cp-array-index-hint-bonus
Quando o IPA-CP determina que um candidato a clonagem faria o índice de uma matriz
acesso conhecido, adiciona um bônus de ipa-cp-array-index-hint-bonus ao
pontuação de lucratividade do candidato.

etapas ipa-max-aa
Durante a análise dos corpos funcionais, o IPA-CP emprega a análise de alias para
rastrear valores apontados por parâmetros de função. Para não perder muito tempo
analisando funções enormes, ele desiste e considera toda a memória destruída após
examinando etapas ipa-max-aa declarações que modificam a memória.

lto-partições
Especifique o número desejado de partições produzidas durante a compilação WHOPR. o
o número de partições deve exceder o número de CPUs usadas para compilação. o
o valor padrão é 32.

partição lto-min
Tamanho da partição mínima para WHOPR (nas instruções estimadas). Isso evita
despesas de dividir programas muito pequenos em muitas partições.

cxx-max-namespaces-for-diagnostic-help
O número máximo de namespaces a serem consultados para sugestões ao pesquisar nomes em C ++
falha para um identificador. O padrão é 1000.

dissipador-frequência-limiar
A frequência de execução relativa máxima (em porcentagens) do bloco alvo
em relação ao bloco original de uma instrução para permitir o afundamento da instrução de um
demonstração. Números maiores resultam em afundamento de declarações mais agressivo. o
o valor padrão é 75. Um pequeno ajuste positivo é aplicado para declarações com
operandos de memória como esses são ainda mais lucrativos, então afundam.

max-store-to-sink
O número máximo de pares de lojas condicionais que podem ser afundadas. Defina como 0 se
qualquer vetorização (-ftree-vetorize) ou if-conversão (-ftree-loop-if-convert)
está desabilitado. O padrão é 2.

permitir-armazenar-dados-corridas
Permita que os otimizadores introduzam novas disputas de dados nas lojas. Defina como 1 para permitir,
caso contrário, para 0. Esta opção é habilitada por padrão no nível de otimização -Rápido.

caso-valores-limite
O menor número de valores diferentes para os quais é melhor usar uma tabela de salto
em vez de uma árvore de ramos condicionais. Se o valor for 0, use o padrão para
a máquina. O padrão é 0.

árvore-reassoc-largura
Defina o número máximo de instruções executadas em paralelo na árvore reassociada.
Este parâmetro substitui heurísticas dependentes de destino usadas por padrão se não tiver
valor zero.

algoritmo de pressão programado
Escolha entre as duas implementações disponíveis de -fsched-pressão. Algoritmo 1
é a implementação original e é mais provável de impedir instruções de
sendo reordenado. O Algoritmo 2 foi projetado para ser um compromisso entre o
abordagem relativamente conservadora adotada pelo algoritmo 1 e o bastante agressivo
abordagem adotada pelo agendador padrão. Depende mais fortemente de ter um
arquivo de registro regular e classes de pressão de registro precisas. Ver haifa-sched.c
nas fontes do GCC para mais detalhes.

A escolha padrão depende do destino.

max-slsr-cand-scan
Defina o número máximo de candidatos existentes que são considerados ao buscar um
base para um novo candidato a redução de força em linha reta.

asan-globais
Habilite a detecção de estouro de buffer para objetos globais. Este tipo de proteção é
habilitado por padrão se você estiver usando -fsanitize = endereço opção. Para desativar global
uso de proteção de objetos --param asan-globals = 0.

asan-stack
Habilite a detecção de estouro de buffer para objetos de pilha. Este tipo de proteção é
habilitado por padrão ao usar-fsanitize = endereço. Para desativar a proteção de pilha, use
--param asan-stack = 0 opção.

asan-instrument-lê
Habilite a detecção de estouro de buffer para leituras de memória. Este tipo de proteção é
habilitado por padrão ao usar -fsanitize = endereço. Para desabilitar leituras de memória
uso de proteção --param asan-instrument-read = 0.

asan-instrument-write
Habilite a detecção de estouro de buffer para gravações na memória. Este tipo de proteção é
habilitado por padrão ao usar -fsanitize = endereço. Para desativar as gravações na memória
uso de proteção --param asan-instrument-Write = 0 opção.

asan-memintrina
Habilite a detecção de funções integradas. Este tipo de proteção é habilitado por
padrão ao usar -fsanitize = endereço. Para desativar a proteção das funções integradas
usar --param asan-memintrina = 0.

asan-use-after-return
Habilite a detecção de uso após retorno. Este tipo de proteção é habilitado por
padrão ao usar -fsanitize = endereço opção. Para desativar o uso após o retorno
uso de detecção --param asan-use-after-return = 0.

asan-instrumentation-with-call-threshold
Se o número de acessos à memória na função sendo instrumentada for maior ou igual a
este número, use retornos de chamada em vez de verificações inline. Por exemplo, para desativar o código embutido
usar --param asan-instrumentation-with-call-threshold = 0.

chkp-max-ctor-size
Construtores estáticos gerados pelo Pointer Bounds Checker podem se tornar muito grandes e
aumentar significativamente o tempo de compilação no nível de otimização -O1 e mais alto. Esse
parâmetro é um número máximo de instruções em um único construtor gerado.
O valor padrão é 5000.

max-fsm-thread-path-insns
Número máximo de instruções para copiar ao duplicar blocos em um estado finito
autômato jump thread path. O padrão é 100.

max-fsm-thread-length
Número máximo de blocos básicos em um caminho de thread de salto de autômato de estado finito. o
o padrão é 10.

caminhos de thread max-fsm
Número máximo de novos caminhos de segmento de salto a serem criados para um autômato de estado finito.
O padrão é 50.

Opções Controlador do Pré-processador
Essas opções controlam o pré-processador C, que é executado em cada arquivo de origem C antes de
compilação.

Se você usar o -E opção, nada é feito, exceto o pré-processamento. Algumas dessas opções
faz sentido apenas junto com -E porque eles fazem com que a saída do pré-processador seja
inadequado para compilação real.

-Wp,opção
Você pode usar -Wp,opção para ignorar o driver do compilador e passar opção diretamente através
para o pré-processador. Se opção contém vírgulas, é dividido em várias opções em
as vírgulas. No entanto, muitas opções são modificadas, traduzidas ou interpretadas pelo
driver do compilador antes de ser passado para o pré-processador, e -Wp ignora à força
esta fase. A interface direta do pré-processador não é documentada e está sujeita a
mudar, então, sempre que possível, você deve evitar usar -Wp e deixe o motorista cuidar do
opções em vez disso.

-Xpré-processador opção
Passar opção como uma opção para o pré-processador. Você pode usar isso para fornecer sistema
opções específicas do pré-processador que o GCC não reconhece.

Se você quiser passar uma opção que leva um argumento, você deve usar -Xpré-processador
duas vezes, uma para a opção e uma vez para o argumento.

-no-integrado-cpp
Execute o pré-processamento como uma passagem separada antes da compilação. Por padrão, o GCC executa
pré-processamento como uma parte integrada da tokenização e análise de entrada. Se esta opção
é fornecido, o front-end de idioma apropriado (cc1, cc1plusou cc1obj para C, C ++,
e Objective-C, respectivamente) é invocado duas vezes, uma para pré-processamento apenas
e uma vez para a compilação real da entrada pré-processada. Esta opção pode ser útil
em conjunto com o -B or -embrulho opções para especificar um pré-processador alternativo ou
realizar processamento adicional da fonte do programa entre o pré-processamento normal e
compilação.

-D nome
Predefinir nome como uma macro, com a definição 1.

-D nome=definição
O conteúdo de definição são tokenizados e processados ​​como se tivessem aparecido durante
fase de tradução três em um #define diretiva. Em particular, a definição será
truncado por caracteres de nova linha incorporados.

Se você está invocando o pré-processador a partir de um shell ou programa semelhante a um shell, você pode precisar
para usar a sintaxe de citação do shell para proteger caracteres como espaços que têm um
significado na sintaxe do shell.

Se você deseja definir uma macro do tipo função na linha de comando, escreva seu argumento
lista com parênteses antes do sinal de igual (se houver). Parênteses são
significativo para a maioria dos shells, portanto, você precisará citar a opção. Com sh e assim csh,
-D 'nome(args ...)=definição' obras.

-D e assim -U as opções são processadas na ordem em que são fornecidas na linha de comando. Tudo
-imacros filete e assim -incluir filete as opções são processadas afinal -D e assim -U opções.

-U nome
Cancelar qualquer definição anterior de nome, embutido ou fornecido com um -D opção.

-undef
Não predefinir macros específicas do sistema ou específicas do GCC. O padrão predefinido
macros permanecem definidas.

-I dir
Adicione o diretório dir à lista de diretórios a serem pesquisados ​​para arquivos de cabeçalho.
Diretórios nomeados por -I são pesquisados ​​antes que o sistema padrão inclua diretórios.
Se o diretório dir é um diretório de inclusão de sistema padrão, a opção é ignorada para
garantir que a ordem de pesquisa padrão para os diretórios do sistema e o tratamento especial
de cabeçalhos de sistema não são derrotados. Se dir começa com "=", então o "=" será
substituído pelo prefixo sysroot; Vejo --sysroot e assim -isysroot.

-o filete
Grave a saída para filete. Isso é o mesmo que especificar filete como a segunda não opção
argumento para cpp. gcc tem uma interpretação diferente de um segundo argumento de não opção,
então você deve usar -o para especificar o arquivo de saída.

-Parede
Liga todos os avisos opcionais desejáveis ​​para o código normal. No momento isso
is -Comentário, -Wtrigraphs, -Wmultichar e um aviso sobre promoção de inteiro causando um
mudança de sinal nas expressões "#if". Observe que muitos dos avisos do pré-processador
estão ativados por padrão e não têm opções para controlá-los.

-Comentário
-Wcomentários
Avisar sempre que uma sequência de início de comentário /* aparece em um /* comentário, ou sempre que um
barra invertida-nova linha aparece em um // Comente. (Ambas as formas têm o mesmo efeito.)

-Wtrigraphs
A maioria dos trigraphs nos comentários não pode afetar o significado do programa. No entanto, um
trígrafo que formaria uma nova linha de escape (?? / no final de uma linha) pode, por
alterando onde o comentário começa ou termina. Portanto, apenas trígrafos que formariam
novas linhas escapadas produzem avisos dentro de um comentário.

Esta opção está implícita em -Parede. Se -Parede não é fornecido, esta opção ainda está habilitada
a menos que trigraphs estejam habilitados. Para obter a conversão de trígrafo sem avisos, mas obtenha
o outro -Parede avisos, use -trígrafos -Parede -Wno-trigraphs.

-Wtradicional
Avise sobre certas construções que se comportam de maneira diferente no tradicional e no ISO C. Também
avisar sobre construções ISO C que não têm equivalente C tradicional e problemático
construções que devem ser evitadas.

-Wundef
Avisar sempre que um identificador que não seja uma macro for encontrado em um #E se directiva,
fora de definido. Esses identificadores são substituídos por zero.

-Wunused-macros
Avisar sobre macros definidas no arquivo principal que não são utilizadas. Uma macro é usava se é
expandido ou testado para existência pelo menos uma vez. O pré-processador também irá avisar se
a macro não foi usada no momento em que foi redefinida ou indefinida.

Macros incorporadas, macros definidas na linha de comando e macros definidas em include
os arquivos não são avisados.

Observação: Se uma macro for realmente usada, mas usada apenas em blocos condicionais ignorados, então
O CPP irá reportá-lo como não utilizado. Para evitar o aviso em tal caso, você pode melhorar
o escopo da definição da macro, por exemplo, movendo-a para a primeira
bloquear. Como alternativa, você pode fornecer um uso fictício com algo como:

#if definido the_macro_causing_the_warning
#fim se

-Etiquetas Wendif
Avisar sempre que um #else ou um #fim se são seguidos por texto. Isso geralmente acontece em
código do formulário

#if FOO
...
#elseFOO
...
#endif FOO

O segundo e o terceiro "FOO" devem estar nos comentários, mas geralmente não estão em programas mais antigos.
Este aviso está ativado por padrão.

-Erro
Transforme todos os avisos em erros graves. O código-fonte que aciona os avisos será
rejeitado.

-Wsystem-headers
Emita avisos para o código nos cabeçalhos do sistema. Normalmente, eles são inúteis para encontrar
bugs em seu próprio código, portanto suprimidos. Se você é responsável pelo sistema
biblioteca, você pode querer vê-los.

-w Suprime todos os avisos, incluindo aqueles que o GNU CPP emite por padrão.

-pedante
Emita todos os diagnósticos obrigatórios listados no padrão C. Alguns deles são deixados
por padrão, uma vez que eles disparam freqüentemente em código inofensivo.

-erros-pedantes
Emita todos os diagnósticos obrigatórios e transforme todos os diagnósticos obrigatórios em erros.
Isso inclui diagnósticos obrigatórios que o GCC emite sem -pedante mas trata como
avisos.

-M Em vez de produzir o resultado do pré-processamento, produza uma regra adequada para fazer
descrevendo as dependências do arquivo de origem principal. O pré-processador produz um
fazer regra que contém o nome do arquivo de objeto para esse arquivo de origem, dois pontos e os nomes
de todos os arquivos incluídos, incluindo aqueles provenientes de -incluir or -imacros comando-
opções de linha.

A menos que especificado explicitamente (com -MT or -MQ), o nome do arquivo do objeto consiste no
nome do arquivo de origem com qualquer sufixo substituído pelo sufixo do arquivo objeto e por qualquer
partes principais do diretório removidas. Se houver muitos arquivos incluídos, a regra é
dividido em várias linhas usando \-nova linha. A regra não tem comandos.

Esta opção não suprime a saída de depuração do pré-processador, como -dM. Evitar
misturando essa saída de depuração com as regras de dependência, você deve especificar explicitamente o
arquivo de saída de dependência com -MFou use uma variável de ambiente como
DEPENDENCES_OUTPUT. A saída de depuração ainda será enviada para o fluxo de saída regular como
normal.

Passagem -M para o motorista implica -E, e suprime avisos com um implícito -w.

-MILÍMETROS Gostar -M mas não mencione os arquivos de cabeçalho encontrados nos diretórios de cabeçalho do sistema,
nem arquivos de cabeçalho que são incluídos, direta ou indiretamente, de tal cabeçalho.

Isso implica que a escolha de colchetes angulares ou aspas duplas em um #include
diretiva por si só não determina se esse cabeçalho aparecerá em -MILÍMETROS
saída de dependência. Esta é uma pequena mudança na semântica do GCC versões 3.0 e
mais cedo.

-MF filete
Quando usado com -M or -MILÍMETROS, especifica um arquivo para gravar as dependências. Se não -MF
chave é fornecida, o pré-processador envia as regras para o mesmo lugar que teria enviado
saída pré-processada.

Quando usado com as opções do driver -MD or -MMD, -MF substitui a dependência padrão
arquivo de saída.

-MG Em conjunto com uma opção como -M solicitando a geração de dependência, -MG assume
arquivos de cabeçalho ausentes são arquivos gerados e os adiciona à lista de dependências sem
levantando um erro. O nome do arquivo de dependência é obtido diretamente de "#include"
diretiva sem prefixar nenhum caminho. -MG também suprime a saída pré-processada, como um
arquivo de cabeçalho ausente o torna inútil.

Este recurso é usado na atualização automática de makefiles.

-MP Esta opção instrui o CPP a adicionar um alvo falso para cada dependência diferente de
arquivo principal, fazendo com que cada um não dependa de nada. Essas regras fictícias contornam os erros
fazer dá se você remover arquivos de cabeçalho sem atualizar o Makefile para combinar.

Esta é uma saída típica:

teste.o: teste.c teste.h

teste.h:

-MT alvo
Altere o destino da regra emitida pela geração de dependência. Por padrão, o CPP leva
o nome do arquivo de entrada principal, exclui todos os componentes do diretório e qualquer sufixo de arquivo
tais como .ce anexa o sufixo de objeto usual da plataforma. O resultado é o alvo.

An -MT opção irá definir o destino para ser exatamente a string que você especificar. Se você quiser
vários alvos, você pode especificá-los como um único argumento para -MT, ou use vários
-MT opções.

Por exemplo, -MT '$ (objpfx) foo.o' pode dar

$ (objpfx) foo.o: foo.c

-MQ alvo
Igual a -MT, mas cita quaisquer caracteres que sejam especiais para o Make.
-MQ '$ (objpfx) foo.o'

$$ (objpfx) foo.o: foo.c

O destino padrão é cotado automaticamente, como se fosse fornecido com -MQ.

-MD -MD é equivalente a -M -MF filete, exceto que -E não está implícito. O motorista
determina filete com base em se um -o opção é fornecida. Se for, o driver usa seu
argumento, mas com um sufixo de .d, caso contrário, leva o nome do arquivo de entrada,
remove qualquer componente de diretório e sufixo e aplica um .d sufixo.

If -MD é usado em conjunto com -E, qualquer -o interruptor é entendido para especificar o
arquivo de saída de dependência, mas se usado sem -E, Cada -o é entendido para especificar um
arquivo de objeto de destino.

Como -E não está implícito, -MD pode ser usado para gerar um arquivo de saída de dependência como um
efeito colateral do processo de compilação.

-MMD
Gostar -MD exceto mencionar apenas os arquivos de cabeçalho do usuário, não os arquivos de cabeçalho do sistema.

-fpch-deps
Ao usar cabeçalhos pré-compilados, este sinalizador fará com que os sinalizadores de saída de dependência
também liste os arquivos das dependências do cabeçalho pré-compilado. Se não for especificado apenas
o cabeçalho pré-compilado seria listado e não os arquivos que foram usados ​​para criá-lo
porque esses arquivos não são consultados quando um cabeçalho pré-compilado é usado.

-fpch-preprocess
Esta opção permite o uso de um cabeçalho pré-compilado junto com -E. Insere um especial
"#pragma", "#pragma GCC pch_preprocess"nome do arquivo"" na saída para marcar o lugar
onde o cabeçalho pré-compilado foi encontrado, e seu nome do arquivo. Quando -processado é em
usar, o GCC reconhece este "#pragma" e carrega o PCH.

Esta opção está desativada por padrão, porque a saída pré-processada resultante é apenas
realmente adequado como entrada para o GCC. É ligado por -save-temps.

Você não deve escrever este "#pragma" em seu próprio código, mas é seguro editar o
nome do arquivo se o arquivo PCH estiver disponível em um local diferente. O nome do arquivo pode ser
absoluto ou relativo ao diretório atual do GCC.

-x c
-x c ++
-x objetivo-c
-x montador-com-cpp
Especifique o idioma de origem: C, C ++, Objective-C ou assembly. Isso não tem nada a ver
com conformidade de padrões ou extensões; simplesmente seleciona qual sintaxe base para
Espero. Se você não fornecer nenhuma dessas opções, o cpp irá deduzir o idioma do
extensão do arquivo de origem: .c, . Cc, .mou .S. Algumas outras extensões comuns para
C ++ e assembly também são reconhecidos. Se o cpp não reconhecer a extensão, ele
tratará o arquivo como C; este é o modo mais genérico.

Observação: As versões anteriores do cpp aceitaram um -longo opção que selecionou tanto o
idioma e o nível de conformidade com os padrões. Esta opção foi removida porque
entra em conflito com o -l opção.

-std =padrão
-ansi
Especifique o padrão com o qual o código deve estar em conformidade. Atualmente o CPP sabe sobre C
e padrões C ++; outros podem ser adicionados no futuro.

padrão pode ser um de:

"c90"
"c89"
"iso9899: 1990"
O padrão ISO C de 1990. c90 é a abreviatura usual para esta versão de
o padrão.

A -ansi opção é equivalente a -std = c90.

"iso9899: 199409"
O padrão C de 1990, conforme alterado em 1994.

"iso9899: 1999"
"c99"
"iso9899: 199x"
"c9x"
O padrão ISO C revisado, publicado em dezembro de 1999. Antes da publicação, este
era conhecido como C9X.

"iso9899: 2011"
"c11"
"c1x"
O padrão ISO C revisado, publicado em dezembro de 2011. Antes da publicação, este
era conhecido como C1X.

"gnu90"
"gnu89"
O padrão C de 1990 mais as extensões GNU. Este é o padrão.

"gnu99"
"gnu9x"
O padrão C de 1999 mais as extensões GNU.

"gnu11"
"gnu1x"
O padrão C de 2011 mais as extensões GNU.

"c ++ 98"
O padrão ISO C ++ de 1998 mais emendas.

"gnu ++ 98"
O mesmo que -std = c ++ 98 além de extensões GNU. Este é o padrão para o código C ++.

-I- Divida o caminho de inclusão. Quaisquer diretórios especificados com -I opções antes -I- são
pesquisou apenas cabeçalhos solicitados com "#include"Arquivo""; eles não são procurados
"#incluirarquivo> ". Se diretórios adicionais forem especificados com -I opções após o
-I-, esses diretórios são pesquisados ​​por todos #include directivas.

Além disso, -I- inibe o uso do diretório do diretório de arquivo atual como
o primeiro diretório de pesquisa por "#include"Arquivo"". Esta opção está obsoleta.

-nostdinc
Não pesquise os diretórios do sistema padrão para arquivos de cabeçalho. Apenas os diretórios
você especificou com -I opções (e o diretório do arquivo atual, se
apropriado) são pesquisados.

-nostdinc ++
Não procure por arquivos de cabeçalho nos diretórios padrão específicos de C ++, mas ainda
pesquise os outros diretórios padrão. (Esta opção é usada ao construir o C ++
biblioteca.)

-incluir filete
Processo de filete como se "#include" arquivo "" aparecesse como a primeira linha da fonte primária
Arquivo. No entanto, o primeiro diretório procurou por filete é o pré-processador funcionando
anuário em vez disso of o diretório que contém o arquivo de origem principal. Se não for encontrado
lá, ele é pesquisado no restante da cadeia de pesquisa "#include" ... "" como
normal.

Se múltiplo -incluir opções são fornecidas, os arquivos são incluídos na ordem em que
aparecem na linha de comando.

-imacros filete
Exatamente como -incluir, exceto que qualquer saída produzida pela digitalização filete é jogado
longe. As macros que ele define permanecem definidas. Isso permite que você adquira todas as macros
de um cabeçalho sem também processar suas declarações.

Todos os arquivos especificados por -imacros são processados ​​antes de todos os arquivos especificados por -incluir.

-dirijo dir
Procurar dir para arquivos de cabeçalho, mas faça isso depois de todos os diretórios especificados com -I e o
os diretórios padrão do sistema foram esgotados. dir é tratado como um sistema inclui
diretório. Se dir começa com "=", então o "=" será substituído pelo sysroot
prefixo; Vejo --sysroot e assim -isysroot.

-iprefixo prefixo
Especificar prefixo como o prefixo para o subsequente -i com prefixo opções. Se o prefixo
representa um diretório, você deve incluir o final /.

-i com prefixo dir
- com o prefixo antes dir
Acrescentar dir para o prefixo especificado anteriormente com -iprefixo, e adicione o resultado
diretório para incluir o caminho de pesquisa. - com o prefixo antes coloca no mesmo lugar -I
seria; -i com prefixo coloca onde -dirijo seria.

-isysroot dir
Esta opção é como o --sysroot opção, mas se aplica apenas a arquivos de cabeçalho (exceto para
Alvos Darwin, onde se aplica a arquivos de cabeçalho e bibliotecas). Veja o
--sysroot opção para obter mais informações.

-imultilib dir
Utilize dir como um subdiretório do diretório contendo cabeçalhos C ++ específicos do destino.

-isistema dir
Procurar dir para arquivos de cabeçalho, depois de todos os diretórios especificados por -I mas antes do
diretórios de sistema padrão. Marque-o como um diretório do sistema, para que seja o mesmo
tratamento especial aplicado aos diretórios do sistema padrão. Se dir começa
com "=", então o "=" será substituído pelo prefixo sysroot; Vejo --sysroot e assim
-isysroot.

-Eu cito dir
Procurar dir apenas para arquivos de cabeçalho solicitados com "#include"Arquivo""; eles não são
procurou por "#includearquivo> ", antes de todos os diretórios especificados por -I e antes do
diretórios de sistema padrão. Se dir começa com "=", então o "=" será substituído por
o prefixo sysroot; Vejo --sysroot e assim -isysroot.

-fdirectives-somente
Ao pré-processar, manipule as diretivas, mas não expanda as macros.

O comportamento da opção depende do -E e assim -processado opções.

Com -E, o pré-processamento é limitado ao tratamento de diretivas como "#define",
"#ifdef" e "#error". Outras operações de pré-processador, como expansão de macro e
conversão trigraph não são realizadas. Além disso, o -dD opção é implicitamente
ativado.

Com -processado, a predefinição da linha de comando e a maioria das macros integradas é
Desativado. Macros como "__LINE__", que são contextualmente dependentes, são manipuladas
normalmente. Isso permite a compilação de arquivos previamente pré-processados ​​com "-E
-fdirectives-only ".

Com ambos -E e assim -processado, as regras para -processado têm precedência. Esse
permite o pré-processamento completo de arquivos previamente pré-processados ​​com "-E
-fdirectives-only ".

-fdollars-in-identifiers
ACEITAR $ em identificadores.

-identificadores-fextended
Aceite nomes de caracteres universais em identificadores. Essa opção é ativada por padrão
para C99 (e versões padrão C posteriores) e C ++.

-fno-canonical-system-headers
Durante o pré-processamento, não encurte os caminhos do cabeçalho do sistema com a canonização.

-processado
Indique ao pré-processador que o arquivo de entrada já foi pré-processado. Esse
suprime coisas como expansão de macro, conversão de trígrafo, splicing de nova linha de escape,
e processamento da maioria das diretivas. O pré-processador ainda reconhece e remove
comentários, para que você possa passar um arquivo pré-processado com -C para o compilador sem
problemas. Neste modo, o pré-processador integrado é pouco mais do que um tokenizador
para as extremidades frontais.

-processado está implícito se o arquivo de entrada tiver uma das extensões .i, .ii or .mi.
Estas são as extensões que o GCC usa para arquivos pré-processados ​​criados por -save-temps.

-ftabstop =largura
Defina a distância entre as paradas de tabulação. Isso ajuda o pré-processador a relatar a coluna correta
números em avisos ou erros, mesmo que apareçam guias na linha. Se o valor for menor
que 1 ou maior que 100, a opção é ignorada. O padrão é 8.

-fdebug-cpp
Esta opção só é útil para depurar GCC. Quando usado com -E, depuração de despejos
informações sobre mapas de localização. Cada token na saída é precedido pelo despejo de
o mapa ao qual sua localização pertence. O despejo do mapa contendo a localização de um token
seria:

{"P": F ; "F": F ;"EU": ; "C": ; "S": ; "M": ; "E": , "loc": }

Quando usado sem -E, esta opção não tem efeito.

-ftrack-macro-expansão[=nível]
Rastreie a localização de tokens em expansões de macro. Isso permite que o compilador emita
diagnóstico sobre a pilha de expansão de macro atual quando ocorre um erro de compilação em
uma expansão macro. Usar esta opção faz com que o pré-processador e o compilador consumam
mais memória. o nível parâmetro pode ser usado para escolher o nível de precisão do token
rastreamento de localização diminuindo assim o consumo de memória, se necessário. Valor 0 of
nível desativa esta opção como se não -ftrack-macro-expansão esteve presente em
a linha de comando. Valor 1 rastreia locais de tokens em um modo degradado por causa de
sobrecarga de memória mínima. Neste modo, todos os tokens resultantes da expansão de um
argumento de uma macro do tipo função tem a mesma localização. Valor 2 rastreia tokens
locais completamente. Este valor é o que mais consome memória. Quando esta opção é fornecida
sem argumento, o valor do parâmetro padrão é 2.

Observe que "-ftrack-macro-expansion = 2" é ativado por padrão.

-fexec-charset =conjunto de caracteres
Defina o conjunto de caracteres de execução, usado para constantes de string e caracteres. O padrão
é UTF-8. conjunto de caracteres pode ser qualquer codificação compatível com a biblioteca "iconv" do sistema
rotina.

-fwide-exec-charset =conjunto de caracteres
Defina o conjunto de caracteres de execução ampla, usado para cadeias largas e constantes de caracteres.
O padrão é UTF-32 ou UTF-16, o que corresponder à largura de "wchar_t". Como
com -fexec-charset, conjunto de caracteres pode ser qualquer codificação compatível com o "iconv" do sistema
rotina da biblioteca; no entanto, você terá problemas com codificações que não se encaixam
exatamente em "wchar_t".

-finput-charset =conjunto de caracteres
Defina o conjunto de caracteres de entrada, usado para tradução do conjunto de caracteres da entrada
arquivo para o conjunto de caracteres de origem usado pelo GCC. Se a localidade não especificar, ou GCC
não pode obter essas informações do local, o padrão é UTF-8. Isso pode ser
substituído pelo local ou por esta opção de linha de comando. Atualmente o comando-
a opção de linha tem precedência se houver um conflito. conjunto de caracteres pode ser qualquer codificação
suportado pela rotina de biblioteca "iconv" do sistema.

-diretório-fworking
Habilita a geração de marcadores de linha na saída do pré-processador que permitirá ao compilador
conhecer o diretório de trabalho atual no momento do pré-processamento. Quando esta opção é
habilitado, o pré-processador irá emitir, após o marcador de linha inicial, um segundo marcador de linha
com o diretório de trabalho atual seguido por duas barras. GCC vai usar isso
diretório, quando está presente na entrada pré-processada, como o diretório emitido como
o diretório de trabalho atual em alguns formatos de informações de depuração. Esta opção é
habilitado implicitamente se as informações de depuração estiverem habilitadas, mas isso pode ser inibido com
a forma negada -fno-working-directory. Se o -P bandeira está presente no comando
linha, esta opção não tem efeito, uma vez que nenhuma diretiva "#line" é emitida.

-fno-show-coluna
Não imprima os números das colunas nos diagnósticos. Isso pode ser necessário se os diagnósticos forem
sendo verificado por um programa que não entende os números das colunas, como
Dejagnu.

-A predicado=responder
Faça uma afirmação com o predicado predicado e responda responder. Este formulário é
preferido à forma mais antiga -A predicado(responder), que ainda é compatível, porque
não usa caracteres especiais de shell.

-A -predicado=responder
Cancelar uma afirmação com o predicado predicado e responda responder.

-dCHARS
PERSONAGENS é uma sequência de um ou mais dos seguintes caracteres e não deve ser
precedido por um espaço. Outros caracteres são interpretados pelo próprio compilador, ou
reservados para versões futuras do GCC e, portanto, são silenciosamente ignorados. Se você especificar
personagens cujo comportamento conflita, o resultado é indefinido.

M Em vez da saída normal, gere uma lista de #define diretivas para todos os
macros definidas durante a execução do pré-processador, incluindo predefinidas
macros. Isso lhe dá uma maneira de descobrir o que está predefinido em sua versão do
o pré-processador. Supondo que você não tenha nenhum arquivo foo.h, o comando

toque em foo.h; cpp -dM foo.h

irá mostrar todas as macros predefinidas.

Se você usar -dM sem o -E opção, -dM é interpretado como sinônimo de
-fdump-rtl-mach.

D Gostar M exceto em dois aspectos: não incluem as macros predefinidas e
outputs ambos do #define diretivas e o resultado do pré-processamento. Ambos os tipos
de saída vá para o arquivo de saída padrão.

N Gostar D, mas emitem apenas os nomes das macros, não suas expansões.

I saída #include além do resultado do pré-processamento.

U Gostar D exceto que apenas macros que são expandidas, ou cuja definição é testada
nas diretivas do pré-processador, são produzidos; a saída é atrasada até o uso ou
teste da macro; e #undef diretivas também são geradas para macros testadas, mas
indefinido na época.

-P Inibe a geração de marcadores de linha na saída do pré-processador. Isso pode ser
útil ao executar o pré-processador em algo que não é código C, e será enviado
para um programa que pode ser confundido pelos marcadores de linha.

-C Não descarte comentários. Todos os comentários são passados ​​para o arquivo de saída, exceto
para comentários em diretivas processadas, que são suprimidos juntamente com a diretiva.

Você deve estar preparado para os efeitos colaterais ao usar -C; faz com que o pré-processador
tratar comentários como tokens em seu próprio direito. Por exemplo, comentários que aparecem no
início do que seria uma linha diretiva tem o efeito de transformar essa linha em um
linha de origem comum, uma vez que o primeiro token na linha não é mais um #.

-CC Não descarte comentários, inclusive durante a expansão da macro. Isto é como -C, exceto
que os comentários contidos nas macros também são passados ​​para o arquivo de saída, onde
a macro é expandida.

Além dos efeitos colaterais do -C opção, o -CC opção faz com que todo o estilo C ++
comentários dentro de uma macro a serem convertidos em comentários de estilo C. Isso é para prevenir mais tarde
uso dessa macro de comentar inadvertidamente o restante da linha de origem.

A -CC opção geralmente é usada para oferecer suporte a comentários lint.

-tradicional-cpp
Tente imitar o comportamento dos pré-processadores C antiquados, em oposição ao ISO C
pré-processadores.

-trígrafos
Processar sequências de trígrafos. Estas são sequências de três caracteres, todas começando com
??, que são definidos pela ISO C para representar caracteres únicos. Por exemplo, ?? / fica
por \, assim '?? / n' é uma constante de caractere para uma nova linha. Por padrão, o GCC ignora
trigraphs, mas em modos em conformidade com o padrão, ele os converte. Veja o -std e assim -ansi
opções.

Os nove trígrafos e suas substituições são

Trígrafo: ?? (??) ?? <??> ?? = ?? / ?? ' ??! ?? -
Substituição: [] {} # \ ^ | ~

-remapear
Habilite um código especial para contornar os sistemas de arquivos que só permitem arquivos muito curtos
nomes, como MS-DOS.

--Socorro
--alvo-ajuda
Imprima o texto que descreve todas as opções de linha de comando em vez de pré-processar qualquer coisa.

-v Modo detalhado. Imprima o número da versão do GNU CPP no início da execução e
relatar a forma final do caminho de inclusão.

-H Imprime o nome de cada arquivo de cabeçalho utilizado, além de outras atividades normais. Cada
o nome é recuado para mostrar o quão profundo no #include empilhar é. Cabeçalho pré-compilado
os arquivos também são impressos, mesmo se forem considerados inválidos; um pré-compilado inválido
arquivo de cabeçalho é impresso com ... x e um válido com ! ... .

-versão
--versão
Imprima o número da versão do GNU CPP. Com um traço, prossiga para o pré-processamento normalmente.
Com dois travessões, saia imediatamente.

Passagem Opções para do Assembler
Você pode passar opções para o montador.

-Wa,opção
Passar opção como opção para o montador. Se opção contém vírgulas, está dividido
em várias opções nas vírgulas.

-Xassembler opção
Passar opção como opção para o montador. Você pode usar isso para fornecer sistemas específicos
opções de assembler que o GCC não reconhece.

Se você quiser passar uma opção que leva um argumento, você deve usar -Xassembler duas vezes,
uma vez para a opção e uma vez para o argumento.

Opções por Linkagem
Essas opções entram em jogo quando o compilador vincula arquivos-objeto em um executável
arquivo de saída. Eles não terão sentido se o compilador não estiver executando uma etapa de link.

nome-do-arquivo-objeto
Um nome de arquivo que não termina com um sufixo especial reconhecido é considerado para nomear um
arquivo de objeto ou biblioteca. (Os arquivos de objeto são diferenciados das bibliotecas pelo vinculador
de acordo com o conteúdo do arquivo.) Se a vinculação for feita, esses arquivos objeto são usados ​​como
entrada para o vinculador.

-c
-S
-E Se qualquer uma dessas opções for usada, o vinculador não será executado e os nomes dos arquivos de objetos
não deve ser usado como argumento.

-fuse-ld = bfd
Use o bfd vinculador em vez do vinculador padrão.

-fuse-ld = ouro
Use o ouro vinculador em vez do vinculador padrão.

-lbiblioteca
-l biblioteca
Pesquise a biblioteca chamada biblioteca ao vincular. (A segunda alternativa com o
biblioteca como um argumento separado é apenas para conformidade com POSIX e não é recomendada.)

Faz diferença onde você escreve esta opção no comando; o vinculador procura
e processa bibliotecas e arquivos de objeto na ordem em que são especificados. Assim, foo.o
-lz bar.o pesquisa biblioteca z depois do arquivo foo.o mas depois bar.o. Se bar.o refere-se a
funções em z, essas funções podem não ser carregadas.

O vinculador procura uma lista padrão de diretórios para a biblioteca, que é na verdade
um arquivo chamado liblibrary.a. O vinculador então usa este arquivo como se tivesse sido especificado
precisamente pelo nome.

Os diretórios pesquisados ​​incluem vários diretórios padrão do sistema, além de qualquer um que você
especificar com -L.

Normalmente os arquivos encontrados desta forma são arquivos de biblioteca --- arquivos de arquivos cujos membros são
arquivos de objeto. O vinculador lida com um arquivo compactado examinando-o em busca de membros
que definem símbolos que até agora foram referenciados, mas não definidos. Mas se o
O arquivo encontrado é um arquivo de objeto comum e está vinculado da maneira usual. o
única diferença entre usar um -l opção e especificando um nome de arquivo é que -l
rodeia biblioteca com lib e assim .a e pesquisa vários diretórios.

-lobjc
Você precisa deste caso especial de -l opção para vincular um Objective-C ou
Programa Objective-C ++.

-nostartfiles
Não use os arquivos de inicialização do sistema padrão ao vincular. O sistema padrão
bibliotecas são usadas normalmente, a menos que -nostdlib or -nodefaultlibs é usado.

-nodefaultlibs
Não use as bibliotecas padrão do sistema ao vincular. Apenas as bibliotecas que você especificar
são passados ​​para o vinculador e opções que especificam a ligação das bibliotecas do sistema, como
as -static-libgcc or -shared-libgcc, são ignorados. Os arquivos de inicialização padrão são usados
normalmente, a menos -nostartfiles é usado.

O compilador pode gerar chamadas para "memcmp", "memset", "memcpy" e "memmove". Esses
entradas são geralmente resolvidas por entradas em libc. Esses pontos de entrada devem ser
fornecido por meio de algum outro mecanismo quando esta opção é especificada.

-nostdlib
Não use os arquivos ou bibliotecas de inicialização do sistema padrão ao vincular. Sem inicialização
arquivos e apenas as bibliotecas que você especificar são passadas para o vinculador, e as opções
especificando a ligação das bibliotecas do sistema, como -static-libgcc or -shared-libgcc,
são ignorados.

O compilador pode gerar chamadas para "memcmp", "memset", "memcpy" e "memmove". Esses
entradas são geralmente resolvidas por entradas em libc. Esses pontos de entrada devem ser
fornecido por meio de algum outro mecanismo quando esta opção é especificada.

Uma das bibliotecas padrão ignoradas por -nostdlib e assim -nodefaultlibs is libgcc.a, a
biblioteca de sub-rotinas internas que o GCC usa para superar deficiências de particular
máquinas ou necessidades especiais para alguns idiomas.

Na maioria dos casos, você precisa libgcc.a mesmo quando você deseja evitar outras bibliotecas padrão.
Em outras palavras, quando você especifica -nostdlib or -nodefaultlibs você deveria normalmente
especificamos -lgcc também. Isso garante que você não tenha referências não resolvidas a
sub-rotinas internas da biblioteca GCC. (Um exemplo de tal sub-rotina interna é
"__main", usado para garantir que os construtores C ++ sejam chamados.)

-torta
Produza um executável independente de posição nos alvos que o suportam. Para previsível
resultados, você também deve especificar o mesmo conjunto de opções usado para compilação (-fpie,
-fPIEou subopções de modelo) ao especificar esta opção de vinculador.

-não-torta
Não produza um executável independente de posição.

-rdinâmica
Passe a bandeira -exportação dinâmica para o linker ELF, em alvos que o suportam. Esse
instrui o vinculador a adicionar todos os símbolos, não apenas os usados, ao símbolo dinâmico
tabela. Esta opção é necessária para alguns usos de "dlopen" ou para permitir a obtenção
backtraces de dentro de um programa.

-s Remova todas as tabelas de símbolos e informações de realocação do executável.

-estático
Em sistemas que suportam vínculo dinâmico, isso impede a vinculação com o
bibliotecas. Em outros sistemas, esta opção não tem efeito.

-compartilhado
Produz um objeto compartilhado que pode ser vinculado a outros objetos para formar um
executável. Nem todos os sistemas oferecem suporte a essa opção. Para resultados previsíveis, você deve
também especifica o mesmo conjunto de opções usado para compilação (-fpic, -fPIC, ou modelo
subopções) ao especificar esta opção de vinculador. [1]

-shared-libgcc
-static-libgcc
Em sistemas que fornecem libgcc como uma biblioteca compartilhada, essas opções forçam o uso de
a versão compartilhada ou estática, respectivamente. Se nenhuma versão compartilhada de libgcc foi
construído quando o compilador foi configurado, essas opções não têm efeito.

Existem várias situações em que um aplicativo deve usar o compartilhamento libgcc
em vez da versão estática. O mais comum deles é quando o aplicativo
deseja lançar e capturar exceções em diferentes bibliotecas compartilhadas. Nesse caso,
cada uma das bibliotecas, bem como o próprio aplicativo deve usar o libgcc.

Portanto, os drivers G ++ e GCJ adicionam automaticamente -shared-libgcc sempre que você construir
uma biblioteca compartilhada ou um executável principal, porque os programas C ++ e Java normalmente usam
exceções, então esta é a coisa certa a fazer.

Se, em vez disso, você usar o driver GCC para criar bibliotecas compartilhadas, você pode descobrir que eles
nem sempre estão vinculados ao compartilhado libgcc. Se o GCC encontrar, em sua configuração
vez, que você tem um vinculador não GNU ou um vinculador GNU que não oferece suporte a opção
--eh-frame-hdr, ele vincula a versão compartilhada de libgcc em bibliotecas compartilhadas por
predefinição. Caso contrário, ele tira proveito do vinculador e otimiza a vinculação
com a versão compartilhada de libgcc, vinculando com a versão estática de libgcc por
predefinição. Isso permite que as exceções se propaguem por meio de tais bibliotecas compartilhadas, sem
incorrendo em custos de realocação no tempo de carregamento da biblioteca.

No entanto, se uma biblioteca ou executável principal deve lançar ou capturar exceções, você
deve vinculá-lo usando o driver G ++ ou GCJ, conforme apropriado para os idiomas usados ​​no
programa, ou usando a opção -shared-libgcc, de modo que esteja vinculado ao
libgcc.

-static-libasan
Quando o -fsanitize = endereço opção é usada para vincular um programa, o driver GCC
links automaticamente contra libasan. Se libasan está disponível como uma biblioteca compartilhada, e
do -estático opção não é usada, então este link contra a versão compartilhada de libasan.
A -static-libasan opção direciona o driver GCC para link libasan estaticamente, sem
necessariamente ligando outras bibliotecas estaticamente.

-static-libtsan
Quando o -fsanitize = thread opção é usada para vincular um programa, o driver GCC
links automaticamente contra libtsan. Se libtsan está disponível como uma biblioteca compartilhada, e
do -estático opção não é usada, então este link contra a versão compartilhada de libtsan.
A -static-libtsan opção direciona o driver GCC para link libtsan estaticamente, sem
necessariamente ligando outras bibliotecas estaticamente.

-static-liblsan
Quando o -fsanitize = vazamento opção é usada para vincular um programa, o driver GCC
links automaticamente contra libélula. Se libélula está disponível como uma biblioteca compartilhada, e
do -estático opção não é usada, então este link contra a versão compartilhada de libélula.
A -static-liblsan opção direciona o driver GCC para link libélula estaticamente, sem
necessariamente ligando outras bibliotecas estaticamente.

-static-libubsan
Quando o -fsanitize = undefined opção é usada para vincular um programa, o driver GCC
links automaticamente contra libubsan. Se libubsan está disponível como uma biblioteca compartilhada,
e o -estático opção não é usada, então este link contra a versão compartilhada de
libubsan. o -static-libubsan opção direciona o driver GCC para link libubsan
estaticamente, sem necessariamente vincular outras bibliotecas estaticamente.

-static-libmpx
Quando o -fcheck-pointer Limites e assim -mmpx opções são usadas para vincular um programa, o GCC
o driver se conecta automaticamente libmpx. Se libmpx está disponível como um compartilhamento
biblioteca, e o -estático opção não é usada, então este link contra o
versão do libmpx. o -static-libmpx opção direciona o driver GCC para link libmpx
estaticamente, sem necessariamente vincular outras bibliotecas estaticamente.

-static-libmpxwrappers
Quando o -fcheck-pointer Limites e assim -mmpx opções são usadas para vincular um programa sem
também usando -fno-chkp-use-wrappers, o driver GCC automaticamente se conecta a
libmpxwrappers. Se libmpxwrappers está disponível como uma biblioteca compartilhada, e o -estático
opção não é usada, então este link contra a versão compartilhada de libmpxwrappers. o
-static-libmpxwrappers opção direciona o driver GCC para link libmpxwrappers
estaticamente, sem necessariamente vincular outras bibliotecas estaticamente.

-static-libstdc ++
Quando o g ++ programa é usado para vincular um programa C ++, ele normalmente vincula automaticamente
contra libstdc ++. Se libstdc ++ está disponível como uma biblioteca compartilhada, e o -estático
opção não é usada, então este link contra a versão compartilhada de libstdc ++. Isso é
normalmente bem. No entanto, às vezes é útil congelar a versão do libstdc ++
usado pelo programa sem ir até um link totalmente estático. o
-static-libstdc ++ opção direciona o g ++ motorista para link libstdc ++ estaticamente, sem
necessariamente ligando outras bibliotecas estaticamente.

-simbólico
Vincule referências a símbolos globais ao construir um objeto compartilhado. Avisar sobre qualquer
referências não resolvidas (a menos que sejam substituídas pela opção do editor de links -Xlinker -z
-Xlinker defs) Apenas alguns sistemas oferecem suporte a essa opção.

-T escrita
Utilize escrita como o script do vinculador. Esta opção é suportada pela maioria dos sistemas que usam o
Vinculador GNU. Em alguns alvos, como alvos de placa nua sem um sistema operacional,
do -T pode ser necessária a opção ao vincular para evitar referências a símbolos indefinidos.

-Xlinker opção
Passar opção como uma opção para o vinculador. Você pode usar isso para fornecer sistemas específicos
opções de vinculador que o GCC não reconhece.

Se você quiser passar uma opção que leva um argumento separado, você deve usar -Xlinker
duas vezes, uma para a opção e uma vez para o argumento. Por exemplo, para passar -afirmar
definições, você deve escrever -Xlinker -afirmar -Xlinker definições. Não funciona
escrever -Xlinker "-afirmar definições ", porque isso passa a string inteira como um
único argumento, que não é o que o vinculador espera.

Ao usar o vinculador GNU, geralmente é mais conveniente passar argumentos para o vinculador
opções usando o opção=valor sintaxe do que como argumentos separados. Por exemplo, você
pode especificar -Xlinker -Map = output.map em vez de -Xlinker -Mapa -Xlinker output.map.
Outros vinculadores podem não oferecer suporte a essa sintaxe para opções de linha de comando.

-Wl,opção
Passar opção como uma opção para o vinculador. Se opção contém vírgulas, é dividido em
várias opções nas vírgulas. Você pode usar esta sintaxe para passar um argumento para o
opção. Por exemplo, -Wl, -Map, output.map passes -Mapa output.map para o vinculador. Quando
usando o vinculador GNU, você também pode obter o mesmo efeito com -Wl, -Map = output.map.

NOTA: No Ubuntu 8.10 e versões posteriores, para LDFLAGS, a opção -Wl, -z, relro é usado.
Para desativar, use -Wl, -z, norelro.

-u símbolo
Finja o símbolo símbolo é indefinido, para forçar a ligação dos módulos da biblioteca para definir
isto. Você pode usar -u várias vezes com símbolos diferentes para forçar o carregamento de
módulos de biblioteca adicionais.

-z palavra chave
-z é passado diretamente para o vinculador junto com a palavra-chave palavra chave. Veja a seção
na documentação do seu vinculador para valores permitidos e seus significados.

Opções por Diretório Procurar
Essas opções especificam diretórios para pesquisar arquivos de cabeçalho, bibliotecas e peças
do compilador:

-Idir
Adicione o diretório dir para o topo da lista de diretórios a serem pesquisados ​​para o cabeçalho
arquivos. Isso pode ser usado para substituir um arquivo de cabeçalho do sistema, substituindo o seu próprio
versão, uma vez que esses diretórios são pesquisados ​​antes do arquivo de cabeçalho do sistema
diretórios. No entanto, você não deve usar esta opção para adicionar diretórios que contenham
arquivos de cabeçalho do sistema fornecidos pelo fornecedor (use -isistema por isso). Se você usar mais de um
-I opção, os diretórios são verificados na ordem da esquerda para a direita; o sistema padrão
os diretórios vêm depois.

Se um sistema padrão incluir diretório, ou um diretório especificado com -isistema, É
também especificado com -I, -I opção é ignorada. O diretório ainda está sendo pesquisado, mas
como um diretório do sistema em sua posição normal na cadeia de inclusão do sistema. Isso é para
garantir que o procedimento do GCC para corrigir cabeçalhos de sistema com erros e o pedido para o
A diretiva "include_next" não é alterada inadvertidamente. Se você realmente precisa mudar
a ordem de pesquisa para diretórios do sistema, use o -nostdinc e / ou -isistema opções.

-iplugindir =dir
Defina o diretório para procurar plug-ins que são passados ​​por -fplugin =nome em vez de
-fplugin =caminho/nome.assim. Esta opção não deve ser usada pelo usuário, mas apenas
passou pelo motorista.

-Eu citodir
Adicione o diretório dir para o topo da lista de diretórios a serem pesquisados ​​para o cabeçalho
arquivos apenas para o caso de "#include"Arquivo""; eles não são pesquisados ​​por "#include
<arquivo> ", caso contrário, apenas como -I.

-Ldir
Adicionar diretório dir à lista de diretórios a serem pesquisados -l.

-Bprefixo
Esta opção especifica onde encontrar os executáveis, bibliotecas, arquivos de inclusão e
arquivos de dados do próprio compilador.

O programa do driver do compilador executa um ou mais dos subprogramas cpp, cc1, as e assim ld.
Tenta prefixo como um prefixo para cada programa que tenta executar, com e sem
máquina/versão/.

Para cada subprograma a ser executado, o driver do compilador primeiro tenta o -B prefixo, se houver.
Se esse nome não for encontrado, ou se -B não for especificado, o driver tenta dois padrões
prefixos, / usr / lib / gcc / e assim / usr / local / lib / gcc /. Se nenhum desses resultar em um
nome do arquivo encontrado, o nome do programa não modificado é pesquisado usando o
diretórios especificados em seu PATH variável de ambiente.

O compilador verifica se o caminho fornecido por -B refere-se a um diretório, e se
necessário, ele adiciona um caractere separador de diretório no final do caminho.

-B prefixos que efetivamente especificam nomes de diretório também se aplicam a bibliotecas no
vinculador, porque o compilador traduz essas opções em -L opções para o vinculador.
Eles também se aplicam para incluir arquivos no pré-processador, porque o compilador traduz
essas opções em -isistema opções para o pré-processador. Neste caso, o compilador
acrescenta incluir para o prefixo.

O arquivo de suporte de tempo de execução libgcc.a também pode ser pesquisado usando o -B prefixo, se
precisava. Se não for encontrado lá, os dois prefixos padrão acima são tentados, e que
é tudo. O arquivo é omitido do link se não for encontrado por esses meios.

Outra maneira de especificar um prefixo muito parecido com o -B prefixo é usar o ambiente
variável GCC_EXEC_PREFIX.

Como um kludge especial, se o caminho fornecido por -B is [dir /] estágioN /, Onde N é um número
no intervalo de 0 a 9, ele é substituído por [dir /] incluir. Isso é para ajudar com o boot-
amarrando o compilador.

-specs =filete
Processo de filete depois que o compilador lê o padrão óculos arquivo, a fim de substituir
os padrões que o gcc programa de driver usa ao determinar quais interruptores passarão
para cc1, cc1plus, as, ld, etc. Mais de um -specs =filete pode ser especificado no
linha de comando, e eles são processados ​​em ordem, da esquerda para a direita.

--sysroot =dir
Utilize dir como o diretório raiz lógico para cabeçalhos e bibliotecas. Por exemplo, se o
o compilador normalmente procura cabeçalhos em / usr / include e bibliotecas em / usr / lib, É
em vez de pesquisas dir / usr / include e assim dir / usr / lib.

Se você usar esta opção e o -isysroot opção, então o --sysroot opção
aplica-se a bibliotecas, mas o -isysroot opção se aplica a arquivos de cabeçalho.

O vinculador GNU (começando com a versão 2.16) tem o suporte necessário para isso
opção. Se o seu vinculador não suportar esta opção, o aspecto do arquivo de cabeçalho de
--sysroot ainda funciona, mas o aspecto da biblioteca não.

--no-sysroot-sufixo
Para alguns destinos, um sufixo é adicionado ao diretório raiz especificado com --sysroot,
dependendo das outras opções usadas, de modo que os cabeçalhos podem ser encontrados, por exemplo, em
dir / sufixo / usr / include em vez de dir / usr / include. Esta opção desativa a adição
de tal sufixo.

-I- Esta opção está obsoleta. Por favor, use -Eu cito em vez de -I diretórios antes
do -I- e remova o -I- opção. Quaisquer diretórios que você especificar com -I opções antes
do -I- opção são pesquisados ​​apenas para o caso de "#include"Arquivo""; eles não são
procurou por "#includearquivo> ".

Se diretórios adicionais forem especificados com -I opções após o -I- opção, estes
os diretórios são pesquisados ​​por todas as diretivas "#include". (Normalmente todos os -I
diretórios são usados ​​desta forma.)

Além disso, o -I- opção inibe o uso do diretório atual (onde o
o arquivo de entrada atual veio) como o primeiro diretório de pesquisa para "#include"Arquivo"".
Não há como substituir esse efeito de -I-. Com -EU. você pode especificar a busca
o diretório que é atual quando o compilador é chamado. Isso não é exatamente o
igual ao que o pré-processador faz por padrão, mas geralmente é satisfatório.

-I- não inibe o uso dos diretórios padrão do sistema para arquivos de cabeçalho.
Assim, -I- e assim -nostdinc são independentes.

Especificando alvo Lavagem e assim Compilador Versão
A maneira usual de executar o GCC é rodar o executável chamado gccou máquina-gcc quando cruzar
compilando, ou máquina-gcc-versão para executar uma versão diferente da que foi instalada
último.

Hardware Modelos e assim configurações
Cada tipo de máquina alvo pode ter suas próprias opções especiais, começando com -m, escolher
entre vários modelos de hardware ou configurações --- por exemplo, 68010 vs 68020, flutuante
coprocessador ou nenhum. Uma única versão instalada do compilador pode compilar para qualquer modelo
ou configuração, de acordo com as opções especificadas.

Algumas configurações do compilador também suportam opções especiais adicionais, geralmente para
compatibilidade com outros compiladores na mesma plataforma.

AAArch64 Opções

Essas opções são definidas para implementações AArch64:

-mabi =nome
Gere código para o modelo de dados especificado. Os valores permitidos são ilp32 para SysV-
como o modelo de dados onde int, long int e pointer são de 32 bits, e lp64 para SysV-like
modelo de dados em que int é de 32 bits, mas long int e o ponteiro são de 64 bits.

O padrão depende da configuração de destino específica. Observe que o LP64 e
ILP32 ABIs não são compatíveis com link; você deve compilar todo o seu programa com o mesmo
ABI e vincule a um conjunto compatível de bibliotecas.

-mbi-endian
Gere código big-endian. Este é o padrão quando o GCC é configurado para um
aarch64_be - * - * alvo.

-mgeneral-regs-only
Gere código que usa apenas os registros gerais.

-mlittle-endian
Gere o código little-endian. Este é o padrão quando o GCC é configurado para um
aarch64 - * - * mas não um aarch64_be - * - * alvo.

-mcmodel = tiny
Gere código para o modelo de código minúsculo. O programa e seus símbolos definidos estaticamente
devem estar a 1 GB um do outro. Os ponteiros têm 64 bits. Os programas podem ser estaticamente
ou vinculado dinamicamente. Este modelo não está totalmente implementado e principalmente tratado como
pequeno.

-mcmodel = pequeno
Gere código para o modelo de código pequeno. O programa e está estaticamente definido
os símbolos devem estar a 4 GB um do outro. Os ponteiros têm 64 bits. Os programas podem ser
vinculado estaticamente ou dinamicamente. Este é o modelo de código padrão.

-mcmodel = grande
Gere código para o modelo de código grande. Isso não faz suposições sobre endereços e
tamanhos de seções. Os ponteiros têm 64 bits. Os programas podem ser vinculados apenas estaticamente.

-mstrict-align
Não presuma que referências de memória desalinhadas são tratadas pelo sistema.

-momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer
Omita ou mantenha o ponteiro do quadro nas funções de folha. O primeiro comportamento é o
padrão.

-mtls-dialect = desc
Use descritores TLS como o mecanismo de armazenamento local de thread para acessos dinâmicos de TLS
variáveis. Este é o padrão.

-mtls-dialect = tradicional
Use o TLS tradicional como o mecanismo de armazenamento local de thread para acessos dinâmicos de TLS
variáveis.

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Habilite ou desabilite a solução alternativa para a errata número 53 do ARM Cortex-A835769.
envolve a inserção de uma instrução NOP entre as instruções de memória e o inteiro de 64 bits
multiplique-acumule instruções.

-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
Habilite ou desabilite a solução alternativa para a errata número 53 do ARM Cortex-A843419.
a solução alternativa da errata é feita no momento do link e só vai passar o sinalizador correspondente
para o vinculador.

-march =nome
Especifique o nome da arquitetura de destino, opcionalmente sufixado por um ou mais
modificadores de recursos. Esta opção tem o formato -march =arco{+[não]integrado}*, onde o
apenas valor permitido para arco is armv8-a. Os valores permitidos para integrado são
documentado na subseção abaixo.

Onde modificadores de recurso conflitantes são especificados, o recurso mais à direita é usado.

O GCC usa este nome para determinar que tipo de instruções ele pode emitir ao gerar
código de montagem.

Onde -marchar é especificado sem nenhum de -mtune or -mcpu também sendo especificado, o
o código é ajustado para ter um bom desempenho em uma variedade de processadores alvo que implementam o
arquitetura alvo.

-mtune =nome
Especifique o nome do processador de destino para o qual o GCC deve ajustar o desempenho de
o código. Os valores permitidos para esta opção são: genérico, córtex-a53, córtex-a57,
córtex-a72, exynos-m1, trovão, xgene1.

Além disso, esta opção pode especificar que o GCC deve ajustar o desempenho do código
para um sistema big.LITTLE. Os valores permitidos para esta opção são:
córtex-a57.córtex-a53, córtex-a72.córtex-a53.

Onde nenhum de -mtune =, -mcpu = or -march = são especificados, o código é ajustado para executar
bem em uma variedade de processadores de destino.

Esta opção não pode ser sufixada por modificadores de recursos.

-mcpu =nome
Especifique o nome do processador de destino, opcionalmente sufixado por um ou mais recursos
modificadores. Esta opção tem o formato -mcpu =cpu{+[não]integrado} *, onde o permitido
valores para cpu são os mesmos que estão disponíveis para -mtune.

Os valores permitidos para integrado estão documentados na subseção abaixo.

Onde modificadores de recurso conflitantes são especificados, o recurso mais à direita é usado.

O GCC usa este nome para determinar que tipo de instruções ele pode emitir ao gerar
código de montagem (como se por -marchar) e para determinar o processador alvo para o qual
sintonizar para desempenho (como se por -mtune) Onde esta opção é usada em conjunto com
-marchar or -mtune, essas opções têm precedência sobre a parte apropriada deste
opção.

-marchar e assim -mcpu Modificadores de recursos

Modificadores de recursos usados ​​com -marchar e assim -mcpu pode ser um dos seguintes:

crc Habilite a extensão CRC.

cripto
Habilite a extensão Crypto. Isso significa que o SIMD avançado está ativado.

fp Habilite as instruções de ponto flutuante.

simd
Ative as instruções SIMD avançadas. Isso implica que as instruções de ponto flutuante são
ativado. Este é o padrão para todos os valores atuais possíveis para as opções -marchar e assim
-mcpu =.

Adaptava Epifania Opções

Este -m as opções são definidas para Adapteva Epiphany:

-meia-reg-arquivo
Não aloque nenhum registro no intervalo "r32" ... "r63". Isso permite que o código seja executado em
variantes de hardware que não possuem esses registros.

-mprefer-short-insn-regs
Aloque preferencialmente registradores que permitam a geração de instruções curtas. Isso pode
resultar no aumento da contagem de instruções, então isso pode reduzir ou aumentar
tamanho do código.

-mbranch-cost =Números
Defina o custo das filiais para aproximadamente Números instruções "simples". Este custo é apenas um
heurística e não é garantido que produza resultados consistentes em todas as versões.

-mcmove
Habilite a geração de movimentos condicionais.

-mnops =Números
Emitir Números NOPs antes de qualquer outra instrução gerada.

-mno-soft-cmpsf
Para comparações de ponto flutuante de precisão única, emita uma instrução "fsub" e teste
as bandeiras. Isso é mais rápido do que uma comparação de software, mas pode obter resultados incorretos
na presença de NaNs, ou quando dois pequenos números diferentes são comparados de modo que
sua diferença é calculada como zero. O padrão é -msoft-cmpsf, Que usa
comparações de software mais lentas, mas em conformidade com IEEE.

-mstack-offset =Números
Defina o deslocamento entre o topo da pilha e o ponteiro da pilha. Por exemplo, um valor de 8
significa que os oito bytes no intervalo "sp + 0 ... sp + 7" podem ser usados ​​por funções de folha
sem alocação de pilha. Valores diferentes de 8 or 16 não são testados e improváveis ​​de
trabalhar. Observe também que esta opção altera o ABI; compilar um programa com um
deslocamento de pilha diferente daquele com o qual as bibliotecas foram compiladas geralmente não
trabalhar. Esta opção pode ser útil se você deseja avaliar se um deslocamento de pilha diferente
daria a você um código melhor, mas realmente usar um deslocamento de pilha diferente para construir
programas de trabalho, é recomendado configurar o conjunto de ferramentas com o apropriado
--with-stack-offset =Números opção.

-mno-round-mais próximo
Faça o planejador assumir que o modo de arredondamento foi definido como truncado. o
padrão é -modo-mais próximo.

-muito chamadas
Se não for especificado de outra forma por um atributo, suponha que todas as chamadas podem estar além do
intervalo de deslocamento das instruções "b" / "bl" e, portanto, carregue o endereço da função
em um registro antes de realizar uma chamada (de outra forma direta). Este é o padrão.

-mshort-chamadas
Se não for especificado de outra forma por um atributo, suponha que todas as chamadas diretas estejam no intervalo
das instruções "b" / "bl", portanto, use essas instruções para chamadas diretas. o
padrão é -muito chamadas.

-msmall16
Suponha que os endereços podem ser carregados como valores não assinados de 16 bits. Isso não se aplica a
endereços de função para os quais -muito chamadas a semântica está em vigor.

-mfp-mode =modo
Defina o modo predominante da unidade de ponto flutuante. Isso determina o flutuante
modo de ponto que é fornecido e esperado na chamada de função e tempo de retorno. Fazer
este modo corresponde ao modo que você precisa predominantemente no início da função pode tornar o seu
programas menores e mais rápidos, evitando trocas de modo desnecessárias.

modo pode ser definido com um dos seguintes valores:

chamador
Qualquer modo na entrada da função é válido e retido ou restaurado quando a função
retorna e quando chama outras funções. Este modo é útil para compilar
bibliotecas ou outras unidades de compilação que você pode querer incorporar em diferentes
programas com diferentes modos FPU prevalecentes e a conveniência de ser capaz de
usar um único arquivo de objeto supera o tamanho e a sobrecarga de velocidade para qualquer modo extra
troca que pode ser necessária, em comparação com o que seria necessário com mais
escolha específica do modo FPU prevalecente.

truncar
Este é o modo usado para cálculos de ponto flutuante com truncamento (ou seja, redondo
em direção a zero) modo de arredondamento. Isso inclui a conversão de ponto flutuante para
inteiro.

mais próximo
Este é o modo usado para cálculos de ponto flutuante com arredondamento para o mais próximo ou
modo de arredondamento uniforme.

int Este é o modo usado para realizar cálculos inteiros na FPU, por exemplo, inteiro
multiplique, ou multiplique e acumule inteiro.

O padrão é -mfp-mode = caller

-mnosplit-lohi
-mno-postinc
-mno-postmodify
Ajustes de geração de código que desabilitam, respectivamente, a divisão de cargas de 32 bits,
geração de endereços pós-incremento e geração de endereços pós-modificação. o
padrões são msplit-lohi, -mpost-ince -mpost-modify.

-mnovect-double
Altere o modo SIMD preferido para SImode. O padrão é -mvect-double, Que usa
DImode como modo SIMD preferido.

-max-vect-align =Números
O alinhamento máximo para tipos de modo de vetor SIMD. Números pode ser 4 ou 8. O padrão é
8. Observe que esta é uma alteração ABI, embora muitas interfaces de função de biblioteca sejam
não afetados se não usarem modos de vetor SIMD em lugares que afetam o tamanho e / ou
alinhamento de tipos relevantes.

-msplit-vecmove-early
O vetor dividido se move em movimentos de uma única palavra antes de recarregar. Em teoria, isso pode dar
melhor alocação de registros, mas até agora o inverso parece ser geralmente o caso.

-m1reg-reg
Especifique um registro para manter a constante -1, o que torna o carregamento pequeno negativo
constantes e certas bitmasks mais rápido. Valores permitidos para reg são r43 e assim r63,
que especificam o uso desse registro como um registro fixo, e Nenhum, o que significa que não
registrar é usado para este propósito. O padrão é -m1reg-nenhum.

ARC Opções

As opções a seguir controlam a variante de arquitetura para a qual o código está sendo compilado:

-deslocador de barril
Gere instruções suportadas pelo barrel shifter. Este é o padrão, a menos que
-mcpu = ARC601 está em vigor.

-mcpu =cpu
Defina o tipo de arquitetura, registre o uso e os parâmetros de programação de instruções para cpu.
Existem também opções de atalho de alias disponíveis para compatibilidade com versões anteriores e
conveniência. Valores suportados para cpu são

ARC600
Compile para ARC600. Apelido: -mA6, -mARC600.

ARC601
Compile para ARC601. Alias: -mARC601.

ARC700
Compile para ARC700. Apelido: -mA7, -mARC700. Este é o padrão quando configurado
com --with-cpu = arc700.

-mdpfp
-mdpfp-compact
FPX: Gere instruções FPX de precisão dupla, ajustadas para a implementação compacta.

-mdpfp-rápido
FPX: Gere instruções FPX de precisão dupla, ajustadas para implementação rápida.

-mno-dpfp-lrsr
Desative as instruções LR e SR de usar os registros auxiliares de extensão FPX.

-mea
Gere instruções aritméticas estendidas. Atualmente apenas "divaw", "adiciona", "subs",
e "sat16" são suportados. Isso está sempre habilitado para -mcpu = ARC700.

-mno-mpy
Não gere instruções mpy para ARC700.

-mmul32x16
Gere instruções de multiplicação e mac de 32x16 bits.

-mmul64
Gere instruções mul64 e mulu64. Válido apenas para -mcpu = ARC600.

-mnorm
Gere instrução de norma. Este é o padrão se -mcpu = ARC700 está em vigor.

-mspfp
-mspfp-compact
FPX: Gere instruções FPX de precisão única, ajustadas para a implementação compacta.

-mspfp-rápido
FPX: Gere instruções FPX de precisão única, ajustadas para implementação rápida.

-msimd
Habilite a geração de instruções ARC SIMD por meio de builtins específicos de destino. Apenas válido
por -mcpu = ARC700.

-msoft-float
Esta opção foi ignorada; ele é fornecido apenas para fins de compatibilidade. Programas
código de ponto flutuante é emitido por padrão, e este padrão pode ser substituído por FPX
opções; mspfp, mspfp-compactou mspfp-rápido para precisão simples, e mdpfp, mdpfp-
compactoou mdpfp-rápido para precisão dupla.

-mswap
Gere instruções de troca.

As seguintes opções são passadas para o montador e também definem o pré-processador
símbolos macro.

-mdsp-packa
Passado para o montador para habilitar as extensões do Pacote A do DSP. Também define o
símbolo do pré-processador "__Xdsp_packa".

-mdvbf
Passado para o montador para habilitar a extensão da borboleta viterbi dupla. Também
define o símbolo do pré-processador "__Xdvbf".

-mlock
Passado para o montador para habilitar a extensão Condicional de Carga / Armazenamento Bloqueado.
Também define o símbolo do pré-processador "__Xlock".

-mmac-d16
Passado para o montador. Também define o símbolo do pré-processador "__Xxmac_d16".

-mmac-24
Passado para o montador. Também define o símbolo do pré-processador "__Xxmac_24".

-mrtsc
Passado para o montador para habilitar a extensão do contador de carimbo de data / hora de 64 bits
instrução. Também define o símbolo do pré-processador "__Xrtsc".

-mswape
Passado para o montador para habilitar a instrução de extensão de pedido de bytes de troca.
Também define o símbolo de pré-processador "__Xswape".

-mtelefonia
Passado para o montador para habilitar instruções de operando duplo e único para
telefonia. Também define o símbolo do pré-processador "__Xtelephony".

-mxy
Passado para o montador para habilitar a extensão de memória XY. Também define o
símbolo do pré-processador "__Xxy".

As seguintes opções controlam como o código do assembly é anotado:

-dimensionar
Anote as instruções do montador com endereços estimados.

-manotar-alinhar
Explique quais considerações de alinhamento levam à decisão de fazer uma instrução
curto ou longo.

As seguintes opções são passadas para o vinculador:

-marclinux
Passado para o vinculador, para especificar o uso da emulação "arclinux". Esta opção
está habilitado por padrão em cadeias de ferramentas construídas para "arc-linux-uclibc" e
Alvos "arceb-linux-uclibc" quando a criação de perfil não é solicitada.

-marclinux_prof
Passado para o vinculador, para especificar o uso da emulação "arclinux_prof". Esse
opção está habilitada por padrão em cadeias de ferramentas construídas para "arc-linux-uclibc" e
Alvos "arceb-linux-uclibc" quando a criação de perfil é solicitada.

As seguintes opções controlam a semântica do código gerado:

-mepílogo-cfi
Permite a geração de informações de quadro de chamada para epílogos.

-mno-epílogo-cfi
Desative a geração de informações de quadro de chamada para epílogos.

-muito chamadas
Gerar insns de chamadas como registrar chamadas indiretas, proporcionando assim acesso a todas as
Intervalo de endereços de 32 bits.

-média-chamadas
Não use uma faixa de endereçamento inferior a 25 bits para chamadas, que é o deslocamento disponível
para uma instrução de ramificação e link incondicional. Execução condicional de função
chamadas são suprimidas, para permitir o uso do intervalo de 25 bits, em vez do intervalo de 21 bits
com branch-and-link condicional. Este é o padrão para cadeias de ferramentas construídas para
os destinos "arc-linux-uclibc" e "arceb-linux-uclibc".

-mno-sdata
Não gere referências de sdata. Este é o padrão para cadeias de ferramentas construídas para
os destinos "arc-linux-uclibc" e "arceb-linux-uclibc".

-mucb-mcount
Instrumento com chamadas mcount conforme usado no código UCB. Ou seja, fazer a contagem na chamada,
não o chamador. Por padrão, a instrumentação ARC conta no chamador.

-mvolatile-cache
Use acessos de memória normalmente armazenados em cache para referências voláteis. Este é o padrão.

-mno-volátil-cache
Habilite o bypass do cache para referências voláteis.

As seguintes opções ajustam a geração de código:

-chamada maligna
Faça otimizações de alinhamento para instruções de chamada.

-mauto-modify-reg
Habilite o uso de pré / pós modificação com deslocamento de registro.

-mbbit-olho mágico
Ative o bbit peephole2.

-mno-brcc
Esta opção desativa uma passagem específica para o alvo arc_reorg para gerar "BRcc"
instruções. Não tem efeito na geração "BRcc" impulsionada pelo passe combinador.

-mcase-vetor-pcrel
Use tabelas de caixas de chave relativas ao PC - isso permite o encurtamento da tabela de casos. Isto é o
padrão para -Os.

-mcompact-casesi
Ative o padrão casei compacto. Este é o padrão para -Os.

-mno-cond-exec
Desative a passagem específica do ARCompact para gerar instruções de execução condicional. Devido
para atrasar a programação de slots e as interações entre os números dos operandos, tamanhos literais,
comprimentos de instrução, e o suporte para execução condicional, o alvo independente
passagem para gerar execução condicional muitas vezes falta, então a porta ARC manteve um
passagem especial que tenta encontrar mais execução condicional, gerando
oportunidades após a alocação de registro, redução de filial e programação de atraso de slot
foi feito. Essa passagem geralmente, mas nem sempre, melhora o desempenho e o código
tamanho, ao custo de tempo de compilação extra, é por isso que há uma opção de mudar
fora. Se você tiver um problema com as instruções de chamada excedendo o deslocamento permitido
intervalo porque eles são condicionalizados, você deve considerar o uso de -média-chamadas
ao invés.

-mearly-cbranchsi
Ative o uso de pré-recarregamento do padrão cbranchsi.

-mexpand-adddi
Expanda "adddi3" e "subdi3" no momento da geração rtl para "add.f", "adc" etc.

-mindexed -loads
Habilite o uso de cargas indexadas. Isso pode ser problemático porque alguns otimizadores então
suponha que existam armazenamentos indexados, o que não é o caso.

-mlra
Habilite a alocação de registro local. Isso ainda é experimental para ARC, então, por padrão
o compilador usa recarregamento padrão (ou seja -mno-lra).

-mlra-priority-nenhum
Não indique nenhuma prioridade para os registradores de destino.

-mlra-priority-compact
Indica a prioridade de registro de destino para r0..r3 / r12..r15.

-mlra-priority-noncompact
Reduza a prioridade do registrador de destino para r0..r3 / r12..r15.

-mno-milicode
Ao otimizar para tamanho (usando -Os), prólogos e epílogos que devem salvar ou
restaurar um grande número de registros são frequentemente encurtados usando uma chamada para um especial
função em libgcc; isso é conhecido como milicode ligar. Como essas chamadas podem representar
problemas de desempenho e / ou causar problemas de vinculação ao vincular de forma não padrão,
esta opção é fornecida para desligar a geração de chamadas millicode.

-mixed-code
Ajuste a alocação de registradores para ajudar na geração de instruções de 16 bits. Isso geralmente tem
o efeito de diminuir o tamanho médio da instrução enquanto aumenta a instrução
contagem.

-mq-class
Habilite as alternativas de instrução 'q'. Este é o padrão para -Os.

-mRcq
Habilite o tratamento de restrições Rcq - a maior parte da geração de códigos curtos depende disso. Isto é
o padrão.

-mRcw
Habilite o tratamento de restrições Rcw - o ccfsm condexec depende principalmente disso. Isto é o
padrão.

-msize-level =nível
Otimização de tamanho de ajuste fino no que diz respeito a comprimentos de instrução e alinhamento. o
valores reconhecidos para nível são:

0 Sem otimização de tamanho. Este nível está obsoleto e é tratado como 1.

1 Instruções curtas são usadas oportunisticamente.

2 Além disso, o alinhamento dos loops e do código após as barreiras serem eliminadas.

3 Além disso, o alinhamento de dados opcional é eliminado e a opção Os está ativado.

O padrão é 3 quando -Os está em vigor. Caso contrário, o comportamento quando este não é
conjunto é equivalente ao nível 1.

-mtune =cpu
Definir parâmetros de agendamento de instrução para cpu, substituindo qualquer implícito por -mcpu =.

Valores suportados para cpu são

ARC600
Sintonize a CPU ARC600.

ARC601
Sintonize a CPU ARC601.

ARC700
Ajuste para CPU ARC700 com bloco multiplicador padrão.

ARC700-xmac
Ajuste para CPU ARC700 com bloco XMAC.

ARC725D
Ajuste para CPU ARC725D.

ARC750D
Ajuste para CPU ARC750D.

-mmultcost =Números
Custo a assumir para uma instrução multiplicar, com 4 sendo igual a uma instrução normal.

-munalign-prob-threshold =probabilidade
Defina o limite de probabilidade para ramos desalinhados. Ao sintonizar para ARC700 e assim
otimizando para velocidade, ramos sem slot de atraso preenchido são preferencialmente emitidos
desalinhado e longo, a menos que o perfil indique que a probabilidade do ramo para
ser levado está abaixo probabilidade. O padrão é (REG_BR_PROB_BASE / 2), ou seja, 5000.

As opções a seguir são mantidas para compatibilidade com versões anteriores, mas agora estão obsoletas
e será removido em uma versão futura:

-margonauta
FPX obsoleto.

-mbi-endian
-EB Compile o código para alvos big endian. O uso dessas opções está obsoleto. Comercial
querendo código big-endian, deve usar os alvos "arceb-elf32" e "arceb-linux-uclibc"
ao construir a cadeia de ferramentas, para a qual big-endian é o padrão.

-mlittle-endian
-A Compile o código para alvos little endian. O uso dessas opções está obsoleto.
Os usuários que desejam o código little-endian devem usar o "arc-elf32" e "arc-linux-uclibc"
alvos ao construir a cadeia de ferramentas, para os quais little endian é o padrão.

-mbarrel_shifter
Substituído por -deslocador de barril.

-mdpfp_compact
Substituído por -mdpfp-compact.

-mdpfp_fast
Substituído por -mdpfp-rápido.

-mdsp_packa
Substituído por -mdsp-packa.

-mEA
Substituído por -mea.

-mmac_24
Substituído por -mmac-24.

-mmac_d16
Substituído por -mmac-d16.

-mspfp_compact
Substituído por -mspfp-compact.

-mspfp_fast
Substituído por -mspfp-rápido.

-mtune =cpu
Valores arc600, arc601, arc700 e assim arc700-xmac por cpu são substituídos por ARC600, ARC601,
ARC700 e assim ARC700-xmac respectivamente

-multcost =Números
Substituído por -multcost.

ARM Opções

Este -m opções são definidas para a porta ARM:

-mabi =nome
Gerar código para o ABI especificado. Os valores permitidos são: apcs-gnu, atpcs, aapcs,
aapcs-linux e assim iwmmxt.

-mapcs-frame
Gere um frame de pilha que seja compatível com o ARM Procedure Call Standard para todos
funções, mesmo que isso não seja estritamente necessário para a execução correta do código.
Especificando -fomit-frame-pointer com esta opção faz com que os stack frames não sejam
gerado para funções de folha. O padrão é -mno-apcs-frame. Esta opção é
descontinuada.

-mapcs
Este é um sinônimo para -mapcs-frame e está obsoleto.

-mthumb-interwork
Gere código que ofereça suporte a chamadas entre os conjuntos de instruções ARM e Thumb.
Sem esta opção, em arquiteturas pré-v5, os dois conjuntos de instruções não podem ser
usado de forma confiável dentro de um programa. O padrão é -mno-thumb-interwork, já que ligeiramente
código maior é gerado quando -mthumb-interwork é especificado. Em configurações AAPCS
esta opção não faz sentido.

-mno-sched-prolog
Impedir a reordenação de instruções no prólogo da função, ou a fusão de
essas instruções com as instruções no corpo da função. Isso significa que todos
funções começam com um conjunto reconhecível de instruções (ou de fato uma de uma escolha
de um pequeno conjunto de prólogos de funções diferentes), e esta informação pode ser usada para
localize o início das funções dentro de um trecho de código executável. O padrão é
-msched-prolog.

-mfloat-abi =nome
Especifica qual ABI de ponto flutuante usar. Os valores permitidos são: macio, softfp e assim
difícil.

Especificando macio faz com que o GCC gere saída contendo chamadas de biblioteca para flutuante
operações pontuais. softfp permite a geração de código usando hardware de ponto flutuante
instruções, mas ainda usa as convenções de chamada de soft-float. difícil permite
geração de instruções de ponto flutuante e usa convenções de chamada específicas de FPU.

O padrão depende da configuração de destino específica. Observe que o hard-float
e ABIs soft-float não são compatíveis com link; você deve compilar todo o seu programa com
a mesma ABI e vincular a um conjunto compatível de bibliotecas.

-mlittle-endian
Gere código para um processador em execução no modo little-endian. Este é o padrão para
todas as configurações padrão.

-mbi-endian
Gerar código para um processador rodando no modo big-endian; o padrão é compilar
código para um processador little-endian.

-march =nome
Isso especifica o nome da arquitetura ARM de destino. GCC usa este nome para
determinar que tipo de instruções ele pode emitir ao gerar o código de montagem. Esse
opção pode ser usada em conjunto com ou em vez do -mcpu = opção. Permitida
nomes são: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, armv7ve, armv8-a, armv8-a + crc, iwmmxt, iwmmxt2, ep9312.

-march = armv7ve é a arquitetura armv7-a com extensões de virtualização.

-march = armv8-a + crc permite a geração de código para a arquitetura ARMv8-A junto com
as extensões CRC32 opcionais.

-march = nativo faz com que o compilador detecte automaticamente a arquitetura da construção
computador. No momento, este recurso só é compatível com GNU / Linux, e nem todos
arquiteturas são reconhecidas. Se a detecção automática não for bem-sucedida, a opção não tem
efeito.

-mtune =nome
Esta opção especifica o nome do processador ARM de destino para o qual o GCC deve ajustar
o desempenho do código. Para algumas implementações de ARM, um melhor desempenho pode ser
obtidos usando esta opção. Os nomes permitidos são: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, arm710t, arm720t, arm740t, braço forte, Strongarm110, Strongarm1100,
Strongarm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi, arm1020t, arm1026ej-s,
arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, córtex-a5, córtex-a7, córtex-a8, córtex-a9,
córtex-a12, córtex-a15, córtex-a53, córtex-a57, córtex-a72, córtex-r4, córtex-r4f,
córtex-r5, córtex-r7, córtex-m7, córtex-m4, córtex-m3, córtex-m1, córtex-m0,
córtex-m0plus, córtex-m1.pequena-multiplicação, córtex-m0.pequena-multiplicação,
córtex-m0plus.small-multiply, exynos-m1, maravilha-pj4, escala x, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgene1.

Além disso, esta opção pode especificar que o GCC deve ajustar o desempenho do código
para um sistema big.LITTLE. Os nomes permitidos são: córtex-a15.córtex-a7,
córtex-a57.córtex-a53, córtex-a72.córtex-a53.

-mtune = genérico-arco especifica que o GCC deve ajustar o desempenho para uma mistura de
processadores dentro da arquitetura arco. O objetivo é gerar código que funcione bem no
processadores mais populares atuais, balanceamento entre otimizações que beneficiam alguns
CPUs na faixa e evitando armadilhas de desempenho de outras CPUs. Os efeitos de
esta opção pode mudar em futuras versões do GCC conforme os modelos de CPU vêm e vão.

-mtune = nativo faz com que o compilador detecte automaticamente a CPU do computador de construção. No
presente, este recurso só é compatível com GNU / Linux, e nem todas as arquiteturas são
reconhecido. Se a detecção automática não for bem-sucedida, a opção não terá efeito.

-mcpu =nome
Isso especifica o nome do processador ARM de destino. GCC usa este nome para derivar o
nome da arquitetura ARM de destino (como se especificado por -marchar) e o processador ARM
tipo para o qual ajustar para desempenho (como se especificado por -mtune) Onde esta opção
é usado em conjunto com -marchar or -mtune, essas opções têm precedência sobre o
parte apropriada desta opção.

Os nomes permitidos para esta opção são iguais àqueles para -mtune.

-mcpu = genérico-arco também é permitido e é equivalente a -march =arco
-mtune = genérico-arco. Ver -mtune Para obter mais informações.

-mcpu = nativo faz com que o compilador detecte automaticamente a CPU do computador de construção. No
presente, este recurso só é compatível com GNU / Linux, e nem todas as arquiteturas são
reconhecido. Se a detecção automática não for bem-sucedida, a opção não terá efeito.

-mfpu =nome
Isso especifica em qual hardware de ponto flutuante (ou emulação de hardware) está disponível
o alvo. Os nomes permitidos são: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, néon, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8e crypto-neon-fp-armv8.

If -msoft-float é especificado, especifica o formato dos valores de ponto flutuante.

Se o hardware de ponto flutuante selecionado inclui a extensão NEON (por exemplo -mfpu=néon),
observe que as operações de ponto flutuante não são geradas pela passagem de autovetorização do GCC
a menos que -funsafe-math-otimizations também é especificado. Isso ocorre porque o hardware NEON
não implementa totalmente o padrão IEEE 754 para aritmética de ponto flutuante (em
valores desnormais particulares são tratados como zero), portanto, o uso de instruções NEON pode
levar a uma perda de precisão.

-mfp16-format =nome
Especifique o formato do tipo de ponto flutuante de meia precisão "__fp16". Permitida
nomes são Nenhum, ieeee alternativa; o padrão é Nenhum, nesse caso o "__fp16"
tipo não está definido.

-mstructure-size-boundary =n
Os tamanhos de todas as estruturas e uniões são arredondados para um múltiplo do número de
bits definidos por esta opção. Os valores permitidos são 8, 32 e 64. O valor padrão
varia para diferentes conjuntos de ferramentas. Para o conjunto de ferramentas direcionado COFF, o valor padrão é
8. Um valor de 64 só é permitido se a ABI subjacente o suportar.

Especificar um número maior pode produzir um código mais rápido e eficiente, mas também pode
aumentar o tamanho do programa. Valores diferentes são potencialmente incompatíveis.
O código compilado com um valor não pode necessariamente esperar funcionar com código ou bibliotecas
compilados com outro valor, se trocam informações por meio de estruturas ou sindicatos.

-mabort-on-noreturn
Gere uma chamada para a função "abortar" no final de uma função "noreturn". Isto é
executado se a função tentar retornar.

-muito chamadas
-mno-long-chamadas
Diz ao compilador para realizar chamadas de função, primeiro carregando o endereço do
função em um registro e, em seguida, executar uma chamada de sub-rotina neste registro. Esse
switch é necessário se a função de destino estiver fora do endereçamento de 64 megabytes
intervalo da versão baseada em deslocamento da instrução de chamada de sub-rotina.

Mesmo se essa chave estiver habilitada, nem todas as chamadas de função são transformadas em chamadas longas.
A heurística é que funções estáticas, funções que têm o "short_call"
atributo, funções que estão dentro do escopo de uma diretiva "#pragma no_long_calls",
e funções cujas definições já foram compiladas dentro do atual
unidade de compilação não são transformadas em chamadas longas. As exceções a esta regra são que
definições de função fracas, funções com o atributo "long_call" ou a "seção"
atributo e funções que estão dentro do escopo de uma diretiva "#pragma long_calls"
são sempre transformados em chamadas longas.

Este recurso não é habilitado por padrão. Especificando -mno-long-chamadas restaura o
comportamento padrão, assim como colocar as chamadas de função dentro do escopo de um "#pragma
long_calls_off ". Observe que essas opções não têm efeito sobre como o compilador
gera código para lidar com chamadas de função por meio de ponteiros de função.

-msingle-pic-base
Trate o registro usado para endereçamento PIC como somente leitura, em vez de carregá-lo no
prólogo para cada função. O sistema de tempo de execução é responsável por inicializar este
registrar com um valor apropriado antes do início da execução.

-mpic-register =reg
Especifique o registro a ser usado para o endereçamento PIC. Para o caso de base PIC padrão, o
o padrão é qualquer registro adequado determinado pelo compilador. Para um único caso de base PIC,
o padrão é R9 se o alvo for baseado em EABI ou a verificação de pilha estiver habilitada, caso contrário, o
padrão é R10.

-mpic-data-is-text-relative
Suponha que cada segmento de dados seja relativo ao segmento de texto no momento do carregamento. Portanto,
ele permite endereçar dados usando operações relativas ao PC. Essa opção está ativada por padrão
para destinos diferentes de VxWorks RTP.

-mpoke-nome-função
Escreva o nome de cada função na seção de texto, diretamente antes da função
prólogo. O código gerado é semelhante a este:

t0
.ascii "arm_poke_function_name", 0
.alinhar
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp !, {fp, ip, lr, pc}
sub fp, ip, # 4

Ao realizar um rastreamento de pilha, o código pode inspecionar o valor de "pc" armazenado em "fp +
0 ". Se a função de rastreamento olhar para a localização" pc - 12 "e os 8 bits principais são
definido, então sabemos que há um nome de função embutido imediatamente antes deste
localização e tem comprimento "((pc [-3]) & 0xff000000)".

-mthumb
-marm
Selecione entre a geração de código que executa nos estados ARM e Thumb. O padrão para
a maioria das configurações é para gerar código que executa no estado ARM, mas o padrão
pode ser alterado configurando o GCC com o --with-mode =estado opção de configuração.

-mtpcs-frame
Gere um frame de pilha que seja compatível com o Thumb Procedure Call Standard para
todas as funções não-folha. (Uma função folha é aquela que não chama nenhum outro
funções.) O padrão é -mno-tpcs-frame.

-mtpcs-leaf-frame
Gere um frame de pilha que seja compatível com o Thumb Procedure Call Standard para
todas as funções de folha. (Uma função folha é aquela que não chama nenhuma outra função.)
O padrão é -mno-apcs-leaf-frame.

-mcallee-superinterworking
Dá a todas as funções externamente visíveis no arquivo que está sendo compilado uma instrução ARM
definir o cabeçalho que muda para o modo Thumb antes de executar o resto da função.
Isso permite que essas funções sejam chamadas a partir de um código não interoperável. Esta opção é
não é válido em configurações AAPCS porque o interfuncionamento está habilitado por padrão.

-mcaller-superinterworking
Permite que chamadas por meio de ponteiros de função (incluindo funções virtuais) sejam executadas corretamente
independentemente de o código de destino ter sido compilado para interoperação ou não.
Há uma pequena sobrecarga no custo de execução de um ponteiro de função se esta opção
está ativado. Esta opção não é válida em configurações AAPCS porque o interfuncionamento é
habilitado por padrão.

-mtp =nome
Especifique o modelo de acesso para o ponteiro de armazenamento local do encadeamento. Os modelos válidos são
macio, que gera chamadas para "__aeabi_read_tp", cp15, que busca o tópico
ponteiro de "cp15" diretamente (compatível com a arquitetura arm6k), e auto, o qual
usa o melhor método disponível para o processador selecionado. A configuração padrão é
auto.

-mtls-dialect =dialeto
Especifique o dialeto a ser usado para acessar o armazenamento local do thread. Dois dialetos são
suportado ---gnu e assim gnu2. o gnu dialeto seleciona o esquema GNU original para
suportando modelos TLS dinâmicos locais e globais. o gnu2 dialeto seleciona o GNU
esquema descritor, que fornece melhor desempenho para bibliotecas compartilhadas. O GNU
o esquema do descritor é compatível com o esquema original, mas requer novos
suporte a assembler, linker e biblioteca. Os modelos TLS executivos iniciais e locais são
não é afetado por esta opção e sempre usa o esquema original.

-mword-relocations
Apenas gere realocações absolutas em valores de tamanho de palavra (ou seja, R_ARM_ABS32). Isto é
habilitado por padrão em alvos (uClinux, SymbianOS) onde o carregador de tempo de execução impõe
esta restrição, e quando -fpic or -fPIC é especificado.

-mfix-córtex-m3-ldrd
Alguns núcleos Cortex-M3 podem causar corrupção de dados quando as instruções "ldrd" com
destino sobreposto e registros de base são usados. Esta opção evita gerar
essas instruções. Esta opção é habilitada por padrão quando -mcpu = cortex-m3 is
Especificadas.

-acesso-imunalinhado
-mno-unaligned-access
Ativa (ou desativa) a leitura e gravação de valores de 16 e 32 bits de endereços
que não estão alinhados a 16 ou 32 bits. Por padrão, o acesso não alinhado está desabilitado para todos
pré-ARMv6 e todas as arquiteturas ARMv6-M, e habilitado para todas as outras arquiteturas. Se
o acesso não alinhado não está habilitado, então as palavras em estruturas de dados compactadas são acessadas a
byte de cada vez.

O atributo ARM "Tag_CPU_unaligned_access" é definido no arquivo de objeto gerado para
verdadeiro ou falso, dependendo da configuração desta opção. Se o acesso não for alinhado
é habilitado, então o símbolo do pré-processador "__ARM_FEATURE_UNALIGNED" também é definido.

-mneon-para-64bits
Habilita o uso do Neon para lidar com operações escalares de 64 bits. Isto está desabilitado por padrão
uma vez que o custo de mover dados dos registros centrais para o Neon é alto.

-mslow-flash-data
Suponha que o carregamento de dados do flash seja mais lento do que a obtenção de instruções. Portanto, literal
a carga é minimizada para melhor desempenho. Esta opção só é suportada quando
compilar para ARMv7 M-profile e desligado por padrão.

-masm-sintaxe-unificado
Suponha que o montador embutido esteja usando a sintaxe asm unificada. O padrão está atualmente desativado
o que implica sintaxe dividida. Atualmente, esta opção está disponível apenas para Thumb1 e
não tem efeito no estado ARM e Thumb2. No entanto, isso pode mudar em versões futuras de
GCC. A sintaxe dividida deve ser considerada obsoleta.

-mrestrict-it
Restringe a geração de blocos de TI para estar em conformidade com as regras do ARMv8. Blocos de TI podem
conter apenas uma única instrução de 16 bits de um conjunto selecionado de instruções. Esse
a opção está ativada por padrão para o modo ARMv8 Thumb.

-mprint-tune-info
Imprime informações de ajuste de CPU como comentário no arquivo assembler. Esta é uma opção usada
apenas para teste de regressão do compilador e não se destina ao uso comum em
compilar código. Esta opção está desativada por padrão.

AVR Opções

Essas opções são definidas para implementações de AVR:

-mmcu =MCU
Especifique arquiteturas de conjunto de instruções Atmel AVR (ISA) ou tipo de MCU.

O padrão para esta opção é @ tie {}avr2.

O GCC é compatível com os seguintes dispositivos AVR e ISAs:

"avr2"
Dispositivos "clássicos" com até 8 @ tie {} KiB de memória de programa. MCU@tie {} = "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
Dispositivos "clássicos" com até 8 @ tie {} KiB de memória de programa e com o "MOVW"
instrução. MCU@tie {} = "ata5272", "ata6616c", "attiny13", "attiny13a",
"attiny2313", "attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261",
"attiny261a", "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny441",
"attiny45", "attiny461", "attiny461a", "attiny48", "attiny828", "attiny84",
"attiny84a", "attiny841", "attiny85", "attiny861", "attiny861a", "attiny87",
"attiny88", "at86rf401".

"avr3"
Dispositivos "clássicos" com 16 @ tie {} KiB até 64 @ tie {} KiB de memória de programa.
MCU@tie {} = "at43usb355", "at76c711".

"avr31"
Dispositivos "clássicos" com 128 @ tie {} KiB de memória de programa. MCU@tie {} = "atmega103",
"at43usb320".

"avr35"
Dispositivos "clássicos" com 16 @ tie {} KiB até 64 @ tie {} KiB de memória de programa e com
a instrução "MOVW". MCU@tie {} = "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".

"avr4"
Dispositivos "aprimorados" com até 8 @ tie {} KiB de memória de programa. MCU@tie {} = "ata6285",
"ata6286", "ata6289", "ata6612c", "atmega48", "atmega48a", "atmega48p",
"atmega48pa", "atmega8", "atmega8a", "atmega8hva", "atmega8515", "atmega8535",
"atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2",
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
Dispositivos "aprimorados" com 16 @ tie {} KiB até 64 @ tie {} KiB de memória de programa.
MCU@tie {} = "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831",
"ata6613c", "ata6614q", "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
"atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
"atmega162", "atmega163", "atmega164a", "atmega164p", "atmega164pa", "atmega165",
"atmega165a", "atmega165p", "atmega165pa", "atmega168", "atmega168a",
"atmega168p", "atmega168pa", "atmega169", "atmega169a", "atmega169p",
"atmega169pa", "atmega32", "atmega32a", "atmega32c1", "atmega32hvb",
"atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
"atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega325pa", "atmega3250", "atmega3250a", "atmega3250p",
"atmega3250pa", "atmega328", "atmega328p", "atmega329", "atmega329a",
"atmega329p", "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
"atmega3290pa", "atmega406", "atmega64", "atmega64a", "atmega64c1", "atmega64hve",
"atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640", "atmega644",
"atmega644a", "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
"atmega645a", "atmega645p", "atmega6450", "atmega6450a", "atmega6450p",
"atmega649", "atmega649a", "atmega649p", "atmega6490", "atmega6490a",
"atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
"at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
Dispositivos "aprimorados" com 128 @ tie {} KiB de memória de programa. MCU@tie {} = "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".

"avr6"
Dispositivos "aprimorados" com PC de 3 bytes, ou seja, com mais de 128 @ tie {} KiB de programa
memória. MCU@tie {} = "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".

"avrxmega2"
Dispositivos "XMEGA" com mais de 8 @ tie {} KiB e até 64 @ tie {} KiB de memória de programa.
MCU@tie {} = "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".

"avrxmega4"
Dispositivos "XMEGA" com mais de 64 @ tie {} KiB e até 128 @ tie {} KiB de programa
memória. MCU@tie {} = "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5"
Dispositivos "XMEGA" com mais de 64 @ tie {} KiB e até 128 @ tie {} KiB de programa
memória e mais de 64 @ tie {} KiB de RAM. MCU@tie {} = "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Dispositivos "XMEGA" com mais de 128 @ tie {} KiB de memória de programa. MCU@tie {} =
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".

"avrxmega7"
Dispositivos "XMEGA" com mais de 128 @ tie {} KiB de memória de programa e mais de
64 @ tie {} KiB de RAM. MCU@tie {} = "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

"avrtiny"
Dispositivos de núcleo "TINY" Tiny com 512 @ tie {} B até 4 @ tie {} KiB de memória de programa.
MCU@tie {} = "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".

"avr1"
Este ISA é implementado pelo núcleo AVR mínimo e com suporte apenas para assembler.
MCU@tie {} = "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumulate-args
Acumule argumentos de função de saída e adquira / libere o espaço de pilha necessário para
argumentos de função de saída uma vez no prólogo / epílogo da função. Sem esta opção,
os argumentos de saída são enviados antes de chamar uma função e exibidos posteriormente.

Colocar os argumentos após a chamada da função pode ser caro no AVR, de modo que
acumular o espaço da pilha pode levar a executáveis ​​menores porque os argumentos precisam
não deve ser removido da pilha após tal chamada de função.

Esta opção pode reduzir o tamanho do código para funções que realizam várias chamadas para
funções que obtêm seus argumentos na pilha, como chamadas para funções semelhantes a printf.

-mbranch-cost =custo
Defina os custos de ramificação para instruções de ramificação condicional para custo. Valores razoáveis
por custo são números inteiros pequenos e não negativos. O custo da filial padrão é 0.

-mcall-prólogos
Os prólogos / epílogos das funções são expandidos como chamadas para as sub-rotinas apropriadas. Código
o tamanho é menor.

-hortelã8
Suponha que "int" seja um número inteiro de 8 bits. Isso afeta os tamanhos de todos os tipos: um "char" é 1
byte, um "int" tem 1 byte, um "long" tem 2 bytes e "long long" tem 4 bytes. Por favor
observe que esta opção não está em conformidade com os padrões C, mas resulta em menores
tamanho do código.

-mn-flash =Números
Suponha que a memória flash tenha um tamanho de Números vezes 64 @ tie {} KiB.

-mno-interrupções
O código gerado não é compatível com interrupções de hardware. O tamanho do código é menor.

-mrelax
Tente substituir "CALL" resp. A instrução "JMP" pela resp. Mais curta "RCALL". "RJMP"
instrução, se aplicável. Configuração -mrelax apenas adiciona o --mlink-relax opção para
linha de comando do assembler e o --relaxar opção para a linha de comando do vinculador.

O relaxamento do salto é realizado pelo vinculador porque os deslocamentos do salto não são conhecidos antes
o código está localizado. Portanto, o código assembler gerado pelo compilador é o mesmo,
mas as instruções no executável podem diferir das instruções no assembler
código.

O relaxamento deve ser ativado se os stubs do linker forem necessários, consulte a seção "EIND" e
linker stubs abaixo.

-mrmw
Suponha que o dispositivo suporte as instruções de leitura-modificação-gravação "XCH", "LAC", "LAS"
e "LAT".

-msp8
Trate o registro do ponteiro da pilha como um registro de 8 bits, ou seja, assume o byte alto de
o ponteiro da pilha é zero. Em geral, você não precisa definir essa opção manualmente.

Esta opção é usada internamente pelo compilador para selecionar e construir multilibs para
arquiteturas "avr2" e "avr25". Essas arquiteturas misturam dispositivos com e sem
"SPH". Para qualquer configuração diferente de -mmcu = avr2 or -mmcu = avr25 o driver do compilador adiciona
ou remove esta opção da linha de comando do compilador, porque o compilador
então sabe se o dispositivo ou arquitetura tem um ponteiro de pilha de 8 bits e, portanto, nenhum "SPH"
registrar ou não.

-mstrict-X
Use o registro de endereço "X" da forma proposta pelo hardware. Isso significa que "X" é
usado apenas em endereçamento indireto, pós-incremento ou pré-decremento.

Sem esta opção, o registro "X" pode ser usado da mesma forma que "Y" ou "Z" que
então é emulado por instruções adicionais. Por exemplo, carregar um valor com
"X + const" endereçando com um pequeno não negativo "const <64" para um registrador Rn is
realizado como

adiw r26, const; X + = const
ld , X; = * X
sbiw r26, const; X - = const

-mtiny-stack
Altere apenas os 8 bits @ tie {} inferiores do ponteiro da pilha.

-nodevicelib
Não vincule a biblioteca específica de dispositivo do AVR-LibC "libdev.a".

-Wadd-space-convert
Avisar sobre conversões entre espaços de endereço no caso em que o endereço resultante
o espaço não está contido no espaço de endereço de entrada.

"EIND" e dispositivos com mais de 128 Ki Bytes de Flash

Os ponteiros na implementação têm 16 bits @ tie {} de largura. O endereço de uma função ou rótulo
é representado como endereço de palavra para que chamadas e saltos indiretos possam direcionar a qualquer código
endereço no intervalo de 64 @ tie {} palavras Ki.

Para facilitar o salto indireto em dispositivos com mais de 128 @ tie {} Ki bytes de
espaço de memória do programa, há um registro de função especial chamado "EIND" que serve como
parte mais significativa do endereço de destino quando as instruções "EICALL" ou "EIJMP" são
usava.

Saltos indiretos e chamadas nesses dispositivos são tratados da seguinte forma pelo compilador e são
sujeito a algumas limitações:

* O compilador nunca define "EIND".

* O compilador usa "EIND" implicitamente nas instruções "EICALL" / "EIJMP" ou pode ler
"EIND" diretamente para emular uma chamada / salto indireto por meio de um "RET"
instrução.

* O compilador assume que "EIND" nunca muda durante o código de inicialização ou durante o
aplicativo. Em particular, "EIND" não é salvo / restaurado em função ou interrupção
prólogo / epílogo de rotina de serviço.

* Para chamadas indiretas para funções e goto calculado, o vinculador gera tocos. Tocos
são almofadas de salto às vezes também chamadas trampolins. Assim, a chamada / salto indireto salta para
tal esboço. O stub contém um salto direto para o endereço desejado.

* O relaxamento do vinculador deve ser ativado para que o vinculador gere os stubs corretamente
em todas as situações. Veja a opção do compilador -mrelax e a opção de linker --relaxar.
Existem casos em que o vinculador deve gerar stubs, mas aborta
sem relaxamento e sem uma mensagem de erro útil.

* O script do vinculador padrão é organizado para o código com "EIND = 0". Se o código é suposto
para trabalhar para uma configuração com "EIND! = 0", um script de vinculador personalizado deve ser usado para
para colocar as seções cujo nome começa com ".trampolins" no segmento onde
"EIND" aponta para.

* O código de inicialização de libgcc nunca define "EIND". Observe que o código de inicialização é uma mistura
de código de libgcc e AVR-LibC. Para o impacto do AVR-LibC em "EIND", consulte o AVR-
Manual do usuário LibC ("http://nongnu.org/avr-libc/user-manual/").

* É legítimo que o código de inicialização específico do usuário configure o "EIND" antecipadamente, por exemplo, por
meio de código de inicialização localizado na seção ".init3". Esse código é executado antes de
código de inicialização geral que inicializa RAM e chama construtores, mas depois de um pouco de
código de inicialização de AVR-LibC que define "EIND" para o segmento onde a tabela de vetor está
localizado.

#incluir

vazio estático
__attribute __ ((seção (". init3"), naked, used, no_instrument_function))
init3_set_eind (vazio)
{
__asm ​​volatile ("ldi r24, pm_hh8 (__ trampolines_start) \ n \ t"
"fora% i0, r24" :: "n" (& EIND): "r24", "memória");
}

O símbolo "__trampolines_start" é definido no script do vinculador.

* Os stubs são gerados automaticamente pelo vinculador se as duas condições a seguir forem
conheceu:

-
(abreviatura de gerar tocos) igual a:

LDI r24, lo8 (gs ( ))
LDI r25, hi8 (gs ( ))

-
lado de fora o segmento onde os stubs estão localizados.

* O compilador emite esses modificadores "gs" para rótulos de código nas seguintes situações:

-
-
- -mcall-prólogos>
opção de linha de comando.

-
tabelas você pode especificar o -fno-jump-tables opção de linha de comando.

-
-
* Saltar para endereços não simbólicos como este não suportado:

int main (vazio)
{
/ * Função de chamada no endereço de palavra 0x2 * /
return ((int (*) (void)) 0x2) ();
}

Em vez disso, um esboço deve ser configurado, ou seja, a função deve ser chamada por meio de um símbolo
("func_4" no exemplo):

int main (vazio)
{
extern int func_4 (void);

/ * Função de chamada no endereço de byte 0x4 * /
return func_4 ();
}

e o aplicativo seja vinculado a -Wl, - defsym, func_4 = 0x4. Alternativamente, "func_4"
pode ser definido no script do vinculador.

Tratamento dos registros de funções especiais "RAMPD", "RAMPX", "RAMPY" e "RAMPZ"

Alguns dispositivos AVR suportam memórias maiores que o intervalo de 64 @ tie {} KiB que pode ser acessado
com ponteiros de 16 bits. Para acessar locais de memória fora deste intervalo de 64 @ tie {} KiB, o
o conteúdo de um registro "RAMP" é usado como parte superior do endereço: O "X", "Y", "Z"
registro de endereço é concatenado com a função especial "RAMPX", "RAMPY", "RAMPZ"
registrar, respectivamente, para obter um endereço amplo. Da mesma forma, "RAMPD" é usado junto com
endereçamento direto.

* O código de inicialização inicializa os registros da função especial "RAMP" com zero.

* Se um AVR Nomeado Morada Espaços, nomeados endereço espaço diferente de genérico ou "__flash" é
usado, então "RAMPZ" é definido conforme necessário antes da operação.

* Se o dispositivo suportar RAM maior que 64 @ tie {} KiB e o compilador precisar ser alterado
"RAMPZ" para realizar uma operação, "RAMPZ" é zerado após a operação.

* Se o dispositivo vier com um registro "RAMP" específico, o prólogo / epílogo ISR
salva / restaura esse SFR e inicializa-o com zero caso o código ISR possa
(implicitamente) use-o.

* RAM maior que 64 @ tie {} KiB não é compatível com GCC para alvos AVR. Se você usar
assembler inline para ler de locais fora da faixa de endereço de 16 bits e mudar
um dos registradores "RAMP", deve-se zerar após o acesso.

Macros incorporados de AVR

O GCC define várias macros integradas para que o código do usuário possa testar a presença ou
ausência de recursos. Quase qualquer uma das seguintes macros embutidas são deduzidas do dispositivo
capacidades e, portanto, acionado pelo -mmcu = opção de linha de comando.

Para ainda mais macros integradas específicas de AVR, consulte AVR Nomeado Morada Espaços e assim AVR Embutido
Funções.

"__AVR_ARCH__"
Macro embutido que resolve para um número decimal que identifica a arquitetura e
depende do -mmcu =MCU opção. Os valores possíveis são:

2, 25, 3, 31, 35, 4, 5, 51, 6

por MCU= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",

respectivamente e

100, 102, 104, 105, 106, 107

por MCU= "avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
respectivamente. Se MCU especifica um dispositivo, esta macro embutida é configurada de acordo. Para
exemplo, com -mmcu = atmega8 a macro é definida como 4.

"__AVR_dispositivo__"
Configuração -mmcu =dispositivo define esta macro embutida que reflete o nome do dispositivo. Para
exemplo, -mmcu = atmega8 define a macro embutida "__AVR_ATmega8__", -mmcu = attiny261a
define "__AVR_ATtiny261A__", etc.

Os nomes das macros integradas seguem o esquema "__AVR_dispositivo__" onde dispositivo é o
nome do dispositivo de acordo com o manual do usuário do AVR. A diferença entre dispositivo no embutido
macro e dispositivo in -mmcu =dispositivo é que o último está sempre em minúsculas.

If dispositivo não é um dispositivo, mas apenas uma arquitetura central como avr51, esta macro não é
definiram.

"__AVR_DEVICE_NAME__"
Configuração -mmcu =dispositivo define esta macro embutida para o nome do dispositivo. Por exemplo,
com -mmcu = atmega8 a macro é definida como "atmega8".

If dispositivo não é um dispositivo, mas apenas uma arquitetura central como avr51, esta macro não é
definiram.

"__AVR_XMEGA__"
O dispositivo / arquitetura pertence à família de dispositivos XMEGA.

"__AVR_HAVE_ELPM__"
O dispositivo possui a instrução "ELPM".

"__AVR_HAVE_ELPMX__"
O dispositivo tem o "ELPM Rn, Z " e "ELPM Rn, Z + " instruções.

"__AVR_HAVE_MOVW__"
O dispositivo possui a instrução "MOVW" para realizar movimentos de registro-registro de 16 bits.

"__AVR_HAVE_LPMX__"
O dispositivo tem o "LPM Rn, Z " e "LPM Rn, Z + " instruções.

"__AVR_HAVE_MUL__"
O dispositivo possui um multiplicador de hardware.

"__AVR_HAVE_JMP_CALL__"
O dispositivo possui as instruções "JMP" e "CALL". Este é o caso de dispositivos com
pelo menos 16 @ tie {} KiB de memória de programa.

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
O dispositivo possui as instruções "EIJMP" e "EICALL". Este é o caso de dispositivos
com mais de 128 @ tie {} KiB de memória de programa. Isso também significa que o programa
contador (PC) tem 3 @ tie {} bytes de largura.

"__AVR_2_BYTE_PC__"
O contador do programa (PC) tem 2 @ tie {} bytes de largura. Este é o caso de dispositivos com até
128 @ tie {} KiB de memória de programa.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
O registro de ponteiro de pilha (SP) é tratado como 8 bits, respectivamente, registro de 16 bits por
o compilador. A definição dessas macros é afetada por -mtiny-stack.

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
O dispositivo tem o registro de função especial SPH (parte alta do ponteiro da pilha) ou tem
um ponteiro de pilha de 8 bits, respectivamente. A definição dessas macros é afetada por
-mmcu = e nos casos de -mmcu = avr2 e assim -mmcu = avr25 também por -msp8.

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
O dispositivo tem o registro de função especial "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
respectivamente.

"__NO_INTERRUPTS__"
Esta macro reflete o -mno-interrupções opção de linha de comando.

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Alguns dispositivos AVR (AT90S8515, ATmega103) não devem pular as instruções de 32 bits devido a um
errata de hardware. As instruções para ignorar são "SBRS", "SBRC", "SBIS", "SBIC" e "CPSE".
A segunda macro é definida apenas se "__AVR_HAVE_JMP_CALL__" também estiver definido.

"__AVR_ISA_RMW__"
O dispositivo possui instruções de leitura-modificação-gravação (XCH, LAC, LAS e LAT).

"__AVR_SFR_OFFSET __ =Deslocamento"
Instruções que podem endereçar registros de função especial de E / S diretamente como "IN",
"OUT", "SBI", etc. podem usar um endereço diferente como se fosse endereçado por uma instrução para
acesse a RAM como "LD" ou "STS". Este deslocamento depende da arquitetura do dispositivo e tem
a ser subtraído do endereço RAM para obter o respectivo endereço I / O @ tie {}.

"__WITH_AVRLIBC__"
O compilador é configurado para ser usado junto com o AVR-Libc. Veja o --with-avrlibc
opção de configuração.

Blackfin Opções

-mcpu =cpu[-revisão]
Especifica o nome do processador Blackfin de destino. Atualmente, cpu pode ser um de
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.

O opcional revisão especifica a revisão de silício do Blackfin alvo
processador. Todas as soluções alternativas disponíveis para a revisão de silício de destino são ativadas.
If revisão is Nenhum, nenhuma solução alternativa está habilitada. Se revisão is qualquer, todos
soluções alternativas para o processador de destino estão habilitadas. A macro "__SILICON_REVISION__"
é definido como dois dígitos hexadecimais que representam os números maior e menor no
revisão de silício. Se revisão is Nenhum, o "__SILICON_REVISION__" não está definido.
If revisão is qualquer, o "__SILICON_REVISION__" é definido como 0xffff. Se este
opcional revisão não é usado, o GCC assume a última revisão de silício conhecida do
processador Blackfin direcionado.

GCC define uma macro de pré-processador para o especificado cpu. Para o elfo-bfin conjunto de ferramentas,
esta opção faz com que o BSP de hardware fornecido pela libgloss seja vinculado se -msim is
não dado.

Sem esta opção, bf532 é usado como processador por padrão.

Observe que o suporte para bf561 está incompleto. Para bf561, apenas a macro do pré-processador é
definiram.

-msim
Especifica que o programa será executado no simulador. Isso faz com que o simulador
BSP fornecido pela libgloss para ser vinculado. Esta opção tem efeito apenas para elfo-bfin
conjunto de ferramentas. Algumas outras opções, como -mid-shared-library e assim -mfdpic, implica
-msim.

-momit-leaf-frame-pointer
Não mantenha o ponteiro do quadro em um registro para funções folha. Isso evita o
instruções para salvar, configurar e restaurar ponteiros de quadro e fazer um registro extra
disponível nas funções de folha. A opção -fomit-frame-pointer remove a moldura
ponteiro para todas as funções, o que pode tornar a depuração mais difícil.

-mspeld-anomalia
Quando ativado, o compilador garante que o código gerado não contenha
cargas especulativas após instruções de salto. Se esta opção for usada,
"__WORKAROUND_SPECULATIVE_LOADS" está definido.

-mno-specld-anomalia
Não gere código extra para evitar que ocorram cargas especulativas.

-mcsync-anomalia
Quando ativado, o compilador garante que o código gerado não contém CSYNC ou
Instruções SSYNC logo após desvios condicionais. Se esta opção for usada,
"__WORKAROUND_SPECULATIVE_SYNCS" está definido.

-mno-csync-anomalia
Não gere código extra para evitar que as instruções CSYNC ou SSYNC ocorram também
logo após um desvio condicional.

-mlow-64k
Quando ativado, o compilador é livre para aproveitar o conhecimento de que todo o
programa se encaixa em 64k de memória baixa.

-mno-low-64k
Suponha que o programa seja arbitrariamente grande. Este é o padrão.

-mstack-check-l1
Faça a verificação de pilha usando informações colocadas na memória de rascunho L1 pelo uClinux
núcleo.

-mid-shared-library
Gere código que ofereça suporte a bibliotecas compartilhadas por meio do método de ID de biblioteca. Isso permite
para executar no local e bibliotecas compartilhadas em um ambiente sem memória virtual
gestão. Esta opção implica -fPIC. Com um elfo-bfin alvo, esta opção implica
-msim.

-mno-id-shared-library
Gere código que não presuma que bibliotecas compartilhadas baseadas em ID estão sendo usadas. Isto é
o padrão.

-mleaf-id-shared-library
Gerar código que ofereça suporte a bibliotecas compartilhadas por meio do método de ID de biblioteca, mas assume
que esta biblioteca ou executável não se vinculará a nenhuma outra biblioteca compartilhada de ID.
Isso permite que o compilador use código mais rápido para saltos e chamadas.

-mno-leaf-id-shared-library
Não assuma que o código que está sendo compilado não vinculará a nenhuma biblioteca compartilhada de ID.
Um código mais lento é gerado para jump e call insns.

-mshared-library-id = n
Especifica o número de identificação da biblioteca compartilhada baseada em ID que está sendo compilada.
Especificar um valor de 0 gera um código mais compacto; especificando outras forças de valores
a alocação desse número para a biblioteca atual, mas não é mais espaço- ou tempo-
eficiente do que omitir esta opção.

-msep-data
Gerar código que permite que o segmento de dados seja localizado em uma área diferente da memória
do segmento de texto. Isso permite a execução no local em um ambiente sem
gerenciamento de memória virtual, eliminando realocações na seção de texto.

-mno-sep-data
Gere código que assume que o segmento de dados segue o segmento de texto. Isto é
o padrão.

-muito chamadas
-mno-long-chamadas
Diz ao compilador para realizar chamadas de função, primeiro carregando o endereço do
função em um registro e, em seguida, executar uma chamada de sub-rotina neste registro. Esse
switch é necessário se a função alvo estiver fora da faixa de endereçamento de 24 bits de
a versão baseada em deslocamento da instrução de chamada de sub-rotina.

Este recurso não é habilitado por padrão. Especificando -mno-long-chamadas restaura o
comportamento padrão. Observe que essas opções não têm efeito sobre como o compilador gera
código para lidar com chamadas de função por meio de ponteiros de função.

-mfast-fp
Faça o link com a biblioteca de ponto flutuante rápida. Esta biblioteca relaxa um pouco do IEEE
regras do padrão de ponto flutuante para verificar entradas em relação a Não-um-Número (NAN), no
interesse de desempenho.

-minline-plt
Habilite o inlining de entradas PLT em chamadas de função para funções que não são conhecidas por
vincular localmente. Não tem efeito sem -mfdpic.

-mmulticore
Crie um aplicativo independente para processadores Blackfin multicore. Esta opção causa
arquivos de início adequados e scripts de link com suporte a vários núcleos a serem usados ​​e define o
macro "__BFIN_MULTICORE". Só pode ser usado com -mcpu = bf561[-revisão].

Esta opção pode ser usada com -mcorea or -mcoreb, que seleciona o único aplicativo
modelo de programação por núcleo. Sem -mcorea or -mcoreb,
modelo de programação de aplicativo único / núcleo duplo é usado. Neste modelo, o principal
função do Core B deve ser nomeada como "coreb_main".

Se esta opção não for usada, o modelo de programação de aplicativo de núcleo único será usado.

-mcorea
Crie um aplicativo autônomo para o Núcleo A do BF561 ao usar o aplicativo um por
modelo de programação principal. Arquivos de início adequados e scripts de link são usados ​​para oferecer suporte ao Core
A, e a macro "__BFIN_COREA" é definida. Esta opção só pode ser usada em
Conjunção com -mmulticore.

-mcoreb
Crie um aplicativo autônomo para o Núcleo B do BF561 ao usar o aplicativo um por
modelo de programação principal. Arquivos de início adequados e scripts de link são usados ​​para oferecer suporte ao Core
B, e a macro "__BFIN_COREB" é definida. Quando esta opção é usada, "coreb_main"
deve ser usado em vez de "principal". Esta opção só pode ser usada em conjunto com
-mmulticore.

-msdram
Crie um aplicativo independente para SDRAM. Arquivos de início adequados e scripts de link são usados
para colocar o aplicativo em SDRAM, e a macro "__BFIN_SDRAM" é definida. o
carregador deve inicializar SDRAM antes de carregar o aplicativo.

-micplb
Suponha que os ICPLBs estejam habilitados no tempo de execução. Isso tem um efeito em certas anomalias
soluções alternativas. Para destinos Linux, o padrão é assumir que os ICPLBs estão ativados; para
aplicativos autônomos, o padrão é desativado.

C6X Opções

-march =nome
Isso especifica o nome da arquitetura de destino. GCC usa este nome para determinar
que tipo de instruções ele pode emitir ao gerar o código assembly. Permitida
nomes são: c62x, c64x, c64x +, c67x, c67x +, c674x.

-mbi-endian
Gere código para um alvo big-endian.

-mlittle-endian
Gere código para um target little-endian. Este é o padrão.

-msim
Escolha os arquivos de inicialização e o script do vinculador adequados para o simulador.

-msdata = padrão
Coloque pequenos dados globais e estáticos na seção ".neardata", que é apontado por
registrar "B14". Coloque pequenos dados globais e estáticos não inicializados na seção ".bss",
que fica ao lado da seção ".neardata". Coloque pequenos dados somente leitura no
seção ".rodata". As seções correspondentes usadas para grandes pedaços de dados são
".fardata", ".far" e ".const".

-msdata = all
Coloque todos os dados, não apenas pequenos objetos, nas seções reservadas para pequenos dados e
use o endereçamento relativo ao registro "B14" para acessá-los.

-msdata = nenhum
Não faça uso das seções reservadas para pequenos dados e use endereços absolutos para
acessar todos os dados. Coloque todos os dados globais e estáticos inicializados no ".fardata"
seção, e todos os dados não inicializados na seção ".far". Coloque todos os dados constantes em
a seção ".const".

CRIS Opções

Essas opções são definidas especificamente para as portas CRIS.

-march =tipo de arquitetura
-mcpu =tipo de arquitetura
Gerar código para a arquitetura especificada. As escolhas para tipo de arquitetura são
v3, v8 e assim v10 para ETRAX 4, ETRAX 100 e ETRAX 100 LX, respectivamente. O padrão é v0
exceto para cris-axis-linux-gnu, onde o padrão é v10.

-mtune =tipo de arquitetura
Sintonizar para tipo de arquitetura tudo aplicável sobre o código gerado, exceto para
a ABI e o conjunto de instruções disponíveis. As escolhas para tipo de arquitetura são
o mesmo que para -march =tipo de arquitetura.

-mmax-stack-frame =n
Avisa quando o frame da pilha de uma função excede n bytes.

-metrax4
-metrax100
As opções -metrax4 e assim -metrax100 são sinônimos para -march = v3 e assim -march = v8
respectivamente.

-mmul-bug-solução
-mno-mul-bug-solução
Contorne um bug nas instruções "muls" e "mulu" para modelos de CPU onde
se aplica. Esta opção está ativa por padrão.

-mpdebug
Habilite informações detalhadas relacionadas à depuração específica do CRIS no código do assembly. Esse
opção também tem o efeito de desligar o #NO_APP indicador de código formatado para o
assembler no início do arquivo de montagem.

-mcc-init
Não use resultados de código de condição da instrução anterior; sempre emita compare e
instruções de teste antes do uso dos códigos de condição.

-mno-efeitos colaterais
Não emita instruções com efeitos colaterais em modos de endereçamento diferentes de pós-
incremento.

-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-alinhar
Essas opções (no- opções) organizar (eliminar arranjos) para a estrutura da pilha,
dados individuais e constantes a serem alinhados para o tamanho máximo de acesso a dados individuais
para o modelo de CPU escolhido. O padrão é organizar o alinhamento de 32 bits. ABI
detalhes como o layout da estrutura não são afetados por essas opções.

-m32 bits
-m16 bits
-m8 bits
Semelhante às opções stack-data- e const-align acima, essas opções organizam para
quadro de pilha, dados graváveis ​​e constantes para todos estarem alinhados a 32, 16 ou 8 bits.
O padrão é alinhamento de 32 bits.

-mno-prólogo-epílogo
-prólogo-epílogo
Com -mno-prólogo-epílogo, o prólogo e epílogo da função normal que configurou
o frame da pilha é omitido e nenhuma instrução de retorno ou sequências de retorno são
gerado no código. Use esta opção apenas em conjunto com a inspeção visual do
código compilado: nenhum aviso ou erro é gerado quando os registros salvos de chamadas devem ser
salvo, ou o armazenamento para variáveis ​​locais precisa ser alocado.

-mno-gotplt
-mgotplt
Com -fpic e assim -fPIC, não gere (gere) sequências de instrução que carregam
endereços para funções da parte PLT do GOT em vez de (tradicional em outro
arquiteturas) chamadas para o PLT. O padrão é -mgotplt.

-me
Opção legada sem operação reconhecida apenas com cris-axis-elf e cris-axis-linux-gnu
alvos.

-mlinux
Opção legada sem operação reconhecida apenas com o destino cris-axis-linux-gnu.

-sim
Esta opção, reconhecida para o elfo do eixo cris, organiza a ligação com entrada-saída
funções de uma biblioteca de simulador. Código, dados inicializados e dados inicializados com zero
são alocados consecutivamente.

-sim2
Gostar -sim, mas passe as opções do linker para localizar os dados inicializados em 0x40000000 e zero-
dados inicializados em 0x80000000.

CR16 Opções

Essas opções são definidas especificamente para as portas CR16.

-mmac
Habilite o uso de instruções de multiplicação-acumulação. Desativado por padrão.

-mcr16cplus
-mcr16c
Gere código para a arquitetura CR16C ou CR16C +. A arquitetura CR16C + é padrão.

-msim
Vincula a biblioteca libsim.a que é compatível com o simulador. Aplicável a ELF
compilador apenas.

-hortelã32
Escolha o tipo de número inteiro com largura de 32 bits.

-mbit-ops
Gera instruções "sbit" / "cbit" para manipulações de bits.

-mdata-model =modelo
Escolha um modelo de dados. As escolhas para modelo são perto, longe or médio. médio é o padrão.
Contudo, longe não é válido com -mcr16c, como a arquitetura CR16C não suporta o
modelo de dados distante.

Darwin Opções

Essas opções são definidas para todas as arquiteturas que executam o sistema operacional Darwin.

O FSF GCC no Darwin não cria arquivos de objeto "gordos"; ele cria um arquivo de objeto para o
arquitetura única para a qual o GCC foi desenvolvido. O GCC da Apple em Darwin cria "gordura"
arquivos se múltiplos -arco opções são usadas; ele faz isso executando o compilador ou vinculador
várias vezes e juntando os resultados com lipo.

O subtipo do arquivo criado (como ppc7400 or ppc970 or i686) é determinado pelo
sinalizadores que especificam o ISA que o GCC tem como alvo, como -mcpu or -marchar. o
-force_cpusubtype_ALL opção pode ser usada para substituir isso.

As ferramentas Darwin variam em seu comportamento quando apresentadas com uma incompatibilidade de ISA. o
montador, as, permite que sejam usadas apenas instruções válidas para o subtipo do
arquivo que está gerando, então você não pode colocar instruções de 64 bits em um ppc750 arquivo de objeto. o
vinculador para bibliotecas compartilhadas, / usr / bin / libtool, falha e imprime um erro se solicitado
criar uma biblioteca compartilhada com um subtipo menos restritivo do que seus arquivos de entrada (para
exemplo, tentando colocar um ppc970 arquivo de objeto em um ppc7400 biblioteca). O vinculador para
executáveis, ld, discretamente dá ao executável o subtipo mais restritivo de qualquer um de seus
arquivos de entrada.

-Fdir
Adicione o diretório da estrutura dir para o topo da lista de diretórios a serem pesquisados
para arquivos de cabeçalho. Esses diretórios são intercalados com aqueles especificados por -I
opções e são verificados na ordem da esquerda para a direita.

Um diretório de estrutura é um diretório com estruturas nele. Uma estrutura é um
diretório com um Cabeçalhos e / ou Cabeçalhos Privados diretório contido diretamente nele que
termina em .estrutura. O nome de uma estrutura é o nome deste diretório, excluindo
do .estrutura. Os cabeçalhos associados à estrutura são encontrados em um desses dois
diretórios, com Cabeçalhos sendo pesquisado primeiro. Uma subestrutura é uma estrutura
diretório que está em um framework Quadros diretório. Inclui o subframework
cabeçalhos só podem aparecer em um cabeçalho de uma estrutura que contém a subestrutura, ou
em um cabeçalho de subestrutura irmão. Dois subframeworks são irmãos se ocorrerem no
mesmo quadro. Uma subestrutura não deve ter o mesmo nome de uma estrutura; uma
aviso é emitido se isso for violado. Atualmente, uma subestrutura não pode ter
subestruturas; no futuro, o mecanismo pode ser estendido para dar suporte a isso. o
frameworks padrão podem ser encontrados em / System / Library / Frameworks e assim
/ Library / Frameworks. Um exemplo include parece "#include ",
onde Quadro denota o nome da estrutura e header.h é encontrado no
Cabeçalhos Privados or Cabeçalhos diretório.

-iframeworkdir
Gostar -F exceto que o diretório é tratado como um diretório do sistema. A principal diferença
entre isso -iframework e assim -F é isso com -iframework o compilador não avisa
sobre construções contidas em arquivos de cabeçalho encontrados por meio de dir. Esta opção é válida
apenas para a família C de linguagens.

-sentiu
Emita informações de depuração para os símbolos usados. Para formato de depuração stabs,
isso permite -feliminate-unused-debug-symbols. Por padrão, está LIGADO.

-gfull
Emita informações de depuração para todos os símbolos e tipos.

-mmacosx-version-min =versão
A versão mais antiga do MacOS X em que este executável será executado é versão. Típica
valores de versão incluem 10.1, 10.2 e 10.3.9.

Se o compilador foi construído para usar os cabeçalhos do sistema por padrão, o padrão para
esta opção é a versão do sistema no qual o compilador está sendo executado, caso contrário, o
o padrão é fazer escolhas que sejam compatíveis com tantos sistemas e bases de código quanto
possível.

-mkernel
Habilite o modo de desenvolvimento do kernel. o -mkernel conjuntos de opções -estático, -fno-comum,
-fno-use-cxa-atexit, -fno-exceções, -fno-non-call-exceptions, -fapple-kext,
-não-fraco e assim -fno-rtti onde aplicável. Este modo também define -mno-altivec,
-msoft-float, -fno-builtin e assim -mlong-branch para destinos PowerPC.

-mone-byte-bool
Substitua os padrões de "bool" para que "sizeof (bool) == 1". Por padrão, "sizeof (bool)"
é 4 ao compilar para Darwin / PowerPC e 1 ao compilar para Darwin / x86, então este
opção não tem efeito no x86.

Atenção: A -mone-byte-bool switch faz com que o GCC gere um código que não é binário
compatível com o código gerado sem esse switch. Usar esta opção pode exigir
recompilar todos os outros módulos em um programa, incluindo bibliotecas do sistema. Usa isto
mude para estar em conformidade com um modelo de dados não padrão.

-mfix-and-continue
-fixar e continuar
-findirect-data
Gerar código adequado para desenvolvimento de retorno rápido, como para permitir que GDB
carregar dinamicamente .o arquivos em programas já em execução. -findirect-data e assim
-fixar e continuar são fornecidos para compatibilidade com versões anteriores.

-all_load
Carrega todos os membros das bibliotecas de arquivo estático. Ver homem ld(1) para mais informações.

-arch_errors_fatal
Faz com que os erros relacionados com arquivos que possuem a arquitetura errada sejam fatais.

-bind_at_load
Faz com que o arquivo de saída seja marcado de forma que o vinculador dinâmico vincule todos
referências indefinidas quando o arquivo é carregado ou iniciado.

-agrupar
Produza um arquivo de formato de pacote Mach-o. Ver homem ld(1) para mais informações.

-bundle_loader executável
Esta opção especifica o executável que irá carregar o arquivo de saída da compilação sendo
vinculado. Ver homem ld(1) para mais informações.

-dinamiclib
Quando passada esta opção, o GCC produz uma biblioteca dinâmica em vez de um executável quando
ligando, usando o Darwin libtool comando.

-force_cpusubtype_ALL
Isso faz com que o arquivo de saída do GCC tenha o TODOS subtipo, em vez de um controlado por
do -mcpu or -marchar opção.

-allowable_client Nome do cliente
-Nome do cliente
-compatibilidade_versão
-Versão Atual
-dead_strip
-arquivo de dependência
-dylib_file
-dylinker_install_name
-dinâmico
-exported_symbols_list
-lista de arquivos
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-imagem_base
-iniciar
-install_name
-keep_private_externs
-multi_module
-multiplicar_definido
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-noprebind
-noseglinkedit
-pagezero_size
-prebind
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-sectalign
-símbolos de objeto da seita
-porque
-seg1addr
-sectcreate
-símbolos de objeto da seita
-ordem do setor
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-Segripor.
-segs_read_only_addr
-segs_read_write_addr
-single_module
-estático
-sub_library
-sub_guarda-chuva
-twolevel_namespace
- guarda-chuva
-Indefinido
-unexported_symbols_list
-weak_reference_mismatches
- o que foi carregado
Essas opções são passadas para o vinculador Darwin. A página do manual do linker Darwin descreve
detalhadamente.

Dezembro alfa Opções

Este -m opções são definidas para as implementações DEC Alpha:

-mno-soft-float
-msoft-float
Use (não use) as instruções de ponto flutuante de hardware para ponto flutuante
operações. Quando -msoft-float é especificado, funções em libgcc.a são usados ​​para realizar
operações de ponto flutuante. A menos que sejam substituídos por rotinas que emulem o
operações de ponto flutuante, ou compiladas de forma a chamar tais emulações
rotinas, essas rotinas emitem operações de ponto flutuante. Se você está compilando para
um Alpha sem operações de ponto flutuante, você deve garantir que a biblioteca seja construída
para não chamá-los.

Observe que as implementações Alpha sem operações de ponto flutuante são obrigadas a ter
registradores de ponto flutuante.

-mfp-reg
-mno-fp-regs
Gere código que usa (não usa) o conjunto de registros de ponto flutuante. -mno-fp-regs
implica -msoft-float. Se o conjunto de registros de ponto flutuante não for usado,
operandos são passados ​​em registradores inteiros como se fossem inteiros e ponto flutuante
os resultados são passados ​​em $ 0 em vez de $ f0. Esta é uma sequência de chamada não padrão, então
qualquer função com um argumento de ponto flutuante ou valor de retorno chamado pelo código compilado
com -mno-fp-regs também deve ser compilado com essa opção.

Um uso típico desta opção é construir um kernel que não usa e, portanto, precisa
não salvar e restaurar, quaisquer registros de ponto flutuante.

-meee
A arquitetura Alpha implementa hardware de ponto flutuante otimizado para o máximo
atuação. É principalmente compatível com o padrão de ponto flutuante IEEE. Contudo,
para conformidade total, é necessária assistência de software. Esta opção gera código
código totalmente compatível com IEEE exceto que o inexata-bandeira não é mantido (veja abaixo).
Se esta opção estiver ativada, a macro de pré-processador "_IEEE_FP" é definida durante
compilação. O código resultante é menos eficiente, mas é capaz de suportar corretamente
números desnormalizados e valores IEEE excepcionais, como não-um-número e mais / menos
infinidade. Outros compiladores Alpha chamam esta opção -ieee_with_no_inexact.

-mieee-com-inexato
Isto é como -meee exceto que o código gerado também mantém o IEEE inexata-bandeira.
Ativar esta opção faz com que o código gerado implemente IEEE totalmente compatível
matemática. Além de "_IEEE_FP", "_IEEE_FP_EXACT" é definido como uma macro de pré-processador.
Em algumas implementações Alpha, o código resultante pode ser executado significativamente mais lento do que
o código gerado por padrão. Uma vez que há muito pouco código que depende do
inexata-bandeira, você normalmente não deve especificar esta opção. Outra chamada de compiladores Alpha
esta opção -ieee_with_inexact.

-mfp-trap-mode =modo de armadilha
Esta opção controla quais armadilhas relacionadas a ponto flutuante são habilitadas. Outro Alpha
compiladores chamam esta opção -fptm modo de armadilha. O modo de armadilha pode ser definido para um de quatro
valores:

n Esta é a configuração padrão (normal). As únicas armadilhas habilitadas são as
aqueles que não podem ser desabilitados no software (por exemplo, divisão por armadilha zero).

u Além das armadilhas habilitadas por n, as armadilhas de underflow também estão habilitadas.

su Gostar u, mas as instruções são marcadas como seguras para a conclusão do software (consulte
Manual de arquitetura Alpha para detalhes).

em Gostar su, mas armadilhas inexatas também estão habilitadas.

-mfp-rounding-mode =modo de arredondamento
Seleciona o modo de arredondamento IEEE. Outros compiladores Alpha chamam esta opção -fprm
modo de arredondamento. o modo de arredondamento pode ser um dos seguintes:

n Modo de arredondamento IEEE normal. Os números de vírgula flutuante são arredondados para o mais próximo
número da máquina ou para o número da máquina par em caso de empate.

m Arredonde para menos infinito.

c Modo de arredondamento cortado. Os números de vírgula flutuante são arredondados para zero.

d Modo de arredondamento dinâmico. Um campo no registro de controle de ponto flutuante (fpcr, Ver
Manual de referência da arquitetura Alpha) controla o modo de arredondamento em vigor. O C
A biblioteca inicializa este registro para arredondamento para mais infinito. Assim,
a menos que seu programa modifique o fpcr, d corresponde a arredondar para mais
infinidade.

-mtrap-precision =precisão de armadilha
Na arquitetura Alpha, as armadilhas de ponto flutuante são imprecisas. Isso significa sem
assistência de software é impossível recuperar de uma armadilha flutuante e programa
a execução normalmente precisa ser encerrada. GCC pode gerar código que pode ajudar
manipuladores de armadilhas do sistema operacional para determinar a localização exata que causou um
armadilha de ponto flutuante. Dependendo dos requisitos de um aplicativo, diferentes
níveis de precisão podem ser selecionados:

p Precisão do programa. Esta opção é o padrão e significa que um manipulador de trap só pode
identificar qual programa causou uma exceção de ponto flutuante.

f Precisão da função. O manipulador de trap pode determinar a função que causou um
exceção de ponto flutuante.

i Precisão da instrução. O manipulador de trap pode determinar a instrução exata que
causou uma exceção de ponto flutuante.

Outros compiladores Alpha fornecem as opções equivalentes chamadas -scope_safe e assim
-resumption_safe.

-mieee-conformant
Esta opção marca o código gerado como compatível com IEEE. Você não deve usar esta opção
a menos que você também especifique -mtrap-precision = i e também -mfp-trap-mode = su or
-mfp-trap-mode = sui. Seu único efeito é emitir a linha .eflag 48 na função
prólogo do arquivo de montagem gerado.

-mbuild-constantes
Normalmente o GCC examina uma constante inteira de 32 ou 64 bits para ver se pode construí-la
de constantes menores em duas ou três instruções. Se não puder, ele produz o
constante como um literal e gera código para carregá-lo do segmento de dados em tempo de execução.

Use esta opção para exigir que o GCC construa todos os constantes inteiras usando código, mesmo se
leva mais instruções (o máximo é seis).

Normalmente, você usa esta opção para construir um carregador dinâmico de biblioteca compartilhada. Em si um
biblioteca compartilhada, ela deve se realocar na memória antes de encontrar as variáveis ​​e
constantes em seu próprio segmento de dados.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-mmax
-mno-max
Indique se o GCC deve gerar código para usar BWX, CIX, FIX e MAX opcionais
conjuntos de instruções. O padrão é usar os conjuntos de instruções suportados pela CPU
tipo especificado via -mcpu = opção ou da CPU em que o GCC foi construído se nenhuma for
Especificadas.

-mfloat-vax
-mfloat-ieee
Gere código que usa (não usa) VAX F e G aritmética de ponto flutuante em vez disso
de precisão simples e dupla IEEE.

-mexplicit-relocs
-mno-explicit-relocs
Os montadores Alpha mais antigos não forneciam nenhuma maneira de gerar realocações de símbolo, exceto por meio de
macros assembler. O uso dessas macros não permite um planejamento de instrução ideal.
GNU binutils a partir da versão 2.12 suporta uma nova sintaxe que permite ao compilador
marque explicitamente quais realocações devem ser aplicadas a quais instruções. Esta opção é
principalmente útil para depuração, já que o GCC detecta os recursos do montador quando ele
é construído e define o padrão de acordo.

-msmall-data
-mlarge-data
Quando -mexplicit-relocs está em vigor, os dados estáticos são acessados ​​via relativo a gp
deslocalizações. Quando -msmall-data é usado, objetos de 8 bytes ou menores são colocados em
a pequeno dados, área (as seções ".sdata" e ".sbss") e são acessados ​​via 16 bits
relocações fora do registro $ gp. Isso limita o tamanho da pequena área de dados para
64 KB, mas permite que as variáveis ​​sejam acessadas diretamente por meio de uma única instrução.

O padrão é -mlarge-data. Com esta opção, a área de dados é limitada logo abaixo
2 GB. Programas que requerem mais de 2 GB de dados devem usar "malloc" ou "mmap" para
alocar os dados no heap em vez de no segmento de dados do programa.

Ao gerar código para bibliotecas compartilhadas, -fpic implica -msmall-data e assim -fPIC
implica -mlarge-data.

-msmall-text
-texto-grande
Quando -msmall-text é usado, o compilador assume que o código de todo o programa
(ou biblioteca compartilhada) cabe em 4 MB e, portanto, é acessível com uma instrução de desvio.
Quando -msmall-data é usado, o compilador pode assumir que todos os símbolos locais compartilham o
mesmo valor de $ gp, e assim reduzir o número de instruções necessárias para uma função
ligue de 4 para 1.

O padrão é -texto-grande.

-mcpu =cpu_type
Defina o conjunto de instruções e os parâmetros de programação de instruções para o tipo de máquina
cpu_type. Você pode especificar o EV nome do estilo ou o número do chip correspondente.
GCC suporta parâmetros de programação para a família de processadores EV4, EV5 e EV6 e
escolhe os valores padrão para o conjunto de instruções do processador que você especificar. Se
você não especifica um tipo de processador, o padrão do GCC é o processador no qual o
compilador foi construído.

Valores suportados para cpu_type são

ev4
ev45
21064
Programa como um EV4 e não tem extensões de conjunto de instruções.

ev5
21164
Programa como um EV5 e não tem extensões de conjunto de instruções.

ev56
21164a
Programa como EV5 e oferece suporte à extensão BWX.

pca56
21164pc
21164PC
Programa como um EV5 e oferece suporte às extensões BWX e MAX.

ev6
21264
Programa como EV6 e oferece suporte às extensões BWX, FIX e MAX.

ev67
21264a
Programa como EV6 e oferece suporte às extensões BWX, CIX, FIX e MAX.

Conjuntos de ferramentas nativos também suportam o valor nativo, que seleciona a melhor arquitetura
opção para o processador host. -mcpu = nativo não tem efeito se o GCC não reconhecer
o processador.

-mtune =cpu_type
Defina apenas os parâmetros de agendamento de instrução para o tipo de máquina cpu_type. o
conjunto de instruções não é alterado.

Conjuntos de ferramentas nativos também suportam o valor nativo, que seleciona a melhor arquitetura
opção para o processador host. -mtune = nativo não tem efeito se o GCC não reconhecer
o processador.

-mmemory-latency =tempo
Define a latência que o planejador deve assumir para referências de memória típicas, conforme visto por
a aplicação. Este número é altamente dependente dos padrões de acesso à memória usados
pelo aplicativo e pelo tamanho do cache externo na máquina.

Opções válidas para tempo são

número
Um número decimal que representa os ciclos do clock.

L1
L2
L3
principal
O compilador contém estimativas do número de ciclos de clock para EV4 e "típico"
Hardware EV5 para os caches de Nível 1, 2 e 3 (também chamado Dcache, Scache e
Bcache), bem como para a memória principal. Observe que L3 é válido apenas para EV5.

FR30 Opções

Essas opções são definidas especificamente para a porta FR30.

-msmall-model
Use o modelo de espaço de endereço pequeno. Isso pode produzir um código menor, mas pressupõe
que todos os valores simbólicos e endereços se encaixam em um intervalo de 20 bits.

-mno-lsim
Suponha que o suporte de tempo de execução foi fornecido e, portanto, não há necessidade de incluir o
biblioteca de simulador (libsim.a) na linha de comando do vinculador.

FRV Opções

-mgpr-32
Use apenas os primeiros 32 registradores de uso geral.

-mgpr-64
Use todos os 64 registradores de uso geral.

-mfpr-32
Use apenas os primeiros 32 registradores de ponto flutuante.

-mfpr-64
Use todos os 64 registradores de ponto flutuante.

-mhard-float
Use as instruções de hardware para operações de ponto flutuante.

-msoft-float
Use rotinas de biblioteca para operações de ponto flutuante.

-malloc-cc
Alocar registros de código de condição dinamicamente.

-mfixed-cc
Não tente alocar dinamicamente registros de código de condição, use apenas "icc0" e
"fcc0".

-mdword
Altere ABI para usar insns de palavra dupla.

-mno-dword
Não use instruções com palavras duplas.

-duplo
Use instruções duplas de ponto flutuante.

-mno-duplo
Não use instruções duplas de ponto flutuante.

-mídia
Use as instruções de mídia.

-mno-media
Não use as instruções da mídia.

-mmulad
Use as instruções de multiplicação e adição / subtração.

-mno-mulad
Não use as instruções de multiplicação e adição / subtração.

-mfdpic
Selecione o FDPIC ABI, que usa descritores de função para representar ponteiros para
funções. Sem quaisquer opções relacionadas a PIC / PIE, isso implica -fPIE. Com -fpic or
-fpie, ele assume que as entradas GOT e pequenos dados estão dentro de um intervalo de 12 bits do GOT
endereço de base; com -fPIC or -fPIE, Os deslocamentos GOT são calculados com 32 bits. Com um
elfo-bfin alvo, esta opção implica -msim.

-minline-plt
Habilite o inlining de entradas PLT em chamadas de função para funções que não são conhecidas por
vincular localmente. Não tem efeito sem -mfdpic. É habilitado por padrão se
otimizar para velocidade e compilar para bibliotecas compartilhadas (ou seja, -fPIC or -fpic), ou
quando uma opção de otimização como -O3 ou acima está presente na linha de comando.

-mTLS
Suponha um grande segmento TLS ao gerar código de segmento local.

-mtls
Não presuma um grande segmento TLS ao gerar código de segmento local.

-mgprel-ro
Habilite o uso de realocações "GPREL" no FDPIC ABI para dados que são conhecidos por estarem em
seções somente leitura. É habilitado por padrão, exceto para -fpic or -fpie: Apesar de
pode ajudar a tornar a tabela de deslocamento global menor, ele troca 1 instrução por 4. Com
-fPIC or -fPIE, ele troca 3 instruções por 4, uma das quais pode ser compartilhada por vários
símbolos, e evita a necessidade de uma entrada GOT para o símbolo referenciado, por isso é
é mais provável que seja uma vitória. Se não é, -mno-gprel-ro pode ser usado para desativá-lo.

-multilib-library-pic
Link com as bibliotecas de imagens (biblioteca, não FD). Está implícito por -mlibrary-pic, também
como por -fPIC e assim -fpic sem -mfdpic. Você nunca deve ter que usá-lo explicitamente.

-mlinked-fp
Siga o requisito EABI de sempre criar um ponteiro de quadro sempre que um quadro de pilha
é alocado. Esta opção é habilitada por padrão e pode ser desabilitada com
-mno-linked-fp.

-muito chamadas
Use o endereçamento indireto para chamar funções fora da unidade de compilação atual. Esse
permite que as funções sejam colocadas em qualquer lugar dentro do espaço de endereço de 32 bits.

-rótulos malignos
Tente alinhar os rótulos a um limite de 8 bytes inserindo NOPs no pacote anterior.
Esta opção só tem efeito quando a embalagem VLIW está ativada. Não cria novos
pacotes; ele simplesmente adiciona NOPs aos existentes.

-mlibrary-pic
Gere o código EABI independente da posição.

-macc-4
Use apenas os primeiros quatro registros do acumulador de mídia.

-macc-8
Use todos os oito registradores de acumulador de mídia.

-mpack
Embale as instruções VLIW.

-mno-pack
Não embale as instruções VLIW.

-mno-eflags
Não marque as chaves ABI em e_flags.

-mcond-move
Habilite o uso de instruções de movimentação condicional (padrão).

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mno-cond-move
Desative o uso de instruções de movimentação condicional.

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mscc
Habilite o uso de instruções de conjunto condicional (padrão).

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mno-scc
Desative o uso de instruções de conjunto condicional.

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mcond-exec
Habilite o uso de execução condicional (padrão).

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mno-cond-exec
Desative o uso de execução condicional.

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mvliw-branch
Execute uma passagem para empacotar ramificações nas instruções VLIW (padrão).

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mno-vliw-branch
Não execute uma passagem para empacotar ramificações nas instruções VLIW.

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-multi-cond-exec
Habilite a otimização de "&&" e "||" em execução condicional (padrão).

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mno-multi-cond-exec
Desative a otimização de "&&" e "||" em execução condicional.

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mnested-cond-exec
Habilite otimizações de execução condicional aninhadas (padrão).

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-mno-nested-cond-exec
Desative as otimizações de execução condicional aninhadas.

Esta opção é principalmente para depurar o compilador e provavelmente será removida em um
versão futura.

-moptimize-membar
Essa opção remove instruções "membar" redundantes do código gerado pelo compilador.
Está habilitado por padrão.

-mno-optimize-membar
Esta opção desativa a remoção automática de instruções "membar" redundantes do
código gerado.

-mtomcat-stats
Faça com que o gás imprima as estatísticas do Tomcat.

-mcpu =cpu
Selecione o tipo de processador para o qual deseja gerar o código. Os valores possíveis são frv, fr550,
tomcat, fr500, fr450, fr405, fr400, fr300 e assim simples.

GNU / Linux Opções

Este -m as opções são definidas para destinos GNU / Linux:

-mglibc
Use a biblioteca GNU C. Este é o padrão, exceto em * - * - linux- * uclibc * e assim
* - * - linux- * android * alvos.

-muclibc
Use a biblioteca uClibc C. Este é o padrão em * - * - linux- * uclibc * alvos.

-mbiônico
Use a biblioteca Bionic C. Este é o padrão em * - * - linux- * android * alvos.

-mandróide
Compile o código compatível com a plataforma Android. Este é o padrão em
* - * - linux- * android * alvos.

Ao compilar, esta opção habilita -mbiônico, -fPIC, -fno-exceções e assim -fno-rtti by
predefinição. Ao vincular, esta opção faz com que o driver GCC passe por opções específicas do Android
para o vinculador. Finalmente, esta opção faz com que a macro de pré-processador "__ANDROID__" seja
definiram.

-tno-android-cc
Desativar efeitos de compilação de -mandróide, ou seja, não habilite -mbiônico, -fPIC,
-fno-exceções e assim -fno-rtti por padrão.

-tno-android-ld
Desativar efeitos de vinculação de -mandróide, ou seja, passar opções de vinculação do Linux padrão para o
vinculador.

H8 / 300 Opções

Este -m as opções são definidas para as implementações H8 / 300:

-mrelax
Encurte algumas referências de endereço no momento do link, quando possível; usa a opção de vinculador
-relaxar.

-mh Gere código para o H8 / 300H.

-em Gere código para o H8S.

-mn Gere código para o H8S e H8 / 300H no modo normal. Este interruptor deve ser usado
quer com -mh or -em.

-ms2600
Gere o código para o H8S / 2600. Esta opção deve ser usada com -em.

-mexr
Registros estendidos são armazenados na pilha antes da execução da função com o monitor
atributo. A opção padrão é -mexr. Esta opção é válida apenas para destinos H8S.

-mno-exr
Registros estendidos não são armazenados na pilha antes da execução da função com o monitor
atributo. A opção padrão é -mno-exr. Esta opção é válida apenas para destinos H8S.

-hortelã32
Torne os dados "int" de 32 bits por padrão.

-maligno-300
No H8 / 300H e no H8S, use as mesmas regras de alinhamento do H8 / 300. O padrão
para o H8 / 300H e o H8S é alinhar longos e flutuantes em limites de 4 bytes.
-maligno-300 faz com que eles sejam alinhados em limites de 2 bytes. Esta opção não tem efeito
no H8 / 300.

HPPA Opções

Este -m as opções são definidas para a família de computadores HPPA:

-march =tipo de arquitetura
Gerar código para a arquitetura especificada. As escolhas para tipo de arquitetura são
1.0 para PA 1.0, 1.1 para PA 1.1, e 2.0 para processadores PA 2.0. Referir-se
/usr/lib/sched.models em um sistema HP-UX para determinar a opção de arquitetura adequada
para sua máquina. O código compilado para arquiteturas com números inferiores é executado em arquiteturas superiores
arquiteturas numeradas, mas não o contrário.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Sinônimos para -march = 1.0, -march = 1.1e -march = 2.0 respectivamente.

-mjump-in-delay
Esta opção é ignorada e fornecida apenas para fins de compatibilidade.

-mdisable-fpregs
Impedir que os registros de ponto flutuante sejam usados ​​de qualquer maneira. Isso é necessário para
compilar kernels que realizam alternância lenta de contexto de registradores de ponto flutuante. Se
você usa esta opção e tenta realizar operações de ponto flutuante, o compilador
aborta.

-mdisable-indexing
Evita que o compilador use modos de endereço de indexação. Isso evita um pouco
problemas obscuros ao compilar o código gerado pelo MIG no MACH.

-mno-space-regs
Gere um código que presuma que o destino não possui registradores de espaço. Isso permite que o GCC
gere chamadas indiretas mais rápidas e use modos de endereço de índice fora de escala.

Esse código é adequado para sistemas PA e kernels de nível 0.

-mrápido-indireto-chamadas
Gere código que assume que as chamadas nunca cruzam os limites do espaço. Isso permite que o GCC
emitir código que executa chamadas indiretas mais rápidas.

Esta opção não funciona na presença de bibliotecas compartilhadas ou funções aninhadas.

-mfixed-range =intervalo de registro
Gere o código tratando o intervalo de registro fornecido como registros fixos. Um registro fixo
é aquele que o alocador de registro não pode usar. Istoéútil ao compilar o kernel
código. Um intervalo de registro é especificado como dois registros separados por um traço. Múltiplo
os intervalos de registro podem ser especificados separados por uma vírgula.

-mlong-load-store
Gerar carga de 3 instruções e armazenar sequências conforme às vezes exigido pelo HP-UX 10
vinculador. Isso é equivalente ao +k opção para os compiladores HP.

-mportable-runtime
Use as convenções de chamadas portáteis propostas pela HP para sistemas ELF.

-mgas
Permitir o uso de diretivas de montador que apenas GAS entende.

-mschedule =tipo cpu
Código de programação de acordo com as restrições para o tipo de máquina tipo cpu. As escolhas
por tipo cpu são 700 7100, 7100LC, 7200, 7300 e assim 8000. Referir-se
/usr/lib/sched.models em um sistema HP-UX para determinar a opção de agendamento adequada para
sua máquina. A programação padrão é 8000.

-mlinker-opt
Habilite a passagem de otimização no vinculador HP-UX. Observe que isso torna a depuração simbólica
impossível. Ele também aciona um bug nos linkers HP-UX 8 e HP-UX 9 nos quais eles
dar mensagens de erro falsas ao vincular alguns programas.

-msoft-float
Gerar saída contendo chamadas de biblioteca para ponto flutuante. Atenção: o requisito
as bibliotecas não estão disponíveis para todos os destinos HPPA. Normalmente as instalações do
o compilador C usual da máquina é usado, mas isso não pode ser feito diretamente em
compilação. Você deve tomar suas próprias providências para fornecer uma biblioteca adequada
funções para compilação cruzada.

-msoft-float altera a convenção de chamada no arquivo de saída; portanto, é apenas
útil se você compilar todos os de um programa com esta opção. Em particular, você precisa
compilar libgcc.a, a biblioteca que vem com o GCC, com -msoft-float em ordem para isso
trabalhar.

-msio
Gere a predefinição, "_SIO", para o servidor IO. O padrão é -mwsio. Isso gera
as predefinições, "__hp9000s700", "__hp9000s700__" e "_WSIO", para estação de trabalho IO.
Essas opções estão disponíveis em HP-UX e HI-UX.

-mgnu-ld
Use opções específicas para GNU ld. Isso passa -compartilhado para ld ao construir um
biblioteca. É o padrão quando o GCC é configurado, explícita ou implicitamente, com o
Vinculador GNU. Esta opção não afeta quais ld é chamado; só muda o que
parâmetros são passados ​​para aquele ld. o ld que é chamado é determinado pelo
--com-ld opção de configuração, caminho de pesquisa do programa GCC e, finalmente, pelo usuário PATH.
O vinculador usado pelo GCC pode ser impresso usando qual `gcc -print-prog-name = ld`. Este
opção está disponível apenas no GCC HP-UX de 64 bits, ou seja, configurado com
hppa * 64 * - * - hpux *.

-mhp-ld
Use opções específicas para HP ld. Isso passa -b para ld ao construir uma biblioteca compartilhada
e passa + Aceitar Tipo de incompatibilidade para ld em todos os links. É o padrão quando o GCC é
configurado, explícita ou implicitamente, com o linker HP. Esta opção não afeta
qual ld é chamado; só muda quais parâmetros são passados ​​para aquele ld. o ld
que é chamado é determinado pelo --com-ld opção de configuração, pesquisa de programa do GCC
caminho e, finalmente, pelo usuário PATH. O vinculador usado pelo GCC pode ser impresso usando
qual `gcc -print-prog-name = ld`. Esta opção está disponível apenas no HP-UX de 64 bits
GCC, ou seja, configurado com hppa * 64 * - * - hpux *.

-muito chamadas
Gere código que usa longas sequências de chamadas. Isso garante que uma chamada esteja sempre disponível
para alcançar os stubs gerados pelo vinculador. O padrão é gerar chamadas longas apenas quando o
distância do local da chamada ao início da função ou unidade de tradução, como
o caso pode ser, excede um limite predefinido definido pelo tipo de ramificação que está sendo usado. o
limites para chamadas normais são 7,600,000 e 240,000 bytes, respectivamente para o PA 2.0
e arquiteturas PA 1.X. Sibcalls são sempre limitados a 240,000 bytes.

As distâncias são medidas desde o início das funções ao usar o
-funções-seções opção, ou ao usar a -mgas e assim -mno-portable-runtime opções
juntos no HP-UX com o vinculador SOM.

Normalmente não é desejável usar esta opção, pois ela degrada o desempenho. Contudo,
pode ser útil em grandes aplicações, particularmente quando a ligação parcial é usada para
construir o aplicativo.

Os tipos de chamadas longas usados ​​dependem dos recursos do montador e do vinculador,
e o tipo de código que está sendo gerado. O impacto nos sistemas que suportam por muito tempo
chamadas absolutas e chamadas de diferença de símbolo de imagem longa ou relativas ao PC devem ser
relativamente pequeno. No entanto, uma chamada indireta é usada em sistemas ELF de 32 bits no código de imagem
e é bastante longo.

-munix =unix-std
Gere predefinições do compilador e selecione um arquivo de início para o padrão UNIX especificado.
As escolhas para unix-std são 93, 95 e assim 98. 93 é compatível com todas as versões do HP-UX.
95 está disponível no HP-UX 10.10 e posterior. 98 está disponível no HP-UX 11.11 e posterior.
Os valores padrão são 93 para HP-UX 10.00, 95 para HP-UX 10.10 até 11.00, e 98
para HP-UX 11.11 e posterior.

-munix = 93 fornece as mesmas predefinições do GCC 3.3 e 3.4. -munix = 95 fornece
predefinições adicionais para "XOPEN_UNIX" e "_XOPEN_SOURCE_EXTENDED", e o arquivo de início
unix95.o. -munix = 98 fornece predefinições adicionais para "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" e "_INCLUDE_XOPEN_SOURCE_500",
e o startfile unix98.o.

É importante notar que esta opção muda as interfaces para várias bibliotecas
rotinas. Também afeta o comportamento operacional da biblioteca C. Assim, extremo
é necessário cuidado ao usar esta opção.

O código da biblioteca que se destina a operar com mais de um padrão UNIX deve ser testado,
defina e restaure a variável "__xpg4_extended_mask" conforme apropriado. A maioria dos softwares GNU
não oferece esse recurso.

-nolibdld
Suprime a geração de opções de link para pesquisar libdld.sl quando o -estático opção
especificado no HP-UX 10 e posterior.

-estático
A implementação HP-UX de setlocale em libc depende de libdld.sl. Lá
não é uma versão de arquivo de libdld.sl. Assim, quando o -estático opção é especificada,
opções especiais de link são necessárias para resolver essa dependência.

No HP-UX 10 e posterior, o driver GCC adiciona as opções necessárias para vincular
libdld.sl quando o -estático opção é especificada. Isso faz com que o binário resultante para
seja dinâmico. Na porta de 64 bits, os vinculadores geram binários dinâmicos por padrão em
qualquer caso. o -nolibdld opção pode ser usada para evitar que o driver GCC adicione
essas opções de link.

-tópicos
Adicione suporte para multithreading com o dce fio biblioteca em HP-UX. Esta opção
define sinalizadores para o pré-processador e o vinculador.

IA-64 Opções

Estes são o -m opções definidas para a arquitetura Intel IA-64.

-mbi-endian
Gere código para um alvo big-endian. Este é o padrão para HP-UX.

-mlittle-endian
Gere código para um target little-endian. Este é o padrão para AIX5 e GNU / Linux.

-mgnu-as
-mno-gnu-as
Gere (ou não) código para o assembler GNU. Este é o padrão.

-mgnu-ld
-mno-gnu-ld
Gere (ou não) código para o vinculador GNU. Este é o padrão.

-mno-pic
Gere código que não usa um registro de ponteiro global. O resultado não é posição
código independente e viola o IA-64 ABI.

-mvolatile-asm-stop
-mno-volatile-asm-stop
Gere (ou não) um bit de parada imediatamente antes e depois das instruções asm voláteis.

-mregister-names
-mno-register-names
Gerar (ou não) in, loce Fora nomes de registro para os registros empilhados. Esse
pode tornar a saída do assembler mais legível.

-mno-sdata
-msdata
Desabilite (ou habilite) otimizações que usam a pequena seção de dados. Isso pode ser útil
para contornar bugs do otimizador.

-mconstant-gp
Gere código que usa um único valor de ponteiro global constante. Isso é útil quando
compilar o código do kernel.

-mauto-pic
Gere código que seja auto-realocável. Isso implica -mconstant-gp. Isso é útil
ao compilar o código do firmware.

-minline-float-divide-min-latency
Gerar código para divisões em linha de valores de ponto flutuante usando a latência mínima
algoritmo.

-minline-float-divide-max-throughput
Gerar código para divisões em linha de valores de ponto flutuante usando a taxa de transferência máxima
algoritmo.

-mno-inline-float-divide
Não gere código embutido para divisões de valores de ponto flutuante.

-minline-int-divide-min-latency
Gerar código para divisões em linha de valores inteiros usando a latência mínima
algoritmo.

-minline-int-divide-max-throughput
Gerar código para divisões em linha de valores inteiros usando a taxa de transferência máxima
algoritmo.

-mno-inline-int-divide
Não gere código embutido para divisões de valores inteiros.

-minline-sqrt-min-latency
Gere código para raízes quadradas embutidas usando o algoritmo de latência mínima.

-minline-sqrt-max-throughput
Gere código para raízes quadradas em linha usando o algoritmo de taxa de transferência máxima.

-mno-inline-sqrt
Não gere código embutido para "sqrt".

-mfused-madd
-mno-fused-madd
Faça (não) gere o código que usa a multiplicação / adição fundida ou multiplica / subtrai
instruções. O padrão é usar essas instruções.

-mno-anão2-asm
-mdwarf2-asm
Não gere (ou gere) código assembler para as informações de depuração do número de linha DWARF 2.
Isso pode ser útil quando não estiver usando o GNU assembler.

-poucos-stop-bits
-mno-early-stop-bits
Permitir que bits de parada sejam colocados antes do imediatamente anterior à instrução que
acionou o bit de parada. Isso pode melhorar o agendamento de instruções, mas nem sempre
faça isso.

-mfixed-range =intervalo de registro
Gere o código tratando o intervalo de registro fornecido como registros fixos. Um registro fixo
é aquele que o alocador de registro não pode usar. Istoéútil ao compilar o kernel
código. Um intervalo de registro é especificado como dois registros separados por um traço. Múltiplo
os intervalos de registro podem ser especificados separados por uma vírgula.

-mtls-size =tamanho tls
Especifique o tamanho do bit dos deslocamentos TLS imediatos. Os valores válidos são 14, 22 e 64.

-mtune =tipo cpu
Ajuste o agendamento da instrução para uma CPU particular, os valores válidos são itânio,
itânio1, cedido, itânio2e mckinley.

-milp32
-mlp64
Gere código para um ambiente de 32 ou 64 bits. O ambiente de 32 bits define int,
longo e ponteiro para 32 bits. O ambiente de 64 bits define int para 32 bits e long e
ponteiro para 64 bits. Esses são sinalizadores específicos do HP-UX.

-mno-sched-br-data-spec
-msched-br-data-spec
(Des / En) capaz de agendamento especulativo de dados antes de recarregar. Isso resulta na geração de
Instruções "ld.a" e as instruções de verificação correspondentes ("ld.c" / "chk.a"). o
o padrão é 'desativar'.

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En / Des) capaz de agendamento especulativo de dados após a recarga. Isso resulta na geração de
Instruções "ld.a" e as instruções de verificação correspondentes ("ld.c" / "chk.a"). o
o padrão é 'habilitar'.

-mno-sched-control-spec
-msched-control-spec
(Des / En) capaz de controlar a programação especulativa. Este recurso está disponível apenas durante
programação de região (ou seja, antes de recarregar). Isso resulta na geração de "ld.s"
instruções e as instruções de verificação correspondentes "chk.s". O padrão é
'desativar'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En / Des) capaz de agendamento especulativo das instruções que são dependentes dos dados
cargas especulativas antes de recarregar. Isso é eficaz apenas com -msched-br-data-spec
ativado. O padrão é 'habilitar'.

-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En / Des) capaz de agendamento especulativo das instruções que são dependentes dos dados
cargas especulativas após a recarga. Isso é eficaz apenas com -msched-ar-data-spec
ativado. O padrão é 'habilitar'.

-msched-in-control-spec
-mno-sched-in-control-spec
(En / Des) capaz de agendamento especulativo das instruções que são dependentes do
controlar cargas especulativas. Isso é eficaz apenas com -msched-control-spec ativado.
O padrão é 'habilitar'.

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Se ativado, as instruções especulativas de dados são escolhidas para agendamento apenas se não houver
outras opções no momento. Isso torna o uso da especulação de dados muito mais
conservador. O padrão é 'desativar'.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Se ativado, as instruções especulativas de controle são escolhidas para programação apenas se houver
nenhuma outra escolha no momento. Isso torna o uso da especulação de controle muito
mais conservador. O padrão é 'desativar'.

-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
Se ativado, as dependências especulativas são consideradas durante o cálculo do
prioridades de instruções. Isso torna o uso da especulação um pouco mais
conservador. O padrão é 'desativar'.

-msched-spec-ldc
Use uma verificação de especulação de dados simples. Essa opção está ativada por padrão.

-msched-control-spec-ldc
Use uma verificação simples para especulação de controle. Essa opção está ativada por padrão.

-msched-stop-bits-after-ever-cycle
Coloque um bit de parada após cada ciclo ao programar. Essa opção está ativada por padrão.

-msched-fp-mem-deps-zero-cost
Suponha que carregamentos e armazenamentos de ponto flutuante provavelmente não causem um conflito quando
colocados no mesmo grupo de instrução. Esta opção está desativada por padrão.

-msel-sched-dont-check-control-spec
Gere verificações para especulação de controle em programação seletiva. Esta bandeira é
desativado por padrão.

-msched-max-memory-insns =max-insns
Limite no número de insns de memória por grupo de instrução, dando prioridade mais baixa para
memória subseqüente insns tentando agendar no mesmo grupo de instrução.
Freqüentemente útil para evitar conflitos de banco de cache. O valor padrão é 1.

-msched-max-memory-insns-hard-limit
Faz o limite especificado por msched-max-memory-insns um limite rígido, proibindo mais
do que aquele número em um grupo de instrução. Caso contrário, o limite é "suave", o que significa
que as operações sem memória são preferidas quando o limite é atingido, mas a memória
as operações ainda podem ser agendadas.

LM32 Opções

Este -m as opções são definidas para a arquitetura LatticeMico32:

-barrel-shift-habilitado
Habilite as instruções de deslocamento de barril.

-mdivide habilitado
Habilite as instruções de divisão e módulo.

-multiply ativado
Ative as instruções de multiplicação.

-msign-extend-habilitado
Habilite as instruções de extensão de sinal.

-muser ativado
Habilite as instruções definidas pelo usuário.

M32C Opções

-mcpu =nome
Selecione a CPU para a qual o código é gerado. nome pode ser um de r8c para o R8C / Tiny
série, m16c para a série M16C (até / 60), m32cm para a série M16C / 80, ou m32c
para a série M32C / 80.

-msim
Especifica que o programa será executado no simulador. Isso causa uma alternativa
biblioteca de tempo de execução a ser vinculada na qual suporta, por exemplo, E / S de arquivo. Você não deve
use esta opção ao gerar programas que serão executados em hardware real; você deve
fornecer sua própria biblioteca de tempo de execução para quaisquer funções de E / S necessárias.

-memregs =número
Especifica o número de pseudo-registros baseados em memória que o GCC usa durante a geração de código.
Esses pseudo-registradores são usados ​​como registradores reais, então há uma compensação entre
A capacidade do GCC de ajustar o código aos registros disponíveis e a penalidade de desempenho de
usando memória em vez de registradores. Observe que todos os módulos em um programa devem ser
compilado com o mesmo valor para esta opção. Por causa disso, você não deve usar este
opção com as bibliotecas de tempo de execução padrão do GCC.

M32R / D Opções

Este -m opções são definidas para arquiteturas Renesas M32R / D:

-m32r2
Gere código para o M32R / 2.

-m32rx
Gere código para o M32R / X.

-m32r
Gere código para o M32R. Este é o padrão.

-mmodel = pequeno
Suponha que todos os objetos vivam nos 16 MB inferiores de memória (de modo que seus endereços possam ser
carregado com a instrução "ld24"), e assume que todas as sub-rotinas são alcançáveis ​​com o
instrução "bl". Este é o padrão.

A endereçabilidade de um determinado objeto pode ser definida com o atributo "modelo".

-mmodel = medium
Suponha que os objetos podem estar em qualquer lugar no espaço de endereço de 32 bits (o compilador gera
instruções "seth / add3" para carregar seus endereços), e assumir que todas as sub-rotinas são
acessível com a instrução "bl".

-mmodel = grande
Suponha que os objetos podem estar em qualquer lugar no espaço de endereço de 32 bits (o compilador gera
instruções "seth / add3" para carregar seus endereços), e assumir que as sub-rotinas podem não ser
alcançável com a instrução "bl" (o compilador gera o muito mais lento
sequência de instruções "seth / add3 / jl").

-msdata = nenhum
Desative o uso da pequena área de dados. As variáveis ​​são colocadas em um de ".data", ".bss" ou
".rodata" (a menos que o atributo "section" tenha sido especificado). Este é o padrão.

A pequena área de dados consiste nas seções ".sdata" e ".sbss". Objetos podem ser
colocado explicitamente na pequena área de dados com o atributo "seção" usando um destes
.

-msdata = sdata
Coloque pequenos dados globais e estáticos na pequena área de dados, mas não gere dados especiais
código para referenciá-los.

-msdata = use
Coloque pequenos dados globais e estáticos na pequena área de dados e gere
instruções para referenciá-los.

-G Números
Coloque objetos globais e estáticos menores ou iguais a Números bytes em pequenos dados ou
Seções BSS em vez dos dados normais ou seções BSS. O valor padrão de Números is
8. A -msdata opção deve ser definida para um de sdata or usar para esta opção ter qualquer
efeito.

Todos os módulos devem ser compilados com o mesmo -G Números valor. Compilando com diferentes
valores de Números pode ou não funcionar; se não, o linker dá um erro
mensagem --- código incorreto não é gerado.

-mdebug
Faz com que o código específico do M32R no compilador exiba algumas estatísticas que podem ajudar
em programas de depuração.

-loops malignos
Alinhe todos os loops a um limite de 32 bytes.

-mno-align-loops
Não imponha um alinhamento de 32 bytes para loops. Este é o padrão.

- taxa de emissão =número
Questão número instruções por ciclo. número só pode ser 1 ou 2.

-mbranch-cost =número
número só pode ser 1 ou 2. Se for 1, os ramos são preferidos aos condicionais
código, se for 2, o oposto se aplica.

-mflush-trap =número
Especifica o número do trap a ser usado para liberar o cache. O padrão é 12. Válido
os números estão entre 0 e 15, inclusive.

-mno-flush-trap
Especifica que o cache não pode ser liberado usando um trap.

-mflush-func =nome
Especifica o nome da função do sistema operacional a ser chamada para liberar o cache. o
padrão é _flush_cache, mas uma chamada de função só é usada se uma armadilha não estiver disponível.

-mno-flush-func
Indica que não há função do sistema operacional para limpar o cache.

M680x0 Opções

Estes são o -m opções definidas para processadores M680x0 e ColdFire. As configurações padrão
dependem de qual arquitetura foi selecionada quando o compilador foi configurado; os padrões
para as opções mais comuns são fornecidas abaixo.

-march =arco
Gere código para uma arquitetura de conjunto de instruções M680x0 ou ColdFire específica.
Valores permitidos de arco para arquiteturas M680x0 são: 68000, 68010, 68020, 68030,
68040, 68060 e assim CPU32. As arquiteturas ColdFire são selecionadas de acordo com a Freescale
A classificação ISA e os valores permitidos são: iSAA, isaaplus, isab e assim isac.

GCC define uma macro "__mcfarco__" sempre que está gerando código para um ColdFire
alvo. o arco nesta macro é um dos -marchar argumentos dados acima.

Quando usados ​​juntos, -marchar e assim -mtune selecione o código que roda em uma família de semelhantes
processadores, mas que é otimizado para uma microarquitetura específica.

-mcpu =cpu
Gere código para um processador M680x0 ou ColdFire específico. O M680x0 cpus são:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 e assim CPU32. O Fogo Frio cpus
são dados pela tabela abaixo, que também classifica as CPUs em famílias:

Família: -mcpu argumentos
51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
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 Substitui -march =arco if arco é compatível com cpu. Outras combinações de
-mcpu e assim -marchar são rejeitados.

GCC define a macro "__mcf_cpu_CPU" quando o alvo ColdFire cpu é selecionado. Isso também
define "__mcf_family_família", onde o valor de família é dado pela tabela acima.

-mtune =afinação
Ajuste o código para uma microarquitetura específica dentro das restrições definidas por -marchar
e assim -mcpu. As microarquitetura M680x0 são: 68000, 68010, 68020, 68030, 68040,
68060 e assim CPU32. As microarquitetura ColdFire são: cfv1, cfv2, cfv3, cfv4 e assim
cfv4e.

Você também pode usar -mtune = 68020-40 para código que precisa ser executado relativamente bem no 68020,
68030 e 68040 alvos. -mtune = 68020-60 é semelhante, mas inclui 68060 alvos como
Nós vamos. Essas duas opções selecionam as mesmas decisões de ajuste que -m68020-40 e assim -m68020-60
respectivamente.

GCC define as macros "__mcarco" e "__mcarco__" ao ajustar para arquitetura 680x0
arco. Também define "mcarco" a menos que qualquer um -ansi ou um não GNU -std opção é usada.
Se o GCC estiver ajustando para uma variedade de arquiteturas, conforme selecionado por -mtune = 68020-40 or
-mtune = 68020-60, ele define as macros para cada arquitetura no intervalo.

O GCC também define a macro "__muarca__" ao ajustar para microarquitetura ColdFire
uarca, Onde uarca é um dos argumentos dados acima.

-m68000
-mc68000
Gere saída para um 68000. Este é o padrão quando o compilador é configurado para
Sistemas baseados em 68000. É equivalente a -march = 68000.

Use esta opção para microcontroladores com um núcleo 68000 ou EC000, incluindo o 68008,
68302, 68306, 68307, 68322, 68328 e 68356.

-m68010
Gere saída para um 68010. Este é o padrão quando o compilador é configurado para
Sistemas baseados em 68010. É equivalente a -march = 68010.

-m68020
-mc68020
Gere saída para um 68020. Este é o padrão quando o compilador é configurado para
Sistemas baseados em 68020. É equivalente a -march = 68020.

-m68030
Gere saída para um 68030. Este é o padrão quando o compilador é configurado para
Sistemas baseados em 68030. É equivalente a -march = 68030.

-m68040
Gere saída para um 68040. Este é o padrão quando o compilador é configurado para
Sistemas baseados em 68040. É equivalente a -march = 68040.

Esta opção inibe o uso de instruções 68881/68882 que devem ser emuladas por
software no 68040. Use esta opção se o seu 68040 não tiver código para emular
essas instruções.

-m68060
Gere saída para um 68060. Este é o padrão quando o compilador é configurado para
Sistemas baseados em 68060. É equivalente a -march = 68060.

Esta opção inibe o uso das instruções 68020 e 68881/68882 que devem ser
emulado pelo software no 68060. Use esta opção se o seu 68060 não tiver código
para emular essas instruções.

-mcpu32
Gere saída para uma CPU32. Este é o padrão quando o compilador é configurado para
Sistemas baseados em CPU32. É equivalente a -march = cpu32.

Use esta opção para microcontroladores com núcleo CPU32 ou CPU32 +, incluindo o 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 e 68360.

-m5200
Gerar saída para uma CPU ColdFire 520X. Este é o padrão quando o compilador é
configurado para sistemas baseados em 520X. É equivalente a -mcpu = 5206e agora é
preterido em favor dessa opção.

Use esta opção para microcontrolador com um núcleo 5200, incluindo o MCF5202, MCF5203,
MCF5204 e MCF5206.

-m5206e
Gerar saída para uma CPU ColdFire 5206e. A opção agora está obsoleta em favor de
o equivalente -mcpu = 5206e.

-m528x
Gere saída para um membro da família ColdFire 528X. A opção é agora
preterido em favor do equivalente -mcpu = 528x.

-m5307
Gerar saída para uma CPU ColdFire 5307. A opção agora está obsoleta em favor do
equivalente -mcpu = 5307.

-m5407
Gerar saída para uma CPU ColdFire 5407. A opção agora está obsoleta em favor do
equivalente -mcpu = 5407.

-mcfv4e
Gere saída para uma CPU da família ColdFire V4e (por exemplo, 547x / 548x). Isso inclui o uso de
instruções de ponto flutuante de hardware. A opção é equivalente a -mcpu = 547x, e é
agora obsoleto em favor dessa opção.

-m68020-40
Gere saída para um 68040, sem usar nenhuma das novas instruções. Estes resultados
em um código que pode ser executado de forma relativamente eficiente em um 68020/68881 ou 68030 ou um
68040. O código gerado usa as instruções 68881 que são emuladas no
68040.

A opção é equivalente a -march = 68020 -mtune = 68020-40.

-m68020-60
Gere saída para um 68060, sem usar nenhuma das novas instruções. Estes resultados
em um código que pode ser executado de forma relativamente eficiente em um 68020/68881 ou 68030 ou um
68040. O código gerado usa as instruções 68881 que são emuladas no
68060.

A opção é equivalente a -march = 68020 -mtune = 68020-60.

-mhard-float
-m68881
Gere instruções de ponto flutuante. Este é o padrão para 68020 e acima, e
para dispositivos ColdFire que possuem uma FPU. Ele define a macro "__HAVE_68881__" em
Alvos M680x0 e "__mcffpu__" em alvos ColdFire.

-msoft-float
Não gere instruções de ponto flutuante; em vez disso, use chamadas de biblioteca. Isto é o
padrão para 68000, 68010 e 68832 destinos. Também é o padrão para ColdFire
dispositivos que não possuem FPU.

-mdiv
-mno-div
Gerar (não gerar) instruções de divisão e restante do hardware ColdFire. Se
-marchar é usado sem -mcpu, o padrão é "on" para arquiteturas ColdFire e "off"
para arquiteturas M680x0. Caso contrário, o padrão é obtido da CPU de destino (ou
a CPU padrão, ou aquela especificada por -mcpu) Por exemplo, o padrão é "desligado"
por -mcpu = 5206 e "on" para -mcpu = 5206e.

O GCC define a macro "__mcfhwdiv__" quando esta opção está habilitada.

-mcurto
Considere o tipo "int" com 16 bits de largura, como "short int". Além disso, parâmetros
transmitidos na pilha também são alinhados a um limite de 16 bits, mesmo em alvos cuja API
exige promoção para 32 bits.

-mno-curto
Não considere o tipo "int" com 16 bits de largura. Este é o padrão.

-mnobitfield
-mno-bitfield
Não use as instruções do campo de bits. o -m68000, -mcpu32 e assim -m5200 opções implicam
-mnobitfield.

-mbitfield
Use as instruções do campo de bits. o -m68020 opção implica -mbitfield. Isto é
o padrão se você usar uma configuração projetada para um 68020.

-mrtd
Use uma convenção de chamada de função diferente, na qual funções que levam um
número de argumentos retorna com a instrução "rtd", que exibe seus argumentos
ao retornar. Isso economiza uma instrução do chamador, pois não há necessidade de
pop os argumentos lá.

Esta convenção de chamada é incompatível com a normalmente usada no Unix, então você
não pode usá-lo se você precisar chamar bibliotecas compiladas com o compilador Unix.

Além disso, você deve fornecer protótipos de função para todas as funções que variam
número de argumentos (incluindo "printf"); caso contrário, um código incorreto é gerado para
chamadas para essas funções.

Além disso, resultam em códigos seriamente incorretos se você chamar uma função com muitos
argumentos. (Normalmente, argumentos extras são ignorados inofensivamente.)

A instrução "rtd" é compatível com 68010, 68020, 68030, 68040, 68060 e CPU32
processadores, mas não pelos 68000 ou 5200.

-mno-rtd
Não use as convenções de chamada selecionadas por -mrtd. Este é o padrão.

-malign-int
-mno-align-int
Controle se o GCC alinha "int", "long", "long long", "float", "double" e "long
variáveis ​​double "em um limite de 32 bits (-malign-int) ou um limite de 16 bits
(-mno-align-int) O alinhamento de variáveis ​​em limites de 32 bits produz um código que executa
um pouco mais rápido em processadores com barramentos de 32 bits ao custo de mais memória.

Atenção: se você usar o -malign-int switch, GCC alinha estruturas contendo o
tipos de forma diferente da maioria das especificações de interface binária de aplicativo publicadas para
o m68k.

-mpcrel
Use o modo de endereçamento relativo ao PC do 68000 diretamente, em vez de usar um global
mesa de compensação. No momento, esta opção implica -fpic, permitindo no máximo um deslocamento de 16 bits
para endereçamento relativo a pc. -fPIC atualmente não é compatível com -mpcrel, embora
isso pode ser compatível com processadores 68020 e superiores.

-mno-strict-align
-mstrict-align
Não (faça) supor que referências de memória não alinhadas são tratadas pelo sistema.

-msep-data
Gerar código que permite que o segmento de dados seja localizado em uma área diferente da memória
do segmento de texto. Isso permite a execução no local em um ambiente sem
gerenciamento de memória virtual. Esta opção implica -fPIC.

-mno-sep-data
Gere código que assume que o segmento de dados segue o segmento de texto. Isto é
o padrão.

-mid-shared-library
Gere código que ofereça suporte a bibliotecas compartilhadas por meio do método de ID de biblioteca. Isso permite
para executar no local e bibliotecas compartilhadas em um ambiente sem memória virtual
gestão. Esta opção implica -fPIC.

-mno-id-shared-library
Gere código que não presuma que bibliotecas compartilhadas baseadas em ID estão sendo usadas. Isto é
o padrão.

-mshared-library-id = n
Especifica o número de identificação da biblioteca compartilhada baseada em ID que está sendo compilada.
Especificar um valor de 0 gera um código mais compacto; especificando outras forças de valores
a alocação desse número para a biblioteca atual, mas não é mais espaço ou tempo
eficiente do que omitir esta opção.

-mxgot
-mno-xgot
Ao gerar código independente de posição para ColdFire, gere código que funcione se
o GOT tem mais de 8192 entradas. Este código é maior e mais lento que o código
gerado sem esta opção. Em processadores M680x0, esta opção não é necessária; -fPIC
é suficiente.

O GCC normalmente usa uma única instrução para carregar valores do GOT. Enquanto isso é
relativamente eficiente, ele só funciona se o GOT for menor do que cerca de 64k. Nada
maior faz com que o vinculador relate um erro como:

relocação truncada para caber: R_68K_GOT16O foobar

Se isso acontecer, você deve recompilar seu código com -mxgot. Deve então funcionar com
GOTs muito grandes. No entanto, o código gerado com -mxgot é menos eficiente, uma vez que
leva 4 instruções para buscar o valor de um símbolo global.

Observe que alguns vinculadores, incluindo versões mais recentes do vinculador GNU, podem criar
vários GOTs e classifique as entradas do GOT. Se você tiver esse linker, só precisará
usar -mxgot ao compilar um único arquivo de objeto que acessa mais de 8192 GOT
entradas. Muito poucos o fazem.

Essas opções não têm efeito, a menos que o GCC esteja gerando código independente de posição.

MCore Opções

Estes são o -m opções definidas para os processadores Motorola M * Core.

-mhardlit
-mno-hardlit
Constantes embutidas no fluxo de código, se isso puder ser feito em duas instruções ou menos.

-mdiv
-mno-div
Use a instrução de divisão. (Ativado por padrão).

-mrelax-imediato
-mno-relax-imediato
Permitir imediatos de tamanho arbitrário em operações de bits.

-mwide-bitfields
-mno-wide-bitfields
Sempre trate os campos de bits com o tamanho "int".

-m4byte-funções
-mno-4byte-funções
Força todas as funções a serem alinhadas a um limite de 4 bytes.

-mcallgraph-data
-mno-callgraph-data
Emita informações de callgraph.

-mslow-bytes
-mno-slow-bytes
Prefira o acesso por palavra ao ler quantidades de bytes.

-mlittle-endian
-mbi-endian
Gere código para um target little-endian.

-m210
-m340
Gere código para o processador 210.

-mno-lsim
Suponha que o suporte de tempo de execução foi fornecido e, portanto, omita a biblioteca do simulador
(libsim.a) na linha de comando do vinculador.

-mstack-increment =tamanho
Defina a quantidade máxima para uma única operação de incremento de pilha. Valores grandes podem
aumentar a velocidade de programas que contêm funções que precisam de uma grande quantidade de
espaço de pilha, mas também podem desencadear uma falha de segmentação se a pilha for estendida
demais. O valor padrão é 0x1000.

MeP Opções

-mabsdiff
Habilita a instrução "abs", que é a diferença absoluta entre dois registradores.

-pequenas opções
Ativa todas as instruções opcionais --- operações de média, multiplicação, divisão, bit,
zero à esquerda, diferença absoluta, mín. / máx., clipe e saturação.

-maédia
Ativa a instrução "ave", que calcula a média de dois registradores.

-mbasado =n
Variáveis ​​de tamanho n bytes ou menores são colocados na seção ".based" por padrão.
Variáveis ​​baseadas usam o registro $ tp como um registro base, e há um limite de 128 bytes
para a seção ".based".

-mbitops
Ativa as instruções de operação de bit --- teste de bit ("btstm"), set ("bsetm"), clear
("bclrm"), invert ("bnotm") e test-and-set ("tas").

-mc =nome
Seleciona em qual seção os dados constantes são colocados. nome pode ser minúsculo, pertoou longe.

-mclip
Ativa a instrução "clip". Observe que -mclip não é útil a menos que você também
fornecer -mminmax.

-mconfig =nome
Seleciona uma das configurações de núcleo integradas. Cada chip MeP tem um ou mais
módulos nele; cada módulo possui uma CPU central e uma variedade de coprocessadores, opcionais
instruções e periféricos. A ferramenta "MeP-Integrator", que não faz parte do GCC, fornece
essas configurações por meio desta opção; usar esta opção é o mesmo que usar todos
as opções de linha de comando correspondentes. A configuração padrão é omissão.

-mcop
Ativa as instruções do coprocessador. Por padrão, este é um coprocessador de 32 bits. Observação
que o coprocessador é normalmente ativado por meio do -mconfig = opção.

-mcop32
Ativa as instruções do coprocessador de 32 bits.

-mcop64
Ativa as instruções do coprocessador de 64 bits.

-mivc2
Ativa o agendamento IVC2. IVC2 é um coprocessador VLIW de 64 bits.

-mdc
Faz com que as variáveis ​​constantes sejam colocadas na seção ".near".

-mdiv
Ativa as instruções "div" e "divu".

-meb
Gere código big-endian.

-mel
Gere o código little-endian.

-mio-volátil
Diz ao compilador que qualquer variável marcada com o atributo "io" deve ser
considerado volátil.

-ml Faz com que as variáveis ​​sejam atribuídas à seção ".far" por padrão.

-mleadz
Ativa a instrução "leadz" (zero à esquerda).

-milímetros Faz com que as variáveis ​​sejam atribuídas à seção ".near" por padrão.

-mminmax
Ativa as instruções "min" e "max".

-multo
Ativa as instruções de multiplicação e multiplicação-acumulação.

-mno-opts
Desativa todas as instruções opcionais ativadas por -pequenas opções.

-repetir
Ativa as instruções "repeat" e "erepeat", usadas para looping de baixa sobrecarga.

-em Faz com que todas as variáveis ​​sejam padronizadas para a seção ".tiny". Observe que há um
Limite de 65536 bytes para esta seção. Os acessos a essas variáveis ​​usam a base% gp
registre-se.

-msatur
Ativa as instruções de saturação. Observe que o compilador atualmente não
gerá-los sozinho, mas esta opção está incluída para compatibilidade com outras ferramentas,
como".

-msdram
Vincule o tempo de execução baseado em SDRAM em vez do tempo de execução padrão baseado em ROM.

-msim
Vincule as bibliotecas de tempo de execução do simulador.

-msimnovec
Vincule as bibliotecas de tempo de execução do simulador, excluindo o suporte integrado para redefinição e
vetores e tabelas de exceção.

-mtf
Faz com que todas as funções sejam padronizadas para a seção ".far". Sem esta opção, funções
padrão para a seção ".near".

-mtiny =n
Variáveis ​​que são n bytes ou menores são alocados para a seção ".tiny". Esses
variáveis ​​usam o registro base $ gp. O padrão para esta opção é 4, mas observe que
há um limite de 65536 bytes para a seção ".tiny".

MicroBlaze Opções

-msoft-float
Use a emulação de software para ponto flutuante (padrão).

-mhard-float
Use as instruções de ponto flutuante do hardware.

-mmemcpy
Não otimize movimentos de bloco, use "memcpy".

-mno-clearbss
Esta opção está obsoleta. Usar -fno-zero-inicializado-em-bss ao invés.

-mcpu =tipo cpu
Usar recursos e programar código para a CPU fornecida. Os valores suportados estão no
formato vX.YY.Z, Onde X é uma versão principal, YY é a versão secundária, e Z is
código de compatibilidade. Valores de exemplo são v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.

-mxl-soft-mul
Use emulação de multiplicação de software (padrão).

-mxl-soft-div
Use a emulação de software para divisões (padrão).

-mxl-barrel-shift
Use o deslocador de barril de hardware.

-mxl-pattern-compare
Use as instruções de comparação de padrões.

-msmall-divide
Use a otimização de pesquisa de tabela para pequenas divisões inteiras com sinal.

-mxl-stack-check
Esta opção está obsoleta. Usar -fstack-check ao invés.

-mxl-gp-opt
Use seções ".sdata" / ". Sbss" relativas ao GP.

-mxl-multiply-high
Use as instruções de multiplicação alta para a parte alta da multiplicação de 32x32.

-mxl-float-convert
Use as instruções de conversão de ponto flutuante de hardware.

-mxl-float-sqrt
Use a instrução de raiz quadrada de ponto flutuante de hardware.

-mbi-endian
Gere código para um alvo big-endian.

-mlittle-endian
Gere código para um target little-endian.

-mxl-reordenar
Use as instruções de reordenamento (troca e carregamento / armazenamento reverso de bytes).

-mxl-mode-modelo de aplicativo
Selecione o modelo de aplicativo modelo de aplicativo. Modelos válidos são

executável
executável normal (padrão), usa código de inicialização crt0.o.

xmdstub
para uso com depuração intrusiva de software baseado em Xilinx Microprocessor Debugger (XMD)
agente chamado xmdstub. Isso usa o arquivo de inicialização crt1.o e define o endereço inicial de
o programa para 0x800.

inicialização
para aplicativos que são carregados usando um bootloader. Este modelo usa arquivo de inicialização
crt2.o que não contém um manipulador de vetor de redefinição do processador. Isso é adequado
para transferir o controle de um processador redefinido para o bootloader em vez do
aplicação.

novatos
para aplicativos que não requerem nenhum dos vetores MicroBlaze. Esta opção
pode ser útil para aplicativos executados em um aplicativo de monitoramento. Este modelo
usos crt3.o como um arquivo de inicialização.

Opção -xl-mode-modelo de aplicativo é um alias obsoleto para -mxl-mode-modelo de aplicativo.

MIPS Opções

-EB Gere código big-endian.

-A Gere o código little-endian. Este é o padrão para mips * el - * - * configurações.

-march =arco
Gerar código que é executado em arco, que pode ser o nome de um ISA MIPS genérico ou o
nome de um processador específico. Os nomes ISA são: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5
e assim mips64r6. Os nomes dos processadores são: 4kc, 4km, 4kp, 4ksc, 4kec, 4 km, 4 minutos, 4ksd,
5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1, 24kef1_1, 34kc, 34kf2_1,
34kf1_1, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1,
loongson2e, loongson2f, loongson3a, M4K, M14K, m14kc, m14ke, m14kec, octeon, octeon +,
octeon2, octeon3, Orion, p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650,
r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000,
vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, xlr e assim xlp. o
valor especial de-abi seleciona a arquitetura mais compatível para o ABI selecionado
(isso é, mips1 para ABIs de 32 bits e mips3 para ABIs de 64 bits).

A cadeia de ferramentas nativa do Linux / GNU também oferece suporte ao valor nativo, que seleciona o melhor
opção de arquitetura para o processador host. -march = nativo não tem efeito se o GCC fizer
não reconhece o processador.

Em nomes de processador, um final 000 pode ser abreviado como k (por exemplo, -march = r2k).
Os prefixos são opcionais e vr pode ser escrito r.

Nomes do formulário nf2_1 referem-se a processadores com FPUs cronometrados na metade da taxa do
núcleo, nomes do formulário nf1_1 referem-se a processadores com FPUs sincronizados na mesma taxa
como o núcleo e os nomes do formulário nf3_2 referem-se a processadores com FPUs com clock de uma proporção
de 3: 2 em relação ao núcleo. Por razões de compatibilidade, nf é aceito como um
sinônimo de nf2_1 enquanto nx e assim bfx são aceitos como sinônimos para nf1_1.

O GCC define duas macros com base no valor desta opção. O primeiro é "_MIPS_ARCH",
que dá o nome da arquitetura de destino, como uma string. O segundo tem a forma
"_MIPS_ARCH_foo ", Onde Foo é o valor capitalizado de "_MIPS_ARCH". Por exemplo,
-march = r2000 define "_MIPS_ARCH" para "r2000" e define a macro "_MIPS_ARCH_R2000".

Observe que a macro "_MIPS_ARCH" usa os nomes de processador fornecidos acima. Em outro
palavras, tem o prefixo completo e não abrevia 000 as k. No caso de a partir de-
abi, a macro nomeia a arquitetura resolvida ("mips1" ou "mips3"). Ele nomeia
a arquitetura padrão quando não -marchar opção é fornecida.

-mtune =arco
Otimizar para arco. Entre outras coisas, esta opção controla a forma como as instruções são
programado e o custo percebido das operações aritméticas. A lista de arco valores
é o mesmo que para -marchar.

Quando esta opção não é usada, o GCC otimiza para o processador especificado por -marchar. Por
utilização -marchar e assim -mtune juntos, é possível gerar código que roda em um
família de processadores, mas otimize o código para um membro específico dessa família.

-mtune define as macros "_MIPS_TUNE" e "_MIPS_TUNE_foo ", que funcionam no mesmo
caminho como o -marchar aqueles descritos acima.

-mips1
Equivalente a -march = mips1.

-mips2
Equivalente a -march = mips2.

-mips3
Equivalente a -march = mips3.

-mips4
Equivalente a -march = mips4.

-mips32
Equivalente a -march = mips32.

-mips32r3
Equivalente a -march = mips32r3.

-mips32r5
Equivalente a -march = mips32r5.

-mips32r6
Equivalente a -march = mips32r6.

-mips64
Equivalente a -march = mips64.

-mips64r2
Equivalente a -march = mips64r2.

-mips64r3
Equivalente a -march = mips64r3.

-mips64r5
Equivalente a -march = mips64r5.

-mips64r6
Equivalente a -march = mips64r6.

-mips16
-mno-mips16
Gere (não gere) código MIPS16. Se o GCC tem como alvo um MIPS32 ou MIPS64
arquitetura, ele faz uso do MIPS16e ASE.

A geração de código MIPS16 também pode ser controlada por função por meio de
Atributos "mips16" e "nomips16".

-mflip-mips16
Gere código MIPS16 em funções alternadas. Esta opção é fornecida para regressão
teste de geração de código MIPS16 / não MIPS16 misto e não se destina a
use na compilação do código do usuário.

-minterlink-comprimido
-mno-interlink-compactado
Exigir (não exigir) que o código usando o MIPS ISA padrão (descompactado) seja vinculado
compatível com código MIPS16 e microMIPS e vice-versa.

Por exemplo, o código que usa a codificação ISA padrão não pode saltar diretamente para MIPS16 ou
código microMIPS; ele deve usar uma chamada ou um salto indireto. -minterlink-comprimido
portanto, desativa os saltos diretos, a menos que o GCC saiba que o alvo do salto não é
comprimido.

-minterlink-mips16
-mno-interlink-mips16
Aliases de -minterlink-comprimido e assim -mno-interlink-compactado. Essas opções
são anteriores ao microMIPS ASE e são mantidos para compatibilidade com versões anteriores.

-mabi = 32
-mabi = o64
-mabi = n32
-mabi = 64
-mabi = eabi
Gere o código para o ABI fornecido.

Observe que o EABI tem uma variante de 32 bits e uma de 64 bits. GCC normalmente gera 64 bits
código ao selecionar uma arquitetura de 64 bits, mas você pode usar -mgp32 para obter código de 32 bits
ao invés.

Para obter informações sobre o O64 ABI, consultehttp://gcc.gnu.org/projects/mipso64-abi.html>.

O GCC suporta uma variante do o32 ABI em que os registros de ponto flutuante são 64, em vez
de 32 bits de largura. Você pode selecionar esta combinação com -mabi = 32 -mfp64. Este ABI
depende das instruções "mthc1" e "mfhc1" e, portanto, só é compatível com
Processadores MIPS32R2, MIPS32R3 e MIPS32R5.

As atribuições de registro para argumentos e valores de retorno permanecem as mesmas, mas cada
o valor escalar é passado em um único registro de 64 bits em vez de um par de 32 bits
registra. Por exemplo, valores escalares de ponto flutuante são retornados em $ f0 apenas, não um
$ f0/$ f1 par. O conjunto de registros de chamadas salvas também permanece o mesmo em que o mesmo
registros numerados de dupla precisão são salvos.

Duas variantes adicionais do o32 ABI são suportadas para permitir uma transição de
Registradores de 32 a 64 bits. Estes são FPXX (-mfpxx) e FP64A (-mfp64
-mno-odd-spreg) A extensão FPXX exige que todos os códigos sejam executados corretamente
quando executado usando registradores de 32 ou 64 bits. O código pode ser interligado com qualquer
FP32 ou FP64, mas não ambos. A extensão FP64A é semelhante à extensão FP64, mas
proíbe o uso de registros de precisão simples de números ímpares. Isso pode ser usado em
em conjunto com o modo "FRE" de FPUs em processadores MIPS32R5 e permite ambos FP32
e código FP64A para interligar e executar no mesmo processo sem alterar os modos FPU.

-mabicalls
-mno-abicals
Gere (não gere) código adequado para objetos dinâmicos do estilo SVR4.
-mabicalls é o padrão para sistemas baseados em SVR4.

-mshared
-mno-compartilhado
Gere (não gere) código que é totalmente independente da posição e que pode
portanto, ser vinculado a bibliotecas compartilhadas. Esta opção afeta apenas -mabicalls.

Todos -mabicalls o código é tradicionalmente independente da posição, independentemente das opções
como -fPIC e assim -fpic. No entanto, como uma extensão, a cadeia de ferramentas GNU permite executáveis
para usar acessos absolutos para símbolos de ligação local. Ele também pode usar GP mais curto
sequências de inicialização e gerar chamadas diretas para funções definidas localmente. Esse
modo é selecionado por -mno-compartilhado.

-mno-compartilhado depende do binutils 2.16 ou superior e gera objetos que só podem ser
vinculado pelo vinculador GNU. No entanto, a opção não afeta o ABI da final
executável; afeta apenas a ABI de objetos relocáveis. Usando -mno-compartilhado
geralmente torna os executáveis ​​menores e mais rápidos.

-mshared é o padrão.

-mplt
-mno-plt
Suponha (não suponha) que os vinculadores estáticos e dinâmicos suportam PLTs e copiam
deslocalizações. Esta opção afeta apenas -mno-compartilhado -mabicalls. Para o n64 ABI, este
opção não tem efeito sem -msym32.

Você pode fazer -mplt o padrão configurando o GCC com --com-mips-plt. O padrão
is -mno-plt de outra forma.

-mxgot
-mno-xgot
Eleve (não eleve) as restrições usuais no tamanho da tabela de deslocamento global.

O GCC normalmente usa uma única instrução para carregar valores do GOT. Enquanto isso é
relativamente eficiente, ele só funciona se o GOT for menor do que cerca de 64k. Nada
maior faz com que o vinculador relate um erro como:

relocação truncada para caber: R_MIPS_GOT16 foobar

Se isso acontecer, você deve recompilar seu código com -mxgot. Isso funciona com muito
grandes GOTs, embora o código também seja menos eficiente, uma vez que leva três
instruções para buscar o valor de um símbolo global.

Observe que alguns vinculadores podem criar vários GOTs. Se você tiver um linker, você
só deve precisar usar -mxgot quando um único arquivo de objeto acessa mais de 64k's
no valor de entradas GOT. Muito poucos o fazem.

Essas opções não têm efeito, a menos que o GCC esteja gerando um código independente de posição.

-mgp32
Suponha que os registradores de uso geral tenham 32 bits de largura.

-mgp64
Suponha que os registradores de uso geral tenham 64 bits de largura.

-mfp32
Suponha que os registradores de ponto flutuante tenham 32 bits de largura.

-mfp64
Suponha que os registradores de ponto flutuante tenham 64 bits de largura.

-mfpxx
Não assuma a largura dos registradores de ponto flutuante.

-mhard-float
Use as instruções do coprocessador de ponto flutuante.

-msoft-float
Não use as instruções do coprocessador de ponto flutuante. Implementar ponto flutuante
cálculos usando chamadas de biblioteca em vez disso.

-mno-float
Equivalente a -msoft-float, mas, adicionalmente, afirma que o programa que está sendo compilado
não executa nenhuma operação de ponto flutuante. Esta opção é atualmente suportada
apenas por algumas configurações MIPS bare-metal, onde pode selecionar um conjunto especial de
bibliotecas que carecem de todo o suporte de ponto flutuante (incluindo, por exemplo, o
apontar formatos "printf"). Se o código compilado com -mno-float contém acidentalmente
operações de ponto flutuante, é provável que sofra uma falha de tempo de link ou tempo de execução.

-msingle-float
Suponha que o coprocessador de ponto flutuante suporte apenas operações de precisão simples.

-mdouble-float
Suponha que o coprocessador de ponto flutuante suporte operações de precisão dupla. Esse
é o padrão.

-modd-spreg
-mno-odd-spreg
Habilite o uso de registros de ponto flutuante de precisão única com numeração ímpar para o o32
ABI. Este é o padrão para processadores que são conhecidos por oferecer suporte a esses registros.
Ao usar o o32 FPXX ABI, -mno-odd-spreg é definido por padrão.

-mabs = 2008
-mabs = legado
Essas opções controlam o tratamento do não-um-número especial (NaN) IEEE 754
dados de ponto flutuante com o "abs.fmt " e "neg.fmt " instruções da máquina.

Por padrão ou quando -mabs = legado é usado o tratamento legado é selecionado. Nisso
caso essas instruções sejam consideradas aritméticas e evitadas quando a operação correta
é necessário e o operando de entrada pode ser um NaN. Uma sequência mais longa de instruções
que manipula o bit de sinal do datum de ponto flutuante manualmente é usado em vez disso, a menos que
do -finite-matemática-apenas opção também foi especificada.

A -mabs = 2008 opção seleciona o tratamento IEEE 754-2008. Neste caso, estes
as instruções são consideradas não aritméticas e, portanto, operando corretamente em todos
casos, incluindo em particular onde o operando de entrada é um NaN. Essas instruções
são, portanto, sempre usados ​​para as respectivas operações.

-mnan = 2008
-mnan = legado
Essas opções controlam a codificação do não-um-número especial (NaN) IEEE 754
dados de ponto flutuante.

A -mnan = legado opção seleciona a codificação legada. Neste caso, NaNs silenciosos (qNaNs)
são denotados pelo primeiro bit de seu campo de significando final sendo 0, enquanto
NaNs de sinalização (sNaNs) são denotados pelo primeiro bit de seu significando posterior
campo sendo 1.

A -mnan = 2008 opção seleciona a codificação IEEE 754-2008. Neste caso, qNaNs são
denotado pelo primeiro bit de seu campo de significando final sendo 1, enquanto sNaNs
são denotados pelo primeiro bit de seu campo de significando final sendo 0.

O padrão é -mnan = legado a menos que o GCC tenha sido configurado com --with-nan = 2008.

-mllsc
-mno-llsc
Use (não use) ll, sce sincronizar instruções para implementar memória atômica integrada
funções. Quando nenhuma opção é especificada, o GCC usa as instruções se o alvo
a arquitetura os apóia.

-mllsc é útil se o ambiente de execução pode emular as instruções e -mno-llsc
pode ser útil ao compilar para ISAs não padrão. Você pode fazer qualquer uma das opções
padrão configurando o GCC com --with-llsc e assim --sem-lsc respectivamente.
--with-llsc é o padrão para algumas configurações; veja a documentação de instalação
para obter detalhes.

-mdsp
-mno-dsp
Use (não use) a revisão 1 do MIPS DSP ASE.
Esta opção define a macro do pré-processador "__mips_dsp". Também define
"__mips_dsp_rev" para 1.

-mdspr2
-mno-dspr2
Use (não use) a revisão 2 do MIPS DSP ASE.
Esta opção define as macros do pré-processador "__mips_dsp" e "__mips_dspr2". Isto
também define "__mips_dsp_rev" como 2.

-msmartmips
-mno-smartmips
Use (não use) o MIPS SmartMIPS ASE.

-mpareado-único
-mno-pareado-único
Use (não use) instruções de ponto flutuante único emparelhado.
Esta opção requer que o suporte de ponto flutuante de hardware seja habilitado.

-mdmx
-mno-mdmx
Use (não use) as instruções do MIPS Digital Media Extension. Esta opção só pode ser
usado ao gerar código de 64 bits e requer suporte de ponto flutuante de hardware para ser
ativado.

-mips3d
-mno-mips3d
Use (não use) o MIPS-3D ASE. A opção -mips3d implica -mpareado-único.

-mmicromips
-mno-micromips
Gere (não gere) código microMIPS.

A geração de código MicroMIPS também pode ser controlada por função por meio de
Atributos "micromips" e "nomicromips".

-mmt
-mno-mt
Use (não use) instruções MT Multithreading.

-mmcu
-mno-mcu
Use (não use) as instruções MIPS MCU ASE.

-meva
-mno-eva
Use (não use) as instruções do MIPS Enhanced Virtual Addressing.

-mvirt
-mno-virt
Use (não use) as instruções específicas do aplicativo de virtualização MIPS.

-mxpa
-mno-xpa
Use (não use) as instruções MIPS eXtended Physical Address (XPA).

-mlong64
Força os tipos "longos" a terem 64 bits de largura. Ver -mlong32 para uma explicação do padrão
e a forma como o tamanho do ponteiro é determinado.

-mlong32
Força "long", "int" e os tipos de ponteiro com 32 bits de largura.

O tamanho padrão de "int" s, "long" se ponteiros depende da ABI. Todos
ABIs suportados usam "int" s de 32 bits. O n64 ABI usa "long" s de 64 bits, assim como o de 64 bits
EABI; os outros usam "long" s de 32 bits. Os ponteiros são do mesmo tamanho que s "longos" ou
mesmo tamanho dos registradores inteiros, o que for menor.

-msym32
-mno-sym32
Suponha (não suponha) que todos os símbolos têm valores de 32 bits, independentemente do
ABI. Esta opção é útil em combinação com -mabi = 64 e assim -mno-abicals porque
permite que o GCC gere referências mais curtas e rápidas para endereços simbólicos.

-G Números
Coloque as definições de dados visíveis externamente em uma pequena seção de dados se esses dados não forem
maior que Números bytes. O GCC pode então gerar acessos mais eficientes aos dados; Vejo
-mgpopt para obter detalhes.

O padrão -G opção depende da configuração.

-mlocal-sdata
-mno-local-sdata
Estenda (não estenda) o -G comportamento para dados locais também, como para variáveis ​​estáticas
em C. -mlocal-sdata é o padrão para todas as configurações.

Se o vinculador reclamar que um aplicativo está usando muitos dados pequenos, você pode
quer tentar reconstruir as partes menos críticas de desempenho com -mno-local-sdata. Você
também pode querer construir grandes bibliotecas com -mno-local-sdata, para que as bibliotecas
deixe mais espaço para o programa principal.

-mextern-sdata
-mno-extern-sdata
Suponha (não suponha) que os dados definidos externamente estão em uma pequena seção de dados se o
tamanho desses dados está dentro do -G limite. -mextern-sdata é o padrão para todos
configurações.

Se você compilar um módulo Mod com -mextern-sdata -G Números -mgpopte Mod referências a
variável var que não é maior que Números bytes, você deve ter certeza de que var está localizado
em uma pequena seção de dados. Se var é definido por outro módulo, você deve compilar
aquele módulo com um alto o suficiente -G definir ou anexar um atributo "seção" a var's
definição. Se var é comum, você deve vincular o aplicativo a um -G
criação.

A maneira mais fácil de satisfazer essas restrições é compilar e vincular cada módulo
com a mesma -G opção. No entanto, você pode querer construir uma biblioteca que suporte
vários pequenos limites de dados diferentes. Você pode fazer isso compilando a biblioteca com
o mais alto suportado -G configuração e, adicionalmente, usando -mno-extern-sdata para parar o
biblioteca de fazer suposições sobre dados definidos externamente.

-mgpopt
-mno-gpopt
Use (não use) acessos relativos a GP para símbolos que são conhecidos por estarem em poucos dados
seção; Vejo -G, -mlocal-sdata e assim -mextern-sdata. -mgpopt é o padrão para todos
configurações.

-mno-gpopt é útil para casos em que o registro $ gp pode não conter o valor de
"_gp". Por exemplo, se o código faz parte de uma biblioteca que pode ser usada em um boot
monitor, os programas que chamam as rotinas do monitor de inicialização passam um valor desconhecido em $ gp. (No
tais situações, o monitor de inicialização em si é geralmente compilado com -G0.)

-mno-gpopt implica -mno-local-sdata e assim -mno-extern-sdata.

-dados-incorporados
-mno-embedded-data
Alocar variáveis ​​para a seção de dados somente leitura primeiro, se possível, depois, na
pequena seção de dados se possível, caso contrário, em dados. Isso resulta em um código um pouco mais lento
do que o padrão, mas reduz a quantidade de RAM necessária durante a execução e, portanto, pode
ser preferido para alguns sistemas incorporados.

-muninit-const-in-rodata
-mno-uninit-const-in-rodata
Coloque as variáveis ​​"const" não inicializadas na seção de dados somente leitura. Esta opção é
apenas significativo em conjunto com -dados-incorporados.

-mcode-readable =fixação
Especifique se o GCC pode gerar código que lê de seções executáveis. Existem
três configurações possíveis:

-mcode-readable = yes
As instruções podem acessar livremente as seções executáveis. Esta é a configuração padrão.

-mcode-readable = pcrel
As instruções de carregamento relativas ao PC MIPS16 podem acessar seções executáveis, mas outros
as instruções não devem fazê-lo. Esta opção é útil em processadores 4KSc e 4KSd
quando os TLBs de código têm o bit de inibição de leitura definido. Também é útil em processadores
que pode ser configurado para ter uma interface SRAM de instrução / dados dupla e que,
como o M4K, redireciona automaticamente as cargas relativas ao PC para a RAM de instrução.

-mcode-readable = no
As instruções não devem acessar as seções executáveis. Esta opção pode ser útil em
alvos que são configurados para ter uma interface SRAM de instrução / dados dupla, mas
que (ao contrário do M4K) não redireciona automaticamente as cargas relativas ao PC para o
instrução RAM.

-msplit-address
-mno-split-address
Habilite (desabilite) o uso dos operadores de relocação do assembler "% hi ()" e "% lo ()". Esse
opção foi substituída por -mexplicit-relocs mas é retido para trás
compatibilidade.

-mexplicit-relocs
-mno-explicit-relocs
Use (não use) operadores de realocação de assembler ao lidar com endereços simbólicos.
A alternativa, selecionada por -mno-explicit-relocs, é usar macros assembler em vez disso.

-mexplicit-relocs é o padrão se o GCC foi configurado para usar um assembler que
suporta operadores de relocação.

-mcheck-zero-divisão
-mno-check-zero-divisão
Trap (não trapping) na divisão inteira por zero.

O padrão é -mcheck-zero-divisão.

-mdivide-armadilhas
-mdivide-breaks
Os sistemas MIPS verificam a divisão por zero, gerando uma armadilha condicional ou um
quebrar a instrução. O uso de armadilhas resulta em código menor, mas só é compatível com MIPS
II e posterior. Além disso, algumas versões do kernel do Linux têm um bug que evita armadilhas
de gerar o sinal adequado ("SIGFPE"). Usar -mdivide-armadilhas permitir condicional
armadilhas em arquiteturas que os suportam e -mdivide-breaks para forçar o uso de
rompe.

O padrão geralmente é -mdivide-armadilhas, mas isso pode ser sobrescrito no momento da configuração
utilização --with-divide = quebras. As verificações de divisão por zero podem ser completamente desabilitadas usando
-mno-check-zero-divisão.

-mmemcpy
-mno-memcpy
Force (não force) o uso de "memcpy" para movimentos de bloco não triviais. O padrão é
-mno-memcpy, que permite que o GCC incorpore a maioria das cópias de tamanho constante.

-muito chamadas
-mno-long-chamadas
Desative (não desative) o uso da instrução "jal". Chamando funções usando "jal"
é mais eficiente, mas requer que o chamador e o receptor tenham os mesmos 256 megabytes
segmento.

Esta opção não tem efeito no código abicalls. O padrão é -mno-long-chamadas.

-mmad
-mno-louco
Habilite (desabilite) o uso das instruções "mad", "madu" e "mul", conforme fornecido pelo
R4650 ISA.

-mimad
-mno-imadd
Habilite (desabilite) o uso das instruções inteiras "madd" e "msub". O padrão é
-mimad em arquiteturas que suportam "madd" e "msub", exceto para o 74k
arquitetura onde foi encontrado para gerar código mais lento.

-mfused-madd
-mno-fused-madd
Habilite (desabilite) o uso das instruções de multiplicação-acumulação de ponto flutuante, quando eles
Estão disponíveis. O padrão é -mfused-madd.

Na CPU R8000, quando as instruções de multiplicação-acumulação são usadas, o intermediário
o produto é calculado com precisão infinita e não está sujeito ao FCSR Flush para
Bit zero. Isso pode ser indesejável em algumas circunstâncias. Em outros processadores o
resultado é numericamente idêntico ao cálculo equivalente usando multiplicação separada,
adicionar, subtrair e negar instruções.

-nocpp
Diga ao montador MIPS para não executar seu pré-processador sobre os arquivos do montador do usuário (com um
.s sufixo) ao montá-los.

-mfix-24k
-mno-fix-24k
Contorne a errata 24K E48 (dados perdidos nas lojas durante o reabastecimento). As soluções alternativas
são implementados pelo montador em vez do GCC.

-mfix-r4000
-mno-fix-r4000
Contorne certas erratas da CPU R4000:

- Um deslocamento de palavra dupla ou variável pode dar um resultado incorreto se executado
imediatamente após iniciar uma divisão inteira.

- Uma palavra dupla ou uma mudança de variável pode dar um resultado incorreto se executado enquanto
uma multiplicação inteira está em andamento.

- Uma divisão inteira pode dar um resultado incorreto se iniciada em um slot de atraso de um
ramo tomado ou um salto.

-mfix-r4400
-mno-fix-r4400
Contorne certas erratas da CPU R4400:

- Um deslocamento de palavra dupla ou variável pode dar um resultado incorreto se executado
imediatamente após iniciar uma divisão inteira.

-mfix-r10000
-mno-fix-r10000
Trabalhe em torno de certas erratas R10000:

- Seqüências "ll" / "sc" não podem se comportar atomicamente em revisões anteriores a 3.0. Eles podem
impasse nas revisões 2.6 e anteriores.

Esta opção só pode ser usada se a arquitetura de destino suportar ramificação provável
instruções. -mfix-r10000 é o padrão quando -march = r10000 é usado; -mno-fix-r10000
é o padrão caso contrário.

-mfix-rm7000
-mno-fix-rm7000
Contorne a errata "dmult" / "dmultu" do RM7000. As soluções alternativas são implementadas por
o assembler em vez do GCC.

-mfix-vr4120
-mno-fix-vr4120
Contornar certas erratas VR4120:

- "dmultu" nem sempre produz o resultado correto.

- "div" e "ddiv" nem sempre produzem o resultado correto se um dos operandos
é negativo.

As soluções alternativas para a errata de divisão dependem de funções especiais em libgcc.a. Em
presente, essas funções são fornecidas apenas pelas configurações "mips64vr * -elf".

Outras erratas VR4120 requerem que um NOP seja inserido entre certos pares de
instruções. Essas erratas são tratadas pelo montador, não pelo próprio GCC.

-mfix-vr4130
Contorne a errata "mflo" / "mfhi" VR4130. As soluções alternativas são implementadas pelo
assembler em vez do GCC, embora o GCC evite usar "mflo" e "mfhi" se o
VR4130 "macc", "macchi", "dmacc" e instruções "dmacchi" estão disponíveis em seu lugar.

-mfix-sb1
-mno-fix-sb1
Contorne certas erratas do núcleo da CPU SB-1. (Este sinalizador atualmente funciona em torno do SB-1
revisão 2 errata de ponto flutuante "F1" e "F2".)

-mr10k-cache-shield =fixação
Especifique se o GCC deve inserir barreiras de cache para evitar os efeitos colaterais de
especulação em processadores R10K.

Em comum com muitos processadores, o R10K tenta prever o resultado de uma
ramificar e especulativamente executa as instruções da ramificação "obtida". Mais tarde
aborta essas instruções se o resultado previsto estiver errado. No entanto, no R10K,
mesmo instruções abortadas podem ter efeitos colaterais.

Esse problema afeta apenas os armazenamentos de kernel e, dependendo do sistema, o kernel carrega.
Como exemplo, um armazenamento executado especulativamente pode carregar a memória de destino no cache
e marcar a linha do cache como suja, mesmo se o armazenamento em si for abortado posteriormente. Se um DMA
operação grava na mesma área da memória antes que a linha "suja" seja liberada, o
os dados armazenados em cache substituem os dados DMA-ed. Consulte o manual do processador R10K para um
descrição, incluindo outros problemas potenciais.

Uma solução alternativa é inserir instruções de barreira de cache antes de cada acesso à memória que
pode ser executado especulativamente e pode ter efeitos colaterais, mesmo se abortado.
-mr10k-cache-shield =fixação controla a implementação desta solução alternativa pelo GCC. Isto
assume que os acessos abortados a qualquer byte nas seguintes regiões não têm
efeitos:

1. a memória ocupada pelo quadro de pilha da função atual;

2. a memória ocupada por um argumento de pilha de entrada;

3. a memória ocupada por um objeto com um endereço de constante de tempo de link.

É responsabilidade do kernel garantir que acessos especulativos a essas regiões
estão realmente seguros.

Se o programa de entrada contiver uma declaração de função, como:

void foo (void);

então a implementação de "foo" deve permitir que "j foo" e "jal foo" sejam executados
especulativamente. O GCC respeita esta restrição para funções que ele próprio compila. Isto
espera que funções não GCC (como código assembly escrito à mão) façam o mesmo.

A opção tem três formas:

-mr10k-cache-shield = load-store
Insira uma barreira de cache antes de um carregamento ou armazenamento que pode ser executado especulativamente
e isso pode ter efeitos colaterais, mesmo se abortado.

-mr10k-cache-shield = store
Insira uma barreira de cache antes de um armazenamento que pode ser executado especulativamente e
que pode ter efeitos colaterais, mesmo se abortado.

-mr10k-cache-shield = none
Desative a inserção de barreiras de cache. Esta é a configuração padrão.

-mflush-func =função
-mno-flush-func
Especifica a função a ser chamada para liberar os caches I e D, ou para não chamar nenhum
função. Se chamada, a função deve ter os mesmos argumentos que o comum
"_flush_func", ou seja, o endereço do intervalo de memória para o qual o cache está sendo
liberado, o tamanho do intervalo de memória e o número 3 (para liberar ambos os caches). o
o padrão depende do destino para o qual o GCC foi configurado, mas geralmente é
"_flush_func" ou "__cpu_flush".

custo mbranch =Números
Defina o custo das filiais para aproximadamente Números instruções "simples". Este custo é apenas um
heurística e não é garantido que produza resultados consistentes em todas as versões. Um zero
custo seleciona de forma redundante o padrão, que se baseia no -mtune criação.

-mbranch-provável
-mno-branch-provável
Habilite ou desabilite o uso de instruções do Branch Provável, independentemente do padrão para o
arquitetura selecionada. Por padrão, as instruções do Branch Provável podem ser geradas se
eles são suportados pela arquitetura selecionada. Uma exceção é para o MIPS32 e
Arquiteturas e processadores MIPS64 que implementam essas arquiteturas; para aqueles,
As instruções de ramificação provável não são geradas por padrão porque o MIPS32 e
As arquiteturas MIPS64 especificamente descontinuam seu uso.

-mfp-exceções
-mno-fp-exceções
Especifica se as exceções FP estão ativadas. Isso afeta como as instruções FP são
programado para alguns processadores. O padrão é que as exceções FP estejam habilitadas.

Por exemplo, no SB-1, se as exceções FP estão desabilitadas, e estamos emitindo 64 bits
código, então podemos usar os dois tubos FP. Caso contrário, só podemos usar um tubo FP.

-mvr4130-align
-mno-vr4130-align
O pipeline VR4130 é superescalar bidirecional, mas só pode emitir duas instruções
juntos se o primeiro estiver alinhado com 8 bytes. Quando esta opção está habilitada, o GCC alinha
pares de instruções que ele pensa que devem ser executadas em paralelo.

Esta opção só tem efeito na otimização para o VR4130. Normalmente cria código
mais rápido, mas à custa de torná-lo maior. Está habilitado por padrão em
nível de otimização -O3.

-msynci
-mno-sinci
Habilite (desabilite) a geração de instruções "synci" nas arquiteturas que as suportam.
As instruções "synci" (se habilitadas) são geradas quando "__builtin___clear_cache" é
compilado.

Esta opção é padronizada para -mno-sinci, mas o padrão pode ser substituído configurando
GCC com --with-synci.

Ao compilar o código para sistemas de processador único, geralmente é seguro usar "synci".
No entanto, em muitos sistemas multi-core (SMP), isso não invalida a instrução
caches em todos os núcleos e pode levar a um comportamento indefinido.

-mrelax-pic-calls
-mno-relax-pic-calls
Tente transformar as chamadas PIC que normalmente são enviadas por meio do registro $ 25 em chamadas diretas.
Isso só é possível se o vinculador puder resolver o destino no momento do link e se
o destino está dentro do alcance de uma chamada direta.

-mrelax-pic-calls é o padrão se o GCC foi configurado para usar um assembler e um
vinculador que suporta a diretiva de montagem ".reloc" e -mexplicit-relocs é em
efeito. Com -mno-explicit-relocs, essa otimização pode ser realizada pelo
assembler e o linker sozinho, sem ajuda do compilador.

-mmcount-ra-endereço
-mno-mcount-ra-endereço
Emita (não emita) código que permite que "_mcount" modifique o retorno da função de chamada
Morada. Quando ativada, esta opção estende a interface usual "_mcount" com um novo
ra-endereço parâmetro, que tem tipo "intptr_t *" e é passado no registro $ 12.
"_mcount" pode então modificar o endereço de devolução ao fazer o seguinte:

* Retornando o novo endereço no registro $ 31.

* Armazenando o novo endereço em "*ra-address ", Se ra-endereço não é nulo.

O padrão é -mno-mcount-ra-endereço.

MMIX Opções

Essas opções são definidas para o MMIX:

-mlibfuncs
-mno-libfuncs
Especifique que as funções intrínsecas da biblioteca estão sendo compiladas, passando todos os valores em
registra, não importa o tamanho.

-mepsilon
-mno-épsilon
Gere instruções de comparação de ponto flutuante que se comparam com o "rE"
registro epsilon.

-mabi = mmixware
-mabi = gnu
Gerar código que passa parâmetros de função e valores de retorno que (no chamado
função) são vistos como registradores $ 0 e superiores, em oposição ao GNU ABI que usa global
registra $ 231 e acima.

-mzero-extend
-mno-zero-extend
Ao ler dados da memória em tamanhos menores que 64 bits, use (não use) zero-
estendendo instruções de carregamento por padrão, ao invés de extensões de sinal.

-mknuthdiv
-mno-knuthdiv
Faça com que o resultado de uma divisão produzindo um resto tenha o mesmo sinal do divisor.
Com o padrão, -mno-knuthdiv, o sinal do resto segue o sinal do
dividendo. Ambos os métodos são aritmeticamente válidos, sendo o último quase exclusivamente
usava.

-mtoplevel-símbolos
-mno-toplevel-symbols
Anexar (não anexar) a : a todos os símbolos globais, para que o código de montagem possa ser usado
com a diretiva de montagem "PREFIX".

-me
Gere um executável no formato ELF, em vez do padrão mmo formato usado por
do mmix simulador.

-mbranch-prognosticar
-mno-branch-Pred
Use (não use) as instruções de ramificação provável, quando a previsão de ramificação estática
indica um provável ramo.

-mbase-endereços
-mno-base-address
Gere (não gere) código que usa base endereços. Usando um endereço básico
gera automaticamente uma solicitação (tratada pelo montador e pelo vinculador) para um
constante a ser configurada em um registro global. O registro é usado para uma ou mais bases
solicitações de endereço no intervalo de 0 a 255 do valor mantido no registro. o
geralmente leva a um código curto e rápido, mas o número de itens de dados diferentes que
pode ser endereçado é limitado. Isso significa que um programa que usa muitos dados estáticos
pode exigir -mno-base-address.

-msingle-exit
-mno-single-saída
Force (não force) o código gerado a ter um único ponto de saída em cada função.

MN10300 Opções

Este -m as opções são definidas para arquiteturas Matsushita MN10300:

-mmult-bug
Gere código para evitar bugs nas instruções de multiplicação para os processadores MN10300.
Este é o padrão.

-mno-mult-bug
Não gere código para evitar bugs nas instruções de multiplicação para o MN10300
processadores.

-mam33
Gere código usando recursos específicos do processador AM33.

-mno-am33
Não gere código usando recursos específicos do processador AM33. Isto é o
padrão.

-mam33-2
Gere código usando recursos específicos do processador AM33 / 2.0.

-mam34
Gere código usando recursos específicos do processador AM34.

-mtune =tipo cpu
Use as características de tempo do tipo de CPU indicado ao programar instruções.
Isso não altera o tipo de processador de destino. O tipo de CPU deve ser um dos
mn10300, am33, am33-2 or am34.

-mreturn-pointer-on-d0
Ao gerar uma função que retorna um ponteiro, retorne o ponteiro em "a0" e
"d0". Caso contrário, o ponteiro é retornado apenas em "a0", e tenta chamar tal
funções sem um protótipo resultam em erros. Observe que esta opção é ativada por
predefinição; usar -mno-retorno-ponteiro-em-d0 para desativá-lo.

-mno-crt0
Não vincule o arquivo de objeto de inicialização de tempo de execução C.

-mrelax
Indique ao vinculador que ele deve realizar uma passagem de otimização de relaxamento para
encurte ramos, chamadas e endereços de memória absolutos. Esta opção só tem efeito
quando usado na linha de comando para a etapa final do link.

Esta opção torna a depuração simbólica impossível.

-mliw
Permitir que o compilador gere longo Instrução Word instruções se o alvo for o
AM33 ou mais tarde. Este é o padrão. Esta opção define a macro do pré-processador
"__LIW__".

-mnoliw
Não permitir que o compilador gere longo Instrução Word instruções. Esta opção
define a macro do pré-processador "__NO_LIW__".

-msetlb
Permita que o compilador gere o SETLB e assim Lcc instruções se o alvo for o
AM33 ou mais tarde. Este é o padrão. Esta opção define a macro do pré-processador
"__SETLB__".

-mnosetlb
Não permitir que o compilador gere SETLB or Lcc instruções. Esta opção define
a macro do pré-processador "__NO_SETLB__".

Moxie Opções

-meb
Gere código big-endian. Este é o padrão para moxie - * - * configurações.

-mel
Gere o código little-endian.

-mmul.x
Gere instruções mul.x e umul.x. Este é o padrão para moxiebox - * - *
configurações.

-mno-crt0
Não vincule o arquivo de objeto de inicialização de tempo de execução C.

MSP430 Opções

Essas opções são definidas para o MSP430:

-masm-hex
Força a saída da montagem a sempre usar constantes hexadecimais. Normalmente, essas constantes são assinadas
decimais, mas esta opção está disponível para teste e / ou propósitos estéticos.

-mmcu =
Selecione o MCU a ser almejado. Isso é usado para criar um símbolo de pré-processador C baseado em
o nome do MCU, convertido para maiúsculas e pré e pós-fixado com __. Isto por sua vez
é usado pelo msp430.h arquivo de cabeçalho para selecionar um cabeçalho suplementar específico de MCU
arquivo.

A opção também define o ISA a ser usado. Se o nome do MCU for conhecido apenas por
suporte o 430 ISA, então isso é selecionado, caso contrário, o 430X ISA é selecionado. UMA
nome genérico de MCU de msp430 também pode ser usado para selecionar o 430 ISA. Da mesma forma o
genérico msp430x O nome do MCU seleciona o 430X ISA.

Além disso, um script de vinculador específico de MCU é adicionado à linha de comando do vinculador. o
o nome do script é o nome do MCU com .ld anexado. Assim especificando -mmcu = xxx on
do gcc linha de comando define o símbolo do pré-processador C "__XXX__" e faz com que o vinculador
para procurar um script chamado xxx.ld.

Essa opção também é passada para o montador.

-mcpu =
Especifica o ISA a ser usado. Os valores aceitos são msp430, msp430x e assim msp430xv2. Este
opção está obsoleta. o -mmcu = opção deve ser usada para selecionar o ISA.

-msim
Link para as bibliotecas de tempo de execução do simulador e script de vinculador. Substitui todos os scripts que
seria selecionado pelo -mmcu = opção.

grande
Use o endereçamento de modelo grande (ponteiros de 20 bits, "size_t" de 32 bits).

-pequeno
Use o endereçamento de modelo pequeno (ponteiros de 16 bits, "size_t" de 16 bits).

-mrelax
Esta opção é passada ao montador e ao vinculador e permite que o vinculador execute
certas otimizações que não podem ser feitas até o link final.

mhwmult =
Descreve o tipo de multiplicação de hardware suportado pelo destino. Os valores aceitos são
Nenhum sem multiplicação de hardware, 16bit para a multiplicação original de apenas 16 bits com suporte
pelos primeiros MCUs. 32bit para a multiplicação de 16/32 bits suportada por MCUs posteriores e série f5
para multiplicação de 16/32 bits suportada por MCUs da série F5. Um valor de auto pode ser também
dado. Isso diz ao GCC para deduzir o suporte de multiplicação de hardware com base no nome do MCU
fornecida pelo -mmcu opção. Se não -mmcu opção é especificada então 32bit Hardwares
multiplica o suporte é assumido. auto é a configuração padrão.

As multiplicações de hardware são normalmente executadas chamando uma rotina de biblioteca. Isso salva
espaço no código gerado. Ao compilar em -O3 ou superior, porém o hardware
multiplicador é invocado inline. Isso torna o código maior, mas mais rápido.

As rotinas de multiplicação de hardware desabilitam interrupções durante a execução e restauram o
estado de interrupção anterior quando eles terminam. Isso os torna seguros para uso dentro
manipuladores de interrupção, bem como em código normal.

-hortelã
Habilite o uso de um ambiente de tempo de execução mínimo - sem inicializadores estáticos ou
construtores. Isso se destina a dispositivos com restrição de memória. O compilador inclui
símbolos especiais em alguns objetos que informam ao vinculador e ao tempo de execução quais fragmentos de código
é requerido.

NDS32 Opções

Essas opções são definidas para implementações NDS32:

-mbi-endian
Gere código no modo big-endian.

-mlittle-endian
Gere código no modo little-endian.

-mreduced-regs
Use registradores de conjunto reduzido para alocação de registradores.

-mfull-regs
Use registros de conjunto completo para alocação de registro.

-mcmov
Gere instruções de movimentação condicional.

-mno-cmov
Não gere instruções de movimentação condicionais.

-mperf-ext
Gere instruções de extensão de desempenho.

-mno-perf-ext
Não gere instruções de extensão de desempenho.

-mv3push
Gere instruções push3 / pop25 v25.

-mno-v3push
Não gere instruções push3 / pop25 v25.

-m16 bits
Gere instruções de 16 bits.

-mno-16 bits
Não gere instruções de 16 bits.

-misr-vector-size =Números
Especifique o tamanho de cada vetor de interrupção, que deve ser 4 ou 16.

-mcache-block-size =Números
Especifique o tamanho de cada bloco de cache, que deve ser uma potência de 2 entre 4 e 512.

-march =arco
Especifique o nome da arquitetura de destino.

-mcmodel =modelo de código
Defina o modelo de código para um dos

pequeno
Todos os dados e segmentos de dados somente leitura devem estar dentro do espaço de endereçamento de 512 KB.
O segmento de texto deve estar dentro de 16 MB de espaço de endereçamento.

médio
O segmento de dados deve estar dentro de 512 KB, enquanto o segmento de dados somente leitura pode ser
dentro de um espaço de endereçamento de 4 GB. O segmento de texto ainda deve estar dentro de 16 MB
espaço de endereçamento.

grande
Todos os segmentos de texto e dados podem estar dentro de um espaço de endereçamento de 4 GB.

-mctor-dtor
Habilite o recurso construtor / destruidor.

-mrelax
Guia do linker para relaxar as instruções.

Nios II Opções

Estas são as opções definidas para o processador Altera Nios II.

-G Números
Coloque objetos globais e estáticos menores ou iguais a Números bytes em pequenos dados ou
Seções BSS em vez dos dados normais ou seções BSS. O valor padrão de Números is
8.

-mgpopt =opção
-mgpopt
-mno-gpopt
Gere (não gere) acessos relativos ao GP. A seguir opção nomes são
reconhecido:

Nenhum
Não gere acessos relativos ao GP.

local
Gere acessos relativos ao GP para pequenos objetos de dados que não são externos ou
fraco. Use também o endereçamento relativo ao GP para objetos que foram explicitamente
colocado em uma pequena seção de dados por meio de um atributo "seção".

global
Quanto às local, mas também geram acessos relativos ao GP para pequenos objetos de dados que
são externos ou fracos. Se você usar esta opção, você deve garantir que todas as partes do
seu programa (incluindo bibliotecas) são compilados com o mesmo -G criação.

dados,
Gere acessos relativos a GP para todos os objetos de dados no programa. Se você usar
esta opção, todos os dados e segmentos BSS de seu programa devem caber em 64K de
memória e você deve usar um script de vinculador apropriado para alocá-los dentro do
intervalo endereçável do ponteiro global.

todos os Gere endereços relativos a GP para ponteiros de função, bem como ponteiros de dados. Se
você usa esta opção, todo o texto, dados e segmentos BSS de seu programa devem
cabem em 64K de memória e você deve usar um script de vinculador apropriado para alocar
eles dentro do intervalo endereçável do ponteiro global.

-mgpopt é equivalente a -mgpopt = locale -mno-gpopt é equivalente a -mgpopt = nenhum.

O padrão é -mgpopt exceto quando -fpic or -fPIC é especificado para gerar posição-
código independente. Observe que o Nios II ABI não permite acessos relativos a GP de
bibliotecas compartilhadas.

Você pode precisar especificar -mno-gpopt explicitamente ao construir programas que incluem
grandes quantidades de pequenos dados, incluindo grandes seções de dados GOT. Neste caso, o
O deslocamento de 16 bits para o endereçamento relativo ao GP pode não ser grande o suficiente para permitir o acesso a
toda a pequena seção de dados.

-mel
-meb
Gere código little-endian (padrão) ou big-endian (experimental), respectivamente.

-mbypass-cache
-mno-bypass-cache
Força todas as instruções de carregamento e armazenamento para sempre ignorar o cache usando variantes de I / O de
As instruções. O padrão é não ignorar o cache.

-mno-cache-volátil
-mcache-volátil
O acesso à memória volátil ignora o cache usando as variantes de E / S do carregamento e armazenamento
instruções. O padrão é não ignorar o cache.

-mno-fast-sw-div
-mfast-sw-div
Não use a divisão rápida baseada em tabela para números pequenos. O padrão é usar o rápido
dividir em -O3 e acima.

-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-mhw-mulx
-mno-hw-div
-mhw-div
Habilite ou desabilite a emissão da família de instruções "mul", "mulx" e "div" pelo
compilador. O padrão é emitir "mul" e não emitir "div" e "mulx".

-mpersonalizado-pousada=N
-mno-custom-pousada
Cada -mpersonalizado-pousada=N opção permite o uso de uma instrução personalizada com codificação N quando
gerando código que usa pousada. Por exemplo, a -mcustom-fadds = 253 gera customizado
instrução 253 para operações de adição de ponto flutuante de precisão única em vez do
comportamento padrão de usar uma chamada de biblioteca.

Os seguintes valores de pousada são suportados. Exceto quando indicado de outra forma, ponto flutuante
espera-se que as operações sejam implementadas com semântica normal IEEE 754 e
correspondem diretamente aos operadores C ou às funções integradas GCC equivalentes.

Ponto flutuante de precisão simples:

modismos, fsubs, fdivs, fmuls
Operações aritméticas binárias.

fnegs
Negação unária.

fass
Valor absoluto unário.

fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
Operações de comparação.

fmins, fmaxs
Mínimo e máximo de vírgula flutuante. Estas instruções são geradas apenas se
-finite-matemática-apenas é especificado.

fsqrts
Operação de raiz quadrada unária.

fcoss, fsins, ftans, Fatans, fex, açoites
Funções trigonométricas e exponenciais de ponto flutuante. Essas instruções são
apenas gerado se -funsafe-math-otimizations também é especificado.

Ponto flutuante de dupla precisão:

modismo, fsubd, fdivd, fmold
Operações aritméticas binárias.

fnegd
Negação unária.

fabsd
Valor absoluto unário.

fcmpeqd, fcmpged, fcmpgtd, apinhado, fcmpltd, fcmp
Operações de comparação.

encontrar, fmaxd
Mínimo e máximo de dupla precisão. Estas instruções são geradas apenas se
-finite-matemática-apenas é especificado.

fsqrtd
Operação de raiz quadrada unária.

fcosd, encontrar, Ftand, Fatand, fexpd, açoitado
Funções trigonométricas e exponenciais de dupla precisão. Essas instruções são
apenas gerado se -funsafe-math-otimizations também é especificado.

Conversões:

fextsd
Conversão de precisão simples para precisão dupla.

truncds
Conversão de precisão dupla para precisão simples.

fixsi, corrigir, fixdi, fixdu
Conversão de ponto flutuante para tipos inteiros com ou sem sinal, com
truncamento em direção a zero.

volta
Conversão de ponto flutuante de precisão simples para inteiro assinado, arredondando para o
número inteiro mais próximo e laços longe de zero. Isso corresponde ao
função "__builtin_lroundf" quando -fno-math-errno é usado.

floatis, flutuar, flutuante, flutuar
Conversão de tipos inteiros com ou sem sinal para tipos de ponto flutuante.

Além disso, todas as seguintes instruções de transferência para os registros internos X e Y
deve ser fornecido para usar qualquer uma das instruções de ponto flutuante de precisão dupla.
Instruções personalizadas com dois operandos de origem de precisão dupla esperam o primeiro
operando no registro X de 64 bits. O outro operando (ou único operando de um unário
operação) é dado à instrução aritmética personalizada com o menos significativo
metade no registro de origem src1 e a metade mais significativa em src2. Um costume
a instrução que retorna um resultado de precisão dupla retorna o 32 mais significativo
bits no registro de destino e a outra metade no registro Y de 32 bits. GCC
gera automaticamente as sequências de código necessárias para escrever o registro X e / ou ler
registre Y quando instruções de ponto flutuante de precisão dupla são usadas.

fwrx
Escreva src1 na metade menos significativa de X e src2 no mais significativo
metade de X.

irado
Escreva src1 em Y.

Frdxhi, frdxlo
Leia a metade mais ou menos (respectivamente) significativa de X e armazene-a em dest.

amigo
Leia o valor de Y e armazene-o em dest.

Observe que você pode obter mais controle local sobre a geração de modelos personalizados do Nios II
instruções usando o "target (" custom-insn = N ")" e "target (" no-custom-insn ")"
atributos de função ou pragmas.

-mcustom-fpu-cfg =nome
Esta opção ativa um conjunto predefinido e nomeado de codificações de instrução personalizadas (consulte
-mpersonalizado-pousada acima de). Atualmente, os seguintes conjuntos são definidos:

-mcustom-fpu-cfg = 60-1 é equivalente a: -mcustom-fmuls = 252 -mcustom-fadds = 253
-mcustom-fsubs = 254 -fsingle-precision-constant

-mcustom-fpu-cfg = 60-2 é equivalente a: -mcustom-fmuls = 252 -mcustom-fadds = 253
-mcustom-fsubs = 254 -mcustom-fdivs = 255 -fsingle-precision-constant

-mcustom-fpu-cfg = 72-3 é equivalente a: -mcustom-floatus = 243 -mcustom-fixsi = 244
-mcustom-floatis = 245 -mcustom-fcmpgts = 246 -mcustom-fcmples = 249 -mcustom-fcmpeqs = 250
-mcustom-fcmpnes = 251 -mcustom-fmuls = 252 -mcustom-fadds = 253 -mcustom-fsubs = 254
-mcustom-fdivs = 255 -fsingle-precision-constant

Tarefas de instrução personalizadas dadas por indivíduo -mpersonalizado-pousada= sobrescrever opções
aqueles dados por -mcustom-fpu-cfg =, independentemente da ordem das opções no
linha de comando.

Observe que você pode obter mais controle local sobre a seleção de uma configuração de FPU por
usando o "target (" custom-fpu-cfg =nome")" atributo de função ou pragma.

Estes adicionais -m opções estão disponíveis para o alvo ELF (bare-metal) Altera Nios II:

-mhal
Link com HAL BSP. Isso suprime a vinculação com a inicialização do tempo de execução C fornecida pelo GCC
e código de terminação, e é normalmente usado em conjunto com -msys-crt0 = especificar
a localização do código de inicialização alternativo fornecido pelo HAL BSP.

-msmallc
Link com uma versão limitada da biblioteca C, -lsmalc, em vez de Newlib.

-msys-crt0 =arquivo inicial
arquivo inicial é o nome do arquivo startfile (crt0) a ser usado na vinculação. Esta opção
só é útil em conjunto com -mhal.

-msys-lib =systemlib
systemlib é o nome da biblioteca que fornece chamadas do sistema de baixo nível
exigido pela biblioteca C, por exemplo, "ler" e "escrever". Esta opção é normalmente usada para
link com uma biblioteca fornecida por um HAL BSP.

Nvidia PTX Opções

Essas opções são definidas para Nvidia PTX:

-m32
-m64
Gere código para ABI de 32 ou 64 bits.

-mmainkernel
Link no código para um kernel __main. Isso é para autônomo em vez de descarregar
execução.

PDP-11 Opções

Essas opções são definidas para o PDP-11:

-mfpu
Use ponto flutuante de FPP de hardware. Este é o padrão. (Ponto flutuante FIS no
PDP-11/40 não é compatível.)

-msoft-float
Não use ponto flutuante de hardware.

-mac0
Retorna resultados de ponto flutuante em ac0 (fr0 na sintaxe do montador Unix).

-mno-ac0
Retorna resultados de ponto flutuante na memória. Este é o padrão.

-m40
Gere código para um PDP-11/40.

-m45
Gere o código para um PDP-11/45. Este é o padrão.

-m10
Gere código para um PDP-11/10.

-mbcopy-builtin
Use padrões "movmemhi" embutidos para copiar a memória. Este é o padrão.

-mbcopy
Não use padrões "movmemhi" embutidos para copiar a memória.

-hortelã16
-mno-int32
Use "int" de 16 bits. Este é o padrão.

-hortelã32
-mno-int16
Use "int" de 32 bits.

-mfloat64
-mno-float32
Use "float" de 64 bits. Este é o padrão.

-mfloat32
-mno-float64
Use "float" de 32 bits.

-mabshi
Use o padrão "abshi2". Este é o padrão.

-mno-abshi
Não use o padrão "abshi2".

-mbranch-caro
Finja que as filiais são caras. Isso é para experimentar a geração de código
só.

-mbranch-barato
Não finja que os ramos são caros. Este é o padrão.

-munix-asm
Use a sintaxe do assembler Unix. Este é o padrão quando configurado para pdp11 - * - bsd.

-mdec-asm
Use a sintaxe do assembler DEC. Este é o padrão quando configurado para qualquer alvo PDP-11
exceto pdp11 - * - bsd.

picoChip Opções

Este -m as opções são definidas para implementações picoChip:

-mae =ae_type
Defina o conjunto de instruções, conjunto de registros e parâmetros de agendamento de instruções para a matriz
tipo de elemento ae_type. Valores suportados para ae_type são QUALQUER, MULe MAC.

-mae = QUALQUER seleciona um tipo de AE ​​completamente genérico. O código gerado com esta opção é executado
em qualquer um dos outros tipos de AE. O código não é tão eficiente quanto seria se compilado
para um tipo específico de AE ​​e alguns tipos de operação (por exemplo, multiplicação) não funcionam
corretamente em todos os tipos de AE.

-mae = MUL seleciona um tipo MUL AE. Este é o tipo de AE ​​mais útil para código compilado,
e é o padrão.

-mae = MAC seleciona um MAC AE estilo DSP. O código compilado com esta opção pode sofrer de
baixo desempenho de manipulação de byte (char), uma vez que o DSP AE não fornece
suporte de hardware para carregamento / armazenamento de bytes.

-msymbol-as-address
Habilite o compilador para usar diretamente um nome de símbolo como um endereço em um carregamento / armazenamento
instrução, sem primeiro carregá-la em um registrador. Normalmente, o uso deste
opção gera programas maiores, que são executados mais rápido do que quando a opção não é usada.
No entanto, os resultados variam de programa para programa, por isso é deixado como uma opção do usuário,
em vez de estar permanentemente ativado.

-mno-ineficiente-avisos
Desativa avisos sobre a geração de código ineficiente. Esses avisos podem ser
gerado, por exemplo, ao compilar o código que executa operações de memória em nível de byte
no tipo MAC AE. O MAC AE não tem suporte de hardware para memória em nível de byte
operações, portanto, todos os carregamentos / armazenamentos de bytes devem ser sintetizados a partir do carregamento / armazenamento de palavras
operações. Isso é ineficiente e um aviso é gerado para indicar que você
deve reescrever o código para evitar operações de byte, ou para direcionar um tipo AE que tem o
suporte de hardware necessário. Esta opção desativa esses avisos.

PowerPC Opções

Estes estão listados em

RL78 Opções

-msim
Links em bibliotecas de destino adicionais para oferecer suporte à operação em um simulador.

-mmul = nenhum
-mmul = g13
-mmul = rl78
Especifica o tipo de suporte de multiplicação de hardware a ser usado. O padrão é
Nenhum, que usa funções de multiplicação de software. o g13 opção é para o
hardware multiplica / divide periféricos apenas nos alvos RL78 / G13. o rl78 opção
para a multiplicação de hardware padrão definida no manual do software RL78.

-m64bit-doubles
-m32bit-doubles
Faça com que o tipo de dados "duplo" seja de 64 bits (-m64bit-doubles) ou 32 bits (-m32bit-doubles)
no tamanho. O padrão é -m32bit-doubles.

IBM RS / 6000 e assim PowerPC Opções

Este -m as opções são definidas para o IBM RS / 6000 e 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
Você usa essas opções para especificar quais instruções estão disponíveis no processador que você
estão usando. O valor padrão dessas opções é determinado durante a configuração do GCC.
Especificando o -mcpu =cpu_type substitui a especificação dessas opções. Nós
recomendo que você use o -mcpu =cpu_type opção em vez das opções listadas acima.

Especificando -mpowerpc-gpopt permite que o GCC use a arquitetura PowerPC opcional
instruções no grupo de finalidade geral, incluindo raiz quadrada de ponto flutuante.
Especificando -mpowerpc-gfxopt permite que o GCC use a arquitetura PowerPC opcional
instruções no grupo Graphics, incluindo seleção de ponto flutuante.

A -mmfcrf opção permite que o GCC gere a movimentação do campo de registro de condição
instrução implementada no processador POWER4 e outros processadores que suportam o
Arquitetura PowerPC V2.01. o -mpopcntb opção permite que o GCC gere o popcount
e instrução de estimativa recíproca FP de precisão dupla implementada no POWER5
processador e outros processadores que suportam a arquitetura PowerPC V2.02. o
-mpopcntd opção permite que o GCC gere a instrução popcount implementada no
Processador POWER7 e outros processadores que suportam a arquitetura PowerPC V2.06.
A -mfprnd opção permite que o GCC gere o ciclo de FP para instruções inteiras
implementado no processador POWER5 + e outros processadores que suportam o PowerPC
Arquitetura V2.03. o -mcmpb opção permite que o GCC gere os bytes de comparação
instrução implementada no processador POWER6 e outros processadores que suportam o
Arquitetura PowerPC V2.05. o -mmfpgpr opção permite que o GCC gere o movimento FP
para / de instruções de registro de uso geral implementadas no processador POWER6X e
outros processadores que suportam a arquitetura PowerPC V2.05 estendida. o -mhard-dfp
opção permite que o GCC gere as instruções de ponto flutuante decimal implementadas em
alguns processadores POWER.

A -mpowerpc64 opção permite que o GCC gere as instruções adicionais de 64 bits que
são encontrados na arquitetura PowerPC64 completa e para tratar GPRs como 64-bit, doubleword
quantidades. O padrão do GCC é -mno-powerpc64.

-mcpu =cpu_type
Defina o tipo de arquitetura, registre o uso e os parâmetros de programação de instruções para
tipo de máquina cpu_type. Valores suportados para cpu_type são 401, 403, 405, 405fp, 440,
440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, titã, power3, power4, power5, power5 +, power6,
poder6x, power7, power8, poder pc, powerpc64, powerpc64lee rs64.

-mcpu = powerpc, -mcpu = powerpc64e -mcpu = powerpc64le especificar PowerPC puro de 32 bits
(qualquer um dos endian), PowerPC big endian de 64 bits e PowerPC little endian de 64 bits
tipos de máquinas de arquitetura, com um modelo de processador genérico apropriado assumido para
fins de agendamento.

As outras opções especificam um processador específico. Código gerado sob essas opções
funciona melhor naquele processador e pode não funcionar nos outros.

A -mcpu opções ativam ou desativam automaticamente as seguintes opções:

-maltivec -mfprnd -mhard-float -mmfcrf -múltiplos -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-move -mpower8-fusão
-power8-vector -mquad-memória -mquad-memória-atômica

As opções específicas definidas para qualquer CPU em particular variam entre as versões do compilador,
dependendo de qual configuração parece produzir o código ideal para essa CPU; não faz
refletem necessariamente as capacidades reais do hardware. Se você deseja definir um
opção individual para um determinado valor, você pode especificá-lo após o -mcpu opção,
como -mcpu = 970 -mno-altivec.

No AIX, o -maltivec e assim -mpowerpc64 opções não são habilitadas ou desabilitadas pelo -mcpu
opção no momento porque o AIX não tem suporte completo para essas opções. Você pode
ainda ative ou desative-os individualmente se tiver certeza de que funcionará em seu
ambiente.

-mtune =cpu_type
Defina os parâmetros de programação de instrução para o tipo de máquina cpu_type, mas não defina
o tipo de arquitetura ou registro de uso, como -mcpu =cpu_type faz. Os mesmos valores para
cpu_type são usados para -mtune quanto a -mcpu. Se ambos forem especificados, o código gerado
usa a arquitetura e os registros definidos por -mcpu, mas os parâmetros de agendamento definidos por
-mtune.

-mcmodel = pequeno
Gere código PowerPC64 para o modelo pequeno: O TOC é limitado a 64k.

-mcmodel = medium
Gere o código PowerPC64 para o modelo médio: O TOC e outros dados estáticos podem estar ativos
para um total de 4G de tamanho.

-mcmodel = grande
Gere código PowerPC64 para o modelo grande: O TOC pode ter até 4G de tamanho. De outros
os dados e o código são limitados apenas pelo espaço de endereço de 64 bits.

-maltivec
-mno-altivec
Gera código que usa (não usa) instruções AltiVec, e também permite o uso
de funções integradas que permitem um acesso mais direto ao conjunto de instruções AltiVec.
Você também pode precisar definir -mabi = altivec para ajustar o ABI atual com AltiVec ABI
aprimoramentos.

Quando -maltivec é usado, ao invés de -maltivec = le or -maltivec = ser, a ordem do elemento
para intrínsecos Altivec como "vec_splat", "vec_extract" e "vec_insert" correspondem
ordem do elemento da matriz correspondente ao endianness do destino. Ou seja, elemento
zero identifica o elemento mais à esquerda em um registro vetorial ao almejar um big-endian
plataforma e identifica o elemento mais à direita em um registro de vetor ao direcionar um
plataforma little-endian.

-maltivec = ser
Gere instruções Altivec usando ordem de elemento big-endian, independentemente de
o alvo é big ou little-endian. Este é o padrão ao almejar um big-endian
plataforma.

A ordem dos elementos é usada para interpretar os números dos elementos nos intrínsecos do Altivec, como
"vec_splat", "vec_extract" e "vec_insert". Por padrão, eles correspondem ao elemento da matriz
ordem correspondente ao endianness para o alvo.

-maltivec = le
Gere instruções Altivec usando a ordem dos elementos little-endian, independentemente de
o alvo é big ou little-endian. Este é o padrão ao direcionar um pouco
plataforma endian. Esta opção é atualmente ignorada ao almejar um big-endian
plataforma.

A ordem dos elementos é usada para interpretar os números dos elementos nos intrínsecos do Altivec, como
"vec_splat", "vec_extract" e "vec_insert". Por padrão, eles correspondem ao elemento da matriz
ordem correspondente ao endianness para o alvo.

-mvrsave
-mno-vrsave
Gere instruções VRSAVE ao gerar o código AltiVec.

-mgen-cell-microcode
Gerar instruções de microcódigo celular.

-mwarn-cell-microcódigo
Avisa quando uma instrução de microcódigo Cell é emitida. Um exemplo de um microcódigo celular
a instrução é uma mudança variável.

-msecure-plt
Gerar código que permite ld e assim ld.so para construir executáveis ​​e bibliotecas compartilhadas com
seções não executáveis ​​".plt" e ".got". Esta é uma opção de SYSV ABI PowerPC de 32 bits.

-mbss-plt
Gere código que usa uma seção BSS ".plt" que ld.so preenche e requer ".plt"
e seções ".got" que são graváveis ​​e executáveis. Este é um PowerPC de 32 bits
Opção SYSV ABI.

-misel
-mno-isel
Essa opção ativa ou desativa a geração de instruções ISEL.

-misel =sim não
Esta opção foi descontinuada. Usar -misel e assim -mno-isel ao invés.

-mspe
-mno-spe
Essa opção ativa ou desativa a geração de instruções SPE simd.

-mparado
-mno-pareado
Esta opção ativa ou desativa a geração de instruções simd PAIRED.

-mspe =sim não
Esta opção está obsoleta. Usar -mspe e assim -mno-spe ao invés.

-mvsx
-mno-vsx
Gerar código que usa (não usa) instruções vetoriais / escalares (VSX) e também
permitem o uso de funções integradas que permitem um acesso mais direto ao VSX
conjunto de instruções.

-mcrypto
-mno-cripto
Habilite o uso (desabilite) das funções integradas que permitem o acesso direto ao
instruções criptográficas que foram adicionadas na versão 2.07 do PowerPC ISA.

-mdirect-move
-mno-direct-move
Gerar código que usa (não usa) as instruções para mover dados entre os
registros de uso geral e os registros vetor / escalar (VSX) que foram adicionados em
versão 2.07 do PowerPC ISA.

-mpower8-fusão
-mno-power8-fusion
Gerar código que mantém (não mantém) algumas operações inteiras adjacentes para que o
as instruções podem ser fundidas em processadores power8 e posteriores.

-power8-vector
-mno-power8-vetor
Gere código que usa (não usa) as instruções vetoriais e escalares que foram
adicionado na versão 2.07 do PowerPC ISA. Também permite o uso de funções integradas
que permitem um acesso mais direto às instruções do vetor.

-mquad-memória
-mno-quad-memória
Gere código que usa (não usa) as instruções de memória de palavra quádrupla não atômica.
A -mquad-memória opção requer o uso do modo de 64 bits.

-mquad-memória-atômica
-mno-quad-memória-atômica
Gere código que usa (não usa) as instruções de memória de palavra quádrupla atômica. o
-mquad-memória-atômica opção requer o uso do modo de 64 bits.

-mupper-regs-df
-mno-upper-regs-df
Gerar código que usa (não usa) as instruções escalares de precisão dupla que
visar todos os 64 registros no conjunto de registros de ponto flutuante vetorial / escalar que foram
adicionado na versão 2.06 do PowerPC ISA. -mupper-regs-df é ativado por padrão se
você usa qualquer um dos -mcpu = power7, -mcpu = power8ou -mvsx opções.

-mupper-regs-sf
-mno-upper-regs-sf
Gerar código que usa (não usa) as instruções escalares de precisão simples que
visar todos os 64 registros no conjunto de registros de ponto flutuante vetorial / escalar que foram
adicionado na versão 2.07 do PowerPC ISA. -mupper-regs-sf é ativado por padrão se
você usa qualquer um dos -mcpu = power8 or -power8-vector opções.

-mupper-regs
-mno-upper-regs
Gerar código que usa (não usa) as instruções escalares que visam todos os 64
registradores no conjunto de registradores de ponto flutuante vetorial / escalar, dependendo do modelo de
a máquina.

Se o -mno-upper-regs opção é usada, ela desliga ambos -mupper-regs-sf e assim
-mupper-regs-df opções.

-mfloat-gprs =sim / solteiro / duplo / não
-mfloat-gprs
Esta opção ativa ou desativa a geração de operações de ponto flutuante no
registradores de uso geral para arquiteturas que o suportam.

O argumento sim or solteiro permite o uso de ponto flutuante de precisão única
operações.

O argumento duplo permite o uso de ponto flutuante de precisão simples e dupla
operações.

O argumento não desativa operações de ponto flutuante nos registradores de uso geral.

Esta opção está disponível apenas no MPC854x.

-m32
-m64
Gerar código para ambientes de 32 bits ou 64 bits de destinos Darwin e SVR4 (incluindo
GNU / Linux). O ambiente de 32 bits define int, long e pointer para 32 bits e
gera código que é executado em qualquer variante do PowerPC. O ambiente de 64 bits define int para
32 bits e longo e ponteiro para 64 bits, e gera código para PowerPC64, como para
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-soma-em-toc
-mminimal-toc
Modifica a geração do TOC (Índice), que é criado para cada
arquivo executável. o -mfull-toc opção é selecionada por padrão. Nesse caso, GCC
aloca pelo menos uma entrada TOC para cada referência de variável não automática única em
seu programa. O GCC também coloca constantes de ponto flutuante no TOC. No entanto, apenas
16,384 entradas estão disponíveis no TOC.

Se você receber uma mensagem de erro do linker informando que você ultrapassou o limite disponível
Espaço TOC, você pode reduzir a quantidade de espaço TOC usado com o -mno-fp-in-toc e assim
-mno-soma-em-toc opções. -mno-fp-in-toc evita que o GCC coloque ponto flutuante
constantes no TOC e -mno-soma-em-toc força o GCC a gerar código para calcular o
soma de um endereço e uma constante em tempo de execução, em vez de colocar essa soma no TOC.
Você pode especificar uma ou ambas as opções. Cada um faz com que o GCC produza muito
código ligeiramente mais lento e maior à custa de conservar o espaço TOC.

Se você ainda ficar sem espaço no TOC, mesmo quando especificar essas duas opções,
especificamos -mminimal-toc em vez de. Esta opção faz com que o GCC faça apenas uma entrada TOC para
cada arquivo. Quando você especifica esta opção, o GCC produz um código que é mais lento e maior
mas que usa muito pouco espaço TOC. Você pode querer usar esta opção apenas em
arquivos que contêm código executado com menos frequência.

-maix64
-maix32
Ative AIX ABI de 64 bits e convenção de chamada: ponteiros de 64 bits, tipo "longo" de 64 bits e
a infraestrutura necessária para suportá-los. Especificando -maix64 implica -mpowerpc64,
enquanto -maix32 desativa o ABI de 64 bits e implica -mno-powerpc64. O padrão do GCC é
-maix32.

-mxl-compat
-mno-xl-compat
Produzir código que esteja mais de acordo com a semântica do compilador IBM XL ao usar AIX-
ABI compatível. Passe argumentos de ponto flutuante para funções prototipadas além do
registre a área de salvamento (RSA) na pilha além dos FPRs de argumento. Não presuma
aquele duplo mais significativo no valor duplo longo de 128 bits é devidamente arredondado quando
comparando valores e convertendo para o dobro. Use nomes de símbolo XL para duplo longo
rotinas de suporte.

A convenção de chamada AIX foi estendida, mas não documentada inicialmente para lidar com um
caso obscuro K&R C de chamar uma função que leva o endereço de seus argumentos com
menos argumentos do que o declarado. Os compiladores IBM XL acessam argumentos de ponto flutuante que
não cabem no RSA da pilha quando uma sub-rotina é compilada sem
otimização. Porque sempre armazenar argumentos de ponto flutuante na pilha é
ineficiente e raramente necessária, esta opção não é habilitada por padrão e apenas é
necessário ao chamar sub-rotinas compiladas por compiladores IBM XL sem otimização.

-mpe
Suporte IBM RS / 6000 SP Paralelo Meio Ambiente (EDUCAÇAO FISICA). Vincule um aplicativo escrito para usar
mensagem transmitida com código de inicialização especial para permitir que o aplicativo seja executado. o
sistema deve ter PE instalado no local padrão (/usr/lpp/ppe.poe/), ou o
óculos arquivo deve ser substituído com o -specs = opção para especificar o apropriado
localização do diretório. O Ambiente Paralelo não suporta threads, então o -mpe
opção e -pthread opção são incompatíveis.

-maligno-natural
-poder maligno
No AIX, Darwin de 32 bits e PowerPC GNU / Linux de 64 bits, a opção -maligno-natural
substitui o alinhamento definido por ABI de tipos maiores, como duplos de ponto flutuante,
em seu limite natural baseado em tamanho. A opção -poder maligno instrui o GCC a
siga as regras de alinhamento especificadas pela ABI. O padrão do GCC é o alinhamento padrão
definido na ABI.

No Darwin de 64 bits, o alinhamento natural é o padrão, e -poder maligno não é
suportado.

-msoft-float
-mhard-float
Gere código que não usa (usa) o conjunto de registros de ponto flutuante. Programas
emulação de ponto flutuante é fornecida se você usar o -msoft-float opção, e passar o
opção para GCC ao vincular.

-msingle-float
-mdouble-float
Gere código para operações de ponto flutuante de precisão única ou dupla.
-mdouble-float implica -msingle-float.

-msimple-fpu
Não gere instruções "sqrt" e "div" para a unidade de ponto flutuante de hardware.

-mfpu =nome
Especifique o tipo de unidade de ponto flutuante. Valores válidos para nome são sp_lite (equivalente a
-msingle-float -msimple-fpu), dp_lite (equivalente a -mdouble-float -msimple-fpu),
sp_full (equivalente a -msingle-float), E dp_full (equivalente a -mdouble-float).

-mxilinx-fpu
Realize otimizações para a unidade de ponto flutuante em Xilinx PPC 405/440.

-múltiplos
-mno-múltiplo
Gerar código que usa (não usa) as instruções de carregamento de várias palavras e o
armazenar instruções com várias palavras. Essas instruções são geradas por padrão em
Sistemas POWER, e não gerados em sistemas PowerPC. Não use -múltiplos em pouco
sistemas PowerPC endian, uma vez que essas instruções não funcionam quando o processador está em
modo little-endian. As exceções são PPC740 e PPC750 que permitem estes
instruções no modo little-endian.

-mstring
-mno-string
Gerar código que usa (não usa) as instruções da string de carregamento e o armazenamento
string word instruções para salvar vários registros e fazer pequenos movimentos de bloco. Esses
as instruções são geradas por padrão em sistemas POWER e não geradas em PowerPC
sistemas. Não use -mstring em sistemas PowerPC little-endian, uma vez que aqueles
as instruções não funcionam quando o processador está no modo little-endian. As exceções
são PPC740 e PPC750 que permitem essas instruções no modo little-endian.

-mupdate
-mno-atualização
Gerar código que usa (não usa) as instruções de carregamento ou armazenamento que atualizam o
registro de base para o endereço da localização de memória calculada. Essas instruções
são gerados por padrão. Se você usar -mno-atualização, há uma pequena janela entre o
hora em que o ponteiro da pilha é atualizado e o endereço do quadro anterior é
armazenado, o que significa que o código que percorre o frame da pilha entre interrupções ou sinais pode
obter dados corrompidos.

-mavoid-indexed-endereços
-mno-Avoid-indexed-endereços
Gerar código que tenta evitar (não evitar) o uso de carga ou armazenamento indexado
instruções. Estas instruções podem incorrer em uma penalidade de desempenho em processadores Power6
em certas situações, como ao percorrer grandes matrizes que cruzam um 16M
fronteira. Esta opção é habilitada por padrão ao direcionar Power6 e desabilitada
de outra forma.

-mfused-madd
-mno-fused-madd
Gerar código que usa (não usa) o ponto flutuante, se multiplica e se acumula
instruções. Estas instruções são geradas por padrão se o ponto flutuante do hardware
é usado. O dependente da máquina -mfused-madd opção agora está mapeada para a máquina-
de treinadores em Entrevista Motivacional -ffp-contract = fast opção, e -mno-fused-madd está mapeado para
-ffp-contract = off.

-mmulhw
-mno-mulhw
Gerar código que usa (não usa) a meia palavra multiplica e multiplica-acumula
instruções sobre os processadores IBM 405, 440, 464 e 476. Essas instruções são
gerado por padrão ao direcionar esses processadores.

-mdlmzb
-mno-dlmzb
Gerar código que usa (não usa) o string-search dlmzb instrução na IBM
405, 440, 464 e 476 processadores. Esta instrução é gerada por padrão quando
visando esses processadores.

-mno-bit-align
-mbit-align
No System V.4 e nos sistemas PowerPC incorporados não forçam estruturas e uniões
que contêm campos de bits a serem alinhados ao tipo de base do campo de bits.

Por exemplo, por padrão, uma estrutura contendo nada além de 8 campos de bits "sem sinal" de
o comprimento 1 está alinhado a um limite de 4 bytes e tem um tamanho de 4 bytes. Usando
-mno-bit-align, a estrutura é alinhada a um limite de 1 byte e tem 1 byte de tamanho.

-mno-strict-align
-mstrict-align
No System V.4 e nos sistemas PowerPC incorporados, não presuma que a memória não alinhada
as referências são tratadas pelo sistema.

-mrelocável
-mno-relocável
Gerar código que permite (não permite) que um executável estático seja realocado para um
endereço diferente em tempo de execução. Um carregador de sistema PowerPC embutido simples deve
realocar todo o conteúdo de ".got2" e locais de 4 bytes listados em ".fixup"
seção, uma tabela de endereços de 32 bits gerada por esta opção. Para que isso funcione, todos
objetos ligados entre si devem ser compilados com -mrelocável or -mrelocável-lib.
-mrelocável o código alinha a pilha a um limite de 8 bytes.

-mrelocável-lib
-mno-relocável-lib
Gostar -mrelocável, -mrelocável-lib gera uma seção ".fixup" para permitir estática
executáveis ​​a serem realocados em tempo de execução, mas -mrelocável-lib não usa o
alinhamento de pilha menor de -mrelocável. Objetos compilados com -mrelocável-lib pode
ser vinculado a objetos compilados com qualquer combinação dos -mrelocável opções.

-mno-toc
-mtoc
No System V.4 e nos sistemas PowerPC incorporados, não presuma que o registro 2 contém
um ponteiro para uma área global apontando para os endereços usados ​​no programa.

-um pouco
-mlittle-endian
No System V.4 e nos sistemas PowerPC incorporados, compilar o código para o processador em pouco
modo endian. o -mlittle-endian opção é a mesma que -um pouco.

-grande
-mbi-endian
No System V.4 e nos sistemas PowerPC embutidos, compilar o código para o processador em grandes
modo endian. o -mbi-endian opção é a mesma que -grande.

-mdynamic-no-pic
Nos sistemas Darwin e Mac OS X, compile o código de forma que não seja realocável, mas que
suas referências externas são realocáveis. O código resultante é adequado para
aplicativos, mas não bibliotecas compartilhadas.

-msingle-pic-base
Trate o registro usado para endereçamento PIC como somente leitura, em vez de carregá-lo no
prólogo para cada função. O sistema de tempo de execução é responsável por inicializar este
registrar com um valor apropriado antes do início da execução.

-mprioritize-restricted-insns =prioridade
Esta opção controla a prioridade que é atribuída ao slot de despacho restrito
instruções durante a segunda passagem de agendamento. O argumento prioridade pega o valor
0, 1ou 2 para atribuir prioridade nenhuma, mais alta ou segunda mais alta (respectivamente) a
instruções restritas ao slot de envio.

-msched-costly-dep =tipo_dependência
Esta opção controla quais dependências são consideradas caras pelo destino durante
programação de instruções. O argumento tipo_dependência pega um dos seguintes
valores:

não Nenhuma dependência custa caro.

todos os Todas as dependências são caras.

true_store_to_load
Uma verdadeira dependência da loja para o carregamento custa caro.

store_to_load
Qualquer dependência da loja ao carregamento é custosa.

número
Qualquer dependência para a qual a latência seja maior ou igual a número é caro.

-minsert-sched-nops =esquema
Esta opção controla qual esquema de inserção NOP é usado durante o segundo agendamento
passar. O argumento esquema assume um dos seguintes valores:

não Não insira NOPs.

caminho Preencher com NOPs qualquer grupo de despacho que tenha slots de emissão vagos, de acordo com o
agrupamento do planejador.

reagrupar_exato
Insira NOPs para forçar insns dependentes caros em grupos separados. Insira exatamente
quantos NOPs forem necessários para forçar um insn a um novo grupo, de acordo com a estimativa
agrupamento de processadores.

número
Insira NOPs para forçar insns dependentes caros em grupos separados. Inserir número
NOPs para forçar um insn a um novo grupo.

-mcall-sysv
No System V.4 e nos sistemas PowerPC incorporados, compilar o código usando convenções de chamada que
aderir ao rascunho de março de 1995 da Interface Binária do Aplicativo System V, PowerPC
suplemento do processador. Este é o padrão, a menos que você tenha configurado o GCC usando
powerpc - * - eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Especifique ambos -mcall-sysv e assim -meabi opções.

-mcall-sysv-noeabi
Especifique ambos -mcall-sysv e assim -mno-eabi opções.

-mcall-aixdesc
No System V.4 e nos sistemas PowerPC integrados, compile o código para o sistema operacional AIX.

-mcall-linux
No System V.4 e nos sistemas PowerPC incorporados, compilar o código para o GNU baseado em Linux
sistema.

-mcall-freebsd
No System V.4 e sistemas embutidos PowerPC compilar o código para o funcionamento do FreeBSD
sistema.

-mcall-netbsd
No System V.4 e nos sistemas PowerPC embutidos, compilar o código para o funcionamento do NetBSD
sistema.

-mcall-openbsd
No System V.4 e sistemas embutidos PowerPC compilar o código para o funcionamento do OpenBSD
sistema.

-maix-struct-return
Retorna todas as estruturas na memória (conforme especificado pelo AIX ABI).

-msvr4-struct-return
Retorna estruturas menores que 8 bytes em registros (conforme especificado pelo SVR4 ABI).

-mabi =tipo abi
Estenda a ABI atual com uma extensão específica ou remova essa extensão. Válido
valores são Altivec, sem altivec, spe, sem especificação, ibmlongdouble, ieelongdouble, elfv1,
elfv2.

-mabi = spe
Estenda a ABI atual com extensões SPE ABI. Isso não altera o ABI padrão,
em vez disso, adiciona as extensões SPE ABI à ABI atual.

-mabi = no-spe
Desative as extensões Book-E SPE ABI para a ABI atual.

-mabi = ibmlongdouble
Altere o ABI atual para usar o duplo longo de precisão estendida da IBM. Este é um PowerPC
Opção SYSV ABI de 32 bits.

-mabi = ieeelongdouble
Altere o ABI atual para usar o duplo longo de precisão estendida IEEE. Este é um PowerPC
Opção Linux ABI de 32 bits.

-mabi = elfv1
Altere a ABI atual para usar a ABI ELFv1. Este é o ABI padrão para big-endian
PowerPC Linux de 64 bits. Substituir a ABI padrão requer suporte especial do sistema e
é provável que falhe de maneiras espetaculares.

-mabi = elfv2
Altere a ABI atual para usar a ABI ELFv2. Este é o ABI padrão para pouco
endian PowerPC Linux de 64 bits. Substituir o ABI padrão requer um sistema especial
apoio e é provável que falhe de maneiras espetaculares.

-mprotótipo
-mno-protótipo
No System V.4 e nos sistemas PowerPC incorporados, presumem que todas as chamadas para o argumento variável
as funções são devidamente prototipadas. Caso contrário, o compilador deve inserir uma instrução
antes de cada chamada não prototipada para definir ou limpar o bit 6 do registro do código de condição
("CR") para indicar se os valores de ponto flutuante são passados ​​no ponto flutuante
registradores caso a função receba argumentos variáveis. Com -mprotótipo, apenas chamadas
para funções de argumento de variável prototipada definir ou limpar o bit.

-msim
Em sistemas PowerPC embarcados, suponha que o módulo de inicialização seja chamado sim-crt0.o e assim
que as bibliotecas C padrão são libsim.a e assim libc.a. Este é o padrão para
powerpc - * - eabisim configurações.

-mmvme
Em sistemas PowerPC embarcados, suponha que o módulo de inicialização seja chamado crt0.o e o
bibliotecas C padrão são libmvme.a e assim libc.a.

-loucos
Em sistemas PowerPC embarcados, suponha que o módulo de inicialização seja chamado crt0.o e o
bibliotecas C padrão são libads.a e assim libc.a.

-faca amarela
Em sistemas PowerPC embarcados, suponha que o módulo de inicialização seja chamado crt0.o e o
bibliotecas C padrão são libyk.a e assim libc.a.

-mvxworks
Nos sistemas System V.4 e PowerPC incorporados, especifique que você está compilando para um
Sistema VxWorks.

-membro
Em sistemas PowerPC incorporados, defina o bit "PPC_EMB" no cabeçalho dos sinalizadores ELF para indicar
que ebi deslocalizações estendidas são usadas.

-meabi
-mno-eabi
Em System V.4 e sistemas PowerPC embutidos, (não) aderem ao Embedded
Interface Binária de Aplicativos (EABI), que é um conjunto de modificações no Sistema
Especificações V.4. Selecionando -meabi significa que a pilha está alinhada a um bloco de 8 bytes
limite, uma função "__eabi" é chamada de "principal" para configurar o ambiente EABI,
e o -msdata opção pode usar "r2" e "r13" para apontar para dois pequenos dados separados
áreas. Selecionando -mno-eabi significa que a pilha está alinhada a um limite de 16 bytes, não
A função de inicialização EABI é chamada de "principal", e o -msdata opção usa apenas
"r13" para apontar para uma única área de dados pequena. o -meabi opção está ativada por padrão se você
configurou o GCC usando um dos powerpc * - * - eabi * opções.

-msdata = eabi
Em sistemas System V.4 e PowerPC incorporados, coloque um pequeno "const" inicializado global e
dados estáticos na seção ".sdata2", que são apontados pelo registro "r2". Colocar pequeno
dados globais e estáticos não "const" inicializados na seção ".sdata", que é
apontado pelo registro "r13". Coloque pequenos dados globais e estáticos não inicializados no
seção ".sbss", que é adjacente à seção ".sdata". o -msdata = eabi opção
é incompatível com o -mrelocável opção. O -msdata = eabi opção também define o
-membro opção.

-msdata = sysv
No System V.4 e em sistemas PowerPC incorporados, coloque pequenos dados globais e estáticos no
Seção ".sdata", que é apontada pelo registro "r13". Coloque pequeno não inicializado
dados globais e estáticos na seção ".sbss", adjacente a ".sdata"
seção. o -msdata = sysv opção é incompatível com o -mrelocável opção.

-msdata = padrão
-msdata
Em System V.4 e sistemas PowerPC incorporados, se -meabi é usado, compilar o mesmo código
as -msdata = eabi, caso contrário, compile o código da mesma forma que -msdata = sysv.

-msdata = data
Nos sistemas System V.4 e PowerPC incorporados, coloque pequenos dados globais em ".sdata"
seção. Coloque pequenos dados globais não inicializados na seção ".sbss". Não use
registre "r13" para endereçar pequenos dados no entanto. Este é o comportamento padrão, a menos que
de outros -msdata opções são usadas.

-msdata = nenhum
-mno-sdata
Em sistemas PowerPC incorporados, coloque todos os dados globais e estáticos inicializados em ".data"
seção e todos os dados não inicializados na seção ".bss".

-mblock-move-inline-limit =Números
Inline todas as movimentações de bloco (como chamadas para "memcpy" ou cópias de estrutura) menos que ou
igual a Números bytes. O valor mínimo para Números é de 32 bytes em destinos de 32 bits e 64
bytes em destinos de 64 bits. O valor padrão é específico do destino.

-G Números
Em sistemas PowerPC embarcados, coloque itens globais e estáticos menores ou iguais a Números
bytes em pequenos dados ou seções BSS em vez dos dados normais ou seção BSS.
Por padrão, o Números é 8. O -G Números switch também é passado para o vinculador. Todos os módulos
deve ser compilado com o mesmo -G Números valor.

-mregnames
-mno-regnames
No System V.4 e nos sistemas PowerPC incorporados, (não) emitem nomes de registro no
saída de linguagem assembly usando formas simbólicas.

-mlongcall
-mno-longcall
Por padrão, suponha que todas as chamadas estão distantes para que um período mais longo e mais caro
a sequência de chamada é necessária. Isso é necessário para chamadas com mais de 32 megabytes
(33,554,432 bytes) do local atual. Uma curta chamada é gerada se o
o compilador sabe que a chamada não pode estar tão longe. Esta configuração pode ser substituída por
o atributo de função "shortcall" ou por "#pragma longa chamada(0) ".

Alguns linkers são capazes de detectar chamadas fora do intervalo e gerar código de adesão em
o voo. Nesses sistemas, chamadas longas são desnecessárias e geram código mais lento. Como
desta redação, o vinculador AIX pode fazer isso, assim como o vinculador GNU para PowerPC / 64. Isto
está planejado para adicionar esse recurso ao vinculador GNU para sistemas PowerPC de 32 bits também.

Em sistemas Darwin / PPC, "#pragma longcall" gera "jbsr callee, L42", mais um ramo
ilha (código de cola). Os dois endereços de destino representam o receptor e o ramal
ilha. O linker Darwin / PPC prefere o primeiro endereço e gera um "bl callee"
se a instrução PPC "bl" alcança o receptor diretamente; caso contrário, o linker
gera "bl L42" para chamar a ilha filial. A ramificação da ilha é anexada ao
corpo da função de chamada; ele calcula o endereço completo de 32 bits do receptor e
pula para ele.

Em sistemas Mach-O (Darwin), esta opção direciona a emissão do compilador para a cola para
cada chamada direta, e o vinculador Darwin decide se deve usá-la ou descartá-la.

No futuro, o GCC pode ignorar todas as especificações longcall quando o vinculador for conhecido por
gerar cola.

-mtls-marcadores
-mno-tls-marcadores
Marque (não marque) chamadas para "__tls_get_addr" com uma realocação especificando a função
argumento. A realocação permite que o vinculador associe a chamada de função com segurança
instruções de configuração de argumento para otimização TLS, que por sua vez permite que o GCC melhor
agende a sequência.

-pthread
Adiciona suporte para multithreading com o pthreads biblioteca. Esta opção define sinalizadores para
o pré-processador e o vinculador.

-mrecip
-mno-receita
Esta opção permite o uso da estimativa recíproca e estimativa recíproca da raiz quadrada
instruções com etapas adicionais de Newton-Raphson para aumentar a precisão em vez de
fazendo uma divisão ou raiz quadrada e divisão para argumentos de ponto flutuante. Você deveria usar
do -rápida matemática opção ao usar -mrecip (ou pelo menos -funsafe-math-otimizations,
-finite-matemática-only, -frecíproca-matemática e assim -fno-trapping-math) Observe que enquanto o
a taxa de transferência da sequência é geralmente maior do que a taxa de transferência do
instrução recíproca, a precisão da sequência pode ser diminuída em até 2 ulp
(ou seja, o inverso de 1.0 é igual a 0.99999994) para raízes quadradas recíprocas.

-mrecip =optar
Esta opção controla quais instruções de estimativa recíproca podem ser usadas. optar é uma
lista de opções separada por vírgulas, que pode ser precedida por um "!" para inverter a opção:

todos os Habilite todas as instruções de estimativa.

omissão
Habilite as instruções padrão, equivalentes a -mrecip.

Nenhum
Desative todas as instruções de estimativa, equivalente a -mno-receita.

div Habilite as instruções de aproximação recíproca para simples e duplas
precisão.

divf
Ative as instruções de aproximação recíproca de precisão única.

divd
Ative as instruções de aproximação recíproca de precisão dupla.

rsqrt
Habilite as instruções de aproximação de raiz quadrada recíproca para ambos os
dupla precisão.

rsqrtf
Ative as instruções de aproximação de raiz quadrada recíproca de precisão única.

rsqrtd
Ative as instruções de aproximação de raiz quadrada recíproca de precisão dupla.

Então, por exemplo, -mrecip = all,! rsqrtd permite todas as estimativas recíprocas
instruções, exceto para as instruções "FRSQRTE", "XSRSQRTEDP" e "XVRSQRTEDP"
que tratam dos cálculos de raiz quadrada recíproca de precisão dupla.

-mrecip-precisão
-mno-recip-precisão
Suponha (não suponha) que as instruções de estimativa recíproca fornecem
estimativas de precisão do que é exigido pela PowerPC ABI. Selecionando -mcpu = power6,
-mcpu = power7 or -mcpu = power8 seleciona automaticamente -mrecip-precisão. O dobro-
as instruções de estimativa de raiz quadrada de precisão não são geradas por padrão em
máquinas de precisão, uma vez que não fornecem uma estimativa que converge após três
passos.

-mveclibabi =tipo
Especifica o tipo de ABI a ser usado para vetorizar intrínsecos usando uma biblioteca externa.
O único tipo suportado atualmente é massa, que especifica o uso de Matemática da IBM
Bibliotecas do Subsistema de Aceleração (MASS) para vetorizar intrínsecos usando
bibliotecas. O GCC atualmente emite chamadas para "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" e
"tanhf4" ao gerar código para power7. Ambos -ftree-vetorize e assim
-funsafe-math-otimizations também deve ser habilitado. As bibliotecas MASS devem ser
especificado no momento do link.

-mfriz
-mno-friz
Gere (não gere) a instrução "friz" quando o -funsafe-math-otimizations
opção é usada para otimizar o arredondamento de valores de ponto flutuante para inteiros de 64 bits e
de volta ao ponto flutuante. A instrução "friz" não retorna o mesmo valor se o
o número de ponto flutuante é muito grande para caber em um inteiro.

-mpointers-to-nested-functions
-mno-ponteiros-para-funções aninhadas
Gere (não gere) código para carregar o registro de cadeia estática ("r11") quando
chamar por meio de um ponteiro em sistemas AIX e Linux de 64 bits onde um ponteiro de função
aponta para um descritor de 3 palavras que fornece o endereço da função, valor TOC a ser carregado em
registro "r2", e o valor da cadeia estática a ser carregado no registro "r11". o
-mpointers-to-nested-functions está ativado por padrão. Você não pode chamar através de ponteiros para
funções aninhadas ou ponteiros para funções compiladas em outras linguagens que usam o
corrente estática se você usar -mno-ponteiros-para-funções aninhadas.

-msave-toc-indireto
-mno-save-toc-indireto
Gere (não gere) código para salvar o valor TOC no local reservado da pilha
no prólogo da função se a função chamar por meio de um ponteiro no AIX e 64 bits
Sistemas Linux. Se o valor TOC não for salvo no prólogo, ele será salvo um pouco antes
a chamada por meio do ponteiro. o -mno-save-toc-indireto opção é o padrão.

-mcompat-align-parm
-mno-compat-align-parm
Gere (não gere) código para passar parâmetros de estrutura com alinhamento máximo
de 64 bits, para compatibilidade com versões mais antigas do GCC.

Versões mais antigas do GCC (anteriores a 4.9.0) incorretamente não alinhavam um parâmetro de estrutura
em um limite de 128 bits quando essa estrutura continha um membro que requer 128 bits
alinhamento. Isso foi corrigido nas versões mais recentes do GCC. Esta opção pode ser usada
para gerar código que seja compatível com funções compiladas com versões mais antigas de
GCC.

A -mno-compat-align-parm opção é o padrão.

RX Opções

Essas opções de linha de comando são definidas para destinos RX:

-m64bit-doubles
-m32bit-doubles
Faça com que o tipo de dados "duplo" seja de 64 bits (-m64bit-doubles) ou 32 bits (-m32bit-doubles)
no tamanho. O padrão é -m32bit-doubles. Importante Hardware de ponto flutuante RX só funciona
em valores de 32 bits, razão pela qual o padrão é -m32bit-doubles.

-fpu
-nofpu
Possibilita (-fpu) ou desativa (-nofpu) o uso de hardware de ponto flutuante RX. o
o padrão é habilitado para a série RX600 e desabilitado para a série RX200.

As instruções de ponto flutuante são geradas apenas para valores de ponto flutuante de 32 bits,
no entanto, o hardware FPU não é usado para duplas se o -m64bit-doubles opção
usava.

Importante Se o -fpu opção é habilitada então -funsafe-math-otimizations também está habilitado
automaticamente. Isso ocorre porque as instruções do RX FPU não são seguras.

-mcpu =nome
Seleciona o tipo de CPU RX a ser direcionado. Atualmente três tipos são suportados, o
genérico RX600 e assim RX200 hardware da série e o específico RX610 CPU. O padrão é
RX600.

A única diferença entre RX600 e assim RX610 é que a RX610 não suporta o
Instrução "MVTIPL".

A RX200 série não tem uma unidade de ponto flutuante de hardware e assim -nofpu está ativado
por padrão quando este tipo é selecionado.

-mbig-endian-data
-mlittle-endian-data
Armazene os dados (mas não o código) no formato big-endian. O padrão é
-mlittle-endian-data, ou seja, para armazenar dados no formato little-endian.

-msmall-data-limit =N
Especifica o tamanho máximo em bytes de variáveis ​​globais e estáticas que podem ser colocadas
na pequena área de dados. Usar a pequena área de dados pode levar a menores e mais rápidos
código, mas o tamanho da área é limitado e cabe ao programador garantir que
a área não transborda. Além disso, quando a pequena área de dados é usada, um dos RX's
registradores (geralmente "r13") são reservados para uso apontando para esta área, então não é
mais disponível para uso pelo compilador. Isso pode resultar em mais lento e / ou maior
código se as variáveis ​​forem colocadas na pilha em vez de serem mantidas neste registro.

Observe, variáveis ​​comuns (variáveis ​​que não foram inicializadas) e constantes são
não colocados na pequena área de dados, pois são atribuídos a outras seções no
executável de saída.

O valor padrão é zero, o que desativa este recurso. Observe que este recurso não é
habilitado por padrão com níveis de otimização mais altos (-O2 etc) por causa do
efeitos potencialmente prejudiciais da reserva de um registro. Depende do programador
para experimentar e descobrir se esse recurso é benéfico para o programa. Ver
a descrição do -mpid opção para uma descrição de como o registro real para
segure o ponteiro pequeno da área de dados é escolhido.

-msim
-mno-sim
Use o tempo de execução do simulador. O padrão é usar o tempo de execução específico da placa libgloss.

-mas100-sintaxe
-mno-as100-sintaxe
Ao gerar a saída do assembler, use uma sintaxe que seja compatível com AS100 da Renesas
montador. Esta sintaxe também pode ser tratada pelo assembler GAS, mas tem alguns
restrições, portanto, não é gerado por padrão.

-mmax-constant-size =N
Especifica o tamanho máximo, em bytes, de uma constante que pode ser usada como operando em
uma instrução RX. Embora o conjunto de instruções RX permita constantes de até 4
bytes de comprimento a serem usados ​​nas instruções, um valor mais longo equivale a um maior
instrução. Assim, em algumas circunstâncias, pode ser benéfico restringir o tamanho de
constantes que são usadas nas instruções. Constantes que são muito grandes são, em vez disso,
colocado em um pool constante e referenciado por via indireta de registro.

O valor que N pode estar entre 0 e 4. Um valor de 0 (o padrão) ou 4 significa que
constantes de qualquer tamanho são permitidas.

-mrelax
Habilite o relaxamento do vinculador. O relaxamento do linker é um processo pelo qual o linker tenta
para reduzir o tamanho de um programa, encontrando versões mais curtas de várias instruções.
Desativado por padrão.

-mint-register =N
Especifique o número de registros a serem reservados para funções de manipulador de interrupção rápida. o
valor N pode estar entre 0 e 4. Um valor de 1 significa que o registro "r13" está reservado
para o uso exclusivo de manipuladores de interrupção rápida. Um valor de 2 reservas "r13" e
"r12". Um valor de 3 reservas "r13", "r12" e "r11" e um valor de 4 reservas "r13"
por meio de "r10". Um valor de 0, o padrão, não reserva nenhum registro.

-msave-acc-in-interrupts
Especifica que as funções do manipulador de interrupção devem preservar o registro do acumulador.
Isso só é necessário se o código normal pode usar o registro do acumulador, por exemplo
porque realiza multiplicações de 64 bits. O padrão é ignorar o acumulador
pois isso torna os manipuladores de interrupção mais rápidos.

-mpid
-mno-pid
Permite a geração de dados independentes de posição. Quando ativado, qualquer acesso a
dados constantes são feitos por meio de um deslocamento de um endereço de base mantido em um registro. Esse
permite que a localização de dados constantes seja determinada em tempo de execução sem exigir
o executável a ser realocado, o que é um benefício para aplicativos incorporados com
restrições de memória. Os dados que podem ser modificados não são afetados por esta opção.

Observe que o uso deste recurso reserva um registro, geralmente "r13", para os dados constantes
endereço de base. Isso pode resultar em código mais lento e / ou maior, especialmente em códigos complicados
funções.

O registro real escolhido para manter o endereço de base de dados constante depende se
do -msmall-data-limit e / ou o -registro de hortelã opções de linha de comando estão habilitadas.
Começando com o registro "r13" e prosseguindo para baixo, os registros são alocados primeiro
para satisfazer os requisitos de -registro de hortelã, Em seguida -mpid e finalmente
-msmall-data-limit. Assim, é possível que o pequeno registro de área de dados seja "r8"
se ambos -mint-register = 4 e assim -mpid são especificados na linha de comando.

Por padrão, esse recurso não está habilitado. O padrão pode ser restaurado por meio do -mno-pid
opção de linha de comando.

-mno-warn-multiple-fast-interrupts
-mwarn-multiple-fast-interrupts
Evita que o GCC emita uma mensagem de aviso se encontrar mais de uma interrupção rápida
manipulador quando ele está compilando um arquivo. O padrão é emitir um aviso para cada extra
manipulador de interrupção rápida encontrado, pois o RX suporta apenas uma dessas interrupções.

Observação: A opção de linha de comando genérica do GCC -fixado-reg tem um significado especial para o RX
porta quando usado com o atributo de função "interrupt". Este atributo indica um
função destinada a processar interrupções rápidas. O GCC garante que usa apenas os registros
"r10", "r11", "r12" e / ou "r13" e somente desde que o uso normal do
registros correspondentes foram restringidos por meio do -fixado-reg or -registro de hortelã
opções de linha de comando.

S / 390 e assim zSeries Opções

Estes são o -m opções definidas para a arquitetura S / 390 e zSeries.

-mhard-float
-msoft-float
Use (não use) as instruções e registros de ponto flutuante do hardware para
operações pontuais. Quando -msoft-float é especificado, funções em libgcc.a estão acostumados a
realizar operações de ponto flutuante. Quando -mhard-float é especificado, o compilador
gera instruções de ponto flutuante IEEE. Este é o padrão.

-mhard-dfp
-mno-hard-dfp
Use (não use) as instruções de vírgula flutuante decimal do hardware para decimais
operações de ponto flutuante. Quando -mno-hard-dfp é especificado, funções em libgcc.a são
usado para realizar operações de ponto flutuante decimal. Quando -mhard-dfp é especificado, o
o compilador gera instruções de hardware de ponto flutuante decimal. Este é o padrão
por -march = z9-ec ou superior.

-mlong-double-64
-mlong-double-128
Essas opções controlam o tamanho do tipo "duplo longo". Um tamanho de 64 bits torna o
tipo "long double" equivalente ao tipo "double". Este é o padrão.

-mbackchain
-mno-backchain
Armazene (não armazene) o endereço do frame do chamador como um ponteiro backchain no
frame de pilha do callee. Um backchain pode ser necessário para permitir a depuração usando ferramentas que
não compreendo as informações do quadro de chamada DWARF 2. Quando -mno -pack-stack é em
efeito, o ponteiro do backchain é armazenado na parte inferior do frame da pilha; quando
-empacked-stack está em vigor, o backchain é colocado na palavra superior do
Área de salvamento do registro de 96/160 bytes.

Em geral, o código compilado com -mbackchain é compatível com chamadas com código compilado com
-mmo-backchain; no entanto, o uso do backchain para fins de depuração geralmente requer
que todo binário é construído com -mbackchain. Observe que a combinação de
-mbackchain, -empacked-stack e assim -mhard-float não é suportado. A fim de construir um
uso do kernel linux -msoft-float.

O padrão é não manter o backchain.

-empacked-stack
-mno -pack-stack
Use (não use) o layout de pilha compactada. Quando -mno -pack-stack é especificado, o
o compilador usa todos os campos da área de salvamento do registro de bytes 96/160 apenas para seus
finalidade padrão; campos não usados ​​ainda ocupam espaço de pilha. Quando -empacked-stack is
especificado, os slots de registro de salvamento são compactados densamente na parte superior do registro de salvamento
área; o espaço não utilizado é reutilizado para outros fins, permitindo um uso mais eficiente de
o espaço de pilha disponível. Porém, quando -mbackchain também está em vigor, o primeiro
palavra da área de salvamento é sempre usada para armazenar o backchain e o endereço de retorno
o registro é sempre salvo duas palavras abaixo do backchain.

Contanto que o backchain do frame da pilha não seja usado, o código gerado com -empacked-stack
é compatível com chamadas com código gerado com -mno -pack-stack. Observe que alguns não-FSF
lançamentos de código gerado GCC 2.95 para S / 390 ou zSeries que usa o frame de pilha
backchain em tempo de execução, não apenas para fins de depuração. Esse código não é chamado
compatível com o código compilado com -empacked-stack. Além disso, observe que a combinação de
-mbackchain, -empacked-stack e assim -mhard-float não é suportado. A fim de construir um
uso do kernel linux -msoft-float.

O padrão é não usar o layout de pilha compactada.

-msmall-exec
-mno-pequeno-executivo
Gere (ou não gere) código usando a instrução "bras" para fazer a sub-rotina
chamadas. Isso só funciona de forma confiável se o tamanho total do executável não exceder 64k.
O padrão é usar a instrução "basr", que não tem este
limitação.

-m64
-m31
Quando -m31 é especificado, gera código compatível com GNU / Linux para S / 390 ABI. Quando
-m64 for especificado, gera código compatível com GNU / Linux para zSeries ABI. Esse
permite que o GCC, em particular, gere instruções de 64 bits. Para o s390 alvos, o
padrão é -m31, Enquanto que o s390x alvos padrão para -m64.

-mzarch
-mesa
Quando -mzarch for especificado, gere o código usando as instruções disponíveis em
z / Arquitetura. Quando -mesa é especificado, gere o código usando as instruções
disponível em ESA / 390. Observe que -mesa não é possível com -m64. Ao gerar
código compatível com GNU / Linux para S / 390 ABI, o padrão é -mesa. Ao gerar
código compatível com GNU / Linux para zSeries ABI, o padrão é -mzarch.

-mmvcle
-mno-mvcle
Gere (ou não gere) código usando a instrução "mvcle" para realizar o bloco
movimentos. Quando -mno-mvcle for especificado, use um loop "mvc". Este é o padrão
a menos que esteja otimizando para o tamanho.

-mdebug
-mno-debug
Imprima (ou não imprima) informações adicionais de depuração durante a compilação. O padrão é
para não imprimir informações de depuração.

-march =tipo cpu
Gerar código que é executado em tipo cpu, que é o nome de um sistema que representa um
determinado tipo de processador. Valores possíveis para tipo cpu são g5, g6, z900, z990, z9-109,
z9-ec, z10, z196, zEC12e z13. Ao gerar código usando as instruções
disponível em z / Architecture, o padrão é -march = z900. Caso contrário, o padrão é
-march = g5.

-mtune =tipo cpu
Sintonizar para tipo cpu tudo aplicável sobre o código gerado, exceto para o ABI
e o conjunto de instruções disponíveis. A lista de tipo cpu valores são os mesmos que para
-marchar. O padrão é o valor usado para -marchar.

-mtpf-trace
-mno-tpf-trace
Gerar código que adiciona (não adiciona) em ramificações específicas do SO TPF para rastrear rotinas
no sistema operacional. Esta opção está desativada por padrão, mesmo ao compilar para o
TPF OS.

-mfused-madd
-mno-fused-madd
Gerar código que usa (não usa) o ponto flutuante, se multiplica e se acumula
instruções. Estas instruções são geradas por padrão se o ponto flutuante do hardware
é usado.

-mwarn-framesize =tamanho da moldura
Emite um aviso se a função atual exceder o tamanho de quadro fornecido. Porque isso é
uma verificação em tempo de compilação não precisa ser um problema real quando o programa é executado. Isto
destina-se a identificar funções que provavelmente causam um estouro de pilha. Isto é
útil para ser usado em um ambiente com tamanho de pilha limitado, por exemplo, o kernel do Linux.

-mwarn-dynamicstack
Emita um aviso se a função chamar "alloca" ou usar matrizes de tamanho dinâmico. Esse
geralmente é uma má ideia com um tamanho de pilha limitado.

-mstack-guard =guarda-pilha
-mstack-size =Tamanho da pilha
Se essas opções forem fornecidas, o back end do S / 390 emite instruções adicionais no
prólogo de função que aciona uma armadilha se o tamanho da pilha for guarda-pilha bytes acima do
Tamanho da pilha (lembre-se de que a pilha em S / 390 cresce para baixo). Se o guarda-pilha
opção é omitida a menor potência de 2 maior que o tamanho do quadro do compilado
função é escolhida. Essas opções devem ser usadas para ajudar na pilha de depuração
problemas de transbordamento. O código adicionalmente emitido causa apenas uma pequena sobrecarga e
portanto, também pode ser usado em sistemas semelhantes à produção sem maior desempenho
degradação. Os valores dados devem ser potências exatas de 2 e Tamanho da pilha tem que ser
Melhor que guarda-pilha sem exceder 64k. Para ser eficiente, o extra
o código pressupõe que a pilha começa em um endereço alinhado ao valor
dado por Tamanho da pilha. o guarda-pilha opção só pode ser usada em conjunto com
Tamanho da pilha.

-mhotpatch =pré-halfwords,pós-halfwords
Se a opção hotpatch estiver habilitada, um prólogo de função "hot-patching" é gerado para
todas as funções na unidade de compilação. O rótulo da função é anexado ao dado
número de instruções NOP de dois bytes (pré-halfwords, máximo 1000000). Depois de
etiqueta, 2 * pós-halfwords bytes são acrescentados, usando as maiores instruções do tipo NOP
a arquitetura permite (máximo 1000000).

Se ambos os argumentos forem zero, o hotpatching será desabilitado.

Esta opção pode ser substituída por funções individuais com o atributo "hotpatch".

Contagem Opções

Essas opções são definidas para implementações de Pontuação:

-meb
Compile o código para o modo big-endian. Este é o padrão.

-mel
Compile o código para o modo little-endian.

-mnhwloop
Desative a geração de instruções "bcnz".

-muls
Habilite a geração de carga desalinhada e instruções de armazenamento.

-mmac
Habilite o uso de instruções de multiplicação-acumulação. Desativado por padrão.

-mscore5
Especifique o SCORE5 como a arquitetura de destino.

-mscore5u
Especifique o SCORE5U da arquitetura de destino.

-mscore7
Especifique o SCORE7 como a arquitetura de destino. Este é o padrão.

-mscore7d
Especifique o SCORE7D como a arquitetura de destino.

SH Opções

Este -m opções são definidas para as implementações SH:

-m1 Gere código para o SH1.

-m2 Gere código para o SH2.

-m2e
Gere código para o SH2e.

-m2a-nofpu
Gere código para o SH2a sem FPU, ou para um SH2a-FPU de tal forma que o
unidade de ponto flutuante não é usada.

-m2a-single-only
Gere código para o SH2a-FPU, de forma que nenhum ponto flutuante de dupla precisão
operações são usadas.

-m2a-único
Gere código para o SH2a-FPU assumindo que a unidade de ponto flutuante está em precisão simples
modo por padrão.

-m2a
Gere o código para o SH2a-FPU assumindo que a unidade de ponto flutuante está em precisão dupla
modo por padrão.

-m3 Gere código para o SH3.

-m3e
Gere código para o SH3e.

-m4-nofpu
Gere código para o SH4 sem uma unidade de ponto flutuante.

-m4-single-only
Gere código para o SH4 com uma unidade de ponto flutuante que oferece suporte apenas
aritmética de precisão.

-m4-único
Gere o código para o SH4 assumindo que a unidade de ponto flutuante está no modo de precisão simples
por padrão.

-m4 Gere código para o SH4.

-m4-100
Gere o código para SH4-100.

-m4-100-nofpu
Gere o código para SH4-100 de forma que a unidade de ponto flutuante não seja usada.

-m4-100-único
Gere o código para SH4-100 assumindo que a unidade de ponto flutuante está no modo de precisão única
por padrão.

-m4-100-somente único
Gere o código para SH4-100 de forma que nenhum ponto flutuante de precisão dupla
operações são usadas.

-m4-200
Gere o código para SH4-200.

-m4-200-nofpu
Gere o código para SH4-200 sem, de forma que a unidade de ponto flutuante não seja
usava.

-m4-200-único
Gere o código para SH4-200 assumindo que a unidade de ponto flutuante está no modo de precisão única
por padrão.

-m4-200-somente único
Gere o código para SH4-200 de forma que nenhum ponto flutuante de precisão dupla
operações são usadas.

-m4-300
Gere o código para SH4-300.

-m4-300-nofpu
Gere o código para SH4-300 sem, de forma que a unidade de ponto flutuante não seja
usava.

-m4-300-único
Gere o código para SH4-300 de forma que nenhum ponto flutuante de precisão dupla
operações são usadas.

-m4-300-somente único
Gere o código para SH4-300 de forma que nenhum ponto flutuante de precisão dupla
operações são usadas.

-m4-340
Gere o código para SH4-340 (sem MMU, sem FPU).

-m4-500
Gere código para SH4-500 (sem FPU). Passes -isa = sh4-nofpu para o montador.

-m4a-nofpu
Gere código para o SH4al-dsp, ou para um SH4a de forma que o ponto flutuante
unidade não é usada.

-m4a-single-only
Gere código para o SH4a, de forma que nenhum ponto flutuante de dupla precisão
operações são usadas.

-m4a-único
Gere o código para o SH4a assumindo que a unidade de ponto flutuante está em precisão simples
modo por padrão.

-m4a
Gere código para o SH4a.

-m4al
Igual a -m4a-nofpu, exceto que passa implicitamente -dsp para o montador. GCC
não gera nenhuma instrução DSP no momento.

-m5-32media
Gere código de 32 bits para SHmedia.

-m5-32media-nofpu
Gere código de 32 bits para SHmedia de forma que a unidade de ponto flutuante não seja
usava.

-m5-64media
Gere código de 64 bits para SHmedia.

-m5-64media-nofpu
Gere código de 64 bits para SHmedia de forma que a unidade de ponto flutuante não seja
usava.

-m5-compacto
Gere código para SHcompact.

-m5-compact-nofpu
Gere código para SHcompact de forma que a unidade de ponto flutuante não seja usada.

-mb Compile o código para o processador no modo big-endian.

-ml Compile o código para o processador no modo little-endian.

-mdalign
Alinha duplas em limites de 64 bits. Observe que isso muda as convenções de chamada,
e, portanto, algumas funções da biblioteca C padrão não funcionam a menos que você recompile
primeiro com -mdalign.

-mrelax
Encurte algumas referências de endereço no momento do link, quando possível; usa a opção de vinculador
-relaxar.

-mbigtable
Use offsets de 32 bits nas tabelas "switch". O padrão é usar deslocamentos de 16 bits.

-mbitops
Habilite o uso de instruções de manipulação de bits em SH2A.

-mfmovd
Habilite o uso da instrução "fmovd". Verificar -mdalign para restrições de alinhamento.

-mrenesas
Cumpra as convenções de chamada definidas pela Renesas.

-mno-renesas
Cumprir com as convenções de chamada definidas para GCC antes das convenções da Renesas
estavam disponíveis. Esta opção é o padrão para todos os destinos do conjunto de ferramentas SH.

-mnomacsave
Marque o registro "MAC" como superado por chamada, mesmo que -mrenesas é dada.

-meee
-mno-ieee
Controlar a conformidade IEEE de comparações de ponto flutuante, o que afeta o manuseio
de casos em que o resultado de uma comparação não está ordenado. Por padrão -meee is
habilitado implicitamente. Se -finite-matemática-apenas está ativado -mno-ieee está implicitamente definido,
o que resulta em comparações mais iguais e menos iguais de ponto flutuante mais rápidas. o
As configurações implícitas podem ser substituídas especificando-se -meee or -mno-ieee.

-minline-ic_invalidate
Código embutido para invalidar as entradas do cache de instrução após configurar a função aninhada
trampolins. Esta opção não tem efeito se -musermode está em vigor e o selecionado
opção de geração de código (por exemplo -m4) não permite o uso da instrução "icbi".
Se a opção de geração de código selecionada não permitir o uso do "icbi"
instrução, e -musermode não está em vigor, o código embutido manipula o
matriz de endereço de cache de instrução diretamente com uma gravação associativa. Isso não só
requer modo privilegiado em tempo de execução, mas também falha se a linha do cache tiver sido
mapeado por meio do TLB e deixou de ser mapeado.

-dimensionar
Descarregue o tamanho e a localização da instrução no código de montagem.

-mpadstruct
Esta opção está obsoleta. Ele preenche estruturas em múltiplos de 4 bytes, que é
incompatível com o SH ABI.

-matomic-model =modelo
Define o modelo de operações atômicas e parâmetros adicionais separados por vírgula
Lista. Para obter detalhes sobre as funções atômicas integradas, consulte __atômico Integrados. o
os seguintes modelos e parâmetros são suportados:

Nenhum
Desative sequências atômicas geradas pelo compilador e emita chamadas de biblioteca para atômicas
operações. Este é o padrão se o destino não for "sh * - * - linux *".

soft-gusa
Gere sequências atômicas de software gUSA compatível com GNU / Linux para o atômico integrado
em funções. As sequências atômicas geradas requerem suporte adicional do
código de tratamento de interrupção / exceção do sistema e são adequados apenas para SH3 * e
Sistemas SH4 * de núcleo único. Esta opção é habilitada por padrão quando o alvo é
"sh * - * - linux *" e SH3 * ou SH4 *. Quando o alvo é SH4A, esta opção também
utiliza parcialmente as instruções atômicas de hardware "movli.l" e "movco.l" para
criar um código mais eficiente, a menos que rigoroso é especificado.

soft-tcb
Gerar sequências atômicas de software que usam uma variável no controle de thread
bloquear. Esta é uma variação das sequências gUSA que também podem ser usadas em SH1 *
e alvos SH2 *. As sequências atômicas geradas requerem suporte adicional de
o código de tratamento de interrupção / exceção do sistema e são adequados apenas para
sistemas de núcleo único. Ao usar este modelo, o gbr-offset = parâmetro tem que ser
especificado também.

máscara suave
Gere sequências atômicas de software que desabilitam temporariamente as interrupções por configuração
"SR.IMASK = 1111". Este modelo funciona apenas quando o programa é executado em modo privilegiado
e é adequado apenas para sistemas de núcleo único. Suporte adicional do
o código de tratamento de interrupção / exceção do sistema não é necessário. Este modelo é
ativado por padrão quando o destino é "sh * - * - linux *" e SH1 * ou SH2 *.

hard-llcs
Gere sequências atômicas de hardware usando as instruções "movli.l" e "movco.l"
só. Isso está disponível apenas no SH4A e é adequado para sistemas multi-core.
Uma vez que as instruções de hardware suportam apenas variáveis ​​atômicas de 32 bits, acesse 8
ou variáveis ​​de 16 bits são emuladas com acessos de 32 bits. Código compilado com este
opção também é compatível com outro software de interrupção / exceção de modelo atômico
sistemas de manuseio se executado em um sistema SH4A. Suporte adicional do
o código de tratamento de interrupções / exceções do sistema não é necessário para este modelo.

gbr-offset =
Este parâmetro especifica o deslocamento em bytes da variável no controle de thread
estrutura de blocos que deve ser usada pelas sequências atômicas geradas quando o
soft-tcb modelo foi selecionado. Para outros modelos, este parâmetro é ignorado.
O valor especificado deve ser um múltiplo inteiro de quatro e estar no intervalo de 0 a 1020.

rigoroso
Este parâmetro evita o uso misto de vários modelos atômicos, mesmo se eles forem
compatível e faz com que o compilador gere sequências atômicas do
modelo apenas.

-mtas
Gere o opcode "tas.b" para "__atomic_test_and_set". Observe que dependendo do
configuração específica de hardware e software, isso pode degradar o desempenho geral
devido às descargas de linha do cache de operandos que estão implícitas na instrução "tas.b". Sobre
processadores SH4A multi-core, a instrução "tas.b" deve ser usada com cautela, pois
pode resultar em corrupção de dados para certas configurações de cache.

-mprefergot
Ao gerar código independente de posição, emita chamadas de função usando o deslocamento global
Tabela em vez da Tabela de ligação de procedimentos.

-musermode
-mno-usermode
Não permita (permita) que o compilador gere código de modo privilegiado. Especificando
-musermode também implica -mno-inline-ic_invalidate se o código embutido não funcionasse
no modo de usuário. -musermode é o padrão quando o destino é "sh * - * - linux *". Se o
o alvo é SH1 * ou SH2 * -musermode não tem efeito, uma vez que não há modo de usuário.

-multcost =número
Defina o custo a ser assumido para uma multiplicação de insn.

-mdiv =estratégia
Defina a estratégia de divisão a ser usada para operações de divisão de inteiros. Para SHmedia
estratégia pode ser um dos seguintes:

fp Executa a operação em ponto flutuante. Isso tem uma latência muito alta, mas precisa
apenas algumas instruções, por isso pode ser uma boa escolha se o seu código tiver
ILP facilmente explorável para permitir que o compilador agende o ponto flutuante
instruções juntamente com outras instruções. A divisão por zero causa um
exceção de ponto flutuante.

inv Usa operações inteiras para calcular o inverso do divisor e, em seguida,
multiplica o dividendo com o inverso. Esta estratégia permite CSE e içamento
do cálculo inverso. A divisão por zero calcula um resultado não especificado,
mas não armadilha.

inv: minlat
Uma variante de inv onde, se nenhum CSE ou oportunidades de içamento foram encontrados, ou se
toda a operação foi içada para o mesmo local, as últimas etapas do
cálculos inversos são entrelaçados com a multiplicação final para reduzir o total
latência, ao custo de usar mais algumas instruções e, assim, oferecer menos
oportunidades de agendamento com outro código.

chamada
Chama uma função de biblioteca que geralmente implementa o inv: minlat estratégia. Esse
fornece alta densidade de código para compilações "m5- * media-nofpu".

call2
Usa um ponto de entrada diferente da mesma função de biblioteca, onde assume que um
o ponteiro para uma tabela de pesquisa já foi configurado, o que expõe a carga do ponteiro
para CSE e otimizações de içamento de código.

inv: call
inv: call2
inv: fp
Use o inv algoritmo para geração de código inicial, mas se o código permanecer
não otimizado, reverta para o chamada, call2ou fp estratégias, respectivamente. Observe que
o efeito colateral da divisão por zero que pode prender a cabeça é realizado por um
instrução, então é possível que todas as instruções inteiras sejam içadas,
mas o marcador do efeito colateral permanece onde está. Uma recombinação para
operações de ponto flutuante ou uma chamada não são possíveis nesse caso.

inv20u
inv20l
Variantes do inv: minlat estratégia. No caso em que o cálculo inverso é
não separados da multiplicação, eles aceleram a divisão onde o dividendo se encaixa
em 20 bits (sinal de mais quando aplicável), inserindo um teste para pular uma série de
operações neste caso; este teste retarda o caso de dividendos maiores.
inv20u assume que o caso de um dividendo tão pequeno seja improvável, e inv20l
assume que seja provável.

Para destinos diferentes de SHmedia estratégia pode ser um dos seguintes:

call-div1
Chama uma função de biblioteca que usa a instrução de divisão de etapa única "div1" para
realizar a operação. A divisão por zero calcula um resultado não especificado e
não armadilha. Este é o padrão, exceto para SH4, SH2A e SHcompact.

chamar-fp
Chama uma função de biblioteca que realiza a operação em flutuação de dupla precisão
apontar. A divisão por zero causa uma exceção de ponto flutuante. Este é o padrão
para SHcompact com FPU. Especificando isso para alvos que não têm um duplo
O padrão de FPU de precisão é "call-div1".

mesa de chamadas
Chama uma função de biblioteca que usa uma tabela de pesquisa para pequenos divisores e o
Instrução "div1" com distinção de maiúsculas e minúsculas para divisores maiores. Divisão por zero
calcula um resultado não especificado e não intercepta. Este é o padrão para SH4.
Especificando isso para alvos que não têm padrões de instruções de mudança dinâmica
para "call-div1".

Quando uma estratégia de divisão não foi especificada, a estratégia padrão é selecionada com base
no alvo atual. Para SH2A, a estratégia padrão é usar "divs" e "divu"
instruções em vez de chamadas de função de biblioteca.

-maccumulate-outgoing-args
Reserve espaço uma vez para os argumentos de saída no prólogo da função, em vez de ao redor
cada chamada. Geralmente benéfico para desempenho e tamanho. Também necessário para desenrolar
para evitar alterar o quadro de pilha em torno do código condicional.

-mdivsi3_libfunc =nome
Defina o nome da função de biblioteca usada para divisão assinada de 32 bits para nome. Este
afeta apenas o nome usado no chamada e assim inv: call estratégias de divisão, e o
o compilador ainda espera os mesmos conjuntos de registros de entrada / saída / substituídos como se este
opção não estavam presentes.

-mfixed-range =intervalo de registro
Gere o código tratando o intervalo de registro fornecido como registros fixos. Um registro fixo
é aquele que o alocador de registro não pode usar. Istoéútil ao compilar o kernel
código. Um intervalo de registro é especificado como dois registros separados por um traço. Múltiplo
os intervalos de registro podem ser especificados separados por uma vírgula.

-mindexed-address
Habilite o uso do modo de endereçamento indexado para SHmedia32 / SHcompact. Este é apenas
seguro se o hardware e / ou sistema operacional implementar semântica wrap-around de 32 bits para o indexado
modo de endereçamento. A arquitetura permite a implementação de processadores com 64 bits
MMU, que o sistema operacional poderia usar para obter endereçamento de 32 bits, mas como nenhum hardware atual
implementação suporta esta ou qualquer outra maneira de tornar o modo de endereçamento indexado seguro
para usar na ABI de 32 bits, o padrão é -mno-indexed-address.

-mgettrcost =número
Defina o custo assumido para a instrução "gettr" para número. O padrão é 2 se
- sintoma corrigido está em vigor, 100 caso contrário.

- sintoma corrigido
Suponha que as instruções "pt *" não sejam interceptadas. Isso geralmente gera um código melhor programado,
mas não é seguro no hardware atual. A definição de arquitetura atual diz que
"ptabs" e "ptrel" capturam quando o alvo com 3 é 3. Isso tem o
efeito não intencional de tornar inseguro agendar essas instruções antes de um
ramificar ou içá-los para fora de um laço. Por exemplo, "__do_global_ctors", uma parte de
libgcc que executa construtores na inicialização do programa, chama funções em uma lista que é
delimitado por -1. Com o - sintoma corrigido opção, o "ptabs" é feito antes do teste
contra -1. Isso significa que todos os construtores são executados um pouco mais rapidamente, mas quando o
loop chega ao fim da lista, o programa falha porque "ptabs" carrega -1 em um
registro de destino.

Uma vez que esta opção não é segura para qualquer hardware que implemente a arquitetura atual
especificação, o padrão é -mno-pt-fixo. A menos que especificado explicitamente com
-mgettrcost, -mno-pt-fixo também implica -mgettrcost = 100; isso impede o registro
alocação usando registradores de destino para armazenar inteiros comuns.

-minvalid-symbols
Suponha que os símbolos podem ser inválidos. Símbolos de funções comuns gerados pelo compilador
são sempre válidos para carregar com "movi" / "shori" / "ptabs" ou "movi" / "shori" / "ptrel", mas
com truques de assembler e / ou linker, é possível gerar símbolos que causam
"ptabs" ou "ptrel" para capturar. Esta opção só é significativa quando -mno-pt-fixo é em
efeito. Impede CSE de bloco básico cruzado, içamento e a maior parte do agendamento do símbolo
carrega. O padrão é -mno-invalid-symbols.

-mbranch-cost =Números
Assumir Números para ser o custo de uma instrução de ramificação. Números mais altos tornam o compilador
tente gerar mais código sem ramificação, se possível. Se não for especificado, o valor é
selecionado dependendo do tipo de processador para o qual está sendo compilado.

-mzdcbranch
-mno-zdcbranch
Suponha (não suponha) que as instruções de desvio condicional de deslocamento zero "bt" e
"bf" são rápidos. Se -mzdcbranch é especificado, o compilador prefere deslocamento zero
sequências de código de ramificação. Isso é habilitado por padrão ao gerar código para SH4 e
SH4A. Pode ser desativado explicitamente especificando -mno-zdcbranch.

-mcbranch-force-delay-slot
Força o uso de slots de atraso para branches condicionais, o que preenche o slot de atraso
com um "nop" se uma instrução adequada não puder ser encontrada. Por padrão, esta opção é
Desativado. Pode ser habilitado para contornar bugs de hardware como encontrados no original
SH7055.

-mfused-madd
-mno-fused-madd
Gerar código que usa (não usa) o ponto flutuante, se multiplica e se acumula
instruções. Estas instruções são geradas por padrão se o ponto flutuante do hardware
é usado. O dependente da máquina -mfused-madd opção agora está mapeada para a máquina-
de treinadores em Entrevista Motivacional -ffp-contract = fast opção, e -mno-fused-madd está mapeado para
-ffp-contract = off.

-mfsca
-mno-fsca
Permitir ou proibir que o compilador emita a instrução "fsca" para seno e cosseno
aproximações. A opção -mfsca deve ser usado em combinação com
-funsafe-math-otimizations. É habilitado por padrão ao gerar código para SH4A.
utilização -mno-fsca desativa as aproximações de seno e cosseno, mesmo se
-funsafe-math-otimizations está em vigor.

-mfsrra
-mno-fsrra
Permitir ou proibir que o compilador emita a instrução "fsrra" para quadrado recíproco
aproximações de raiz. A opção -mfsrra deve ser usado em combinação com
-funsafe-math-otimizations e assim -finite-matemática-apenas. É habilitado por padrão quando
gerando código para SH4A. Usando -mno-fsrra desativa a raiz quadrada recíproca
aproximações mesmo que -funsafe-math-otimizations e assim -finite-matemática-apenas estão em
efeito.

-mpretend-cmove
Prefira ramificações condicionais de deslocamento zero para instrução de movimento condicional
padrões. Isso pode resultar em um código mais rápido no processador SH4.

Solaris 2 Opções

Este -m opções são suportadas no Solaris 2:

-mclear-hwcap
-mclear-hwcap diz ao compilador para remover os recursos de hardware gerados pelo
Solaris assembler. Isso só é necessário quando os arquivos de objeto usam extensões ISA não
suportados pela máquina atual, mas verifique em tempo de execução se deve ou não usá-los.

-mimpure-texto
-mimpure-texto, usado além de -compartilhado, diz ao compilador para não passar -z texto para
o vinculador ao vincular um objeto compartilhado. Usando esta opção, você pode vincular a posição-
código dependente em um objeto compartilhado.

-mimpure-texto suprime as "realocações permanecem contra alocáveis, mas não graváveis
seções "mensagem de erro do vinculador. No entanto, as realocações necessárias acionam a cópia
escrever, e o objeto compartilhado não é realmente compartilhado entre os processos. Ao invés de
utilização -mimpure-texto, você deve compilar todo o código-fonte com -fpic or -fPIC.

Essas opções são suportadas além das acima no Solaris 2:

-pthreads
Adicione suporte para multithreading usando a biblioteca de threads POSIX. Esta opção define
sinalizadores para o pré-processador e vinculador. Esta opção não afeta o tópico
segurança do código-objeto produzido pelo compilador ou das bibliotecas fornecidas com ele.

-pthread
Este é um sinônimo para -pthreads.

SPARC Opções

Este -m opções são suportadas no SPARC:

-mno-app-regs
-map-regs
Especificar -map-regs para gerar saída usando os registros globais 2 a 4, que
o SPARC SVR4 ABI reserva para aplicações. Como o registro global 1, cada global
o registro 2 a 4 é então tratado como um registro alocável que é superado por
chamadas de função. Este é o padrão.

Para ser totalmente compatível com SVR4 ABI ao custo de alguma perda de desempenho, especifique
-mno-app-regs. Você deve compilar bibliotecas e software de sistema com esta opção.

-mflat
-mno-flat
Com -mflat, o compilador não gera instruções para salvar / restaurar e usa um
modelo de janela "plana" ou de registro único. Este modelo é compatível com o regular
modelo de janela de registro. Os registros locais e os registros de entrada (0--5) ainda estão
tratados como registros de "chamada salva" e são salvos na pilha conforme necessário.

Com -mno-flat (o padrão), o compilador gera instruções para salvar / restaurar (exceto
para funções de folha). Este é o modo de operação normal.

-mfpu
-mhard-float
Gere saída contendo instruções de ponto flutuante. Este é o padrão.

-mno-fpu
-msoft-float
Gerar saída contendo chamadas de biblioteca para ponto flutuante. Atenção: o requisito
as bibliotecas não estão disponíveis para todos os destinos SPARC. Normalmente as instalações do
o compilador C usual da máquina é usado, mas isso não pode ser feito diretamente em
compilação. Você deve tomar suas próprias providências para fornecer uma biblioteca adequada
funções para compilação cruzada. Os alvos incorporados sparc - * - aout e assim sparclite - * - *
fornecem suporte de ponto flutuante de software.

-msoft-float altera a convenção de chamada no arquivo de saída; portanto, é apenas
útil se você compilar todos os de um programa com esta opção. Em particular, você precisa
compilar libgcc.a, a biblioteca que vem com o GCC, com -msoft-float em ordem para isso
trabalhar.

-mhard-quad-float
Gerar saída contendo instruções de ponto flutuante de palavra quádrupla (longa dupla).

-msoft-quad-float
Gerar saída contendo chamadas de biblioteca para ponto flutuante de palavra quádrupla (longa dupla)
instruções. As funções chamadas são aquelas especificadas na ABI SPARC. Isto é o
padrão.

No momento em que este documento foi escrito, não havia implementações SPARC com suporte de hardware para
as instruções de ponto flutuante de palavra quádrupla. Todos eles invocam um manipulador de armadilhas para um dos
essas instruções e, em seguida, o manipulador de trap emula o efeito da instrução.
Por causa da sobrecarga do manipulador de trap, isso é muito mais lento do que chamar a biblioteca ABI
rotinas. Assim, o -msoft-quad-float opção é o padrão.

-mno-unaligned-doubles
-munaligned-doubles
Suponha que os duplos tenham alinhamento de 8 bytes. Este é o padrão.

Com -munaligned-doubles, O GCC assume que os duplos têm alinhamento de 8 bytes apenas se eles
estão contidos em outro tipo, ou se eles têm um endereço absoluto. Caso contrário isto
assume que eles têm alinhamento de 4 bytes. Especificar esta opção evita alguns raros
problemas de compatibilidade com código gerado por outros compiladores. Não é o padrão
porque resulta em perda de desempenho, especialmente para código de ponto flutuante.

-modo de muser
-mno-modo de usuário
Não gere código que só pode ser executado no modo supervisor. Isso é relevante apenas para
a instrução "casa" emitida para o processador LEON3. Este é o padrão.

-mno-mais rápido-structs
-maior-structs
Com -maior-structs, o compilador assume que as estruturas devem ter 8 bytes
alinhamento. Isso permite o uso de pares de instruções "ldd" e "std" para cópias
na atribuição de estrutura, no lugar de duas vezes mais pares "ld" e "st". No entanto, o
o uso deste alinhamento alterado viola diretamente a ABI SPARC. Assim, é pretendido
apenas para uso em alvos onde o desenvolvedor reconhece que seu código resultante é
não está diretamente de acordo com as regras da ABI.

-mcpu =cpu_type
Defina o conjunto de instruções, conjunto de registros e parâmetros de agendamento de instruções para
tipo de máquina cpu_type. Valores suportados para cpu_type são v7, cipreste, v8, superespaço,
hipersparco, leon, leon3, leon3v7, esparclito, f930, f934, sparclite86x, espartilho,
tsc701, v9, ultraespaço, ultrasparc3, Niágara, niagara2, niagara3 e assim niagara4.

Conjuntos de ferramentas nativos Solaris e GNU / Linux também suportam o valor nativo, que seleciona
a melhor opção de arquitetura para o processador host. -mcpu = nativo não tem efeito se
O GCC não reconhece o processador.

Parâmetros de programação de instrução padrão são usados ​​para valores que selecionam um
arquitetura e não uma implementação. Estes são v7, v8, esparclito, espartilho, v9.

Aqui está uma lista de cada arquitetura com suporte e suas implementações com suporte.

cipreste v7, leon3v7

v8 supersparc, hypersparc, leon, leon3

esparclito
f930, f934, sparclite86x

espartilho
tsc701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

Por padrão (a menos que configurado de outra forma), o GCC gera código para a variante V7 do
Arquitetura SPARC. Com -mcpu = cipreste, o compilador adicionalmente o otimiza para
o chip Cypress CY7C602, usado na série SPARCStation / SPARCServer 3xx. Isto é
também apropriado para o antigo SPARCStation 1, 2, IPX etc.

Com -mcpu = v8, O GCC gera código para a variante V8 da arquitetura SPARC. o
a única diferença do código V7 é que o compilador emite o número inteiro multiply e
instruções de divisão de inteiros que existem em SPARC-V8, mas não em SPARC-V7. Com
-mcpu = supersparc, o compilador adicionalmente o otimiza para o chip SuperSPARC, como
usado nas séries SPARCStation 10, 1000 e 2000.

Com -mcpu = sparclite, GCC gera código para a variante SPARClite do SPARC
arquitetura. Isso adiciona a multiplicação de inteiros, a etapa de divisão de inteiros e a varredura ("ffs")
instruções que existem no SPARClite, mas não no SPARC-V7. Com -mcpu = f930,
compilador adicionalmente otimiza-o para o chip Fujitsu MB86930, que é o original
SPARClite, sem FPU. Com -mcpu = f934, o compilador adicionalmente o otimiza para
o chip Fujitsu MB86934, que é o SPARClite mais recente com FPU.

Com -mcpu = sparclet, GCC gera código para a variante SPARClet do SPARC
arquitetura. Isso adiciona o inteiro multiplica, multiplica / acumula, divide inteiro
step and scan ("ffs") instruções que existem no SPARClet, mas não no SPARC-V7. Com
-mcpu = tsc701, o compilador adicionalmente o otimiza para o chip TEMIC SPARClet.

Com -mcpu = v9, O GCC gera código para a variante V9 da arquitetura SPARC. Esse
adiciona inteiros de 64 bits e instruções de movimento de ponto flutuante, 3 adicionais de ponto flutuante
registradores de código de condição e instruções de movimentação condicional. Com -mcpu = ultrasparc,
o compilador também o otimiza para os chips Sun UltraSPARC I / II / IIi. Com
-mcpu = ultrasparc3, o compilador adicionalmente o otimiza para o Sun UltraSPARC
Chips III / III + / IIIi / IIIi + / IV / IV +. Com -mcpu = niagara, o compilador adicionalmente
otimiza-o para os chips Sun UltraSPARC T1. Com -mcpu = niagara2, o compilador
além disso, o otimiza para os chips Sun UltraSPARC T2. Com -mcpu = niagara3,
o compilador também o otimiza para os chips Sun UltraSPARC T3. Com -mcpu = niagara4,
o compilador o otimiza adicionalmente para os chips Sun UltraSPARC T4.

-mtune =cpu_type
Defina os parâmetros de programação de instrução para o tipo de máquina cpu_type, mas não defina
o conjunto de instruções ou conjunto de registros que a opção -mcpu =cpu_type faz.

Os mesmos valores para -mcpu =cpu_type pode ser usado para -mtune =cpu_type, mas o único
os valores úteis são aqueles que selecionam uma determinada implementação de CPU. Esses são
cipreste, superespaço, hipersparco, leon, leon3, leon3v7, f930, f934, sparclite86x,
tsc701, ultraespaço, ultrasparc3, Niágara, niagara2, niagara3 e assim niagara4. Com
conjuntos de ferramentas nativos Solaris e GNU / Linux, nativo também pode ser usado.

-mv8plus
-mno-v8plus
Com -mv8plus, O GCC gera o código para o SPARC-V8 + ABI. A diferença do V8
ABI é que os registradores globais e externos são considerados de 64 bits de largura. Isso está habilitado
por padrão no Solaris no modo de 32 bits para todos os processadores SPARC-V9.

-mvis
-mno-vis
Com -mvis, O GCC gera código que tira proveito do UltraSPARC Visual
Extensões do conjunto de instruções. O padrão é -mno-vis.

-mvis2
-mno-vis2
Com -mvis2, GCC gera código que tira proveito da versão 2.0 do UltraSPARC
Extensões do conjunto de instruções visuais. O padrão é -mvis2 ao direcionar uma cpu que
suporta tais instruções, como UltraSPARC-III e posterior. Configuração -mvis2 tb
conjuntos -mvis.

-mvis3
-mno-vis3
Com -mvis3, GCC gera código que tira proveito da versão 3.0 do UltraSPARC
Extensões do conjunto de instruções visuais. O padrão é -mvis3 ao direcionar uma cpu que
suporta essas instruções, como niagara-3 e posterior. Configuração -mvis3 também define
-mvis2 e assim -mvis.

-mcbcond
-mno-cbcond
Com -mcbcond, GCC gera código que tira vantagem de comparar e ramificar
instruções, conforme definido na Sparc Architecture 2011. O padrão é -mcbcond quando
visando uma cpu que suporta tais instruções, como niagara-4 e posterior.

-mpopc
-mno-popc
Com -mpopc, GCC gera código que tira proveito da população UltraSPARC
instrução de contagem. O padrão é -mpopc ao direcionar uma cpu que suporta tal
instruções, como Niagara-2 e posterior.

-mfmaf
-mno-fmaf
Com -mfmaf, GCC gera código que tira vantagem do UltraSPARC Fused Multiply-
Adicione extensões de ponto flutuante. O padrão é -mfmaf ao direcionar uma cpu que
suporta essas instruções, como Niagara-3 e posterior.

-mfix-at697f
Ative a solução alternativa documentada para a única errata do processador Atmel AT697F
(que corresponde à errata nº 13 do processador AT697E).

-mfix-ut699
Habilite as soluções alternativas documentadas para as erratas de ponto flutuante e o cache de dados
anular errata do processador UT699.

Este -m opções são suportadas além das acima em processadores SPARC-V9 em 64 bits
ambientes:

-m32
-m64
Gere código para um ambiente de 32 ou 64 bits. O ambiente de 32 bits define int,
longo e ponteiro para 32 bits. O ambiente de 64 bits define int para 32 bits e long e
ponteiro para 64 bits.

-mcmodel =qual
Defina o modelo de código para um dos

Medlow
O modelo de código Médio / Baixo: endereços de 64 bits, os programas devem ser vinculados no 32 baixo
pedaços de memória. Os programas podem ser vinculados estática ou dinamicamente.

médico
O modelo de código Médio / Médio: endereços de 64 bits, os programas devem ser vinculados no baixo
44 bits de memória, os segmentos de texto e dados devem ter menos de 2 GB de tamanho e
o segmento de dados deve estar localizado a 2 GB do segmento de texto.

Medany
O modelo de código Medium / Anywhere: endereços de 64 bits, os programas podem ser vinculados em qualquer lugar
na memória, os segmentos de texto e dados devem ter menos de 2 GB de tamanho e os dados
segmento deve estar localizado a 2 GB do segmento de texto.

embmedany
O modelo de código Medium / Anywhere para sistemas embarcados: endereços de 64 bits, o texto
e os segmentos de dados devem ter menos de 2 GB de tamanho, ambos começando em qualquer lugar na memória
(determinado no momento do link). O registro global% g4 aponta para a base dos dados
segmento. Os programas são vinculados estaticamente e o PIC não é compatível.

-mmemory-model =modelo mem
Defina o modelo de memória em vigor no processador para um dos

omissão
O modelo de memória padrão para o processador e sistema operacional.

rmo Ordem de memória relaxada

pso Pedido parcial da loja

tso Pedido total da loja

sc Consistência Sequencial

Esses modelos de memória são formalmente definidos no Apêndice D da arquitetura Sparc V9
manual, conforme definido no campo "PSTATE.MM" do processador.

-mstack-bias
-mno-stack-bias
Com -mstack-bias, O GCC assume que o ponteiro da pilha e o ponteiro do quadro, se presente,
são deslocados por -2047 que deve ser adicionado de volta ao fazer referências de quadro de pilha. Esse
é o padrão no modo de 64 bits. Caso contrário, suponha que esse deslocamento não esteja presente.

SPU Opções

Este -m opções são suportadas no SPU:

-mwarn-reloc
-merror-reloc
O carregador para SPU não lida com realocações dinâmicas. Por padrão, o GCC oferece um
erro ao gerar código que requer uma realocação dinâmica. -mno-erro-reloc
desabilita o erro, -mwarn-reloc em vez disso, gera um aviso.

-msafe-dma
-munsafe-dma
As instruções que iniciam ou testam a conclusão do DMA não devem ser solicitadas novamente com
respeito às cargas e armazenamentos da memória que está sendo acessada. Com -munsafe-dma
você deve usar a palavra-chave "volatile" para proteger os acessos à memória, mas isso pode levar a
código ineficiente em locais onde a memória não muda. Em vez de marcar
a memória como volátil, você pode usar -msafe-dma dizer ao compilador para tratar o DMA
instruções como potencialmente afetando toda a memória.

-dicas de ramificação
Por padrão, o GCC gera uma instrução de sugestão de ramificação para evitar paralisações de pipeline para
ramos sempre tomados ou provavelmente tomados. Uma dica não é gerada perto de 8
instruções fora de seu ramo. Há poucos motivos para desativá-los, exceto por
para fins de depuração ou para tornar um objeto um pouco menor.

-msmall-mem
-mlarge-mem
Por padrão, o GCC gera código assumindo que os endereços nunca são maiores que 18 bits.
Com -mlarge-mem o código gerado assume um endereço completo de 32 bits.

-mstdmain
Por padrão, o GCC se vincula ao código de inicialização que assume a função principal no estilo SPU
interface (que possui uma lista de parâmetros não convencionais). Com -mstdmain, Links GCC
seu programa em relação ao código de inicialização que assume uma interface do estilo C99 para "principal",
incluindo uma cópia local das strings "argv".

-mfixed-range =intervalo de registro
Gere o código tratando o intervalo de registro fornecido como registros fixos. Um registro fixo
é aquele que o alocador de registro não pode usar. Istoéútil ao compilar o kernel
código. Um intervalo de registro é especificado como dois registros separados por um traço. Múltiplo
os intervalos de registro podem ser especificados separados por uma vírgula.

-mea32
-mea64
Compile o código presumindo que os ponteiros para o espaço de endereço PPU acessados ​​por meio de "__ea"
o qualificador de espaço de endereço nomeado tem 32 ou 64 bits de largura. O padrão é 32 bits.
Como esta é uma opção de alteração de ABI, todo código de objeto em um executável deve ser compilado
com a mesma configuração.

-maddress-espacial-conversão
-mno-address-space-conversion
Permitir / proibir o tratamento do espaço de endereço "__ea" como superconjunto do endereço genérico
espaço. Isso permite casts de tipo explícito entre "__ea" e ponteiro genérico, bem como
conversões implícitas de ponteiros genéricos para ponteiros "__ea". O padrão é permitir
conversões de ponteiro de espaço de endereço.

-mcache-size =tamanho da memória cache
Esta opção controla a versão do libgcc que o compilador vincula a um executável
e seleciona um cache gerenciado por software para acessar variáveis ​​no endereço "__ea"
espaço com um tamanho de cache específico. Opções possíveis para tamanho da memória cache são 8, 16, 32, 64
e assim 128. O tamanho padrão do cache é 64 KB.

-atualizações-matomic
-mno-atomic-updates
Esta opção controla a versão do libgcc que o compilador vincula a um executável
e seleciona se as atualizações atômicas para o cache gerenciado por software de variáveis ​​do lado PPU
são usados. Se você usar atualizações atômicas, mude para uma variável PPU do código SPU usando
o qualificador de espaço de endereço denominado "__ea" não interfere nas alterações em outro PPU
variáveis ​​que residem na mesma linha de cache do código PPU. Se você não usa atômico
atualizações, tal interferência pode ocorrer; no entanto, escrever de volta linhas de cache é mais
eficiente. O comportamento padrão é usar atualizações atômicas.

-mdual-nops
-mdual-nops =n
Por padrão, o GCC insere nops para aumentar a emissão dupla quando espera que aumente
desempenho. n pode ser um valor de 0 a 10. Um menor n insere menos nops. 10 é
o padrão, 0 é o mesmo que -mno-dual-nops. Desativado com -Os.

-mhint-max-nops =n
Número máximo de nops a serem inseridos para uma dica de ramificação. Uma sugestão de ramificação deve ser de pelo menos 8
instruções fora do ramo que está afetando. GCC insere até n nops para
imponha isso, caso contrário, ele não gerará a dica de ramificação.

-mhint-max-distance =n
A codificação da instrução de sugestão de ramificação limita a sugestão para estar dentro de 256
instruções do ramo que está afetando. Por padrão, o GCC certifica-se de que está dentro
125.

-msafe-dicas
Contorne um bug de hardware que faz com que o SPU pare indefinidamente. Por padrão, GCC
insere a instrução "hbrp" para garantir que esse bloqueio não aconteça.

Opções por Instantâneo V

Essas opções adicionais estão disponíveis no System V Release 4 para compatibilidade com outros
compiladores nesses sistemas:

-G Crie um objeto compartilhado. É recomendado que -simbólico or -compartilhado ser usado em seu lugar.

-Qy Identifique as versões de cada ferramenta utilizada pelo compilador, em um assembler ".ident"
diretiva na saída.

-Qn Evite adicionar diretivas ".ident" ao arquivo de saída (este é o padrão).

-YP,dirs
Pesquise os diretórios dirs, e nenhum outro, para bibliotecas especificadas com -l.

-Sim,dir
Procure no diretório dir para encontrar o pré-processador M4. O montador usa este
opção.

TELHA-Gx Opções

Este -m opções são suportadas no TILE-Gx:

-mcmodel = pequeno
Gere código para o modelo pequeno. A distância para chamadas diretas é limitada a 500M
em qualquer direção. Os endereços relativos ao PC são de 32 bits. Suporte para endereços absolutos
o intervalo de endereços completo.

-mcmodel = grande
Gere código para o modelo grande. Não há limitação de distância da chamada, pc-
endereços relativos ou endereços absolutos.

-mcpu =nome
Seleciona o tipo de CPU a ser almejado. Atualmente, o único tipo suportado é tilex.

-m32
-m64
Gere código para um ambiente de 32 ou 64 bits. O ambiente de 32 bits define int,
longo e o ponteiro para 32 bits. O ambiente de 64 bits define int para 32 bits e long e
ponteiro para 64 bits.

-mbi-endian
-mlittle-endian
Gere código no modo big / little endian, respectivamente.

TILEPro Opções

Este -m opções são suportadas no TILEPro:

-mcpu =nome
Seleciona o tipo de CPU a ser almejado. Atualmente, o único tipo suportado é tilepro.

-m32
Gere código para um ambiente de 32 bits, que define int, long e pointer para 32 bits.
Este é o único comportamento com suporte, portanto, o sinalizador é essencialmente ignorado.

V850 Opções

Este -m as opções são definidas para implementações V850:

-muito chamadas
-mno-long-chamadas
Trate todas as chamadas como estando longe (perto). Se as chamadas forem presumidas como distantes, o
o compilador sempre carrega o endereço da função em um registrador e chama indireta
através do ponteiro.

-mno-ep
-mep
Não otimize (otimize) blocos básicos que usam o mesmo indicador de índice 4 ou mais
vezes para copiar o ponteiro para o registrador "ep" e usar o "sld" e o "sst" mais curtos
instruções. o -mep opção está ativada por padrão se você otimizar.

-mno-prolog-função
-mprolog-função
Não use (use) funções externas para salvar e restaurar registros no prólogo
e epílogo de uma função. As funções externas são mais lentas, mas usam menos código
espaço se mais de uma função salvar o mesmo número de registros. o
-mprolog-função opção está ativada por padrão se você otimizar.

-mspace
Tente tornar o código o menor possível. No momento, isso apenas liga o -mep
e assim -mprolog-função opções.

-mtda =n
Coloque variáveis ​​estáticas ou globais cujo tamanho seja n bytes ou menos na pequena área de dados
para o qual o registro "ep" aponta. A pequena área de dados pode conter até 256 bytes no total
(128 bytes para referências de bytes).

-msda =n
Coloque variáveis ​​estáticas ou globais cujo tamanho seja n bytes ou menos na pequena área de dados
para o qual o registro "gp" aponta. A pequena área de dados pode conter até 64 kilobytes.

-mzda =n
Coloque variáveis ​​estáticas ou globais cujo tamanho seja n bytes ou menos nos primeiros 32
kilobytes de memória.

-mv850
Especifique que o processador de destino é o V850.

-mv850e3v5
Especifique que o processador de destino é o V850E3V5. A constante do pré-processador
"__v850e3v5__" é definido se esta opção for usada.

-mv850e2v4
Especifique que o processador de destino é o V850E3V5. Este é um alias para o
-mv850e3v5 opção.

-mv850e2v3
Especifique que o processador de destino é o V850E2V3. A constante do pré-processador
"__v850e2v3__" é definido se esta opção for usada.

-mv850e2
Especifique que o processador de destino é o V850E2. A constante do pré-processador
"__v850e2__" é definido se esta opção for usada.

-mv850e1
Especifique que o processador de destino é o V850E1. As constantes do pré-processador
"__v850e1__" e "__v850e__" são definidos se esta opção for usada.

-mv850es
Especifique que o processador de destino é o V850ES. Este é um alias para o -mv850e1
opção.

-mv850e
Especifique que o processador de destino é o V850E. A constante de pré-processador "__v850e__"
é definido se esta opção for usada.

Se nenhum -mv850 nem -mv850e nem -mv850e1 nem -mv850e2 nem -mv850e2v3 nem -mv850e3v5
são definidos, em seguida, um processador alvo padrão é escolhido e o relevante __v850 * __
constante do pré-processador é definida.

As constantes de pré-processador "__v850" e "__v851__" são sempre definidas, independentemente de
qual variante do processador é o alvo.

-mdisable-callt
-mno-disable-callt
Esta opção suprime a geração da instrução "CALLT" para v850e, v850e1,
Variedades v850e2, v850e2v3 e v850e3v5 da arquitetura v850.

Esta opção é habilitada por padrão quando o RH850 ABI está em uso (consulte -mrh850-abi), E
desativado por padrão quando o GCC ABI está em uso. Se as instruções "CALLT" estiverem sendo
gerado então o símbolo do pré-processador C "__V850_CALLT__" é definido.

-mrelax
-mno-relaxar
Passe adiante (ou não passe) o -mrelax opção de linha de comando para o montador.

- grandes saltos
-mno-long-jump
Desative (ou reative) a geração de instruções de salto relativas ao PC.

-msoft-float
-mhard-float
Desative (ou reative) a geração de instruções de ponto flutuante de hardware. Esse
opção só é significativa quando a arquitetura alvo é V850E2V3 ou mais alto. Se
instruções de ponto flutuante de hardware estão sendo geradas, em seguida, o pré-processador C
o símbolo "__FPU_OK__" é definido, caso contrário, o símbolo "__NO_FPU__" é definido.

-mloop
Habilita o uso da instrução e3v5 LOOP. O uso desta instrução não é
habilitado por padrão quando a arquitetura e3v5 é selecionada porque seu uso ainda é
experimental.

-mrh850-abi
-mghs
Ativa o suporte para a versão RH850 do V850 ABI. Este é o padrão. Com
Nesta versão da ABI, as seguintes regras se aplicam:

* Estruturas de tamanho inteiro e uniões são retornadas por meio de um ponteiro de memória em vez de
um registro.

* Grandes estruturas e uniões (mais de 8 bytes de tamanho) são passadas por valor.

* As funções são alinhadas aos limites de 16 bits.

* O -m8byte-align opção de linha de comando é suportada.

* O -mdisable-callt opção de linha de comando é habilitada por padrão. o
-mno-disable-callt a opção de linha de comando não é suportada.

Quando esta versão do ABI está habilitada, o símbolo do pré-processador C "__V850_RH850_ABI__"
está definido.

-mgcc-abi
Ativa o suporte para a versão GCC antiga do V850 ABI. Com esta versão do ABI
as seguintes regras se aplicam:

* Estruturas de tamanho inteiro e uniões são retornadas no registro "r10".

* Grandes estruturas e uniões (mais de 8 bytes de tamanho) são passadas por referência.

* As funções são alinhadas aos limites de 32 bits, a menos que sejam otimizadas para tamanho.

* O -m8byte-align a opção de linha de comando não é suportada.

* O -mdisable-callt opção de linha de comando é suportada, mas não habilitada por padrão.

Quando esta versão do ABI está habilitada, o símbolo do pré-processador C "__V850_GCC_ABI__"
está definido.

-m8byte-align
-mno-8byte-align
Ativa o suporte para tipos "double" e "long long" para serem alinhados em limites de 8 bytes.
O padrão é restringir o alinhamento de todos os objetos a no máximo 4 bytes. Quando
-m8byte-align está em vigor o símbolo do pré-processador C "__V850_8BYTE_ALIGN__" é
definiram.

-mbig-switch
Gere código adequado para grandes tabelas de comutação. Use esta opção apenas se o
assembler / linker reclama sobre ramificações fora do intervalo dentro de uma mesa de switch.

-map-regs
Esta opção faz com que r2 e r5 sejam usados ​​no código gerado pelo compilador. Esse
configuração é o padrão.

-mno-app-regs
Esta opção faz com que r2 e r5 sejam tratados como registradores fixos.

VAX Opções

Este -m as opções são definidas para o VAX:

-munix
Não envie certas instruções de salto ("aobleq" e assim por diante) que o montador Unix
pois o VAX não pode lidar com longas distâncias.

-mgnu
Faça a saída dessas instruções de salto, pressupondo que o assembler GNU está sendo
usava.

-mg Código de saída para números de ponto flutuante de formato G em vez de formato D.

Visium Opções

-mdebug
Um programa que executa E / S de arquivo e é destinado a ser executado em um alvo MCM deve ser
vinculado a esta opção. Isso faz com que as bibliotecas libc.a e libdebug.a sejam vinculadas.
O programa deve ser executado no destino sob o controle da depuração remota GDB
esboço

-msim
Um programa que realiza E / S de arquivo e é destinado a rodar no simulador deve ser
vinculado com a opção. Isso faz com que as bibliotecas libc.a e libsim.a sejam vinculadas.

-mfpu
-mhard-float
Gere código contendo instruções de ponto flutuante. Este é o padrão.

-mno-fpu
-msoft-float
Gere código contendo chamadas de biblioteca para ponto flutuante.

-msoft-float altera a convenção de chamada no arquivo de saída; portanto, é apenas
útil se você compilar todos os de um programa com esta opção. Em particular, você precisa
compilar libgcc.a, a biblioteca que vem com o GCC, com -msoft-float em ordem para isso
trabalhar.

-mcpu =cpu_type
Defina o conjunto de instruções, conjunto de registros e parâmetros de agendamento de instruções para
tipo de máquina cpu_type. Valores suportados para cpu_type são mcm, gr5 e assim gr6.

mcm é um sinônimo de gr5 presente para compatibilidade com versões anteriores.

Por padrão (a menos que configurado de outra forma), GCC gera código para a variante GR5 de
a arquitetura Visium.

Com -mcpu = gr6, O GCC gera código para a variante GR6 da arquitetura Visium.
A única diferença do código GR5 é que o compilador irá gerar movimento de bloco
instruções.

-mtune =cpu_type
Defina os parâmetros de programação de instrução para o tipo de máquina cpu_type, mas não defina
o conjunto de instruções ou conjunto de registros que a opção -mcpu =cpu_type seria.

-msv-mode
Gerar código para o modo supervisor, onde não há restrições de acesso
aos registros gerais. Este é o padrão.

-modo de muser
Gerar código para o modo de usuário, onde o acesso a alguns registros gerais é
proibido: no GR5, os registros r24 a r31 não podem ser acessados ​​neste modo; no
GR6, apenas os registros r29 a r31 são afetados.

VMS Opções

Este -m opções são definidas para as implementações VMS:

-mvms-return-codes
Retorne os códigos de condição VMS de "principal". O padrão é retornar a condição de estilo POSIX
(por exemplo, códigos de erro).

-mdebug-main =prefixo
Sinalize a primeira rotina cujo nome começa com prefixo como a rotina principal para o
depurador.

-mmalloc64
Padrão para rotinas de alocação de memória de 64 bits.

-mpointer-size =tamanho
Defina o tamanho padrão dos ponteiros. Opções possíveis para tamanho são 32 or baixo para 32 bits
ponteiros 64 or longo para ponteiros de 64 bits e não para suportar apenas ponteiros de 32 bits.
A última opção desativa "pragma pointer_size".

VxWorks Opções

As opções nesta seção são definidas para todos os destinos VxWorks. Opções específicas para o
o hardware de destino é listado com as outras opções para aquele destino.

-mrtp
O GCC pode gerar código para kernels VxWorks e processos em tempo real (RTPs). Esse
opção muda do primeiro para o último. Ele também define a macro do pré-processador
"__RTP__".

-não estático
Vincule um executável RTP a bibliotecas compartilhadas em vez de bibliotecas estáticas. o
opções -estático e assim -compartilhado também pode ser usado para RTPs; -estático é o padrão.

-Bstatic
-Bdinâmico
Essas opções são passadas para o vinculador. Eles são definidos para compatibilidade com
Diab.

-Xbind-preguiçoso
Habilite a vinculação lenta de chamadas de função. Esta opção é equivalente a -Wl, -z, agora e é
definido para compatibilidade com Diab.

-Xbind-agora
Desative a vinculação lenta de chamadas de função. Esta opção é o padrão e é definida para
compatibilidade com Diab.

x86 Opções

Este -m as opções são definidas para a família x86 de computadores.

-march =tipo cpu
Gerar instruções para o tipo de máquina tipo cpu. Em contraste com -mtune =tipo cpu,
que apenas ajusta o código gerado para o especificado tipo cpu, -march =tipo cpu
permite que o GCC gere código que pode não ser executado em outros processadores além do
indicado. Especificando -march =tipo cpu implica -mtune =tipo cpu.

As escolhas para tipo cpu são:

nativo
Isso seleciona a CPU para gerar o código em tempo de compilação, determinando o
tipo de processador da máquina de compilação. Usando -march = nativo habilita todos
subconjuntos de instruções suportados pela máquina local (portanto, o resultado pode não ser executado
em máquinas diferentes). Usando -mtune = nativo produz código otimizado para o local
máquina sob as restrições do conjunto de instruções selecionado.

i386
CPU Intel i386 original.

i486
CPU Intel i486. (Nenhum agendamento é implementado para este chip.)

i586
pentium
CPU Intel Pentium sem suporte MMX.

pentium-mmx
CPU Intel Pentium MMX, baseada no núcleo Pentium com suporte para conjunto de instruções MMX.

pentiumpro
CPU Intel Pentium Pro.

i686
Quando usado com -marchar, o conjunto de instruções do Pentium Pro é usado, para que o código seja executado
em todos os chips da família i686. Quando usado com -mtune, tem o mesmo significado que
genérico.

pentium2
CPU Intel Pentium II, baseada no núcleo Pentium Pro com suporte para conjunto de instruções MMX.

pentium3
pentium 3m
CPU Intel Pentium III, com base no núcleo Pentium Pro com MMX e conjunto de instruções SSE
.

pentium-m
Intel Pentium M; versão de baixo consumo de energia da CPU Intel Pentium III com MMX, SSE e SSE2
suporte de conjunto de instruções. Usado por notebooks Centrino.

pentium4
pentium 4m
CPU Intel Pentium 4 com suporte para conjunto de instruções MMX, SSE e SSE2.

Prescott
Versão aprimorada da CPU Intel Pentium 4 com instruções MMX, SSE, SSE2 e SSE3
conjunto de suporte.

nocona
Versão aprimorada da CPU Intel Pentium 4 com extensões de 64 bits, MMX, SSE, SSE2 e
Suporte ao conjunto de instruções SSE3.

core2
CPU Intel Core 2 com extensões de 64 bits, MMX, SSE, SSE2, SSE3 e SSSE3
suporte de conjunto de instruções.

Nehalem
CPU Intel Nehalem com extensões de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Suporte ao conjunto de instruções SSE4.2 e POPCNT.

Westmere
CPU Intel Westmere com extensões de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Suporte ao conjunto de instruções SSE4.2, POPCNT, AES e PCLMUL.

Sandybridge
CPU Intel Sandy Bridge com extensões de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3,
Suporte ao conjunto de instruções SSE4.1, SSE4.2, POPCNT, AVX, AES e PCLMUL.

ivybridge
CPU Intel Ivy Bridge com extensões de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND e conjunto de instruções F16C
.

Haswell
CPU Intel Haswell com extensões de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2
e suporte de conjunto de instruções F16C.

Broadwell
CPU Intel Broadwell com extensões de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
Suporte para conjunto de instruções F16C, RDSEED, ADCX e PREFETCHW.

Bonnell
CPU Intel Bonnell com extensões de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3 e SSSE3
suporte de conjunto de instruções.

Silvermont
CPU Intel Silvermont com extensões de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
Suporte ao conjunto de instruções SSE4.1, SSE4.2, POPCNT, AES, PCLMUL e RDRND.

knl CPU Intel Knight's Landing com extensões de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER e AVX512CD
suporte de conjunto de instruções.

k6 CPU AMD K6 com suporte para conjunto de instruções MMX.

k6-2
k6-3
Versões aprimoradas de CPU AMD K6 com MMX e 3DNow! suporte de conjunto de instruções.

athlon
Athlon-Tbird
CPU AMD Athlon com MMX, 3dNOW !, 3DNow! e instruções de pré-busca SSE
.

Athlon-4
Athlon-XP
Athlon-mp
CPU AMD Athlon aprimorada com MMX, 3DNow !, 3DNow! e instrução SSE completa
conjunto de suporte.

k8
opteron
Athlon64
Athlon-Fx
Processadores baseados no núcleo AMD K8 com suporte a conjunto de instruções x86-64, incluindo
os processadores AMD Opteron, Athlon 64 e Athlon 64 FX. (Este superconjuntos MMX,
SSE, SSE2, 3DNow !, 3DNow! e extensões de conjunto de instruções de 64 bits.)

k8-sse3
opteron-sse3
Athlon64-sse3
Versões aprimoradas de núcleos AMD K8 com suporte ao conjunto de instruções SSE3.

amdfam10
Barcelona
CPUs baseadas na família AMD de núcleos 10h com suporte para conjunto de instruções x86-64. (Esse
superconjuntos MMX, SSE, SSE2, SSE3, SSE4A, 3DNow !, 3DNow! aprimorado, ABM e 64 bits
extensões do conjunto de instruções.)

bdver1
CPUs baseadas na família AMD de núcleos 15h com suporte para conjunto de instruções x86-64. (Esse
superconjuntos FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM e extensões de conjunto de instruções de 64 bits.)

bdver2
CPUs com núcleo de 15h da família AMD com suporte a conjunto de instruções x86-64. (Esse
superconjuntos BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM e conjunto de instruções de 64 bits
extensões.)

bdver3
CPUs com núcleo de 15h da família AMD com suporte a conjunto de instruções x86-64. (Esse
superconjuntos BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM e conjunto de instruções de 64 bits
extensões.

bdver4
CPUs com núcleo de 15h da família AMD com suporte a conjunto de instruções x86-64. (Esse
superconjuntos BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM e
Extensões de conjunto de instruções de 64 bits.

btver1
CPUs baseadas na família AMD de núcleos 14h com suporte para conjunto de instruções x86-64. (Esse
superconjuntos MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM e conjunto de instruções de 64 bits
extensões.)

btver2
CPUs baseadas na família AMD de núcleos 16h com suporte para conjunto de instruções x86-64. Esse
inclui MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX e extensões de conjunto de instruções de 64 bits.

winchip-c6
CPU IDT WinChip C6, tratado da mesma maneira que i486 com conjunto de instruções MMX adicional
.

winchip2
CPU IDT WinChip 2, tratada da mesma forma que i486 com MMX e 3DNow adicionais!
suporte de conjunto de instruções.

c3 CPU VIA C3 com MMX e 3DNow! suporte de conjunto de instruções. (Sem programação é
implementado para este chip.)

c3-2
CPU VIA C3-2 (Nehemiah / C5XL) com suporte para conjunto de instruções MMX e SSE. (Não
a programação é implementada para este chip.)

geode
Processador integrado AMD Geode com MMX e 3DNow! suporte de conjunto de instruções.

-mtune =tipo cpu
Sintonizar para tipo cpu tudo aplicável sobre o código gerado, exceto para o ABI
e o conjunto de instruções disponíveis. Ao escolher um específico tipo cpu horários
coisas apropriadamente para aquele chip específico, o compilador não gera nenhum código
que não pode ser executado no tipo de máquina padrão, a menos que você use um -march =tipo cpu opção.
Por exemplo, se o GCC estiver configurado para i686-pc-linux-gnu, então -mtune = pentium4 gera
código que é ajustado para Pentium 4, mas ainda roda em máquinas i686.

As escolhas para tipo cpu são os mesmos que para -marchar. Além disso, -mtune suportes 2
escolhas extras para tipo cpu:

genérico
Produza código otimizado para os processadores IA32 / AMD64 / EM64T mais comuns. Se você
conhecer a CPU na qual seu código será executado, então você deve usar o correspondente
-mtune or -marchar opção em vez de -mtune = genérico. Mas, se você não sabe
exatamente o que os usuários da CPU do seu aplicativo terão, então você deve usar este
opção.

Conforme novos processadores são implantados no mercado, o comportamento desta opção
vai mudar. Portanto, se você atualizar para uma versão mais recente do GCC, geração de código
controlado por esta opção mudará para refletir os processadores que são mais
comum no momento em que a versão do GCC é lançada.

Não há -march = genérico opção porque -marchar indica o conjunto de instruções do
o compilador pode usar, e não há um conjunto de instruções genérico aplicável a todos
processadores. Em contraste, -mtune indica o processador (ou, neste caso,
coleção de processadores) para os quais o código é otimizado.

intel
Produz código otimizado para os processadores Intel mais atuais, que são Haswell
e Silvermont para esta versão do GCC. Se você conhece a CPU em que seu código
será executado, então você deve usar o correspondente -mtune or -marchar opção em vez de
-mtune = intel. Mas, se você quiser que seu aplicativo tenha um desempenho melhor em ambos Haswell
e Silvermont, então você deve usar esta opção.

À medida que novos processadores Intel são implantados no mercado, o comportamento deste
opção vai mudar. Portanto, se você atualizar para uma versão mais recente do GCC, codifique
geração controlada por esta opção mudará para refletir o Intel mais atual
processadores no momento em que a versão do GCC foi lançada.

Não há -march = intel opção porque -marchar indica o conjunto de instruções do
o compilador pode usar, e não há um conjunto de instruções comum aplicável a todos
processadores. Em contraste, -mtune indica o processador (ou, neste caso,
coleção de processadores) para os quais o código é otimizado.

-mcpu =tipo cpu
Um sinônimo obsoleto para -mtune.

-mfpmath =unidade
Gerar aritmética de ponto flutuante para a unidade selecionada unidade. As escolhas para unidade são:

387 Use o coprocessador de ponto flutuante 387 padrão presente na maioria dos chips
e emulado de outra forma. O código compilado com essa opção é executado em quase todos os lugares.
Os resultados temporários são calculados com a precisão de 80 bits em vez da precisão
especificado pelo tipo, resultando em resultados ligeiramente diferentes em comparação com a maioria dos
outros chips. Ver -loat-store para uma descrição mais detalhada.

Esta é a escolha padrão para destinos x86-32.

ess Use as instruções escalares de ponto flutuante presentes no conjunto de instruções SSE. Esse
conjunto de instruções é suportado pelo Pentium III e chips mais recentes, e na linha AMD
por chips Athlon-4, Athlon XP e Athlon MP. A versão anterior do SSE
conjunto de instruções suporta apenas aritmética de precisão simples, portanto, o duplo e
aritmética de precisão estendida ainda é feita usando 387. Uma versão posterior, presente
apenas em chips Pentium 4 e AMD x86-64, suporta aritmética de precisão dupla também.

Para o compilador x86-32, você deve usar -march =tipo cpu, -msse</